|
1 |
| -// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +bmi -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,CHECK_TZCNT |
2 |
| -// RUN: %clang_cc1 -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=x86_64-windows-msvc -emit-llvm -o - -Wall -Werror -DTEST_TZCNT | FileCheck %s --check-prefix=CHECK-TZCNT |
| 1 | +// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +bmi -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,TZCNT |
| 2 | +// RUN: %clang_cc1 -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=x86_64-windows-msvc -emit-llvm -o - -Wall -Werror -DTEST_TZCNT | FileCheck %s --check-prefix=TZCNT |
3 | 3 |
|
4 | 4 |
|
5 | 5 | #include <immintrin.h>
|
|
15 | 15 | // intrinsics are different!
|
16 | 16 |
|
17 | 17 | unsigned short test_tzcnt_u16(unsigned short __X) {
|
18 |
| - // CHECK-TZCNT-LABEL: test_tzcnt_u16 |
19 |
| - // CHECK-TZCNT: i16 @llvm.cttz.i16(i16 %{{.*}}, i1 false) |
| 18 | +// TZCNT-LABEL: test_tzcnt_u16 |
| 19 | +// TZCNT: i16 @llvm.cttz.i16(i16 %{{.*}}, i1 false) |
20 | 20 | return _tzcnt_u16(__X);
|
21 | 21 | }
|
22 | 22 |
|
23 | 23 | unsigned short test__tzcnt_u16(unsigned short __X) {
|
24 |
| - // CHECK-TZCNT-LABEL: test__tzcnt_u16 |
25 |
| - // CHECK-TZCNT: i16 @llvm.cttz.i16(i16 %{{.*}}, i1 false) |
| 24 | +// TZCNT-LABEL: test__tzcnt_u16 |
| 25 | +// TZCNT: i16 @llvm.cttz.i16(i16 %{{.*}}, i1 false) |
26 | 26 | return __tzcnt_u16(__X);
|
27 | 27 | }
|
28 | 28 |
|
29 | 29 | unsigned int test__tzcnt_u32(unsigned int __X) {
|
30 |
| - // CHECK-TZCNT-LABEL: test__tzcnt_u32 |
31 |
| - // CHECK-TZCNT: i32 @llvm.cttz.i32(i32 %{{.*}}, i1 false) |
| 30 | +// TZCNT-LABEL: test__tzcnt_u32 |
| 31 | +// TZCNT: i32 @llvm.cttz.i32(i32 %{{.*}}, i1 false) |
32 | 32 | return __tzcnt_u32(__X);
|
33 | 33 | }
|
34 | 34 |
|
35 | 35 | int test_mm_tzcnt_32(unsigned int __X) {
|
36 |
| - // CHECK-TZCNT-LABEL: test_mm_tzcnt_32 |
37 |
| - // CHECK-TZCNT: i32 @llvm.cttz.i32(i32 %{{.*}}, i1 false) |
| 36 | +// TZCNT-LABEL: test_mm_tzcnt_32 |
| 37 | +// TZCNT: i32 @llvm.cttz.i32(i32 %{{.*}}, i1 false) |
38 | 38 | return _mm_tzcnt_32(__X);
|
39 | 39 | }
|
40 | 40 |
|
41 | 41 | unsigned int test_tzcnt_u32(unsigned int __X) {
|
42 |
| - // CHECK-TZCNT-LABEL: test_tzcnt_u32 |
43 |
| - // CHECK-TZCNT: i32 @llvm.cttz.i32(i32 %{{.*}}, i1 false) |
| 42 | +// TZCNT-LABEL: test_tzcnt_u32 |
| 43 | +// TZCNT: i32 @llvm.cttz.i32(i32 %{{.*}}, i1 false) |
44 | 44 | return _tzcnt_u32(__X);
|
45 | 45 | }
|
46 | 46 |
|
47 | 47 | #ifdef __x86_64__
|
48 | 48 | unsigned long long test__tzcnt_u64(unsigned long long __X) {
|
49 |
| - // CHECK-TZCNT-LABEL: test__tzcnt_u64 |
50 |
| - // CHECK-TZCNT: i64 @llvm.cttz.i64(i64 %{{.*}}, i1 false) |
| 49 | +// TZCNT-LABEL: test__tzcnt_u64 |
| 50 | +// TZCNT: i64 @llvm.cttz.i64(i64 %{{.*}}, i1 false) |
51 | 51 | return __tzcnt_u64(__X);
|
52 | 52 | }
|
53 | 53 |
|
54 | 54 | long long test_mm_tzcnt_64(unsigned long long __X) {
|
55 |
| - // CHECK-TZCNT-LABEL: test_mm_tzcnt_64 |
56 |
| - // CHECK-TZCNT: i64 @llvm.cttz.i64(i64 %{{.*}}, i1 false) |
| 55 | +// TZCNT-LABEL: test_mm_tzcnt_64 |
| 56 | +// TZCNT: i64 @llvm.cttz.i64(i64 %{{.*}}, i1 false) |
57 | 57 | return _mm_tzcnt_64(__X);
|
58 | 58 | }
|
59 | 59 |
|
60 | 60 | unsigned long long test_tzcnt_u64(unsigned long long __X) {
|
61 |
| - // CHECK-TZCNT-LABEL: test_tzcnt_u64 |
62 |
| - // CHECK-TZCNT: i64 @llvm.cttz.i64(i64 %{{.*}}, i1 false) |
| 61 | +// TZCNT-LABEL: test_tzcnt_u64 |
| 62 | +// TZCNT: i64 @llvm.cttz.i64(i64 %{{.*}}, i1 false) |
63 | 63 | return _tzcnt_u64(__X);
|
64 | 64 | }
|
65 | 65 | #endif
|
66 | 66 |
|
67 | 67 | #if !defined(TEST_TZCNT)
|
68 | 68 | unsigned int test__andn_u32(unsigned int __X, unsigned int __Y) {
|
69 |
| - // CHECK-LABEL: test__andn_u32 |
70 |
| - // CHECK: xor i32 %{{.*}}, -1 |
71 |
| - // CHECK: and i32 %{{.*}}, %{{.*}} |
| 69 | +// CHECK-LABEL: test__andn_u32 |
| 70 | +// CHECK: xor i32 %{{.*}}, -1 |
| 71 | +// CHECK: and i32 %{{.*}}, %{{.*}} |
72 | 72 | return __andn_u32(__X, __Y);
|
73 | 73 | }
|
74 | 74 |
|
75 | 75 | unsigned int test__bextr_u32(unsigned int __X, unsigned int __Y) {
|
76 |
| - // CHECK-LABEL: test__bextr_u32 |
77 |
| - // CHECK: i32 @llvm.x86.bmi.bextr.32(i32 %{{.*}}, i32 %{{.*}}) |
| 76 | +// CHECK-LABEL: test__bextr_u32 |
| 77 | +// CHECK: i32 @llvm.x86.bmi.bextr.32(i32 %{{.*}}, i32 %{{.*}}) |
78 | 78 | return __bextr_u32(__X, __Y);
|
79 | 79 | }
|
80 | 80 |
|
81 | 81 | unsigned int test__blsi_u32(unsigned int __X) {
|
82 |
| - // CHECK-LABEL: test__blsi_u32 |
83 |
| - // CHECK: sub i32 0, %{{.*}} |
84 |
| - // CHECK: and i32 %{{.*}}, %{{.*}} |
| 82 | +// CHECK-LABEL: test__blsi_u32 |
| 83 | +// CHECK: sub i32 0, %{{.*}} |
| 84 | +// CHECK: and i32 %{{.*}}, %{{.*}} |
85 | 85 | return __blsi_u32(__X);
|
86 | 86 | }
|
87 | 87 |
|
88 | 88 | unsigned int test__blsmsk_u32(unsigned int __X) {
|
89 |
| - // CHECK-LABEL: test__blsmsk_u32 |
90 |
| - // CHECK: sub i32 %{{.*}}, 1 |
91 |
| - // CHECK: xor i32 %{{.*}}, %{{.*}} |
| 89 | +// CHECK-LABEL: test__blsmsk_u32 |
| 90 | +// CHECK: sub i32 %{{.*}}, 1 |
| 91 | +// CHECK: xor i32 %{{.*}}, %{{.*}} |
92 | 92 | return __blsmsk_u32(__X);
|
93 | 93 | }
|
94 | 94 |
|
95 | 95 | unsigned int test__blsr_u32(unsigned int __X) {
|
96 |
| - // CHECK-LABEL: test__blsr_u32 |
97 |
| - // CHECK: sub i32 %{{.*}}, 1 |
98 |
| - // CHECK: and i32 %{{.*}}, %{{.*}} |
| 96 | +// CHECK-LABEL: test__blsr_u32 |
| 97 | +// CHECK: sub i32 %{{.*}}, 1 |
| 98 | +// CHECK: and i32 %{{.*}}, %{{.*}} |
99 | 99 | return __blsr_u32(__X);
|
100 | 100 | }
|
101 | 101 |
|
102 | 102 | #ifdef __x86_64__
|
103 | 103 | unsigned long long test__andn_u64(unsigned long __X, unsigned long __Y) {
|
104 |
| - // CHECK-LABEL: test__andn_u64 |
105 |
| - // CHECK: xor i64 %{{.*}}, -1 |
106 |
| - // CHECK: and i64 %{{.*}}, %{{.*}} |
| 104 | +// CHECK-LABEL: test__andn_u64 |
| 105 | +// CHECK: xor i64 %{{.*}}, -1 |
| 106 | +// CHECK: and i64 %{{.*}}, %{{.*}} |
107 | 107 | return __andn_u64(__X, __Y);
|
108 | 108 | }
|
109 | 109 |
|
110 | 110 | unsigned long long test__bextr_u64(unsigned long __X, unsigned long __Y) {
|
111 |
| - // CHECK-LABEL: test__bextr_u64 |
112 |
| - // CHECK: i64 @llvm.x86.bmi.bextr.64(i64 %{{.*}}, i64 %{{.*}}) |
| 111 | +// CHECK-LABEL: test__bextr_u64 |
| 112 | +// CHECK: i64 @llvm.x86.bmi.bextr.64(i64 %{{.*}}, i64 %{{.*}}) |
113 | 113 | return __bextr_u64(__X, __Y);
|
114 | 114 | }
|
115 | 115 |
|
116 | 116 | unsigned long long test__blsi_u64(unsigned long long __X) {
|
117 |
| - // CHECK-LABEL: test__blsi_u64 |
118 |
| - // CHECK: sub i64 0, %{{.*}} |
119 |
| - // CHECK: and i64 %{{.*}}, %{{.*}} |
| 117 | +// CHECK-LABEL: test__blsi_u64 |
| 118 | +// CHECK: sub i64 0, %{{.*}} |
| 119 | +// CHECK: and i64 %{{.*}}, %{{.*}} |
120 | 120 | return __blsi_u64(__X);
|
121 | 121 | }
|
122 | 122 |
|
123 | 123 | unsigned long long test__blsmsk_u64(unsigned long long __X) {
|
124 |
| - // CHECK-LABEL: test__blsmsk_u64 |
125 |
| - // CHECK: sub i64 %{{.*}}, 1 |
126 |
| - // CHECK: xor i64 %{{.*}}, %{{.*}} |
| 124 | +// CHECK-LABEL: test__blsmsk_u64 |
| 125 | +// CHECK: sub i64 %{{.*}}, 1 |
| 126 | +// CHECK: xor i64 %{{.*}}, %{{.*}} |
127 | 127 | return __blsmsk_u64(__X);
|
128 | 128 | }
|
129 | 129 |
|
130 | 130 | unsigned long long test__blsr_u64(unsigned long long __X) {
|
131 |
| - // CHECK-LABEL: test__blsr_u64 |
132 |
| - // CHECK: sub i64 %{{.*}}, 1 |
133 |
| - // CHECK: and i64 %{{.*}}, %{{.*}} |
| 131 | +// CHECK-LABEL: test__blsr_u64 |
| 132 | +// CHECK: sub i64 %{{.*}}, 1 |
| 133 | +// CHECK: and i64 %{{.*}}, %{{.*}} |
134 | 134 | return __blsr_u64(__X);
|
135 | 135 | }
|
136 | 136 | #endif
|
137 | 137 |
|
138 | 138 | // Intel intrinsics
|
139 | 139 |
|
140 | 140 | unsigned int test_andn_u32(unsigned int __X, unsigned int __Y) {
|
141 |
| - // CHECK-LABEL: test_andn_u32 |
142 |
| - // CHECK: xor i32 %{{.*}}, -1 |
143 |
| - // CHECK: and i32 %{{.*}}, %{{.*}} |
| 141 | +// CHECK-LABEL: test_andn_u32 |
| 142 | +// CHECK: xor i32 %{{.*}}, -1 |
| 143 | +// CHECK: and i32 %{{.*}}, %{{.*}} |
144 | 144 | return _andn_u32(__X, __Y);
|
145 | 145 | }
|
146 | 146 |
|
147 | 147 | unsigned int test_bextr_u32(unsigned int __X, unsigned int __Y,
|
148 | 148 | unsigned int __Z) {
|
149 |
| - // CHECK-LABEL: test_bextr_u32 |
150 |
| - // CHECK: and i32 %{{.*}}, 255 |
151 |
| - // CHECK: and i32 %{{.*}}, 255 |
152 |
| - // CHECK: shl i32 %{{.*}}, 8 |
153 |
| - // CHECK: or i32 %{{.*}}, %{{.*}} |
154 |
| - // CHECK: i32 @llvm.x86.bmi.bextr.32(i32 %{{.*}}, i32 %{{.*}}) |
| 149 | +// CHECK-LABEL: test_bextr_u32 |
| 150 | +// CHECK: and i32 %{{.*}}, 255 |
| 151 | +// CHECK: and i32 %{{.*}}, 255 |
| 152 | +// CHECK: shl i32 %{{.*}}, 8 |
| 153 | +// CHECK: or i32 %{{.*}}, %{{.*}} |
| 154 | +// CHECK: i32 @llvm.x86.bmi.bextr.32(i32 %{{.*}}, i32 %{{.*}}) |
155 | 155 | return _bextr_u32(__X, __Y, __Z);
|
156 | 156 | }
|
157 | 157 |
|
158 | 158 | unsigned int test_bextr2_u32(unsigned int __X, unsigned int __Y) {
|
159 |
| - // CHECK-LABEL: test_bextr2_u32 |
160 |
| - // CHECK: i32 @llvm.x86.bmi.bextr.32(i32 %{{.*}}, i32 %{{.*}}) |
| 159 | +// CHECK-LABEL: test_bextr2_u32 |
| 160 | +// CHECK: i32 @llvm.x86.bmi.bextr.32(i32 %{{.*}}, i32 %{{.*}}) |
161 | 161 | return _bextr2_u32(__X, __Y);
|
162 | 162 | }
|
163 | 163 |
|
164 | 164 | unsigned int test_blsi_u32(unsigned int __X) {
|
165 |
| - // CHECK-LABEL: test_blsi_u32 |
166 |
| - // CHECK: sub i32 0, %{{.*}} |
167 |
| - // CHECK: and i32 %{{.*}}, %{{.*}} |
| 165 | +// CHECK-LABEL: test_blsi_u32 |
| 166 | +// CHECK: sub i32 0, %{{.*}} |
| 167 | +// CHECK: and i32 %{{.*}}, %{{.*}} |
168 | 168 | return _blsi_u32(__X);
|
169 | 169 | }
|
170 | 170 |
|
171 | 171 | unsigned int test_blsmsk_u32(unsigned int __X) {
|
172 |
| - // CHECK-LABEL: test_blsmsk_u32 |
173 |
| - // CHECK: sub i32 %{{.*}}, 1 |
174 |
| - // CHECK: xor i32 %{{.*}}, %{{.*}} |
| 172 | +// CHECK-LABEL: test_blsmsk_u32 |
| 173 | +// CHECK: sub i32 %{{.*}}, 1 |
| 174 | +// CHECK: xor i32 %{{.*}}, %{{.*}} |
175 | 175 | return _blsmsk_u32(__X);
|
176 | 176 | }
|
177 | 177 |
|
178 | 178 | unsigned int test_blsr_u32(unsigned int __X) {
|
179 |
| - // CHECK-LABEL: test_blsr_u32 |
180 |
| - // CHECK: sub i32 %{{.*}}, 1 |
181 |
| - // CHECK: and i32 %{{.*}}, %{{.*}} |
| 179 | +// CHECK-LABEL: test_blsr_u32 |
| 180 | +// CHECK: sub i32 %{{.*}}, 1 |
| 181 | +// CHECK: and i32 %{{.*}}, %{{.*}} |
182 | 182 | return _blsr_u32(__X);
|
183 | 183 | }
|
184 | 184 |
|
185 | 185 | #ifdef __x86_64__
|
186 | 186 | unsigned long long test_andn_u64(unsigned long __X, unsigned long __Y) {
|
187 |
| - // CHECK-LABEL: test_andn_u64 |
188 |
| - // CHECK: xor i64 %{{.*}}, -1 |
189 |
| - // CHECK: and i64 %{{.*}}, %{{.*}} |
| 187 | +// CHECK-LABEL: test_andn_u64 |
| 188 | +// CHECK: xor i64 %{{.*}}, -1 |
| 189 | +// CHECK: and i64 %{{.*}}, %{{.*}} |
190 | 190 | return _andn_u64(__X, __Y);
|
191 | 191 | }
|
192 | 192 |
|
193 | 193 | unsigned long long test_bextr_u64(unsigned long __X, unsigned int __Y,
|
194 | 194 | unsigned int __Z) {
|
195 |
| - // CHECK-LABEL: test_bextr_u64 |
196 |
| - // CHECK: and i32 %{{.*}}, 255 |
197 |
| - // CHECK: and i32 %{{.*}}, 255 |
198 |
| - // CHECK: shl i32 %{{.*}}, 8 |
199 |
| - // CHECK: or i32 %{{.*}}, %{{.*}} |
200 |
| - // CHECK: zext i32 %{{.*}} to i64 |
201 |
| - // CHECK: i64 @llvm.x86.bmi.bextr.64(i64 %{{.*}}, i64 %{{.*}}) |
| 195 | +// CHECK-LABEL: test_bextr_u64 |
| 196 | +// CHECK: and i32 %{{.*}}, 255 |
| 197 | +// CHECK: and i32 %{{.*}}, 255 |
| 198 | +// CHECK: shl i32 %{{.*}}, 8 |
| 199 | +// CHECK: or i32 %{{.*}}, %{{.*}} |
| 200 | +// CHECK: zext i32 %{{.*}} to i64 |
| 201 | +// CHECK: i64 @llvm.x86.bmi.bextr.64(i64 %{{.*}}, i64 %{{.*}}) |
202 | 202 | return _bextr_u64(__X, __Y, __Z);
|
203 | 203 | }
|
204 | 204 |
|
205 | 205 | unsigned long long test_bextr2_u64(unsigned long long __X,
|
206 | 206 | unsigned long long __Y) {
|
207 |
| - // CHECK-LABEL: test_bextr2_u64 |
208 |
| - // CHECK: i64 @llvm.x86.bmi.bextr.64(i64 %{{.*}}, i64 %{{.*}}) |
| 207 | +// CHECK-LABEL: test_bextr2_u64 |
| 208 | +// CHECK: i64 @llvm.x86.bmi.bextr.64(i64 %{{.*}}, i64 %{{.*}}) |
209 | 209 | return _bextr2_u64(__X, __Y);
|
210 | 210 | }
|
211 | 211 |
|
212 | 212 | unsigned long long test_blsi_u64(unsigned long long __X) {
|
213 |
| - // CHECK-LABEL: test_blsi_u64 |
214 |
| - // CHECK: sub i64 0, %{{.*}} |
215 |
| - // CHECK: and i64 %{{.*}}, %{{.*}} |
| 213 | +// CHECK-LABEL: test_blsi_u64 |
| 214 | +// CHECK: sub i64 0, %{{.*}} |
| 215 | +// CHECK: and i64 %{{.*}}, %{{.*}} |
216 | 216 | return _blsi_u64(__X);
|
217 | 217 | }
|
218 | 218 |
|
219 | 219 | unsigned long long test_blsmsk_u64(unsigned long long __X) {
|
220 |
| - // CHECK-LABEL: test_blsmsk_u64 |
221 |
| - // CHECK: sub i64 %{{.*}}, 1 |
222 |
| - // CHECK: xor i64 %{{.*}}, %{{.*}} |
| 220 | +// CHECK-LABEL: test_blsmsk_u64 |
| 221 | +// CHECK: sub i64 %{{.*}}, 1 |
| 222 | +// CHECK: xor i64 %{{.*}}, %{{.*}} |
223 | 223 | return _blsmsk_u64(__X);
|
224 | 224 | }
|
225 | 225 |
|
226 | 226 | unsigned long long test_blsr_u64(unsigned long long __X) {
|
227 |
| - // CHECK-LABEL: test_blsr_u64 |
228 |
| - // CHECK: sub i64 %{{.*}}, 1 |
229 |
| - // CHECK: and i64 %{{.*}}, %{{.*}} |
| 227 | +// CHECK-LABEL: test_blsr_u64 |
| 228 | +// CHECK: sub i64 %{{.*}}, 1 |
| 229 | +// CHECK: and i64 %{{.*}}, %{{.*}} |
230 | 230 | return _blsr_u64(__X);
|
231 | 231 | }
|
232 | 232 | #endif
|
|
0 commit comments