brintos

brintos / llvm-project-archived public Read only

0
0
Text · 44.9 KiB · 435465e Raw
1346 lines · c
1// REQUIRES: powerpc-registered-target2// RUN: %clang_cc1 -flax-vector-conversions=none -target-feature +altivec -target-feature +isa-v207-instructions -target-feature +power8-vector -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck %s3// RUN: %clang_cc1 -flax-vector-conversions=none -target-feature +altivec -target-feature +isa-v207-instructions -target-feature +power8-vector -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK-LE4// RUN: not %clang_cc1 -target-feature +altivec -target-feature +vsx -triple powerpc64-unknown-unknown -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-PPC5// Added -target-feature +vsx above to avoid errors about "vector double" and to6// generate the correct errors for functions that are only overloaded with VSX7// (vec_cmpge, vec_cmple). Without this option, there is only one overload so8// it is selected.9#include <altivec.h>10 11void dummy() { }12signed int si;13signed long long sll;14unsigned long long ull;15signed __int128 sx;16unsigned __int128 ux;17double d;18vector signed char vsc = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 };19vector unsigned char vuc = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 };20vector bool char vbc = { 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1 };21 22vector signed short vss = { 0, 1, 2, 3, 4, 5, 6, 7 };23vector unsigned short vus = { 0, 1, 2, 3, 4, 5, 6, 7 };24vector bool short vbs = { 1, 1, 0, 0, 0, 0, 1, 1 };25 26vector signed int vsi = { -1, 2, -3, 4 };27vector unsigned int vui = { 1, 2, 3, 4 };28vector bool int vbi = {0, -1, -1, 0};29 30vector signed long long vsll = { 1, 2 };31vector unsigned long long vull = { 1, 2 };32vector bool long long vbll = { 1, 0 };33 34vector signed __int128 vsx = { 1 };35vector unsigned __int128 vux = { 1 };36 37vector float vfa = { 1.e-4f, -132.23f, -22.1, 32.00f };38vector float vfb = { 1.e-4f, -132.23f, -22.1, 32.00f };39vector double vda = { 1.e-11, -132.23e10 };40vector double vdb = { 1.e-11, -132.23e10 };41 42int res_i;43double res_d;44signed long long res_sll;45unsigned long long res_ull;46 47vector signed char res_vsc;48vector unsigned char res_vuc;49vector bool char res_vbc;50 51vector signed short res_vss;52vector unsigned short res_vus;53vector bool short res_vbs;54 55vector signed int res_vsi;56vector unsigned int res_vui;57vector bool int res_vbi;58 59vector signed long long res_vsll;60vector unsigned long long res_vull;61vector bool long long res_vbll;62 63vector signed __int128 res_vsx;64vector unsigned __int128 res_vux;65 66vector float res_vf;67vector double res_vd;68 69// CHECK-LABEL: define{{.*}} void @test170void test1() {71 72  /* vec_abs */73  res_vsll = vec_abs(vsll);74// CHECK: call <2 x i64> @llvm.ppc.altivec.vmaxsd(<2 x i64> %{{[0-9]*}}, <2 x i64>75// CHECK-LE: call <2 x i64> @llvm.ppc.altivec.vmaxsd(<2 x i64> %{{[0-9]*}}, <2 x i64>76// CHECK-PPC: error: call to 'vec_abs' is ambiguous77 78  /* vec_add */79  res_vsll = vec_add(vsll, vsll);80// CHECK: add <2 x i64>81// CHECK-LE: add <2 x i64>82 83  res_vull = vec_add(vull, vull);84// CHECK: add <2 x i64>85// CHECK-LE: add <2 x i64>86 87  res_vuc = vec_add_u128(vuc, vuc);88// CHECK: add <1 x i128>89// CHECK-LE: add <1 x i128>90 91  /* vec_addc */92  res_vsi = vec_addc(vsi, vsi);93// CHECK: @llvm.ppc.altivec.vaddcuw94// CHECK-LE: @llvm.ppc.altivec.vaddcuw95 96  res_vui = vec_addc(vui, vui);97// CHECK: @llvm.ppc.altivec.vaddcuw98// CHECK-LE: @llvm.ppc.altivec.vaddcuw99 100  res_vsx = vec_addc(vsx, vsx);101// CHECK: @llvm.ppc.altivec.vaddcuq102// CHECK-LE: @llvm.ppc.altivec.vaddcuq103 104  res_vux = vec_addc(vux, vux);105// CHECK: @llvm.ppc.altivec.vaddcuq106// CHECK-LE: @llvm.ppc.altivec.vaddcuq107 108  res_vuc = vec_addc_u128(vuc, vuc);109// CHECK: @llvm.ppc.altivec.vaddcuq110// CHECK-LE: @llvm.ppc.altivec.vaddcuq111 112  /* vec_adde */113  res_vsx = vec_adde(vsx, vsx, vsx);114// CHECK: @llvm.ppc.altivec.vaddeuqm115// CHECK-LE: @llvm.ppc.altivec.vaddeuqm116 117  res_vux = vec_adde(vux, vux, vux);118// CHECK: @llvm.ppc.altivec.vaddeuqm119// CHECK-LE: @llvm.ppc.altivec.vaddeuqm120 121  res_vuc = vec_adde_u128(vuc, vuc, vuc);122// CHECK: @llvm.ppc.altivec.vaddeuqm123// CHECK-LE: @llvm.ppc.altivec.vaddeuqm124 125  /* vec_addec */126  res_vsx = vec_addec(vsx, vsx, vsx);127// CHECK: @llvm.ppc.altivec.vaddecuq128// CHECK-LE: @llvm.ppc.altivec.vaddecuq129 130  res_vuc = vec_addec_u128(vuc, vuc, vuc);131// CHECK: @llvm.ppc.altivec.vaddecuq132// CHECK-LE: @llvm.ppc.altivec.vaddecuq133 134  /* vec_mergee */135  res_vbi = vec_mergee(vbi, vbi);136// CHECK: @llvm.ppc.altivec.vperm137// CHECK-LE: @llvm.ppc.altivec.vperm138 139  res_vsi = vec_mergee(vsi, vsi);140// CHECK: @llvm.ppc.altivec.vperm141// CHECK-LE: @llvm.ppc.altivec.vperm142 143  res_vui = vec_mergee(vui, vui);144// CHECK: @llvm.ppc.altivec.vperm145// CHECK-LE: @llvm.ppc.altivec.vperm146// CHECK-PPC: error: call to undeclared function 'vec_mergee'147 148  res_vbll = vec_mergee(vbll, vbll);149// CHECK: @llvm.ppc.altivec.vperm150// CHECK-LE: @llvm.ppc.altivec.vperm151 152  res_vsll = vec_mergee(vsll, vsll);153// CHECK: @llvm.ppc.altivec.vperm154// CHECK-LE: @llvm.ppc.altivec.vperm155 156  res_vull = vec_mergee(vull, vull);157// CHECK: @llvm.ppc.altivec.vperm158// CHECK-LE: @llvm.ppc.altivec.vperm159 160  res_vf = vec_mergee(vfa, vfa);161// CHECK: @llvm.ppc.altivec.vperm162// CHECK-LE: @llvm.ppc.altivec.vperm163 164  res_vd = vec_mergee(vda, vda);165// CHECK: @llvm.ppc.altivec.vperm166// CHECK-LE: @llvm.ppc.altivec.vperm167 168  /* vec_mergeo */169  res_vbi = vec_mergeo(vbi, vbi);170// CHECK: @llvm.ppc.altivec.vperm171// CHECK-LE: @llvm.ppc.altivec.vperm172 173  res_vsi = vec_mergeo(vsi, vsi);174// CHECK: @llvm.ppc.altivec.vperm175// CHECK-LE: @llvm.ppc.altivec.vperm176 177  res_vui = vec_mergeo(vui, vui);178// CHECK: @llvm.ppc.altivec.vperm179// CHECK-LE: @llvm.ppc.altivec.vperm180// CHECK-PPC: error: call to undeclared function 'vec_mergeo'181 182  /* vec_cmpeq */183  res_vbll = vec_cmpeq(vbll, vbll);184// CHECK: @llvm.ppc.altivec.vcmpequd185// CHECK-LE: @llvm.ppc.altivec.vcmpequd186 187  res_vbll = vec_cmpeq(vsll, vsll);188// CHECK: @llvm.ppc.altivec.vcmpequd189// CHECK-LE: @llvm.ppc.altivec.vcmpequd190 191  res_vbll = vec_cmpeq(vull, vull);192// CHECK: @llvm.ppc.altivec.vcmpequd193// CHECK-LE: @llvm.ppc.altivec.vcmpequd194 195  /* vec_cmpge */196  res_vbll = vec_cmpge(vsll, vsll);197// CHECK: @llvm.ppc.altivec.vcmpgtsd198// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd199 200  res_vbll = vec_cmpge(vull, vull);201// CHECK: @llvm.ppc.altivec.vcmpgtud202// CHECK-LE: @llvm.ppc.altivec.vcmpgtud203 204  /* vec_cmple */205  res_vbll = vec_cmple(vsll, vsll);206// CHECK: @llvm.ppc.altivec.vcmpgtsd207// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd208 209  res_vbll = vec_cmple(vull, vull);210// CHECK: @llvm.ppc.altivec.vcmpgtud211// CHECK-LE: @llvm.ppc.altivec.vcmpgtud212 213  /* vec_cmpgt */214  res_vbll = vec_cmpgt(vsll, vsll);215// CHECK: @llvm.ppc.altivec.vcmpgtsd216// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd217 218  res_vbll = vec_cmpgt(vull, vull);219// CHECK: @llvm.ppc.altivec.vcmpgtud220// CHECK-LE: @llvm.ppc.altivec.vcmpgtud221 222  /* vec_cmplt */223  res_vbll = vec_cmplt(vsll, vsll);224// CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %{{[0-9]*}}, <2 x i64> %{{[0-9]*}})225// CHECK-LE: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %{{[0-9]*}}, <2 x i64> %{{[0-9]*}})226 227  res_vbll = vec_cmplt(vull, vull);228// CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %{{[0-9]*}}, <2 x i64> %{{[0-9]*}})229// CHECK-LE: call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %{{[0-9]*}}, <2 x i64> %{{[0-9]*}})230 231  /* vec_eqv */232  res_vsc =  vec_eqv(vsc, vsc);233// CHECK: [[T1:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>234// CHECK: [[T2:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>235// CHECK: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])236// CHECK-LE: [[T1:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>237// CHECK-LE: [[T2:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>238// CHECK-LE: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])239// CHECK-LE: bitcast <4 x i32> [[T3]] to <16 x i8>240// CHECK-PPC: error: assigning to241 242  res_vbc =  vec_eqv(vbc, vbc);243// CHECK: [[T1:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>244// CHECK: [[T2:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>245// CHECK: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])246// CHECK-LE: [[T1:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>247// CHECK-LE: [[T2:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>248// CHECK-LE: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])249// CHECK-LE: bitcast <4 x i32> [[T3]] to <16 x i8>250// CHECK-PPC: error: assigning to251 252  res_vuc =  vec_eqv(vuc, vuc);253// CHECK: [[T1:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>254// CHECK: [[T2:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>255// CHECK: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])256// CHECK-LE: [[T1:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>257// CHECK-LE: [[T2:%.+]] = bitcast <16 x i8> {{.+}} to <4 x i32>258// CHECK-LE: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])259// CHECK-LE: bitcast <4 x i32> [[T3]] to <16 x i8>260// CHECK-PPC: error: assigning to261 262  res_vss =  vec_eqv(vss, vss);263// CHECK: [[T1:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>264// CHECK: [[T2:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>265// CHECK: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])266// CHECK-LE: [[T1:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>267// CHECK-LE: [[T2:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>268// CHECK-LE: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])269// CHECK-LE: bitcast <4 x i32> [[T3]] to <8 x i16>270// CHECK-PPC: error: assigning to271 272  res_vbs =  vec_eqv(vbs, vbs);273// CHECK: [[T1:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>274// CHECK: [[T2:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>275// CHECK: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])276// CHECK-LE: [[T1:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>277// CHECK-LE: [[T2:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>278// CHECK-LE: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])279// CHECK-LE: bitcast <4 x i32> [[T3]] to <8 x i16>280// CHECK-PPC: error: assigning to281 282  res_vus =  vec_eqv(vus, vus);283// CHECK: [[T1:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>284// CHECK: [[T2:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>285// CHECK: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])286// CHECK-LE: [[T1:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>287// CHECK-LE: [[T2:%.+]] = bitcast <8 x i16> {{.+}} to <4 x i32>288// CHECK-LE: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])289// CHECK-LE: bitcast <4 x i32> [[T3]] to <8 x i16>290// CHECK-PPC: error: assigning to291 292  res_vsi =  vec_eqv(vsi, vsi);293// CHECK: call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> {{.*}}, <4 x i32> {{.+}})294// CHECK-LE: call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> {{.*}}, <4 x i32> {{.+}})295// CHECK-PPC: error: assigning to296 297  res_vbi =  vec_eqv(vbi, vbi);298// CHECK: call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> {{.*}}, <4 x i32> {{.+}})299// CHECK-LE: call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> {{.*}}, <4 x i32> {{.+}})300// CHECK-PPC: error: assigning to301 302  res_vui =  vec_eqv(vui, vui);303// CHECK: call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> {{.*}}, <4 x i32> {{.+}})304// CHECK-LE: call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> {{.*}}, <4 x i32> {{.+}})305// CHECK-PPC: error: assigning to306 307  res_vsll =  vec_eqv(vsll, vsll);308// CHECK: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>309// CHECK: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>310// CHECK: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])311// CHECK-LE: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>312// CHECK-LE: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>313// CHECK-LE: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])314// CHECK-LE: bitcast <4 x i32> [[T3]] to <2 x i64>315// CHECK-PPC: error: assigning to316 317  res_vbll =  vec_eqv(vbll, vbll);318// CHECK: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>319// CHECK: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>320// CHECK: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])321// CHECK-LE: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>322// CHECK-LE: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>323// CHECK-LE: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])324// CHECK-LE: bitcast <4 x i32> [[T3]] to <2 x i64>325// CHECK-PPC: error: assigning to326 327  res_vull =  vec_eqv(vull, vull);328// CHECK: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>329// CHECK: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>330// CHECK: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])331// CHECK-LE: [[T1:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>332// CHECK-LE: [[T2:%.+]] = bitcast <2 x i64> {{.+}} to <4 x i32>333// CHECK-LE: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])334// CHECK-LE: bitcast <4 x i32> [[T3]] to <2 x i64>335// CHECK-PPC: error: assigning to336 337  res_vf = vec_eqv(vfa, vfa);338// CHECK: [[T1:%.+]] = bitcast <4 x float> {{.+}} to <4 x i32>339// CHECK: [[T2:%.+]] = bitcast <4 x float> {{.+}} to <4 x i32>340// CHECK: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])341// CHECK-LE: [[T1:%.+]] = bitcast <4 x float> {{.+}} to <4 x i32>342// CHECK-LE: [[T2:%.+]] = bitcast <4 x float> {{.+}} to <4 x i32>343// CHECK-LE: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])344// CHECK-LE: bitcast <4 x i32> [[T3]] to <4 x float>345// CHECK-PPC: error: assigning to346 347  res_vd = vec_eqv(vda, vda);348// CHECK: [[T1:%.+]] = bitcast <2 x double> {{.+}} to <4 x i32>349// CHECK: [[T2:%.+]] = bitcast <2 x double> {{.+}} to <4 x i32>350// CHECK: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])351// CHECK-LE: [[T1:%.+]] = bitcast <2 x double> {{.+}} to <4 x i32>352// CHECK-LE: [[T2:%.+]] = bitcast <2 x double> {{.+}} to <4 x i32>353// CHECK-LE: [[T3:%.+]] = call <4 x i32> @llvm.ppc.vsx.xxleqv(<4 x i32> [[T1]], <4 x i32> [[T2]])354// CHECK-LE: bitcast <4 x i32> [[T3]] to <2 x double>355// CHECK-PPC: error: assigning to356 357  /* vec_extract */358  res_sll = vec_extract(vsll, si);359// CHECK: extractelement <2 x i64>360// CHECK-LE: extractelement <2 x i64>361 362  res_ull = vec_extract(vull, si);363// CHECK: extractelement <2 x i64>364// CHECK-LE: extractelement <2 x i64>365 366  res_ull = vec_extract(vbll, si);367// CHECK: extractelement <2 x i64>368// CHECK-LE: extractelement <2 x i64>369 370  res_d = vec_extract(vda, si);371// CHECK: extractelement <2 x double>372// CHECK-LE: extractelement <2 x double>373 374  /* vec_insert */375  res_vsll = vec_insert(sll, vsll, si);376// CHECK: insertelement <2 x i64>377// CHECK-LE: insertelement <2 x i64>378 379  res_vbll = vec_insert(ull, vbll, si);380// CHECK: insertelement <2 x i64>381// CHECK-LE: insertelement <2 x i64>382 383  res_vull = vec_insert(ull, vull, si);384// CHECK: insertelement <2 x i64>385// CHECK-LE: insertelement <2 x i64>386 387  res_vd = vec_insert(d, vda, si);388// CHECK: insertelement <2 x double>389// CHECK-LE: insertelement <2 x double>390 391  /* vec_cntlz */392  res_vsc = vec_cntlz(vsc);393// CHECK: call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %{{.+}}, i1 false)394// CHECK-LE: call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %{{.+}}, i1 false)395// CHECK-PPC: error: call to undeclared function 'vec_cntlz'396 397  res_vuc = vec_cntlz(vuc);398// CHECK: call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %{{.+}}, i1 false)399// CHECK-LE: call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %{{.+}}, i1 false)400 401  res_vss = vec_cntlz(vss);402// CHECK: call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %{{.+}}, i1 false)403// CHECK-LE: call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %{{.+}}, i1 false)404 405  res_vus = vec_cntlz(vus);406// CHECK: call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %{{.+}}, i1 false)407// CHECK-LE: call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %{{.+}}, i1 false)408 409  res_vsi = vec_cntlz(vsi);410// CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.+}}, i1 false)411// CHECK-LE: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.+}}, i1 false)412 413  res_vui = vec_cntlz(vui);414// CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.+}}, i1 false)415// CHECK-LE: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.+}}, i1 false)416 417  res_vsll = vec_cntlz(vsll);418// CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.+}}, i1 false)419// CHECK-LE: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.+}}, i1 false)420 421  res_vull = vec_cntlz(vull);422// CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.+}}, i1 false)423// CHECK-LE: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.+}}, i1 false)424 425  /* ----------------------- predicates --------------------------- */426  res_i = vec_all_eq(vda, vda);427// CHECK: @llvm.ppc.vsx.xvcmpeqdp.p428// CHECK-LE: @llvm.ppc.vsx.xvcmpeqdp.p429 430  res_i = vec_all_eq(vfa, vfa);431// CHECK: @llvm.ppc.vsx.xvcmpeqsp.p432// CHECK-LE: @llvm.ppc.vsx.xvcmpeqsp.p433 434  dummy();435// CHECK: @dummy436 437  res_i = vec_all_ne(vda, vda);438// CHECK: @llvm.ppc.vsx.xvcmpeqdp.p439// CHECK-LE: @llvm.ppc.vsx.xvcmpeqdp.p440 441  dummy();442// CHECK: @dummy443 444  res_i = vec_all_ne(vfa, vfa);445// CHECK: @llvm.ppc.vsx.xvcmpeqsp.p446// CHECK-LE: @llvm.ppc.vsx.xvcmpeqsp.p447 448  dummy();449// CHECK: @dummy450 451  res_i = vec_all_nge(vda, vda);452// CHECK: @llvm.ppc.vsx.xvcmpgedp.p453// CHECK-LE: @llvm.ppc.vsx.xvcmpgedp.p454 455  res_i = vec_all_ngt(vda, vda);456// CHECK: @llvm.ppc.vsx.xvcmpgtdp.p457// CHECK-LE: @llvm.ppc.vsx.xvcmpgtdp.p458 459  res_i = vec_any_eq(vda, vda);460// CHECK: @llvm.ppc.vsx.xvcmpeqdp.p461// CHECK-LE: @llvm.ppc.vsx.xvcmpeqdp.p462 463  res_i = vec_any_eq(vfa, vfa);464// CHECK: @llvm.ppc.vsx.xvcmpeqsp.p465// CHECK-LE: @llvm.ppc.vsx.xvcmpeqsp.p466 467  res_i = vec_any_ne(vda, vda);468// CHECK: @llvm.ppc.vsx.xvcmpeqdp.p469// CHECK-LE: @llvm.ppc.vsx.xvcmpeqdp.p470 471  res_i = vec_any_ne(vfa, vfa);472// CHECK: @llvm.ppc.vsx.xvcmpeqsp.p473// CHECK-LE: @llvm.ppc.vsx.xvcmpeqsp.p474 475  res_i = vec_all_ge(vda, vda);476// CHECK: @llvm.ppc.vsx.xvcmpgedp.p477// CHECK-LE: @llvm.ppc.vsx.xvcmpgedp.p478 479  res_i = vec_all_ge(vfa, vfa);480// CHECK: @llvm.ppc.vsx.xvcmpgesp.p481// CHECK-LE: @llvm.ppc.vsx.xvcmpgesp.p482 483  res_i = vec_all_gt(vda, vda);484// CHECK: @llvm.ppc.vsx.xvcmpgtdp.p485// CHECK-LE: @llvm.ppc.vsx.xvcmpgtdp.p486 487  res_i = vec_all_gt(vfa, vfa);488// CHECK: @llvm.ppc.vsx.xvcmpgtsp.p489// CHECK-LE: @llvm.ppc.vsx.xvcmpgtsp.p490 491  res_i = vec_all_le(vda, vda);492// CHECK: @llvm.ppc.vsx.xvcmpgedp.p493// CHECK-LE: @llvm.ppc.vsx.xvcmpgedp.p494 495  res_i = vec_all_le(vfa, vfa);496// CHECK: @llvm.ppc.vsx.xvcmpgesp.p497// CHECK-LE: @llvm.ppc.vsx.xvcmpgesp.p498 499  res_i = vec_all_lt(vda, vda);500// CHECK: @llvm.ppc.vsx.xvcmpgtdp.p501// CHECK-LE: @llvm.ppc.vsx.xvcmpgtdp.p502 503  res_i = vec_all_lt(vfa, vfa);504// CHECK: @llvm.ppc.vsx.xvcmpgtsp.p505// CHECK-LE: @llvm.ppc.vsx.xvcmpgtsp.p506 507  res_i = vec_all_nan(vda);508// CHECK: @llvm.ppc.vsx.xvcmpeqdp.p509// CHECK-LE: @llvm.ppc.vsx.xvcmpeqdp.p510 511  res_i = vec_all_nan(vfa);512// CHECK: @llvm.ppc.vsx.xvcmpeqsp.p513// CHECK-LE: @llvm.ppc.vsx.xvcmpeqsp.p514 515  res_i = vec_any_ge(vda, vda);516// CHECK: @llvm.ppc.vsx.xvcmpgedp.p517// CHECK-LE: @llvm.ppc.vsx.xvcmpgedp.p518 519  res_i = vec_any_ge(vfa, vfa);520// CHECK: @llvm.ppc.vsx.xvcmpgesp.p521// CHECK-LE: @llvm.ppc.vsx.xvcmpgesp.p522 523  res_i = vec_any_gt(vda, vda);524// CHECK: @llvm.ppc.vsx.xvcmpgtdp.p525// CHECK-LE: @llvm.ppc.vsx.xvcmpgtdp.p526 527  res_i = vec_any_le(vda, vda);528// CHECK: @llvm.ppc.vsx.xvcmpgedp.p529// CHECK-LE: @llvm.ppc.vsx.xvcmpgedp.p530 531  res_i = vec_any_le(vfa, vfa);532// CHECK: @llvm.ppc.vsx.xvcmpgesp.p533// CHECK-LE: @llvm.ppc.vsx.xvcmpgesp.p534 535  res_i = vec_any_lt(vda, vda);536// CHECK: @llvm.ppc.vsx.xvcmpgtdp.p537// CHECK-LE: @llvm.ppc.vsx.xvcmpgtdp.p538 539  res_i = vec_any_lt(vfa, vfa);540// CHECK: @llvm.ppc.vsx.xvcmpgtsp.p541// CHECK-LE: @llvm.ppc.vsx.xvcmpgtsp.p542 543  /* vec_max */544  res_vsll = vec_max(vsll, vsll);545// CHECK: @llvm.ppc.altivec.vmaxsd546// CHECK-LE: @llvm.ppc.altivec.vmaxsd547// CHECK-PPC: error: call to 'vec_max' is ambiguous548 549  res_vsll = vec_max(vbll, vsll);550// CHECK: @llvm.ppc.altivec.vmaxsd551// CHECK-LE: @llvm.ppc.altivec.vmaxsd552// CHECK-PPC: error: call to 'vec_max' is ambiguous553 554  res_vsll = vec_max(vsll, vbll);555// CHECK: @llvm.ppc.altivec.vmaxsd556// CHECK-LE: @llvm.ppc.altivec.vmaxsd557// CHECK-PPC: error: call to 'vec_max' is ambiguous558 559  res_vull = vec_max(vull, vull);560// CHECK: @llvm.ppc.altivec.vmaxud561// CHECK-LE: @llvm.ppc.altivec.vmaxud562// CHECK-PPC: error: call to 'vec_max' is ambiguous563 564  res_vull = vec_max(vbll, vull);565// CHECK: @llvm.ppc.altivec.vmaxud566// CHECK-LE: @llvm.ppc.altivec.vmaxud567// CHECK-PPC: error: call to 'vec_max' is ambiguous568 569  res_vull = vec_max(vull, vbll);570// CHECK: @llvm.ppc.altivec.vmaxud571// CHECK-LE: @llvm.ppc.altivec.vmaxud572// CHECK-PPC: error: call to 'vec_max' is ambiguous573 574  /* vec_mergeh */575  res_vbll = vec_mergeh(vbll, vbll);576// CHECK: @llvm.ppc.altivec.vperm577// CHECK-LE: @llvm.ppc.altivec.vperm578 579  res_vbll = vec_mergel(vbll, vbll);580// CHECK: @llvm.ppc.altivec.vperm581// CHECK-LE: @llvm.ppc.altivec.vperm582 583  /* vec_min */584  res_vsll = vec_min(vsll, vsll);585// CHECK: @llvm.ppc.altivec.vminsd586// CHECK-LE: @llvm.ppc.altivec.vminsd587// CHECK-PPC: error: call to 'vec_min' is ambiguous588 589  res_vsll = vec_min(vbll, vsll);590// CHECK: @llvm.ppc.altivec.vminsd591// CHECK-LE: @llvm.ppc.altivec.vminsd592// CHECK-PPC: error: call to 'vec_min' is ambiguous593 594  res_vsll = vec_min(vsll, vbll);595// CHECK: @llvm.ppc.altivec.vminsd596// CHECK-LE: @llvm.ppc.altivec.vminsd597// CHECK-PPC: error: call to 'vec_min' is ambiguous598 599  res_vull = vec_min(vull, vull);600// CHECK: @llvm.ppc.altivec.vminud601// CHECK-LE: @llvm.ppc.altivec.vminud602// CHECK-PPC: error: call to 'vec_min' is ambiguous603 604  res_vull = vec_min(vbll, vull);605// CHECK: @llvm.ppc.altivec.vminud606// CHECK-LE: @llvm.ppc.altivec.vminud607// CHECK-PPC: error: call to 'vec_min' is ambiguous608 609  res_vull = vec_min(vull, vbll);610// CHECK: @llvm.ppc.altivec.vminud611// CHECK-LE: @llvm.ppc.altivec.vminud612// CHECK-PPC: error: call to 'vec_min' is ambiguous613 614  /* vec_mule */615  res_vsll = vec_mule(vsi, vsi);616// CHECK: @llvm.ppc.altivec.vmulesw617// CHECK-LE: @llvm.ppc.altivec.vmulosw618// CHECK-PPC: error: call to 'vec_mule' is ambiguous619 620  res_vull = vec_mule(vui , vui);621// CHECK: @llvm.ppc.altivec.vmuleuw622// CHECK-LE: @llvm.ppc.altivec.vmulouw623// CHECK-PPC: error: call to 'vec_mule' is ambiguous624 625  /* vec_mulo */626  res_vsll = vec_mulo(vsi, vsi);627// CHECK: @llvm.ppc.altivec.vmulosw628// CHECK-LE: @llvm.ppc.altivec.vmulesw629// CHECK-PPC: error: call to 'vec_mulo' is ambiguous630 631  res_vull = vec_mulo(vui, vui);632// CHECK: @llvm.ppc.altivec.vmulouw633// CHECK-LE: @llvm.ppc.altivec.vmuleuw634// CHECK-PPC: error: call to 'vec_mulo' is ambiguous635 636  /* vec_packs */637  res_vsi = vec_packs(vsll, vsll);638// CHECK: @llvm.ppc.altivec.vpksdss639// CHECK-LE: @llvm.ppc.altivec.vpksdss640// CHECK-PPC: error: call to 'vec_packs' is ambiguous641 642  res_vui = vec_packs(vull, vull);643// CHECK: @llvm.ppc.altivec.vpkudus644// CHECK-LE: @llvm.ppc.altivec.vpkudus645// CHECK-PPC: error: call to 'vec_packs' is ambiguous646 647  /* vec_packsu */648  res_vui = vec_packsu(vsll, vsll);649// CHECK: @llvm.ppc.altivec.vpksdus650// CHECK-LE: @llvm.ppc.altivec.vpksdus651// CHECK-PPC: error: call to 'vec_packsu' is ambiguous652 653  res_vui = vec_packsu(vull, vull);654// CHECK: @llvm.ppc.altivec.vpkudus655// CHECK-LE: @llvm.ppc.altivec.vpkudus656// CHECK-PPC: error: call to 'vec_packsu' is ambiguous657 658  /* vec_rl */659  res_vsll = vec_rl(vsll, vull);660// CHECK: @llvm.ppc.altivec.vrld661// CHECK-LE: @llvm.ppc.altivec.vrld662 663  res_vull = vec_rl(vull, vull);664// CHECK: @llvm.ppc.altivec.vrld665// CHECK-LE: @llvm.ppc.altivec.vrld666 667  /* vec_sl */668  res_vsll = vec_sl(vsll, vull);669// CHECK: shl <2 x i64>670// CHECK-LE: shl <2 x i64>671 672  res_vull = vec_sl(vull, vull);673// CHECK: shl <2 x i64>674// CHECK-LE: shl <2 x i64>675 676  /* vec_sr */677  res_vsll = vec_sr(vsll, vull);678// CHECK: [[UREM:[0-9a-zA-Z%.]+]] = urem <2 x i64> {{[0-9a-zA-Z%.]+}}, splat (i64 64)679// CHECK: lshr <2 x i64> {{[0-9a-zA-Z%.]+}}, [[UREM]]680// CHECK-LE: [[UREM:[0-9a-zA-Z%.]+]] = urem <2 x i64> {{[0-9a-zA-Z%.]+}}, splat (i64 64)681// CHECK-LE: lshr <2 x i64> {{[0-9a-zA-Z%.]+}}, [[UREM]]682 683  res_vull = vec_sr(vull, vull);684// CHECK: [[UREM:[0-9a-zA-Z%.]+]] = urem <2 x i64> {{[0-9a-zA-Z%.]+}}, splat (i64 64)685// CHECK: lshr <2 x i64> {{[0-9a-zA-Z%.]+}}, [[UREM]]686// CHECK-LE: [[UREM:[0-9a-zA-Z%.]+]] = urem <2 x i64> {{[0-9a-zA-Z%.]+}}, splat (i64 64)687// CHECK-LE: lshr <2 x i64> {{[0-9a-zA-Z%.]+}}, [[UREM]]688 689  /* vec_sra */690  res_vsll = vec_sra(vsll, vull);691// CHECK: ashr <2 x i64>692// CHECK-LE: ashr <2 x i64>693 694  res_vull = vec_sra(vull, vull);695// CHECK: ashr <2 x i64>696// CHECK-LE: ashr <2 x i64>697 698  /* vec_splats */699  res_vsll = vec_splats(sll);700// CHECK: insertelement <2 x i64>701// CHECK-LE: insertelement <2 x i64>702 703  res_vull = vec_splats(ull);704// CHECK: insertelement <2 x i64>705// CHECK-LE: insertelement <2 x i64>706 707  res_vsx = vec_splats(sx);708// CHECK: insertelement <1 x i128>709// CHECK-LE: insertelement <1 x i128>710 711  res_vux = vec_splats(ux);712// CHECK: insertelement <1 x i128>713// CHECK-LE: insertelement <1 x i128>714 715  res_vd = vec_splats(d);716// CHECK: insertelement <2 x double>717// CHECK-LE: insertelement <2 x double>718 719 720  /* vec_unpackh */721  res_vsll = vec_unpackh(vsi);722// CHECK: llvm.ppc.altivec.vupkhsw723// CHECK-LE: llvm.ppc.altivec.vupklsw724// CHECK-PPC: error: call to 'vec_unpackh' is ambiguous725 726  res_vbll = vec_unpackh(vbi);727// CHECK: llvm.ppc.altivec.vupkhsw728// CHECK-LE: llvm.ppc.altivec.vupklsw729// CHECK-PPC: error: call to 'vec_unpackh' is ambiguous730 731  /* vec_unpackl */732  res_vsll = vec_unpackl(vsi);733// CHECK: llvm.ppc.altivec.vupklsw734// CHECK-LE: llvm.ppc.altivec.vupkhsw735// CHECK-PPC: error: call to 'vec_unpackl' is ambiguous736 737  res_vbll = vec_unpackl(vbi);738// CHECK: llvm.ppc.altivec.vupklsw739// CHECK-LE: llvm.ppc.altivec.vupkhsw740// CHECK-PPC: error: call to 'vec_unpackl' is ambiguous741 742  /* vec_vpksdss */743  res_vsi = vec_vpksdss(vsll, vsll);744// CHECK: llvm.ppc.altivec.vpksdss745// CHECK-LE: llvm.ppc.altivec.vpksdss746// CHECK-PPC: error: call to undeclared function 'vec_vpksdss'747 748  /* vec_vpksdus */749  res_vui = vec_vpksdus(vsll, vsll);750// CHECK: llvm.ppc.altivec.vpksdus751// CHECK-LE: llvm.ppc.altivec.vpksdus752// CHECK-PPC: error: call to undeclared function 'vec_vpksdus'753 754  /* vec_vpkudum */755  res_vsi = vec_vpkudum(vsll, vsll);756// CHECK: vperm757// CHECK-LE: vperm758// CHECK-PPC: error: call to undeclared function 'vec_vpkudum'759 760  res_vui = vec_vpkudum(vull, vull);761// CHECK: vperm762// CHECK-LE: vperm763 764  res_vui = vec_vpkudus(vull, vull);765// CHECK: llvm.ppc.altivec.vpkudus766// CHECK-LE: llvm.ppc.altivec.vpkudus767// CHECK-PPC: error: call to undeclared function 'vec_vpkudus'768 769  /* vec_vupkhsw */770  res_vsll = vec_vupkhsw(vsi);771// CHECK: llvm.ppc.altivec.vupkhsw772// CHECK-LE: llvm.ppc.altivec.vupklsw773// CHECK-PPC: error: call to undeclared function 'vec_vupkhsw'774 775  res_vbll = vec_vupkhsw(vbi);776// CHECK: llvm.ppc.altivec.vupkhsw777// CHECK-LE: llvm.ppc.altivec.vupklsw778 779  /* vec_vupklsw */780  res_vsll = vec_vupklsw(vsi);781// CHECK: llvm.ppc.altivec.vupklsw782// CHECK-LE: llvm.ppc.altivec.vupkhsw783// CHECK-PPC: error: call to undeclared function 'vec_vupklsw'784 785  res_vbll = vec_vupklsw(vbi);786// CHECK: llvm.ppc.altivec.vupklsw787// CHECK-LE: llvm.ppc.altivec.vupkhsw788 789  /* vec_max */790  res_vsll = vec_max(vsll, vsll);791// CHECK: @llvm.ppc.altivec.vmaxsd792// CHECK-LE: @llvm.ppc.altivec.vmaxsd793 794  res_vsll = vec_max(vbll, vsll);795// CHECK: @llvm.ppc.altivec.vmaxsd796// CHECK-LE: @llvm.ppc.altivec.vmaxsd797 798  res_vsll = vec_max(vsll, vbll);799// CHECK: @llvm.ppc.altivec.vmaxsd800// CHECK-LE: @llvm.ppc.altivec.vmaxsd801 802  res_vull = vec_max(vull, vull);803// CHECK: @llvm.ppc.altivec.vmaxud804// CHECK-LE: @llvm.ppc.altivec.vmaxud805 806  res_vull = vec_max(vbll, vull);807// CHECK: @llvm.ppc.altivec.vmaxud808// CHECK-LE: @llvm.ppc.altivec.vmaxud809 810  /* vec_min */811  res_vsll = vec_min(vsll, vsll);812// CHECK: @llvm.ppc.altivec.vminsd813// CHECK-LE: @llvm.ppc.altivec.vminsd814 815  res_vsll = vec_min(vbll, vsll);816// CHECK: @llvm.ppc.altivec.vminsd817// CHECK-LE: @llvm.ppc.altivec.vminsd818 819  res_vsll = vec_min(vsll, vbll);820// CHECK: @llvm.ppc.altivec.vminsd821// CHECK-LE: @llvm.ppc.altivec.vminsd822 823  res_vull = vec_min(vull, vull);824// CHECK: @llvm.ppc.altivec.vminud825// CHECK-LE: @llvm.ppc.altivec.vminud826 827  res_vull = vec_min(vbll, vull);828// CHECK: @llvm.ppc.altivec.vminud829// CHECK-LE: @llvm.ppc.altivec.vminud830 831  /* vec_nand */832  res_vsc = vec_nand(vsc, vsc);833// CHECK: [[T1:%.+]] = and <16 x i8>834// CHECK: xor <16 x i8> [[T1]], splat (i8 -1)835// CHECK-LE: [[T1:%.+]] = and <16 x i8>836// CHECK-LE: xor <16 x i8> [[T1]], splat (i8 -1)837// CHECK-PPC: error: call to undeclared function 'vec_nand'838 839  res_vbc = vec_nand(vbc, vbc);840// CHECK: [[T1:%.+]] = and <16 x i8>841// CHECK: xor <16 x i8> [[T1]], splat (i8 -1)842// CHECK-LE: [[T1:%.+]] = and <16 x i8>843// CHECK-LE: xor <16 x i8> [[T1]], splat (i8 -1)844 845  res_vuc = vec_nand(vuc, vuc);846// CHECK: [[T1:%.+]] = and <16 x i8>847// CHECK: xor <16 x i8> [[T1]], splat (i8 -1)848// CHECK-LE: [[T1:%.+]] = and <16 x i8>849// CHECK-LE: xor <16 x i8> [[T1]], splat (i8 -1)850 851  res_vss = vec_nand(vss, vss);852// CHECK: [[T1:%.+]] = and <8 x i16>853// CHECK: xor <8 x i16> [[T1]], splat (i16 -1)854// CHECK-LE: [[T1:%.+]] = and <8 x i16>855// CHECK-LE: xor <8 x i16> [[T1]], splat (i16 -1)856 857  res_vbs = vec_nand(vbs, vbs);858// CHECK: [[T1:%.+]] = and <8 x i16>859// CHECK: xor <8 x i16> [[T1]], splat (i16 -1)860// CHECK-LE: [[T1:%.+]] = and <8 x i16>861// CHECK-LE: xor <8 x i16> [[T1]], splat (i16 -1)862 863  res_vus = vec_nand(vus, vus);864// CHECK: [[T1:%.+]] = and <8 x i16>865// CHECK: xor <8 x i16> [[T1]], splat (i16 -1)866// CHECK-LE: [[T1:%.+]] = and <8 x i16>867// CHECK-LE: xor <8 x i16> [[T1]], splat (i16 -1)868 869  res_vsi = vec_nand(vsi, vsi);870// CHECK: [[T1:%.+]] = and <4 x i32>871// CHECK: xor <4 x i32> [[T1]], splat (i32 -1)872// CHECK-LE: [[T1:%.+]] = and <4 x i32>873// CHECK-LE: xor <4 x i32> [[T1]], splat (i32 -1)874 875  res_vbi = vec_nand(vbi, vbi);876// CHECK: [[T1:%.+]] = and <4 x i32>877// CHECK: xor <4 x i32> [[T1]], splat (i32 -1)878// CHECK-LE: [[T1:%.+]] = and <4 x i32>879// CHECK-LE: xor <4 x i32> [[T1]], splat (i32 -1)880 881  res_vui = vec_nand(vui, vui);882// CHECK: [[T1:%.+]] = and <4 x i32>883// CHECK: xor <4 x i32> [[T1]], splat (i32 -1)884// CHECK-LE: [[T1:%.+]] = and <4 x i32>885// CHECK-LE: xor <4 x i32> [[T1]], splat (i32 -1)886 887  res_vf = vec_nand(vfa, vfa);888// CHECK: [[T1:%.+]] = and <4 x i32>889// CHECK: xor <4 x i32> [[T1]], splat (i32 -1)890// CHECK-LE: [[T1:%.+]] = and <4 x i32>891// CHECK-LE: xor <4 x i32> [[T1]], splat (i32 -1)892 893  res_vsll = vec_nand(vsll, vsll);894// CHECK: [[T1:%.+]] = and <2 x i64>895// CHECK: xor <2 x i64> [[T1]], splat (i64 -1)896// CHECK-LE: [[T1:%.+]] = and <2 x i64>897// CHECK-LE: xor <2 x i64> [[T1]], splat (i64 -1)898 899  res_vbll = vec_nand(vbll, vbll);900// CHECK: [[T1:%.+]] = and <2 x i64>901// CHECK: xor <2 x i64> [[T1]], splat (i64 -1)902// CHECK-LE: [[T1:%.+]] = and <2 x i64>903// CHECK-LE: xor <2 x i64> [[T1]], splat (i64 -1)904 905  res_vull = vec_nand(vull, vull);906// CHECK: [[T1:%.+]] = and <2 x i64>907// CHECK: xor <2 x i64> [[T1]], splat (i64 -1)908// CHECK-LE: [[T1:%.+]] = and <2 x i64>909// CHECK-LE: xor <2 x i64> [[T1]], splat (i64 -1)910 911  res_vd = vec_nand(vda, vda);912// CHECK: [[T1:%.+]] = and <2 x i64>913// CHECK: xor <2 x i64> [[T1]], splat (i64 -1)914// CHECK-LE: [[T1:%.+]] = and <2 x i64>915// CHECK-LE: xor <2 x i64> [[T1]], splat (i64 -1)916 917  res_vf = vec_nand(vfa, vfa);918// CHECK: [[T1:%.+]] = and <4 x i32>919// CHECK: xor <4 x i32> [[T1]], splat (i32 -1)920// CHECK-LE: [[T1:%.+]] = and <4 x i32>921// CHECK-LE: xor <4 x i32> [[T1]], splat (i32 -1)922 923  /* vec_orc */924  res_vsc = vec_orc(vsc, vsc);925// CHECK: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)926// CHECK: or <16 x i8> {{%.+}}, [[T1]]927// CHECK-LE: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)928// CHECK-LE: or <16 x i8> {{%.+}}, [[T1]]929// CHECK-PPC: error: call to undeclared function 'vec_orc'930 931  res_vsc = vec_orc(vsc, vbc);932// CHECK: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)933// CHECK: or <16 x i8> {{%.+}}, [[T1]]934// CHECK-LE: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)935// CHECK-LE: or <16 x i8> {{%.+}}, [[T1]]936 937  res_vsc = vec_orc(vbc, vsc);938// CHECK: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)939// CHECK: or <16 x i8> {{%.+}}, [[T1]]940// CHECK-LE: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)941// CHECK-LE: or <16 x i8> {{%.+}}, [[T1]]942 943  res_vuc = vec_orc(vuc, vuc);944// CHECK: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)945// CHECK: or <16 x i8> {{%.+}}, [[T1]]946// CHECK-LE: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)947// CHECK-LE: or <16 x i8> {{%.+}}, [[T1]]948 949  res_vuc = vec_orc(vuc, vbc);950// CHECK: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)951// CHECK: or <16 x i8> {{%.+}}, [[T1]]952// CHECK-LE: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)953// CHECK-LE: or <16 x i8> {{%.+}}, [[T1]]954 955  res_vuc = vec_orc(vbc, vuc);956// CHECK: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)957// CHECK: or <16 x i8> {{%.+}}, [[T1]]958// CHECK-LE: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)959// CHECK-LE: or <16 x i8> {{%.+}}, [[T1]]960 961  res_vbc = vec_orc(vbc, vbc);962// CHECK: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)963// CHECK: or <16 x i8> {{%.+}}, [[T1]]964// CHECK-LE: [[T1:%.+]] = xor <16 x i8> {{%.+}}, splat (i8 -1)965// CHECK-LE: or <16 x i8> {{%.+}}, [[T1]]966 967  res_vss = vec_orc(vss, vss);968// CHECK: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)969// CHECK: or <8 x i16> {{%.+}}, [[T1]]970// CHECK-LE: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)971// CHECK-LE: or <8 x i16> {{%.+}}, [[T1]]972 973  res_vss = vec_orc(vss, vbs);974// CHECK: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)975// CHECK: or <8 x i16> {{%.+}}, [[T1]]976// CHECK-LE: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)977// CHECK-LE: or <8 x i16> {{%.+}}, [[T1]]978 979  res_vss = vec_orc(vbs, vss);980// CHECK: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)981// CHECK: or <8 x i16> {{%.+}}, [[T1]]982// CHECK-LE: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)983// CHECK-LE: or <8 x i16> {{%.+}}, [[T1]]984 985  res_vus = vec_orc(vus, vus);986// CHECK: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)987// CHECK: or <8 x i16> {{%.+}}, [[T1]]988// CHECK-LE: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)989// CHECK-LE: or <8 x i16> {{%.+}}, [[T1]]990 991  res_vus = vec_orc(vus, vbs);992// CHECK: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)993// CHECK: or <8 x i16> {{%.+}}, [[T1]]994// CHECK-LE: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)995// CHECK-LE: or <8 x i16> {{%.+}}, [[T1]]996 997  res_vus = vec_orc(vbs, vus);998// CHECK: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)999// CHECK: or <8 x i16> {{%.+}}, [[T1]]1000// CHECK-LE: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)1001// CHECK-LE: or <8 x i16> {{%.+}}, [[T1]]1002 1003  res_vbs = vec_orc(vbs, vbs);1004// CHECK: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)1005// CHECK: or <8 x i16> {{%.+}}, [[T1]]1006// CHECK-LE: [[T1:%.+]] = xor <8 x i16> {{%.+}}, splat (i16 -1)1007// CHECK-LE: or <8 x i16> {{%.+}}, [[T1]]1008 1009  res_vsi = vec_orc(vsi, vsi);1010// CHECK: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1011// CHECK: or <4 x i32> {{%.+}}, [[T1]]1012// CHECK-LE: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1013// CHECK-LE: or <4 x i32> {{%.+}}, [[T1]]1014 1015  res_vsi = vec_orc(vsi, vbi);1016// CHECK: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1017// CHECK: or <4 x i32> {{%.+}}, [[T1]]1018// CHECK-LE: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1019// CHECK-LE: or <4 x i32> {{%.+}}, [[T1]]1020 1021  res_vsi = vec_orc(vbi, vsi);1022// CHECK: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1023// CHECK: or <4 x i32> {{%.+}}, [[T1]]1024// CHECK-LE: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1025// CHECK-LE: or <4 x i32> {{%.+}}, [[T1]]1026 1027  res_vui = vec_orc(vui, vui);1028// CHECK: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1029// CHECK: or <4 x i32> {{%.+}}, [[T1]]1030// CHECK-LE: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1031// CHECK-LE: or <4 x i32> {{%.+}}, [[T1]]1032 1033  res_vui = vec_orc(vui, vbi);1034// CHECK: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1035// CHECK: or <4 x i32> {{%.+}}, [[T1]]1036// CHECK-LE: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1037// CHECK-LE: or <4 x i32> {{%.+}}, [[T1]]1038 1039  res_vui = vec_orc(vbi, vui);1040// CHECK: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1041// CHECK: or <4 x i32> {{%.+}}, [[T1]]1042// CHECK-LE: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1043// CHECK-LE: or <4 x i32> {{%.+}}, [[T1]]1044 1045  res_vbi = vec_orc(vbi, vbi);1046// CHECK: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1047// CHECK: or <4 x i32> {{%.+}}, [[T1]]1048// CHECK-LE: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1049// CHECK-LE: or <4 x i32> {{%.+}}, [[T1]]1050 1051  res_vf = vec_orc(vbi, vfa);1052// CHECK: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1053// CHECK: or <4 x i32> {{%.+}}, [[T1]]1054// CHECK-LE: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1055// CHECK-LE: or <4 x i32> {{%.+}}, [[T1]]1056 1057  res_vf = vec_orc(vfa, vbi);1058// CHECK: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1059// CHECK: or <4 x i32> {{%.+}}, [[T1]]1060// CHECK-LE: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1061// CHECK-LE: or <4 x i32> {{%.+}}, [[T1]]1062 1063  res_vf = vec_orc(vfa, vfb);1064// CHECK: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1065// CHECK: or <4 x i32> {{%.+}}, [[T1]]1066// CHECK-LE: [[T1:%.+]] = xor <4 x i32> {{%.+}}, splat (i32 -1)1067// CHECK-LE: or <4 x i32> {{%.+}}, [[T1]]1068 1069  res_vsll = vec_orc(vsll, vsll);1070// CHECK: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1071// CHECK: or <2 x i64> {{%.+}}, [[T1]]1072// CHECK-LE: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1073// CHECK-LE: or <2 x i64> {{%.+}}, [[T1]]1074 1075  res_vsll = vec_orc(vsll, vbll);1076// CHECK: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1077// CHECK: or <2 x i64> {{%.+}}, [[T1]]1078// CHECK-LE: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1079// CHECK-LE: or <2 x i64> {{%.+}}, [[T1]]1080 1081  res_vsll = vec_orc(vbll, vsll);1082// CHECK: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1083// CHECK: or <2 x i64> {{%.+}}, [[T1]]1084// CHECK-LE: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1085// CHECK-LE: or <2 x i64> {{%.+}}, [[T1]]1086 1087  res_vull = vec_orc(vull, vull);1088// CHECK: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1089// CHECK: or <2 x i64> {{%.+}}, [[T1]]1090// CHECK-LE: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1091// CHECK-LE: or <2 x i64> {{%.+}}, [[T1]]1092 1093  res_vull = vec_orc(vull, vbll);1094// CHECK: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1095// CHECK: or <2 x i64> {{%.+}}, [[T1]]1096// CHECK-LE: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1097// CHECK-LE: or <2 x i64> {{%.+}}, [[T1]]1098 1099  res_vull = vec_orc(vbll, vull);1100// CHECK: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1101// CHECK: or <2 x i64> {{%.+}}, [[T1]]1102// CHECK-LE: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1103// CHECK-LE: or <2 x i64> {{%.+}}, [[T1]]1104 1105  res_vbll = vec_orc(vbll, vbll);1106// CHECK: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1107// CHECK: or <2 x i64> {{%.+}}, [[T1]]1108// CHECK-LE: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1109// CHECK-LE: or <2 x i64> {{%.+}}, [[T1]]1110 1111  res_vd = vec_orc(vbll, vda);1112// CHECK: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1113// CHECK: or <2 x i64> {{%.+}}, [[T1]]1114// CHECK-LE: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1115// CHECK-LE: or <2 x i64> {{%.+}}, [[T1]]1116 1117  res_vd = vec_orc(vda, vbll);1118// CHECK: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1119// CHECK: or <2 x i64> {{%.+}}, [[T1]]1120// CHECK-LE: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1121// CHECK-LE: or <2 x i64> {{%.+}}, [[T1]]1122 1123  res_vd = vec_orc(vda, vdb);1124// CHECK: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1125// CHECK: or <2 x i64> {{%.+}}, [[T1]]1126// CHECK-LE: [[T1:%.+]] = xor <2 x i64> {{%.+}}, splat (i64 -1)1127// CHECK-LE: or <2 x i64> {{%.+}}, [[T1]]1128 1129  /* vec_sub */1130  res_vsll = vec_sub(vsll, vsll);1131// CHECK: sub <2 x i64>1132// CHECK-LE: sub <2 x i64>1133 1134  res_vull = vec_sub(vull, vull);1135// CHECK: sub <2 x i64>1136// CHECK-LE: sub <2 x i64>1137 1138  res_vd = vec_sub(vda, vda);1139// CHECK: fsub <2 x double>1140// CHECK-LE: fsub <2 x double>1141 1142  res_vsx = vec_sub(vsx, vsx);1143// CHECK: sub <1 x i128>1144// CHECK-LE: sub <1 x i128>1145 1146  res_vux = vec_sub(vux, vux);1147// CHECK: sub <1 x i128>1148// CHECK-LE: sub <1 x i128>1149 1150  /* vec_vbpermq */1151  res_vsll = vec_vbpermq(vsc, vsc);1152// CHECK: llvm.ppc.altivec.vbpermq1153// CHECK-LE: llvm.ppc.altivec.vbpermq1154 1155  res_vsll = vec_vbpermq(vuc, vuc);1156// CHECK: llvm.ppc.altivec.vbpermq1157// CHECK-LE: llvm.ppc.altivec.vbpermq1158// CHECK-PPC: error: call to undeclared function 'vec_vbpermq'1159 1160  /* vec_vgbbd */1161  res_vsc = vec_vgbbd(vsc);1162// CHECK: llvm.ppc.altivec.vgbbd1163// CHECK-LE: llvm.ppc.altivec.vgbbd1164 1165  res_vuc = vec_vgbbd(vuc);1166// CHECK: llvm.ppc.altivec.vgbbd1167// CHECK-LE: llvm.ppc.altivec.vgbbd1168// CHECK-PPC: error: call to undeclared function 'vec_vgbbd'1169 1170  res_vuc = vec_gb(vuc);1171// CHECK: llvm.ppc.altivec.vgbbd1172// CHECK-LE: llvm.ppc.altivec.vgbbd1173// CHECK-PPC: error: call to undeclared function 'vec_gb'1174 1175  res_vsll = vec_gbb(vsll);1176// CHECK: llvm.ppc.altivec.vgbbd1177// CHECK-LE: llvm.ppc.altivec.vgbbd1178 1179  res_vull = vec_gbb(vull);1180// CHECK: llvm.ppc.altivec.vgbbd1181// CHECK-LE: llvm.ppc.altivec.vgbbd1182 1183  res_vull = vec_bperm(vux, vuc);1184  // CHECK: llvm.ppc.altivec.vbpermq1185  // CHECK-LE: llvm.ppc.altivec.vbpermq1186 1187  res_vuc = vec_bperm(vuc, vuc);1188  // CHECK: llvm.ppc.altivec.vbpermq1189  // CHECK-LE: llvm.ppc.altivec.vbpermq1190 1191  res_vsll = vec_neg(vsll);1192// CHECK: sub <2 x i64> zeroinitializer, {{%[0-9]+}}1193// CHECK-LE: sub <2 x i64> zeroinitializer, {{%[0-9]+}}1194// CHECK_PPC: call to 'vec_neg' is ambiguous1195 1196 1197}1198 1199 1200vector signed int test_vec_addec_signed (vector signed int a, vector signed int b, vector signed int c) {1201  return vec_addec(a, b, c);1202// CHECK-LABEL: @test_vec_addec_signed1203// CHECK: icmp slt i32 {{%[0-9]+}}, 41204// CHECK: extractelement1205// CHECK: extractelement1206// CHECK: extractelement1207// CHECK: and i32 {{%[0-9]+}}, 11208// CHECK: zext1209// CHECK: zext1210// CHECK: zext1211// CHECK: add i641212// CHECK: add i641213// CHECK: lshr i641214// CHECK: and i641215// CHECK: trunc i64 {{%[0-9]+}} to i321216// CHECK: zext i321217// CHECK: trunc i64 {{%[0-9]+}} to i321218// CHECK: sext i321219// CHECK: add nsw i321220// CHECK: br label1221// CHECK: ret <4 x i32>1222 1223}1224 1225 1226vector unsigned int test_vec_addec_unsigned (vector unsigned int a, vector unsigned int b, vector unsigned int c) {1227  return vec_addec(a, b, c);1228 1229// CHECK-LABEL: @test_vec_addec_unsigned1230// CHECK: icmp slt i32 {{%[0-9]+}}, 41231// CHECK: extractelement1232// CHECK: and i321233// CHECK: extractelement1234// CHECK: zext i321235// CHECK: extractelement1236// CHECK: zext i321237// CHECK: zext i321238// CHECK: add i641239// CHECK: lshr i641240// CHECK: and i641241// CHECK: trunc i64 {{%[0-9]+}} to i321242// CHECK: zext i321243// CHECK: trunc i64 {{%[0-9]+}} to i321244// CHECK: sext i321245// CHECK: add nsw i321246// CHECK: br label1247// CHECK: ret <4 x i32>1248}1249 1250vector signed int test_vec_subec_signed (vector signed int a, vector signed int b, vector signed int c) {1251  return vec_subec(a, b, c);1252// CHECK-LABEL: @test_vec_subec_signed1253// CHECK: xor <4 x i32> {{%[0-9]+}}, splat (i32 -1)1254// CHECK: ret <4 x i32>1255}1256 1257vector unsigned int test_vec_subec_unsigned (vector unsigned int a, vector unsigned int b, vector unsigned int c) {1258  return vec_subec(a, b, c);1259 1260// CHECK-LABEL: @test_vec_subec_unsigned1261// CHECK: xor <4 x i32> {{%[0-9]+}}, splat (i32 -1)1262// CHECK: ret <4 x i32>1263}1264 1265int test_bcd_invalid(vector unsigned char a) {1266  // CHECK-LABEL: test_bcd_invalid1267  // CHECK: call i32 @llvm.ppc.bcdsub.p(i32 6, <16 x i8>1268  // CHECK-LE-LABEL: test_bcd_invalid1269  // CHECK-LE: call i32 @llvm.ppc.bcdsub.p(i32 6, <16 x i8>1270  return __bcd_invalid(a);1271}1272 1273vector unsigned char test_bcd_add(vector unsigned char a, vector unsigned char b,1274                              int ps) {1275  // CHECK-LABEL: test_bcd_add1276  // CHECK: call <16 x i8> @llvm.ppc.bcdadd(<16 x i8>1277  // CHECK-LE-LABEL: test_bcd_add1278  // CHECK-LE: call <16 x i8> @llvm.ppc.bcdadd(<16 x i8>1279  return __bcdadd(a, b, 1);1280}1281 1282int test_bcd_add_ofl(vector unsigned char a, vector unsigned char b, long ps) {1283  // CHECK-LABEL: test_bcd_add_ofl1284  // CHECK: call i32 @llvm.ppc.bcdadd.p(i32 6, <16 x i8>1285  // CHECK-LE-LABEL: test_bcd_add_ofl1286  // CHECK-LE: call i32 @llvm.ppc.bcdadd.p(i32 6, <16 x i8>1287  return __bcdadd_ofl(a, b);1288}1289 1290vector unsigned char test_bcd_sub(vector unsigned char a, vector unsigned char b,1291                              int ps) {1292  // CHECK-LABEL: test_bcd_sub1293  // CHECK: call <16 x i8> @llvm.ppc.bcdsub(<16 x i8>1294  // CHECK-LE-LABEL: test_bcd_sub1295  // CHECK-LE: call <16 x i8> @llvm.ppc.bcdsub(<16 x i8>1296  return __bcdsub(a, b, 0);1297}1298 1299int test_bcd_sub_ofl(vector unsigned char a, vector unsigned char b, long ps) {1300  // CHECK-LABEL: test_bcd_sub_ofl1301  // CHECK: call i32 @llvm.ppc.bcdsub.p(i32 6, <16 x i8>1302  // CHECK-LE-LABEL: test_bcd_sub_ofl1303  // CHECK-LE: call i32 @llvm.ppc.bcdsub.p(i32 6, <16 x i8>1304  return __bcdsub_ofl(a, b);1305}1306 1307int test_bcd_cmplt(vector unsigned char a, vector unsigned char b) {1308  // CHECK-LABEL: test_bcd_cmplt1309  // CHECK: call i32 @llvm.ppc.bcdsub.p(i32 2, <16 x i8>1310  // CHECK-LE-LABEL: test_bcd_cmplt1311  // CHECK-LE: call i32 @llvm.ppc.bcdsub.p(i32 2, <16 x i8>1312  return __bcdcmplt(a, b);1313}1314 1315int test_bcd_cmpgt(vector unsigned char a, vector unsigned char b) {1316  // CHECK-LABEL: test_bcd_cmpgt1317  // CHECK: call i32 @llvm.ppc.bcdsub.p(i32 4, <16 x i8>1318  // CHECK-LE-LABEL: test_bcd_cmpgt1319  // CHECK-LE: call i32 @llvm.ppc.bcdsub.p(i32 4, <16 x i8>1320  return __bcdcmpgt(a, b);1321}1322 1323int test_bcd_cmpeq(vector unsigned char a, vector unsigned char b) {1324  // CHECK-LABEL: test_bcd_cmpeq1325  // CHECK: call i32 @llvm.ppc.bcdsub.p(i32 0, <16 x i8>1326  // CHECK-LE-LABEL: test_bcd_cmpeq1327  // CHECK-LE: call i32 @llvm.ppc.bcdsub.p(i32 0, <16 x i8>1328  return __bcdcmpeq(a, b);1329}1330 1331int test_bcd_cmpge(vector unsigned char a, vector unsigned char b) {1332  // CHECK-LABEL: test_bcd_cmpge1333  // CHECK: call i32 @llvm.ppc.bcdsub.p(i32 3, <16 x i8>1334  // CHECK-LE-LABEL: test_bcd_cmpge1335  // CHECK-LE: call i32 @llvm.ppc.bcdsub.p(i32 3, <16 x i8>1336  return __bcdcmpge(a, b);1337}1338 1339int test_bcd_cmple(vector unsigned char a, vector unsigned char b) {1340  // CHECK-LABEL: test_bcd_cmple1341  // CHECK: call i32 @llvm.ppc.bcdsub.p(i32 5, <16 x i8>1342  // CHECK-LE-LABEL: test_bcd_cmple1343  // CHECK-LE: call i32 @llvm.ppc.bcdsub.p(i32 5, <16 x i8>1344  return __bcdcmple(a, b);1345}1346