xref: /llvm-project/clang/test/CodeGen/X86/cmpccxadd-builtins.c (revision 372842b30f8e611765e3cb9f06b8265d2e79f3f6)
1 // RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +cmpccxadd \
2 // RUN: -emit-llvm -o - -Wall -Werror -pedantic -Wno-gnu-statement-expression | FileCheck %s
3 
4 #include <immintrin.h>
5 #include <stddef.h>
6 
7 int test_cmpbexadd32(void *__A, int __B, int __C) {
8   // CHECK-LABEL: @test_cmpbexadd32(
9   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 0)
10   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_O);
11 }
12 
13 long long test_cmpbexadd64(void *__A, long long __B, long long __C) {
14   // CHECK-LABEL: @test_cmpbexadd64(
15   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 0)
16   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_O);
17 }
18 
19 int test_cmpbxadd32(void *__A, int __B, int __C) {
20   // CHECK-LABEL: @test_cmpbxadd32(
21   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 1)
22   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_NO);
23 }
24 
25 long long test_cmpbxadd64(void *__A, long long __B, long long __C) {
26   // CHECK-LABEL: @test_cmpbxadd64(
27   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 1)
28   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_NO);
29 }
30 
31 int test_cmplexadd32(void *__A, int __B, int __C) {
32   // CHECK-LABEL: @test_cmplexadd32(
33   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 2)
34   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_B);
35 }
36 
37 long long test_cmplexadd64(void *__A, long long __B, long long __C) {
38   // CHECK-LABEL: @test_cmplexadd64(
39   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 2)
40   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_B);
41 }
42 
43 int test_cmplxadd32(void *__A, int __B, int __C) {
44   // CHECK-LABEL: @test_cmplxadd32(
45   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 3)
46   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_NB);
47 }
48 
49 long long test_cmplxadd64(void *__A, long long __B, long long __C) {
50   // CHECK-LABEL: @test_cmplxadd64(
51   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 3)
52   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_NB);
53 }
54 
55 int test_cmpaxadd32(void *__A, int __B, int __C) {
56   // CHECK-LABEL: @test_cmpaxadd32(
57   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 4)
58   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_Z);
59 }
60 
61 long long test_cmpaxadd64(void *__A, long long __B, long long __C) {
62   // CHECK-LABEL: @test_cmpaxadd64(
63   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 4)
64   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_Z);
65 }
66 
67 int test_cmpaexadd32(void *__A, int __B, int __C) {
68   // CHECK-LABEL: @test_cmpaexadd32(
69   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 5)
70   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_NZ);
71 }
72 
73 long long test_cmpaexadd64(void *__A, long long __B, long long __C) {
74   // CHECK-LABEL: @test_cmpaexadd64(
75   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 5)
76   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_NZ);
77 }
78 
79 int test_cmpgxadd32(void *__A, int __B, int __C) {
80   // CHECK-LABEL: @test_cmpgxadd32(
81   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 6)
82   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_BE);
83 }
84 
85 long long test_cmpgxadd64(void *__A, long long __B, long long __C) {
86   // CHECK-LABEL: @test_cmpgxadd64(
87   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 6)
88   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_BE);
89 }
90 
91 int test_cmpgexadd32(void *__A, int __B, int __C) {
92   // CHECK-LABEL: @test_cmpgexadd32(
93   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 7)
94   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_NBE);
95 }
96 
97 long long test_cmpgexadd64(void *__A, long long __B, long long __C) {
98   // CHECK-LABEL: @test_cmpgexadd64(
99   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 7)
100   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_NBE);
101 }
102 
103 int test_cmpnoxadd32(void *__A, int __B, int __C) {
104   // CHECK-LABEL: @test_cmpnoxadd32(
105   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 8)
106   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_S);
107 }
108 
109 long long test_cmpnoxadd64(void *__A, long long __B, long long __C) {
110   // CHECK-LABEL: @test_cmpnoxadd64(
111   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 8)
112   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_S);
113 }
114 
115 int test_cmpnpxadd32(void *__A, int __B, int __C) {
116   // CHECK-LABEL: @test_cmpnpxadd32(
117   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 9)
118   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_NS);
119 }
120 
121 long long test_cmpnpxadd64(void *__A, long long __B, long long __C) {
122   // CHECK-LABEL: @test_cmpnpxadd64(
123   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 9)
124   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_NS);
125 }
126 
127 int test_cmpnsxadd32(void *__A, int __B, int __C) {
128   // CHECK-LABEL: @test_cmpnsxadd32(
129   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 10)
130   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_P);
131 }
132 
133 long long test_cmpnsxadd64(void *__A, long long __B, long long __C) {
134   // CHECK-LABEL: @test_cmpnsxadd64(
135   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 10)
136   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_P);
137 }
138 
139 int test_cmpnexadd32(void *__A, int __B, int __C) {
140   // CHECK-LABEL: @test_cmpnexadd32(
141   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 11)
142   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_NP);
143 }
144 
145 long long test_cmpnexadd64(void *__A, long long __B, long long __C) {
146   // CHECK-LABEL: @test_cmpnexadd64(
147   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 11)
148   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_NP);
149 }
150 
151 int test_cmpoxadd32(void *__A, int __B, int __C) {
152   // CHECK-LABEL: @test_cmpoxadd32(
153   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 12)
154   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_L);
155 }
156 
157 long long test_cmpoxadd64(void *__A, long long __B, long long __C) {
158   // CHECK-LABEL: @test_cmpoxadd64(
159   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 12)
160   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_L);
161 }
162 
163 int test_cmppxadd32(void *__A, int __B, int __C) {
164   // CHECK-LABEL: @test_cmppxadd32(
165   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 13)
166   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_NL);
167 }
168 
169 long long test_cmppxadd64(void *__A, long long __B, long long __C) {
170   // CHECK-LABEL: @test_cmppxadd64(
171   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 13)
172   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_NL);
173 }
174 
175 int test_cmpsxadd32(void *__A, int __B, int __C) {
176   // CHECK-LABEL: @test_cmpsxadd32(
177   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 14)
178   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_LE);
179 }
180 
181 long long test_cmpsxadd64(void *__A, long long __B, long long __C) {
182   // CHECK-LABEL: @test_cmpsxadd64(
183   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 14)
184   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_LE);
185 }
186 
187 int test_cmpexadd32(void *__A, int __B, int __C) {
188   // CHECK-LABEL: @test_cmpexadd32(
189   // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 15)
190   return _cmpccxadd_epi32(__A, __B, __C, _CMPCCX_NLE);
191 }
192 
193 long long test_cmpexadd64(void *__A, long long __B, long long __C) {
194   // CHECK-LABEL: @test_cmpexadd64(
195   // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 15)
196   return _cmpccxadd_epi64(__A, __B, __C, _CMPCCX_NLE);
197 }
198