198 lines · c
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 %s3 4#include <immintrin.h>5#include <stddef.h>6 7int 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 13long 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 19int 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 25long 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 31int 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 37long 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 43int 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 49long 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 55int 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 61long 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 67int 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 73long 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 79int 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 85long 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 91int 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 97long 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 103int 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 109long 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 115int 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 121long 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 127int 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 133long 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 139int 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 145long 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 151int 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 157long 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 163int 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 169long 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 175int 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 181long 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 187int 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 193long 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