866 lines · c
1// REQUIRES: powerpc-registered-target2 3// RUN: %clang -S -emit-llvm -target powerpc64-unknown-linux-gnu -mcpu=pwr8 -DNO_WARN_X86_INTRINSICS %s \4// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -o - | llvm-cxxfilt -n | FileCheck %s --check-prefixes=CHECK-P8,CHECK,CHECK-BE5// RUN: %clang -S -emit-llvm -target powerpc64le-unknown-linux-gnu -mcpu=pwr8 -DNO_WARN_X86_INTRINSICS %s \6// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -o - | llvm-cxxfilt -n | FileCheck %s --check-prefixes=CHECK-P8,CHECK,CHECK-LE7// RUN: %clang -S -emit-llvm -target powerpc64-unknown-linux-gnu -mcpu=pwr9 -DNO_WARN_X86_INTRINSICS %s \8// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -o - | llvm-cxxfilt -n | FileCheck %s --check-prefixes=CHECK-P9,CHECK,CHECK-BE9// RUN: %clang -S -emit-llvm -target powerpc64le-unknown-linux-gnu -mcpu=pwr9 -DNO_WARN_X86_INTRINSICS %s \10// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -o - | llvm-cxxfilt -n| FileCheck %s --check-prefixes=CHECK-P9,CHECK,CHECK-LE11 12// RUN: %clang -x c++ -S -emit-llvm -target powerpc64le-unknown-linux-gnu -mcpu=pwr8 -DNO_WARN_X86_INTRINSICS %s \13// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -fsyntax-only14// RUN: %clang -x c++ -S -emit-llvm -target powerpc64le-unknown-linux-gnu -mcpu=pwr9 -DNO_WARN_X86_INTRINSICS %s \15// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -fsyntax-only16 17// RUN: %clang -S -emit-llvm -target powerpc64-unknown-freebsd13.0 -mcpu=pwr8 -DNO_WARN_X86_INTRINSICS %s \18// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -o - | llvm-cxxfilt -n | FileCheck %s --check-prefixes=CHECK-P8,CHECK,CHECK-BE19// RUN: %clang -S -emit-llvm -target powerpc64le-unknown-freebsd13.0 -mcpu=pwr8 -DNO_WARN_X86_INTRINSICS %s \20// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -o - | llvm-cxxfilt -n | FileCheck %s --check-prefixes=CHECK-P8,CHECK,CHECK-LE21// RUN: %clang -S -emit-llvm -target powerpc64-unknown-freebsd13.0 -mcpu=pwr9 -DNO_WARN_X86_INTRINSICS %s \22// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -o - | llvm-cxxfilt -n | FileCheck %s --check-prefixes=CHECK-P9,CHECK,CHECK-BE23// RUN: %clang -S -emit-llvm -target powerpc64le-unknown-freebsd13.0 -mcpu=pwr9 -DNO_WARN_X86_INTRINSICS %s \24// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -o - | llvm-cxxfilt -n| FileCheck %s --check-prefixes=CHECK-P9,CHECK,CHECK-LE25 26// RUN: %clang -S -emit-llvm -target powerpc64-ibm-aix -mcpu=pwr8 -DNO_WARN_X86_INTRINSICS %s \27// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -o - | llvm-cxxfilt -n | FileCheck %s --check-prefixes=CHECK-P8,CHECK,CHECK-BE28// RUN: %clang -S -emit-llvm -target powerpc64-ibm-aix -mcpu=pwr9 -DNO_WARN_X86_INTRINSICS %s \29// RUN: -fno-discard-value-names -mllvm -disable-llvm-optzns -o - | llvm-cxxfilt -n | FileCheck %s --check-prefixes=CHECK-P9,CHECK,CHECK-BE30 31#include <mmintrin.h>32 33unsigned long long int ull1, ull2;34int i1, i2;35short s[4];36signed char c[8];37long long int ll1;38__m64 m1, m2, res;39 40void __attribute__((noinline))41test_add() {42 res = _mm_add_pi32(m1, m2);43 res = _mm_add_pi16(m1, m2);44 res = _mm_add_pi8(m1, m2);45 res = _mm_adds_pu16(m1, m2);46 res = _mm_adds_pu8(m1, m2);47 res = _mm_adds_pi16(m1, m2);48 res = _mm_adds_pi8(m1, m2);49}50 51// CHECK-LABEL: @test_add52 53// CHECK-LABEL: define available_externally i64 @_mm_add_pi3254// CHECK-P9: call <2 x i64> @vec_splats(unsigned long long)55// CHECK-P9: call <2 x i64> @vec_splats(unsigned long long)56// CHECK-P9: call <4 x i32> @vec_add(int vector[4], int vector[4])57// CHECK-P8: add nsw i32 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}58// CHECK-P8: add nsw i32 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}59 60// CHECK-LABEL: define available_externally i64 @_mm_add_pi1661// CHECK: call <2 x i64> @vec_splats62// CHECK: call <2 x i64> @vec_splats63// CHECK: call <8 x i16> @vec_add(short vector[8], short vector[8])64 65// CHECK-LABEL: define available_externally i64 @_mm_add_pi866// CHECK: call <2 x i64> @vec_splats67// CHECK: call <2 x i64> @vec_splats68// CHECK: call <16 x i8> @vec_add(signed char vector[16], signed char vector[16])69 70// CHECK-LABEL: define available_externally i64 @_mm_adds_pu1671// CHECK: call <2 x i64> @vec_splats72// CHECK: call <2 x i64> @vec_splats73// CHECK: call <8 x i16> @vec_adds(unsigned short vector[8], unsigned short vector[8])74 75// CHECK-LABEL: define available_externally i64 @_mm_adds_pu876// CHECK: call <2 x i64> @vec_splats77// CHECK: call <2 x i64> @vec_splats78// CHECK: call <16 x i8> @vec_adds(unsigned char vector[16], unsigned char vector[16])79 80// CHECK-LABEL: define available_externally i64 @_mm_adds_pi1681// CHECK: call <2 x i64> @vec_splats82// CHECK: call <2 x i64> @vec_splats83// CHECK: call <8 x i16> @vec_adds(short vector[8], short vector[8])84 85// CHECK-LABEL: define available_externally i64 @_mm_adds_pi886// CHECK: call <2 x i64> @vec_splats87// CHECK: call <2 x i64> @vec_splats88// CHECK: call <16 x i8> @vec_adds(signed char vector[16], signed char vector[16])89 90void __attribute__((noinline))91test_alt_name_add() {92 res = _m_paddb(m1, m2);93 res = _m_paddd(m1, m2);94 res = _m_paddsb(m1, m2);95 res = _m_paddsw(m1, m2);96 res = _m_paddusb(m1, m2);97 res = _m_paddusw(m1, m2);98 res = _m_paddw(m1, m2);99}100 101// CHECK-LABEL: @test_alt_name_add102 103// CHECK-LABEL: define available_externally i64 @_m_paddb104// CHECK: call i64 @_mm_add_pi8105 106// CHECK-LABEL: define available_externally i64 @_m_paddd107// CHECK: call i64 @_mm_add_pi32108 109// CHECK-LABEL: define available_externally i64 @_m_paddsb110// CHECK: call i64 @_mm_adds_pi8111 112// CHECK-LABEL: define available_externally i64 @_m_paddsw113// CHECK: call i64 @_mm_adds_pi16114 115// CHECK-LABEL: define available_externally i64 @_m_paddusb116// CHECK: call i64 @_mm_adds_pu8117 118// CHECK-LABEL: define available_externally i64 @_m_paddusw119// CHECK: call i64 @_mm_adds_pu16120 121// CHECK-LABEL: define available_externally i64 @_m_paddw122// CHECK: call i64 @_mm_add_pi16123 124void __attribute__((noinline))125test_cmp() {126 res = _mm_cmpeq_pi32(m1, m2);127 res = _mm_cmpeq_pi16(m1, m2);128 res = _mm_cmpeq_pi8(m1, m2);129 res = _mm_cmpgt_pi32(m1, m2);130 res = _mm_cmpgt_pi16(m1, m2);131 res = _mm_cmpgt_pi8(m1, m2);132}133 134// CHECK-LABEL: @test_cmp135 136// CHECK-LABEL: define available_externally i64 @_mm_cmpeq_pi32137// CHECK-P9: call <2 x i64> @vec_splats(unsigned long long)138// CHECK-P9: call <2 x i64> @vec_splats(unsigned long long)139// CHECK-P9: call <4 x i32> @vec_cmpeq(int vector[4], int vector[4])140// CHECK-P8: %[[CMP1:[0-9a-zA-Z_.]+]] = icmp eq i32 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}141// CHECK-P8: select i1 %[[CMP1]], i32 -1, i32 0142// CHECK-P8: %[[CMP2:[0-9a-zA-Z_.]+]] = icmp eq i32 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}143// CHECK-P8: select i1 %[[CMP2]], i32 -1, i32 0144 145// CHECK-LABEL: define available_externally i64 @_mm_cmpeq_pi16146// CHECK: call <2 x i64> @vec_splats(unsigned long long)147// CHECK: call <2 x i64> @vec_splats(unsigned long long)148// CHECK: call <8 x i16> @vec_cmpeq(short vector[8], short vector[8])149 150// CHECK-LABEL: define available_externally i64 @_mm_cmpeq_pi8151// CHECK: call i64 asm "cmpb $0,$1,$2;\0A", "=r,r,r"152 153// CHECK-LABEL: define available_externally i64 @_mm_cmpgt_pi32154// CHECK-P9: call <2 x i64> @vec_splats(unsigned long long)155// CHECK-P9: call <2 x i64> @vec_splats(unsigned long long)156// CHECK-P9: call <4 x i32> @vec_cmpgt(int vector[4], int vector[4])157// CHECK-P8: %[[CMP1:[0-9a-zA-Z_.]+]] = icmp sgt i32 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}158// CHECK-P8: select i1 %[[CMP1]], i32 -1, i32 0159// CHECK-P8: [[CMP2:[0-9a-zA-Z_.]+]] = icmp sgt i32 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}160// CHECK-P8: select i1 %[[CMP2]], i32 -1, i32 0161 162// CHECK-LABEL: define available_externally i64 @_mm_cmpgt_pi16163// CHECK: call <2 x i64> @vec_splats(unsigned long long)164// CHECK: call <2 x i64> @vec_splats(unsigned long long)165// CHECK: call <8 x i16> @vec_cmpgt(short vector[8], short vector[8])166 167// CHECK-LABEL: define available_externally i64 @_mm_cmpgt_pi8168// CHECK: call <2 x i64> @vec_splats(unsigned long long)169// CHECK: call <2 x i64> @vec_splats(unsigned long long)170// CHECK: call <16 x i8> @vec_cmpgt(signed char vector[16], signed char vector[16])171 172void __attribute__((noinline))173test_alt_name_cmp() {174 res = _m_pcmpeqb(m1, m2);175 res = _m_pcmpeqd(m1, m2);176 res = _m_pcmpeqw(m1, m2);177 res = _m_pcmpgtb(m1, m2);178 res = _m_pcmpgtd(m1, m2);179 res = _m_pcmpgtw(m1, m2);180}181 182// CHECK-LABEL: @test_alt_name_cmp183 184// CHECK-LABEL: define available_externally i64 @_m_pcmpeqb185// CHECK: call i64 @_mm_cmpeq_pi8186 187// CHECK-LABEL: define available_externally i64 @_m_pcmpeqd188// CHECK: call i64 @_mm_cmpeq_pi32189 190// CHECK-LABEL: define available_externally i64 @_m_pcmpeqw191// CHECK: call i64 @_mm_cmpeq_pi16192 193// CHECK-LABEL: define available_externally i64 @_m_pcmpgtb194// CHECK: call i64 @_mm_cmpgt_pi8195 196// CHECK-LABEL: define available_externally i64 @_m_pcmpgtd197// CHECK: call i64 @_mm_cmpgt_pi32198 199// CHECK-LABEL: define available_externally i64 @_m_pcmpgtw200// CHECK: call i64 @_mm_cmpgt_pi16201 202void __attribute__((noinline))203test_convert() {204 ll1 = _mm_cvtm64_si64(m1);205 m1 = _mm_cvtsi32_si64(i1);206 m1 = _mm_cvtsi64_m64(ll1);207 i1 = _mm_cvtsi64_si32(m1);208}209 210// CHECK-LABEL: @test_convert211 212// CHECK-LABEL: define available_externally i64 @_mm_cvtm64_si64213// CHECK: %[[RESULT:[0-9a-zA-Z_.]+]] = load i64, ptr %{{[0-9a-zA-Z_.]+}}, align 8214// CHECK-NEXT: ret i64 %[[RESULT]]215 216// CHECK-LABEL: define available_externally i64 @_mm_cvtsi32_si64217// CHECK: %[[LOAD:[0-9a-zA-Z_.]+]] = load i32, ptr %{{[0-9a-zA-Z_.]+}}218// CHECK-NEXT: %[[RESULT:[0-9a-zA-Z_.]+]] = zext i32 %[[LOAD]] to i64219// CHECK-NEXT: ret i64 %[[RESULT]]220 221// CHECK-LABEL: define available_externally i64 @_mm_cvtsi64_m64222// CHECK: %[[RESULT:[0-9a-zA-Z_.]+]] = load i64, ptr %{{[0-9a-zA-Z_.]+}}, align 8223// CHECK-NEXT: ret i64 %[[RESULT]]224 225// CHECK-LABEL: define available_externally signext i32 @_mm_cvtsi64_si32226// CHECK: %[[LOAD:[0-9a-zA-Z_.]+]] = load i64, ptr %{{[0-9a-zA-Z_.]+}}, align 8227// CHECK-NEXT: %[[RESULT:[0-9a-zA-Z_.]+]] = trunc i64 %[[LOAD]] to i32228// CHECK-NEXT: ret i32 %[[RESULT]]229 230void __attribute__((noinline))231test_alt_name_convert() {232 m1 = _m_from_int(i1);233 m1 = _m_from_int64(ll1);234 i1 = _m_to_int(m1);235 ll1 = _m_to_int64(m1);236}237 238// CHECK-LABEL: @test_alt_name_convert239 240// CHECK-LABEL: define available_externally i64 @_m_from_int241// CHECK: call i64 @_mm_cvtsi32_si64242 243// CHECK-LABEL: define available_externally i64 @_m_from_int64244// CHECK: %[[RESULT:[0-9a-zA-Z_.]+]] = load i64, ptr %{{[0-9a-zA-Z_.]+}}245// CHECK-NEXT: ret i64 %[[RESULT]]246 247// CHECK-LABEL: define available_externally signext i32 @_m_to_int248// CHECK: call signext i32 @_mm_cvtsi64_si32249 250// CHECK-LABEL: define available_externally i64 @_m_to_int64251// CHECK: %[[RESULT:[0-9a-zA-Z_.]+]] = load i64, ptr %{{[0-9a-zA-Z_.]+}}252// CHECK-NEXT: ret i64 %[[RESULT]]253 254void __attribute__((noinline))255test_empty() {256 _mm_empty();257 _m_empty();258}259 260// CHECK-LABEL: @test_empty261 262// CHECK-LABEL: define available_externally void @_mm_empty263// CHECK-NEXT: entry264// CHECK-NEXT: ret void265 266// CHECK-LABEL: define available_externally void @_m_empty267// CHECK-NEXT: entry268// CHECK-NEXT: ret void269 270void __attribute__((noinline))271test_logic() {272 res = _mm_and_si64(m1, m2);273 res = _mm_andnot_si64(m1, m2);274 res = _mm_or_si64(m1, m2);275 res = _mm_xor_si64(m1, m2);276}277 278// CHECK-LABEL: @test_logic279 280// CHECK-LABEL: define available_externally i64 @_mm_and_si64281// CHECK: and i64 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}282 283// CHECK-LABEL: define available_externally i64 @_mm_andnot_si64284// CHECK: %[[XOR:[0-9a-zA-Z_.]+]] = xor i64 %{{[0-9a-zA-Z_.]+}}, -1285// CHECK: and i64 %[[XOR]], %{{[0-9a-zA-Z_.]+}}286 287// CHECK-LABEL: define available_externally i64 @_mm_or_si64288// CHECK: or i64 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}289 290// CHECK-LABEL: define available_externally i64 @_mm_xor_si64291// CHECK: xor i64 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}292 293void __attribute__((noinline))294test_alt_name_logic() {295 res = _m_pand(m1, m2);296 res = _m_pandn(m1, m2);297 res = _m_por(m1, m2);298 res = _m_pxor(m1, m2);299}300 301// CHECK-LABEL: @test_alt_name_logic302 303// CHECK-LABEL: define available_externally i64 @_m_pand304// CHECK: call i64 @_mm_and_si64305 306// CHECK-LABEL: define available_externally i64 @_m_pandn307// CHECK: call i64 @_mm_andnot_si64308 309// CHECK-LABEL: define available_externally i64 @_m_por310// CHECK: call i64 @_mm_or_si64311 312// CHECK-LABEL: define available_externally i64 @_m_pxor313// CHECK: call i64 @_mm_xor_si64314 315void __attribute__((noinline))316test_madd() {317 res = _mm_madd_pi16(m1, m2);318 res = _m_pmaddwd(m1, m2);319}320 321// CHECK-LABEL: @test_madd322 323// CHECK-LABEL: define available_externally i64 @_mm_madd_pi16324// CHECK: call <2 x i64> @vec_splats(unsigned long long)325// CHECK: call <2 x i64> @vec_splats(unsigned long long)326// CHECK: call <4 x i32> @vec_vmsumshm327 328// CHECK-LABEL: define available_externally i64 @_m_pmaddwd329// CHECK: call i64 @_mm_madd_pi16330 331void __attribute__((noinline))332test_mul() {333 res = _mm_mulhi_pi16(m1, m2);334 res = _mm_mullo_pi16(m1, m2);335}336 337// CHECK-LABEL: @test_mul338 339// CHECK-LABEL: define available_externally i64 @_mm_mulhi_pi16340// CHECK-BE: store <16 x i8> <i8 0, i8 1, i8 16, i8 17, i8 4, i8 5, i8 20, i8 21, i8 0, i8 1, i8 16, i8 17, i8 4, i8 5, i8 20, i8 21>341// CHECK-LE: store <16 x i8> <i8 2, i8 3, i8 18, i8 19, i8 6, i8 7, i8 22, i8 23, i8 10, i8 11, i8 26, i8 27, i8 14, i8 15, i8 30, i8 31>342// CHECK: call <2 x i64> @vec_splats(unsigned long long)343// CHECK: call <2 x i64> @vec_splats(unsigned long long)344// CHECK: call <4 x i32> @vec_vmulesh345// CHECK: call <4 x i32> @vec_vmulosh346// CHECK: call <4 x i32> @vec_perm(int vector[4], int vector[4], unsigned char vector[16])347 348// CHECK-LABEL: define available_externally i64 @_mm_mullo_pi16349// CHECK: call <2 x i64> @vec_splats(unsigned long long)350// CHECK: call <2 x i64> @vec_splats(unsigned long long)351// CHECK: mul <8 x i16> %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}352 353void __attribute__((noinline))354test_alt_name_mul() {355 res = _m_pmulhw(m1, m2);356 res = _m_pmullw(m1, m2);357}358 359// CHECK-LABEL: @test_alt_name_mul360 361// CHECK-LABEL: define available_externally i64 @_m_pmulhw362// CHECK: call i64 @_mm_mulhi_pi16363 364// CHECK-LABEL: define available_externally i64 @_m_pmullw365// CHECK: call i64 @_mm_mullo_pi16366 367void __attribute__((noinline))368test_packs() {369 res = _mm_packs_pu16((__m64)ull1, (__m64)ull2);370 res = _mm_packs_pi16((__m64)ull1, (__m64)ull2);371 res = _mm_packs_pi32((__m64)ull1, (__m64)ull2);372}373 374// CHECK-LABEL: @test_packs375 376// CHECK-LABEL: define available_externally i64 @_mm_packs_pu16377// CHECK: call <8 x i16> @vec_cmplt378// CHECK: call <16 x i8> @vec_packs(unsigned short vector[8], unsigned short vector[8])379// CHECK: call <16 x i8> @vec_pack(bool vector[8], bool vector[8])380// CHECK: call <16 x i8> @vec_sel(unsigned char vector[16], unsigned char vector[16], bool vector[16])(<16 x i8> noundef %{{[0-9a-zA-Z_.]+}}, <16 x i8> noundef zeroinitializer, <16 x i8> noundef %{{[0-9a-zA-Z_.]+}})381 382// CHECK-LABEL: define available_externally i64 @_mm_packs_pi16383// CHECK: call <16 x i8> @vec_packs(short vector[8], short vector[8])384 385// CHECK-LABEL: define available_externally i64 @_mm_packs_pi32386// CHECK: call <8 x i16> @vec_packs(int vector[4], int vector[4])387 388void __attribute__((noinline))389test_alt_name_packs() {390 res = _m_packssdw(m1, m2);391 res = _m_packsswb(m1, m2);392 res = _m_packuswb(m1, m2);393}394 395// CHECK-LABEL: @test_alt_name_packs396 397// CHECK-LABEL: define available_externally i64 @_m_packssdw398// CHECK: call i64 @_mm_packs_pi32399 400// CHECK-LABEL: define available_externally i64 @_m_packsswb401// CHECK: call i64 @_mm_packs_pi16402 403// CHECK-LABEL: define available_externally i64 @_m_packuswb404// CHECK: call i64 @_mm_packs_pu16405 406void __attribute__((noinline))407test_set() {408 m1 = _mm_set_pi32(2134, -128);409 m1 = _mm_set_pi16(2134, -128, 1234, 6354);410 m1 = _mm_set_pi8(-128, 10, 0, 123, -1, -5, 127, 5);411}412 413// CHECK-LABEL: @test_set414 415// CHECK-LABEL: define available_externally i64 @_mm_set_pi32416// CHECK-COUNT-2: store i32 %{{[0-9a-zA-Z_.]+}}, ptr417 418// CHECK-LABEL: define available_externally i64 @_mm_set_pi16419// CHECK-COUNT-4: store i16 %{{[0-9a-zA-Z_.]+}}, ptr420 421// CHECK-LABEL: define available_externally i64 @_mm_set_pi8422// CHECK-COUNT-8: store i8 %{{[0-9a-zA-Z_.]+}}, ptr423 424void __attribute__((noinline))425test_set1() {426 res = _mm_set1_pi32(i1);427 res = _mm_set1_pi16(s[0]);428 res = _mm_set1_pi8(c[0]);429}430 431// CHECK-LABEL: @test_set1432 433// CHECK-LABEL: define available_externally i64 @_mm_set1_pi32434// CHECK-COUNT-2: store i32 %{{[0-9a-zA-Z_.]+}}, ptr435 436// CHECK-LABEL: define available_externally i64 @_mm_set1_pi16437// CHECK-P9: call <8 x i16> @vec_splats(short)438// CHECK-P9: extractelement <2 x i64> %{{[0-9a-zA-Z_.]+}}, i32 0439// CHECK-P8: %[[ADDR1:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 0440// CHECK-P8: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR1]], align 8441// CHECK-P8: %[[ADDR2:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 1442// CHECK-P8: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR2]], align 2443// CHECK-P8: %[[ADDR3:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 2444// CHECK-P8: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR3]], align 4445// CHECK-P8: %[[ADDR4:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 3446// CHECK-P8: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR4]], align 2447 448 449// CHECK-LABEL: define available_externally i64 @_mm_set1_pi8450// CHECK: call <16 x i8> @vec_splats(signed char)451// CHECK: %[[CAST:[0-9a-zA-Z_.]+]] = bitcast <16 x i8> %{{[0-9a-zA-Z_.]+}} to <2 x i64>452// CHECK: extractelement <2 x i64> %[[CAST]], i32 0453 454void __attribute__((noinline))455test_setr() {456 res = _mm_setr_pi32(i1, i2);457 res = _mm_setr_pi16(s[0], s[1], s[2], s[3]);458 res = _mm_setr_pi8(c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7]);459}460 461// CHECK-LABEL: @test_setr462 463// CHECK-LABEL: define available_externally i64 @_mm_setr_pi32464// CHECK: %[[ADDR1:[0-9a-zA-Z_.]+]] = getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 0465// CHECK: store i32 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR1]], align 8466// CHECK: %[[ADDR2:[0-9a-zA-Z_.]+]] = getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 1467// CHECK: store i32 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR2]], align 4468 469// CHECK-LABEL: define available_externally i64 @_mm_setr_pi16470// CHECK: call i64 @_mm_set_pi16471 472// CHECK-LABEL: define available_externally i64 @_mm_setr_pi8473// CHECK: call i64 @_mm_set_pi8474 475void __attribute__((noinline))476test_setzero() {477 res = _mm_setzero_si64();478}479 480// CHECK-LABEL: @test_setzero481 482// CHECK-LABEL: define available_externally i64 @_mm_setzero_si64483// CHECK: entry484// CHECK-NEXT: ret i64 0485 486void __attribute__((noinline))487test_sll() {488 res = _mm_sll_pi16(m1, m2);489 res = _mm_sll_pi32(m1, m2);490 res = _mm_sll_si64(m1, m2);491 res = _mm_slli_pi16(m1, i1);492 res = _mm_slli_pi32(m1, i1);493 res = _mm_slli_si64(m1, i1);494}495 496// CHECK-LABEL: @test_sll497 498// CHECK-LABEL: define available_externally i64 @_mm_sll_pi16499// CHECK: %[[CMP:[0-9a-zA-Z_.]+]] = icmp ule i64 %{{[0-9a-zA-Z_.]+}}, 15500// CHECK-NEXT: br i1 %[[CMP]]501// CHECK: call <2 x i64> @vec_splats(unsigned long long)502// CHECK: trunc i64 %{{[0-9a-zA-Z_.]+}} to i16503// CHECK: call <8 x i16> @vec_splats(unsigned short)504// CHECK: call <8 x i16> @vec_sl(short vector[8], unsigned short vector[8])505// CHECK: store i64 0, ptr506 507// CHECK-LABEL: define available_externally i64 @_mm_sll_pi32508// CHECK: %[[TRUNC:[0-9a-zA-Z_.]+]] = trunc i64 %{{[0-9a-zA-Z_.]+}} to i32509// CHECK: shl i32 %{{[0-9a-zA-Z_.]+}}, %[[TRUNC]]510// CHECK: trunc i64 %{{[0-9a-zA-Z_.]+}} to i32511// CHECK: shl i32 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}512 513// CHECK-LABEL: define available_externally i64 @_mm_sll_si64514// CHECK: shl i64 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}515 516// CHECK-LABEL: define available_externally i64 @_mm_slli_pi16517// CHECK: %[[EXT:[0-9a-zA-Z_.]+]] = sext i32 %{{[0-9a-zA-Z_.]+}} to i64518// CHECK: call i64 @_mm_sll_pi16(i64 noundef %{{[0-9a-zA-Z_.]+}}, i64 noundef %[[EXT]])519 520// CHECK-LABEL: define available_externally i64 @_mm_slli_pi32521// CHECK: %[[EXT:[0-9a-zA-Z_.]+]] = sext i32 %{{[0-9a-zA-Z_.]+}} to i64522// CHECK: call i64 @_mm_sll_pi32(i64 noundef %{{[0-9a-zA-Z_.]+}}, i64 noundef %[[EXT]])523 524// CHECK-LABEL: define available_externally i64 @_mm_slli_si64525// CHECK: %[[EXT:[0-9a-zA-Z_.]+]] = zext i32 %{{[0-9a-zA-Z_.]+}} to i64526// CHECK: shl i64 %{{[0-9a-zA-Z_.]+}}, %[[EXT]]527 528void __attribute__((noinline))529test_alt_name_sll() {530 res = _m_pslld(m1, m2);531 res = _m_pslldi(m1, i1);532 res = _m_psllq(m1, m2);533 res = _m_psllqi(m1, i1);534 res = _m_psllw(m1, m2);535 res = _m_psllwi(m1, i1);536}537 538// CHECK-LABEL: @test_alt_name_sll539 540// CHECK-LABEL: define available_externally i64 @_m_pslld541// CHECK: call i64 @_mm_sll_pi32542 543// CHECK-LABEL: define available_externally i64 @_m_pslldi544// CHECK: call i64 @_mm_slli_pi32545 546// CHECK-LABEL: define available_externally i64 @_m_psllq547// CHECK: call i64 @_mm_sll_si64548 549// CHECK-LABEL: define available_externally i64 @_m_psllqi550// CHECK: call i64 @_mm_slli_si64551 552// CHECK-LABEL: define available_externally i64 @_m_psllw553// CHECK: call i64 @_mm_sll_pi16554 555// CHECK-LABEL: define available_externally i64 @_m_psllwi556// CHECK: call i64 @_mm_slli_pi16557 558void __attribute__((noinline))559test_sra() {560 res = _mm_sra_pi32(m1, m2);561 res = _mm_sra_pi16(m1, m2);562 res = _mm_srai_pi32(m1, i1);563 res = _mm_srai_pi16(m1, i1);564}565 566// CHECK-LABEL: @test_sra567 568// CHECK-LABEL: define available_externally i64 @_mm_sra_pi32569// CHECK: %[[TRUNC1:[0-9a-zA-Z_.]+]] = trunc i64 %{{[0-9a-zA-Z_.]+}} to i32570// CHECK: ashr i32 %{{[0-9a-zA-Z_.]+}}, %[[TRUNC1]]571// CHECK: %[[TRUNC2:[0-9a-zA-Z_.]+]] = trunc i64 %{{[0-9a-zA-Z_.]+}} to i32572// CHECK: ashr i32 %{{[0-9a-zA-Z_.]+}}, %[[TRUNC2]]573 574// CHECK-LABEL: define available_externally i64 @_mm_sra_pi16575// CHECK: %[[CMP:[0-9a-zA-Z_.]+]] = icmp ule i64 %{{[0-9a-zA-Z_.]+}}, 15576// CHECK: br i1 %[[CMP]]577// CHECK: call <2 x i64> @vec_splats(unsigned long long)578// CHECK: %[[TRUNC:[0-9a-zA-Z_.]+]] = trunc i64 %{{[0-9a-zA-Z_.]+}} to i16579// CHECK: call <8 x i16> @vec_splats(unsigned short)(i16 noundef zeroext %[[TRUNC]])580// CHECK: call <8 x i16> @vec_sra(short vector[8], unsigned short vector[8])581// CHECK: store i64 0, ptr582 583// CHECK-LABEL: define available_externally i64 @_mm_srai_pi32584// CHECK: %[[EXT:[0-9a-zA-Z_.]+]] = sext i32 %{{[0-9a-zA-Z_.]+}} to i64585// CHECK: call i64 @_mm_sra_pi32(i64 noundef %{{[0-9a-zA-Z_.]+}}, i64 noundef %[[EXT]])586 587// CHECK-LABEL: define available_externally i64 @_mm_srai_pi16588// CHECK: %[[EXT:[0-9a-zA-Z_.]+]] = sext i32 %{{[0-9a-zA-Z_.]+}} to i64589// CHECK: call i64 @_mm_sra_pi16(i64 noundef %{{[0-9a-zA-Z_.]+}}, i64 noundef %[[EXT]])590 591void __attribute__((noinline))592test_alt_name_sra() {593 res = _m_psrad(m1, m2);594 res = _m_psraw(m1, m2);595 res = _m_psradi(m1, i1);596 res = _m_psrawi(m1, i1);597}598 599// CHECK-LABEL: @test_alt_name_sra600 601// CHECK-LABEL: define available_externally i64 @_m_psrad602// CHECK: call i64 @_mm_sra_pi32603 604// CHECK-LABEL: define available_externally i64 @_m_psraw605// CHECK: call i64 @_mm_sra_pi16606 607// CHECK-LABEL: define available_externally i64 @_m_psradi608// CHECK: call i64 @_mm_srai_pi32609 610// CHECK-LABEL: define available_externally i64 @_m_psrawi611// CHECK: call i64 @_mm_srai_pi16612 613void __attribute__((noinline))614test_srl() {615 res = _mm_srl_si64(m1, m2);616 res = _mm_srl_pi32(m1, m2);617 res = _mm_srl_pi16(m1, m2);618 res = _mm_srli_si64(m1, i1);619 res = _mm_srli_pi32(m1, i1);620 res = _mm_srli_pi16(m1, i1);621}622 623// CHECK-LABEL: @test_srl624 625// CHECK-LABEL: define available_externally i64 @_mm_srl_si64626// CHECK: lshr i64 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}627 628// CHECK-LABEL: define available_externally i64 @_mm_srl_pi32629// CHECK: %[[TRUNC1:[0-9a-zA-Z_.]+]] = trunc i64 %{{[0-9a-zA-Z_.]+}} to i32630// CHECK: lshr i32 %{{[0-9a-zA-Z_.]+}}, %[[TRUNC1]]631// CHECK: %[[TRUNC2:[0-9a-zA-Z_.]+]] = trunc i64 %{{[0-9a-zA-Z_.]+}} to i32632// CHECK: lshr i32 %{{[0-9a-zA-Z_.]+}}, %[[TRUNC2]]633 634// CHECK-LABEL: define available_externally i64 @_mm_srl_pi16635// CHECK: %[[CMP:[0-9a-zA-Z_.]+]] = icmp ule i64 %{{[0-9a-zA-Z_.]+}}, 15636// CHECK: br i1 %[[CMP]]637// CHECK: call <2 x i64> @vec_splats(unsigned long long)638// CHECK: trunc i64 %{{[0-9a-zA-Z_.]+}} to i16639// CHECK: call <8 x i16> @vec_splats(unsigned short)640// CHECK: call <8 x i16> @vec_sr(unsigned short vector[8], unsigned short vector[8])641// CHECK: store i64 0, ptr %{{[0-9a-zA-Z_.]+}}, align 8642 643// CHECK-LABEL: define available_externally i64 @_mm_srli_si64644// CHECK: %[[EXT:[0-9a-zA-Z_.]+]] = zext i32 %{{[0-9a-zA-Z_.]+}} to i64645// CHECK: lshr i64 %{{[0-9a-zA-Z_.]+}}, %[[EXT]]646 647// CHECK-LABEL: define available_externally i64 @_mm_srli_pi32648// CHECK: %[[EXT:[0-9a-zA-Z_.]+]] = sext i32 %{{[0-9a-zA-Z_.]+}} to i64649// CHECK: call i64 @_mm_srl_pi32(i64 noundef %{{[0-9a-zA-Z_.]+}}, i64 noundef %[[EXT]])650 651// CHECK-LABEL: define available_externally i64 @_mm_srli_pi16652// CHECK: %[[EXT:[0-9a-zA-Z_.]+]] = sext i32 %{{[0-9a-zA-Z_.]+}} to i64653// CHECK: call i64 @_mm_srl_pi16(i64 noundef %{{[0-9a-zA-Z_.]+}}, i64 noundef %[[EXT]])654 655void __attribute__((noinline))656test_alt_name_srl() {657 res = _m_psrlq(m1, m2);658 res = _m_psrld(m1, m2);659 res = _m_psrlw(m1, m2);660 res = _m_psrlqi(m1, i1);661 res = _m_psrldi(m1, i1);662 res = _m_psrlwi(m1, i1);663}664 665// CHECK-LABEL: @test_alt_name_srl666 667// CHECK-LABEL: define available_externally i64 @_m_psrlq668// CHECK: call i64 @_mm_srl_si64669 670// CHECK-LABEL: define available_externally i64 @_m_psrld671// CHECK: call i64 @_mm_srl_pi32672 673// CHECK-LABEL: define available_externally i64 @_m_psrlw674// CHECK: call i64 @_mm_srl_pi16675 676// CHECK-LABEL: define available_externally i64 @_m_psrlqi677// CHECK: call i64 @_mm_srli_si64678 679// CHECK-LABEL: define available_externally i64 @_m_psrldi680// CHECK: call i64 @_mm_srli_pi32681 682// CHECK-LABEL: define available_externally i64 @_m_psrlwi683// CHECK: call i64 @_mm_srli_pi16684 685void __attribute__((noinline))686test_sub() {687 res = _mm_sub_pi32(m1, m2);688 res = _mm_sub_pi16(m1, m2);689 res = _mm_sub_pi8(m1, m2);690 res = _mm_subs_pi16(m1, m2);691 res = _mm_subs_pi8(m1, m2);692 res = _mm_subs_pu16(m1, m2);693 res = _mm_subs_pu8(m1, m2);694}695 696// CHECK-LABEL: @test_sub697 698// CHECK-LABEL: define available_externally i64 @_mm_sub_pi32699// CHECK-P8-COUNT-2: getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 0700// CHECK-P8: sub nsw i32 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}701// CHECK-P8-COUNT-2: getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 1702// CHECK-P8: sub nsw i32 %{{[0-9a-zA-Z_.]+}}, %{{[0-9a-zA-Z_.]+}}703// CHECK-P9: call <2 x i64> @vec_splats(unsigned long long)704// CHECK-P9: call <2 x i64> @vec_splats(unsigned long long)705// CHECK-P9: call <4 x i32> @vec_sub(int vector[4], int vector[4])706 707// CHECK-LABEL: define available_externally i64 @_mm_sub_pi16708// CHECK: call <2 x i64> @vec_splats(unsigned long long)709// CHECK: call <2 x i64> @vec_splats(unsigned long long)710// CHECK: call <8 x i16> @vec_sub(short vector[8], short vector[8])711 712// CHECK-LABEL: define available_externally i64 @_mm_sub_pi8713// CHECK: call <2 x i64> @vec_splats(unsigned long long)714// CHECK: call <2 x i64> @vec_splats(unsigned long long)715// CHECK: call <16 x i8> @vec_sub(signed char vector[16], signed char vector[16])716 717// CHECK-LABEL: define available_externally i64 @_mm_subs_pi16718// CHECK: call <2 x i64> @vec_splats(unsigned long long)719// CHECK: call <2 x i64> @vec_splats(unsigned long long)720// CHECK: call <8 x i16> @vec_subs(short vector[8], short vector[8])721 722// CHECK-LABEL: define available_externally i64 @_mm_subs_pi8723// CHECK: call <2 x i64> @vec_splats(unsigned long long)724// CHECK: call <2 x i64> @vec_splats(unsigned long long)725// CHECK: call <16 x i8> @vec_subs(signed char vector[16], signed char vector[16])726 727// CHECK-LABEL: define available_externally i64 @_mm_subs_pu16728// CHECK: call <2 x i64> @vec_splats(unsigned long long)729// CHECK: call <2 x i64> @vec_splats(unsigned long long)730// CHECK: call <8 x i16> @vec_subs(unsigned short vector[8], unsigned short vector[8])731 732// CHECK-LABEL: define available_externally i64 @_mm_subs_pu8733// CHECK: call <2 x i64> @vec_splats(unsigned long long)734// CHECK: call <2 x i64> @vec_splats(unsigned long long)735// CHECK: call <16 x i8> @vec_subs(unsigned char vector[16], unsigned char vector[16])736 737void __attribute__((noinline))738test_alt_name_sub() {739 res = _m_psubd(m1, m2);740 res = _m_psubw(m1, m2);741 res = _m_psubb(m1, m2);742 res = _m_psubsw(m1, m2);743 res = _m_psubsb(m1, m2);744 res = _m_psubusw(m1, m2);745 res = _m_psubusb(m1, m2);746}747 748// CHECK-LABEL: @test_alt_name_sub749 750// CHECK-LABEL: define available_externally i64 @_m_psubd751// CHECK: call i64 @_mm_sub_pi32752 753// CHECK-LABEL: define available_externally i64 @_m_psubw754// CHECK: call i64 @_mm_sub_pi16755 756// CHECK-LABEL: define available_externally i64 @_m_psubb757// CHECK: call i64 @_mm_sub_pi8758 759// CHECK-LABEL: define available_externally i64 @_m_psubsw760// CHECK: call i64 @_mm_subs_pi16761 762// CHECK-LABEL: define available_externally i64 @_m_psubsb763// CHECK: call i64 @_mm_subs_pi8764 765// CHECK-LABEL: define available_externally i64 @_m_psubusw766// CHECK: call i64 @_mm_subs_pu16767 768// CHECK-LABEL: define available_externally i64 @_m_psubusb769// CHECK: call i64 @_mm_subs_pu8770 771void __attribute__((noinline))772test_unpack() {773 res = _mm_unpackhi_pi32(m1, m2);774 res = _mm_unpackhi_pi16(m1, m2);775 res = _mm_unpackhi_pi8(m1, m2);776 res = _mm_unpacklo_pi32(m1, m2);777 res = _mm_unpacklo_pi16(m1, m2);778 res = _mm_unpacklo_pi8(m1, m2);779}780 781// CHECK-LABEL: @test_unpack782 783// CHECK-LABEL: define available_externally i64 @_mm_unpackhi_pi32784// CHECK: getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 1785// CHECK: %[[ADDR1:[0-9a-zA-Z_.]+]] = getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 0786// CHECK: store i32 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR1]], align 8787// CHECK: getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 1788// CHECK: %[[ADDR2:[0-9a-zA-Z_.]+]] = getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 1789// CHECK: store i32 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR2]], align 4790 791// CHECK-LABEL: define available_externally i64 @_mm_unpackhi_pi16792// CHECK: getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 2793// CHECK: %[[ADDR1:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 0794// CHECK: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR1]], align 8795// CHECK: getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 2796// CHECK: %[[ADDR2:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 1797// CHECK: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR2]], align 2798// CHECK: getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 3799// CHECK: %[[ADDR3:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 2800// CHECK: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR3]], align 4801// CHECK: getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 3802// CHECK: %[[ADDR4:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 3803// CHECK: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR4]], align 2804 805// CHECK-LABEL: define available_externally i64 @_mm_unpackhi_pi8806// CHECK: call <2 x i64> @vec_splats(unsigned long long)807// CHECK: call <2 x i64> @vec_splats(unsigned long long)808// CHECK: call <16 x i8> @vec_mergel(unsigned char vector[16], unsigned char vector[16])809 810// CHECK-LABEL: define available_externally i64 @_mm_unpacklo_pi32811// CHECK: getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 0812// CHECK: %[[ADDR1:[0-9a-zA-Z_.]+]] = getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 0813// CHECK: store i32 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR1]], align 8814// CHECK: getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 0815// CHECK: %[[ADDR2:[0-9a-zA-Z_.]+]] = getelementptr inbounds [2 x i32], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 1816// CHECK: store i32 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR2]], align 4817 818// CHECK-LABEL: define available_externally i64 @_mm_unpacklo_pi16819// CHECK: getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 0820// CHECK: %[[ADDR1:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 0821// CHECK: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR1]], align 8822// CHECK: getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 0823// CHECK: %[[ADDR2:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 1824// CHECK: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR2]], align 2825// CHECK: getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 1826// CHECK: %[[ADDR3:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 2827// CHECK: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR3]], align 4828// CHECK: getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 1829// CHECK: %[[ADDR4:[0-9a-zA-Z_.]+]] = getelementptr inbounds [4 x i16], ptr %{{[0-9a-zA-Z_.]+}}, i64 0, i64 3830// CHECK: store i16 %{{[0-9a-zA-Z_.]+}}, ptr %[[ADDR4]], align 2831 832// CHECK-LABEL: define available_externally i64 @_mm_unpacklo_pi8833// CHECK: call <2 x i64> @vec_splats(unsigned long long)834// CHECK: call <2 x i64> @vec_splats(unsigned long long)835// CHECK: call <16 x i8> @vec_mergel(unsigned char vector[16], unsigned char vector[16])836 837void __attribute__((noinline))838test_alt_name_unpack() {839 res = _m_punpckhdq(m1, m2);840 res = _m_punpckhwd(m1, m2);841 res = _m_punpckhbw(m1, m2);842 res = _m_punpckldq(m1, m2);843 res = _m_punpcklwd(m1, m2);844 res = _m_punpcklbw(m1, m2);845}846 847// CHECK-LABEL: @test_alt_name_unpack848 849// CHECK-LABEL: define available_externally i64 @_m_punpckhdq850// CHECK: call i64 @_mm_unpackhi_pi32851 852// CHECK-LABEL: define available_externally i64 @_m_punpckhwd853// CHECK: call i64 @_mm_unpackhi_pi16854 855// CHECK-LABEL: define available_externally i64 @_m_punpckhbw856// CHECK: call i64 @_mm_unpackhi_pi8857 858// CHECK-LABEL: define available_externally i64 @_m_punpckldq859// CHECK: call i64 @_mm_unpacklo_pi32860 861// CHECK-LABEL: define available_externally i64 @_m_punpcklwd862// CHECK: call i64 @_mm_unpacklo_pi16863 864// CHECK-LABEL: define available_externally i64 @_m_punpcklbw865// CHECK: call i64 @_mm_unpacklo_pi8866