@@ -8,12 +8,47 @@ define float @atomic_vector() {
8
8
; CHECK-NEXT: [[TMP2:%.*]] = load atomic volatile float, ptr [[TMP1]] acquire, align 4
9
9
; CHECK-NEXT: ret float [[TMP2]]
10
10
;
11
- %1 = alloca <1 x float >
12
- %2 = alloca <1 x float >
13
- %3 = alloca ptr
14
- call void @llvm.memcpy.p0.p0.i64 (ptr %2 , ptr %1 , i64 4 , i1 false )
15
- store ptr %2 , ptr %3
16
- %4 = load ptr , ptr %3
17
- %5 = load atomic volatile float , ptr %4 acquire , align 4
18
- ret float %5
11
+ %src = alloca <1 x float >
12
+ %val = alloca <1 x float >
13
+ %direct = alloca ptr
14
+ call void @llvm.memcpy.p0.p0.i64 (ptr %val , ptr %src , i64 4 , i1 false )
15
+ store ptr %val , ptr %direct
16
+ %indirect = load ptr , ptr %direct
17
+ %ret = load atomic volatile float , ptr %indirect acquire , align 4
18
+ ret float %ret
19
+ }
20
+
21
+ define i32 @atomic_vector_int () {
22
+ ; CHECK-LABEL: define i32 @atomic_vector_int() {
23
+ ; CHECK-NEXT: [[VAL:%.*]] = alloca <1 x i32>, align 4
24
+ ; CHECK-NEXT: store <1 x i32> undef, ptr [[VAL]], align 4
25
+ ; CHECK-NEXT: [[RET:%.*]] = load atomic volatile i32, ptr [[VAL]] acquire, align 4
26
+ ; CHECK-NEXT: ret i32 [[RET]]
27
+ ;
28
+ %src = alloca <1 x i32 >
29
+ %val = alloca <1 x i32 >
30
+ %direct = alloca ptr
31
+ call void @llvm.memcpy.p0.p0.i64 (ptr %val , ptr %src , i64 4 , i1 false )
32
+ store ptr %val , ptr %direct
33
+ %indirect = load ptr , ptr %direct
34
+ %ret = load atomic volatile i32 , ptr %indirect acquire , align 4
35
+ ret i32 %ret
36
+ }
37
+
38
+ define ptr @atomic_vector_ptr () {
39
+ ; CHECK-LABEL: define ptr @atomic_vector_ptr() {
40
+ ; CHECK-NEXT: [[SRC_SROA_0:%.*]] = alloca [4 x i8], align 8
41
+ ; CHECK-NEXT: [[VAL_SROA_0:%.*]] = alloca ptr, align 8
42
+ ; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[VAL_SROA_0]], ptr align 8 [[SRC_SROA_0]], i64 4, i1 false)
43
+ ; CHECK-NEXT: [[VAL_SROA_0_0_VAL_SROA_0_0_RET:%.*]] = load atomic volatile ptr, ptr [[VAL_SROA_0]] acquire, align 4
44
+ ; CHECK-NEXT: ret ptr [[VAL_SROA_0_0_VAL_SROA_0_0_RET]]
45
+ ;
46
+ %src = alloca <1 x ptr >
47
+ %val = alloca <1 x ptr >
48
+ %direct = alloca ptr
49
+ call void @llvm.memcpy.p0.p0.i64 (ptr %val , ptr %src , i64 4 , i1 false )
50
+ store ptr %val , ptr %direct
51
+ %indirect = load ptr , ptr %direct
52
+ %ret = load atomic volatile ptr , ptr %indirect acquire , align 4
53
+ ret ptr %ret
19
54
}
0 commit comments