456 lines · c
1// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror | FileCheck %s2// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s3// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror | FileCheck %s4// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s5 6 7#include <x86intrin.h>8 9// _MM_PCOMCTRL_LT10 11__m128i test_mm_comlt_epu8(__m128i a, __m128i b) {12 // CHECK-LABEL: test_mm_comlt_epu813 // CHECK: icmp ult <16 x i8> %{{.*}}, %{{.*}}14 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>15 return _mm_comlt_epu8(a, b);16}17 18__m128i test_mm_comlt_epu16(__m128i a, __m128i b) {19 // CHECK-LABEL: test_mm_comlt_epu1620 // CHECK: icmp ult <8 x i16> %{{.*}}, %{{.*}}21 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>22 return _mm_comlt_epu16(a, b);23}24 25__m128i test_mm_comlt_epu32(__m128i a, __m128i b) {26 // CHECK-LABEL: test_mm_comlt_epu3227 // CHECK: icmp ult <4 x i32> %{{.*}}, %{{.*}}28 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>29 return _mm_comlt_epu32(a, b);30}31 32__m128i test_mm_comlt_epu64(__m128i a, __m128i b) {33 // CHECK-LABEL: test_mm_comlt_epu6434 // CHECK: icmp ult <2 x i64> %{{.*}}, %{{.*}}35 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>36 return _mm_comlt_epu64(a, b);37}38 39__m128i test_mm_comlt_epi8(__m128i a, __m128i b) {40 // CHECK-LABEL: test_mm_comlt_epi841 // CHECK: icmp slt <16 x i8> %{{.*}}, %{{.*}}42 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>43 return _mm_comlt_epi8(a, b);44}45 46__m128i test_mm_comlt_epi16(__m128i a, __m128i b) {47 // CHECK-LABEL: test_mm_comlt_epi1648 // CHECK: icmp slt <8 x i16> %{{.*}}, %{{.*}}49 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>50 return _mm_comlt_epi16(a, b);51}52 53__m128i test_mm_comlt_epi32(__m128i a, __m128i b) {54 // CHECK-LABEL: test_mm_comlt_epi3255 // CHECK: icmp slt <4 x i32> %{{.*}}, %{{.*}}56 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>57 return _mm_comlt_epi32(a, b);58}59 60__m128i test_mm_comlt_epi64(__m128i a, __m128i b) {61 // CHECK-LABEL: test_mm_comlt_epi6462 // CHECK: icmp slt <2 x i64> %{{.*}}, %{{.*}}63 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>64 return _mm_comlt_epi64(a, b);65}66 67// _MM_PCOMCTRL_LE68 69__m128i test_mm_comle_epu8(__m128i a, __m128i b) {70 // CHECK-LABEL: test_mm_comle_epu871 // CHECK: icmp ule <16 x i8> %{{.*}}, %{{.*}}72 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>73 return _mm_comle_epu8(a, b);74}75 76__m128i test_mm_comle_epu16(__m128i a, __m128i b) {77 // CHECK-LABEL: test_mm_comle_epu1678 // CHECK: icmp ule <8 x i16> %{{.*}}, %{{.*}}79 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>80 return _mm_comle_epu16(a, b);81}82 83__m128i test_mm_comle_epu32(__m128i a, __m128i b) {84 // CHECK-LABEL: test_mm_comle_epu3285 // CHECK: icmp ule <4 x i32> %{{.*}}, %{{.*}}86 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>87 return _mm_comle_epu32(a, b);88}89 90__m128i test_mm_comle_epu64(__m128i a, __m128i b) {91 // CHECK-LABEL: test_mm_comle_epu6492 // CHECK: icmp ule <2 x i64> %{{.*}}, %{{.*}}93 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>94 return _mm_comle_epu64(a, b);95}96 97__m128i test_mm_comle_epi8(__m128i a, __m128i b) {98 // CHECK-LABEL: test_mm_comle_epi899 // CHECK: icmp sle <16 x i8> %{{.*}}, %{{.*}}100 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>101 return _mm_comle_epi8(a, b);102}103 104__m128i test_mm_comle_epi16(__m128i a, __m128i b) {105 // CHECK-LABEL: test_mm_comle_epi16106 // CHECK: icmp sle <8 x i16> %{{.*}}, %{{.*}}107 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>108 return _mm_comle_epi16(a, b);109}110 111__m128i test_mm_comle_epi32(__m128i a, __m128i b) {112 // CHECK-LABEL: test_mm_comle_epi32113 // CHECK: icmp sle <4 x i32> %{{.*}}, %{{.*}}114 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>115 return _mm_comle_epi32(a, b);116}117 118__m128i test_mm_comle_epi64(__m128i a, __m128i b) {119 // CHECK-LABEL: test_mm_comle_epi64120 // CHECK: icmp sle <2 x i64> %{{.*}}, %{{.*}}121 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>122 return _mm_comle_epi64(a, b);123}124 125// _MM_PCOMCTRL_GT126 127__m128i test_mm_comgt_epu8(__m128i a, __m128i b) {128 // CHECK-LABEL: test_mm_comgt_epu8129 // CHECK: icmp ugt <16 x i8> %{{.*}}, %{{.*}}130 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>131 return _mm_comgt_epu8(a, b);132}133 134__m128i test_mm_comgt_epu16(__m128i a, __m128i b) {135 // CHECK-LABEL: test_mm_comgt_epu16136 // CHECK: icmp ugt <8 x i16> %{{.*}}, %{{.*}}137 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>138 return _mm_comgt_epu16(a, b);139}140 141__m128i test_mm_comgt_epu32(__m128i a, __m128i b) {142 // CHECK-LABEL: test_mm_comgt_epu32143 // CHECK: icmp ugt <4 x i32> %{{.*}}, %{{.*}}144 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>145 return _mm_comgt_epu32(a, b);146}147 148__m128i test_mm_comgt_epu64(__m128i a, __m128i b) {149 // CHECK-LABEL: test_mm_comgt_epu64150 // CHECK: icmp ugt <2 x i64> %{{.*}}, %{{.*}}151 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>152 return _mm_comgt_epu64(a, b);153}154 155__m128i test_mm_comgt_epi8(__m128i a, __m128i b) {156 // CHECK-LABEL: test_mm_comgt_epi8157 // CHECK: icmp sgt <16 x i8> %{{.*}}, %{{.*}}158 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>159 return _mm_comgt_epi8(a, b);160}161 162__m128i test_mm_comgt_epi16(__m128i a, __m128i b) {163 // CHECK-LABEL: test_mm_comgt_epi16164 // CHECK: icmp sgt <8 x i16> %{{.*}}, %{{.*}}165 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>166 return _mm_comgt_epi16(a, b);167}168 169__m128i test_mm_comgt_epi32(__m128i a, __m128i b) {170 // CHECK-LABEL: test_mm_comgt_epi32171 // CHECK: icmp sgt <4 x i32> %{{.*}}, %{{.*}}172 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>173 return _mm_comgt_epi32(a, b);174}175 176__m128i test_mm_comgt_epi64(__m128i a, __m128i b) {177 // CHECK-LABEL: test_mm_comgt_epi64178 // CHECK: icmp sgt <2 x i64> %{{.*}}, %{{.*}}179 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>180 return _mm_comgt_epi64(a, b);181}182 183// _MM_PCOMCTRL_GE184 185__m128i test_mm_comge_epu8(__m128i a, __m128i b) {186 // CHECK-LABEL: test_mm_comge_epu8187 // CHECK: icmp uge <16 x i8> %{{.*}}, %{{.*}}188 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>189 return _mm_comge_epu8(a, b);190}191 192__m128i test_mm_comge_epu16(__m128i a, __m128i b) {193 // CHECK-LABEL: test_mm_comge_epu16194 // CHECK: icmp uge <8 x i16> %{{.*}}, %{{.*}}195 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>196 return _mm_comge_epu16(a, b);197}198 199__m128i test_mm_comge_epu32(__m128i a, __m128i b) {200 // CHECK-LABEL: test_mm_comge_epu32201 // CHECK: icmp uge <4 x i32> %{{.*}}, %{{.*}}202 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>203 return _mm_comge_epu32(a, b);204}205 206__m128i test_mm_comge_epu64(__m128i a, __m128i b) {207 // CHECK-LABEL: test_mm_comge_epu64208 // CHECK: icmp uge <2 x i64> %{{.*}}, %{{.*}}209 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>210 return _mm_comge_epu64(a, b);211}212 213__m128i test_mm_comge_epi8(__m128i a, __m128i b) {214 // CHECK-LABEL: test_mm_comge_epi8215 // CHECK: icmp sge <16 x i8> %{{.*}}, %{{.*}}216 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>217 return _mm_comge_epi8(a, b);218}219 220__m128i test_mm_comge_epi16(__m128i a, __m128i b) {221 // CHECK-LABEL: test_mm_comge_epi16222 // CHECK: icmp sge <8 x i16> %{{.*}}, %{{.*}}223 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>224 return _mm_comge_epi16(a, b);225}226 227__m128i test_mm_comge_epi32(__m128i a, __m128i b) {228 // CHECK-LABEL: test_mm_comge_epi32229 // CHECK: icmp sge <4 x i32> %{{.*}}, %{{.*}}230 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>231 return _mm_comge_epi32(a, b);232}233 234__m128i test_mm_comge_epi64(__m128i a, __m128i b) {235 // CHECK-LABEL: test_mm_comge_epi64236 // CHECK: icmp sge <2 x i64> %{{.*}}, %{{.*}}237 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>238 return _mm_comge_epi64(a, b);239}240 241// _MM_PCOMCTRL_EQ242 243__m128i test_mm_comeq_epu8(__m128i a, __m128i b) {244 // CHECK-LABEL: test_mm_comeq_epu8245 // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}}246 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>247 return _mm_comeq_epu8(a, b);248}249 250__m128i test_mm_comeq_epu16(__m128i a, __m128i b) {251 // CHECK-LABEL: test_mm_comeq_epu16252 // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}}253 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>254 return _mm_comeq_epu16(a, b);255}256 257__m128i test_mm_comeq_epu32(__m128i a, __m128i b) {258 // CHECK-LABEL: test_mm_comeq_epu32259 // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}}260 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>261 return _mm_comeq_epu32(a, b);262}263 264__m128i test_mm_comeq_epu64(__m128i a, __m128i b) {265 // CHECK-LABEL: test_mm_comeq_epu64266 // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}}267 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>268 return _mm_comeq_epu64(a, b);269}270 271__m128i test_mm_comeq_epi8(__m128i a, __m128i b) {272 // CHECK-LABEL: test_mm_comeq_epi8273 // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}}274 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>275 return _mm_comeq_epi8(a, b);276}277 278__m128i test_mm_comeq_epi16(__m128i a, __m128i b) {279 // CHECK-LABEL: test_mm_comeq_epi16280 // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}}281 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>282 return _mm_comeq_epi16(a, b);283}284 285__m128i test_mm_comeq_epi32(__m128i a, __m128i b) {286 // CHECK-LABEL: test_mm_comeq_epi32287 // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}}288 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>289 return _mm_comeq_epi32(a, b);290}291 292__m128i test_mm_comeq_epi64(__m128i a, __m128i b) {293 // CHECK-LABEL: test_mm_comeq_epi64294 // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}}295 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>296 return _mm_comeq_epi64(a, b);297}298 299// _MM_PCOMCTRL_NEQ300 301__m128i test_mm_comneq_epu8(__m128i a, __m128i b) {302 // CHECK-LABEL: test_mm_comneq_epu8303 // CHECK: icmp ne <16 x i8> %{{.*}}, %{{.*}}304 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>305 return _mm_comneq_epu8(a, b);306}307 308__m128i test_mm_comneq_epu16(__m128i a, __m128i b) {309 // CHECK-LABEL: test_mm_comneq_epu16310 // CHECK: icmp ne <8 x i16> %{{.*}}, %{{.*}}311 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>312 return _mm_comneq_epu16(a, b);313}314 315__m128i test_mm_comneq_epu32(__m128i a, __m128i b) {316 // CHECK-LABEL: test_mm_comneq_epu32317 // CHECK: icmp ne <4 x i32> %{{.*}}, %{{.*}}318 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>319 return _mm_comneq_epu32(a, b);320}321 322__m128i test_mm_comneq_epu64(__m128i a, __m128i b) {323 // CHECK-LABEL: test_mm_comneq_epu64324 // CHECK: icmp ne <2 x i64> %{{.*}}, %{{.*}}325 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>326 return _mm_comneq_epu64(a, b);327}328 329__m128i test_mm_comneq_epi8(__m128i a, __m128i b) {330 // CHECK-LABEL: test_mm_comneq_epi8331 // CHECK: icmp ne <16 x i8> %{{.*}}, %{{.*}}332 // CHECK: sext <16 x i1> %{{.*}} to <16 x i8>333 return _mm_comneq_epi8(a, b);334}335 336__m128i test_mm_comneq_epi16(__m128i a, __m128i b) {337 // CHECK-LABEL: test_mm_comneq_epi16338 // CHECK: icmp ne <8 x i16> %{{.*}}, %{{.*}}339 // CHECK: sext <8 x i1> %{{.*}} to <8 x i16>340 return _mm_comneq_epi16(a, b);341}342 343__m128i test_mm_comneq_epi32(__m128i a, __m128i b) {344 // CHECK-LABEL: test_mm_comneq_epi32345 // CHECK: icmp ne <4 x i32> %{{.*}}, %{{.*}}346 // CHECK: sext <4 x i1> %{{.*}} to <4 x i32>347 return _mm_comneq_epi32(a, b);348}349 350__m128i test_mm_comneq_epi64(__m128i a, __m128i b) {351 // CHECK-LABEL: test_mm_comneq_epi64352 // CHECK: icmp ne <2 x i64> %{{.*}}, %{{.*}}353 // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>354 return _mm_comneq_epi64(a, b);355}356 357// _MM_PCOMCTRL_FALSE358 359__m128i test_mm_comfalse_epu8(__m128i a, __m128i b) {360 // CHECK-LABEL: test_mm_comfalse_epu8361 // CHECK: ret <2 x i64> zeroinitializer362 return _mm_comfalse_epu8(a, b);363}364 365__m128i test_mm_comfalse_epu16(__m128i a, __m128i b) {366 // CHECK-LABEL: test_mm_comfalse_epu16367 // CHECK: ret <2 x i64> zeroinitializer368 return _mm_comfalse_epu16(a, b);369}370 371__m128i test_mm_comfalse_epu32(__m128i a, __m128i b) {372 // CHECK-LABEL: test_mm_comfalse_epu32373 // CHECK: ret <2 x i64> zeroinitializer374 return _mm_comfalse_epu32(a, b);375}376 377__m128i test_mm_comfalse_epu64(__m128i a, __m128i b) {378 // CHECK-LABEL: test_mm_comfalse_epu64379 // CHECK: ret <2 x i64> zeroinitializer380 return _mm_comfalse_epu64(a, b);381}382 383__m128i test_mm_comfalse_epi8(__m128i a, __m128i b) {384 // CHECK-LABEL: test_mm_comfalse_epi8385 // CHECK: ret <2 x i64> zeroinitializer386 return _mm_comfalse_epi8(a, b);387}388 389__m128i test_mm_comfalse_epi16(__m128i a, __m128i b) {390 // CHECK-LABEL: test_mm_comfalse_epi16391 // CHECK: ret <2 x i64> zeroinitializer392 return _mm_comfalse_epi16(a, b);393}394 395__m128i test_mm_comfalse_epi32(__m128i a, __m128i b) {396 // CHECK-LABEL: test_mm_comfalse_epi32397 // CHECK: ret <2 x i64> zeroinitializer398 return _mm_comfalse_epi32(a, b);399}400 401__m128i test_mm_comfalse_epi64(__m128i a, __m128i b) {402 // CHECK-LABEL: test_mm_comfalse_epi64403 // CHECK: ret <2 x i64> zeroinitializer404 return _mm_comfalse_epi64(a, b);405}406 407// _MM_PCOMCTRL_TRUE408 409__m128i test_mm_comtrue_epu8(__m128i a, __m128i b) {410 // CHECK-LABEL: test_mm_comtrue_epu8411 // CHECK: ret <2 x i64> splat (i64 -1)412 return _mm_comtrue_epu8(a, b);413}414 415__m128i test_mm_comtrue_epu16(__m128i a, __m128i b) {416 // CHECK-LABEL: test_mm_comtrue_epu16417 // CHECK: ret <2 x i64> splat (i64 -1)418 return _mm_comtrue_epu16(a, b);419}420 421__m128i test_mm_comtrue_epu32(__m128i a, __m128i b) {422 // CHECK-LABEL: test_mm_comtrue_epu32423 // CHECK: ret <2 x i64> splat (i64 -1)424 return _mm_comtrue_epu32(a, b);425}426 427__m128i test_mm_comtrue_epu64(__m128i a, __m128i b) {428 // CHECK-LABEL: test_mm_comtrue_epu64429 // CHECK: ret <2 x i64> splat (i64 -1)430 return _mm_comtrue_epu64(a, b);431}432 433__m128i test_mm_comtrue_epi8(__m128i a, __m128i b) {434 // CHECK-LABEL: test_mm_comtrue_epi8435 // CHECK: ret <2 x i64> splat (i64 -1)436 return _mm_comtrue_epi8(a, b);437}438 439__m128i test_mm_comtrue_epi16(__m128i a, __m128i b) {440 // CHECK-LABEL: test_mm_comtrue_epi16441 // CHECK: ret <2 x i64> splat (i64 -1)442 return _mm_comtrue_epi16(a, b);443}444 445__m128i test_mm_comtrue_epi32(__m128i a, __m128i b) {446 // CHECK-LABEL: test_mm_comtrue_epi32447 // CHECK: ret <2 x i64> splat (i64 -1)448 return _mm_comtrue_epi32(a, b);449}450 451__m128i test_mm_comtrue_epi64(__m128i a, __m128i b) {452 // CHECK-LABEL: test_mm_comtrue_epi64453 // CHECK: ret <2 x i64> splat (i64 -1)454 return _mm_comtrue_epi64(a, b);455}456