1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
2
; RUN: llc < %s -mtriple=x86_64-apple-macosx10.7.0 -verify-machineinstrs | FileCheck %s
3
- ; RUN: llc < %s -mtriple=x86_64-apple-macosx10.7.0 -verify-machineinstrs -O0 | FileCheck %s
3
+ ; RUN: llc < %s -mtriple=x86_64-apple-macosx10.7.0 -verify-machineinstrs -O0 | FileCheck %s --check-prefix=CHECK0
4
4
5
5
define void @test1 (ptr %ptr , i32 %val1 ) {
6
6
; CHECK-LABEL: test1:
7
7
; CHECK: ## %bb.0:
8
8
; CHECK-NEXT: xchgl %esi, (%rdi)
9
9
; CHECK-NEXT: retq
10
+ ;
11
+ ; CHECK0-LABEL: test1:
12
+ ; CHECK0: ## %bb.0:
13
+ ; CHECK0-NEXT: xchgl %esi, (%rdi)
14
+ ; CHECK0-NEXT: retq
10
15
store atomic i32 %val1 , ptr %ptr seq_cst , align 4
11
16
ret void
12
17
}
@@ -16,6 +21,11 @@ define void @test2(ptr %ptr, i32 %val1) {
16
21
; CHECK: ## %bb.0:
17
22
; CHECK-NEXT: movl %esi, (%rdi)
18
23
; CHECK-NEXT: retq
24
+ ;
25
+ ; CHECK0-LABEL: test2:
26
+ ; CHECK0: ## %bb.0:
27
+ ; CHECK0-NEXT: movl %esi, (%rdi)
28
+ ; CHECK0-NEXT: retq
19
29
store atomic i32 %val1 , ptr %ptr release , align 4
20
30
ret void
21
31
}
@@ -25,6 +35,11 @@ define i32 @test3(ptr %ptr) {
25
35
; CHECK: ## %bb.0:
26
36
; CHECK-NEXT: movl (%rdi), %eax
27
37
; CHECK-NEXT: retq
38
+ ;
39
+ ; CHECK0-LABEL: test3:
40
+ ; CHECK0: ## %bb.0:
41
+ ; CHECK0-NEXT: movl (%rdi), %eax
42
+ ; CHECK0-NEXT: retq
28
43
%val = load atomic i32 , ptr %ptr seq_cst , align 4
29
44
ret i32 %val
30
45
}
@@ -34,6 +49,64 @@ define <1 x i32> @atomic_vec1_i32(ptr %x) {
34
49
; CHECK: ## %bb.0:
35
50
; CHECK-NEXT: movl (%rdi), %eax
36
51
; CHECK-NEXT: retq
52
+ ;
53
+ ; CHECK0-LABEL: atomic_vec1_i32:
54
+ ; CHECK0: ## %bb.0:
55
+ ; CHECK0-NEXT: movl (%rdi), %eax
56
+ ; CHECK0-NEXT: retq
37
57
%ret = load atomic <1 x i32 >, ptr %x acquire , align 4
38
58
ret <1 x i32 > %ret
39
59
}
60
+
61
+ define <1 x half > @atomic_vec1_half (ptr %x ) {
62
+ ; CHECK-LABEL: atomic_vec1_half:
63
+ ; CHECK: ## %bb.0:
64
+ ; CHECK-NEXT: movzwl (%rdi), %eax
65
+ ; CHECK-NEXT: pinsrw $0, %eax, %xmm0
66
+ ; CHECK-NEXT: retq
67
+ ;
68
+ ; CHECK0-LABEL: atomic_vec1_half:
69
+ ; CHECK0: ## %bb.0:
70
+ ; CHECK0-NEXT: movw (%rdi), %cx
71
+ ; CHECK0-NEXT: ## implicit-def: $eax
72
+ ; CHECK0-NEXT: movw %cx, %ax
73
+ ; CHECK0-NEXT: ## implicit-def: $xmm0
74
+ ; CHECK0-NEXT: pinsrw $0, %eax, %xmm0
75
+ ; CHECK0-NEXT: retq
76
+ %ret = load atomic <1 x half >, ptr %x acquire , align 4
77
+ ret <1 x half > %ret
78
+ }
79
+
80
+ define <1 x float > @atomic_vec1_float (ptr %x ) {
81
+ ; CHECK-LABEL: atomic_vec1_float:
82
+ ; CHECK: ## %bb.0:
83
+ ; CHECK-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
84
+ ; CHECK-NEXT: retq
85
+ ;
86
+ ; CHECK0-LABEL: atomic_vec1_float:
87
+ ; CHECK0: ## %bb.0:
88
+ ; CHECK0-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
89
+ ; CHECK0-NEXT: retq
90
+ %ret = load atomic <1 x float >, ptr %x acquire , align 4
91
+ ret <1 x float > %ret
92
+ }
93
+
94
+ define <1 x bfloat> @atomic_vec1_bfloat (ptr %x ) {
95
+ ; CHECK-LABEL: atomic_vec1_bfloat:
96
+ ; CHECK: ## %bb.0:
97
+ ; CHECK-NEXT: movzwl (%rdi), %eax
98
+ ; CHECK-NEXT: pinsrw $0, %eax, %xmm0
99
+ ; CHECK-NEXT: retq
100
+ ;
101
+ ; CHECK0-LABEL: atomic_vec1_bfloat:
102
+ ; CHECK0: ## %bb.0:
103
+ ; CHECK0-NEXT: movw (%rdi), %cx
104
+ ; CHECK0-NEXT: ## implicit-def: $eax
105
+ ; CHECK0-NEXT: movw %cx, %ax
106
+ ; CHECK0-NEXT: ## implicit-def: $xmm0
107
+ ; CHECK0-NEXT: pinsrw $0, %eax, %xmm0
108
+ ; CHECK0-NEXT: retq
109
+ %ret = load atomic <1 x bfloat>, ptr %x acquire , align 4
110
+ ret <1 x bfloat> %ret
111
+ }
112
+
0 commit comments