brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · b765fa6 Raw
104 lines · c
1// REQUIRES: systemz-registered-target2// RUN: %clang_cc1 -target-cpu z17 -triple s390x-ibm-linux -flax-vector-conversions=none \3// RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s4 5typedef __attribute__((vector_size(16))) signed char vec_schar;6typedef __attribute__((vector_size(16))) signed short vec_sshort;7typedef __attribute__((vector_size(16))) signed int vec_sint;8typedef __attribute__((vector_size(16))) signed long long vec_slong;9typedef __attribute__((vector_size(16))) signed __int128 vec_sint128;10typedef __attribute__((vector_size(16))) unsigned char vec_uchar;11typedef __attribute__((vector_size(16))) unsigned short vec_ushort;12typedef __attribute__((vector_size(16))) unsigned int vec_uint;13typedef __attribute__((vector_size(16))) unsigned long long vec_ulong;14typedef __attribute__((vector_size(16))) unsigned __int128 vec_uint128;15typedef __attribute__((vector_size(16))) double vec_double;16 17volatile vec_schar vsc;18volatile vec_sshort vss;19volatile vec_sint vsi;20volatile vec_slong vsl;21volatile vec_uchar vuc;22volatile vec_ushort vus;23volatile vec_uint vui;24volatile vec_ulong vul;25volatile signed __int128 si128;26volatile unsigned __int128 ui128;27 28int cc;29 30void test_core(void) {31  vuc = __builtin_s390_vgemb(vus);32  // CHECK: call <16 x i8> @llvm.s390.vgemb(<8 x i16> %{{.*}})33  vus = __builtin_s390_vgemh(vuc);34  // CHECK: call <8 x i16> @llvm.s390.vgemh(<16 x i8> %{{.*}})35  vui = __builtin_s390_vgemf(vuc);36  // CHECK: call <4 x i32> @llvm.s390.vgemf(<16 x i8> %{{.*}})37  vul = __builtin_s390_vgemg(vuc);38  // CHECK: call <2 x i64> @llvm.s390.vgemg(<16 x i8> %{{.*}})39  ui128 = __builtin_s390_vgemq(vuc);40  // CHECK: call i128 @llvm.s390.vgemq(<16 x i8> %{{.*}})41 42  si128 = __builtin_s390_vuphg(vsl);43  // CHECK: call i128 @llvm.s390.vuphg(<2 x i64> %{{.*}})44  si128 = __builtin_s390_vuplg(vsl);45  // CHECK: call i128 @llvm.s390.vuplg(<2 x i64> %{{.*}})46  ui128 = __builtin_s390_vuplhg(vul);47  // CHECK: call i128 @llvm.s390.vuplhg(<2 x i64> %{{.*}})48  ui128 = __builtin_s390_vupllg(vul);49  // CHECK: call i128 @llvm.s390.vupllg(<2 x i64> %{{.*}})50}51 52void test_integer(void) {53  si128 = __builtin_s390_vavgq(si128, si128);54  // CHECK: call i128 @llvm.s390.vavgq(i128 %{{.*}}, i128 %{{.*}})55  ui128 = __builtin_s390_vavglq(ui128, ui128);56  // CHECK: call i128 @llvm.s390.vavglq(i128 %{{.*}}, i128 %{{.*}})57 58  vuc = __builtin_s390_veval(vuc, vuc, vuc, 0);59  // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)60 61  vsl = __builtin_s390_vmahg(vsl, vsl, vsl);62  // CHECK: call <2 x i64> @llvm.s390.vmahg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})63  si128 = __builtin_s390_vmahq(si128, si128, si128);64  // CHECK: call i128 @llvm.s390.vmahq(i128 %{{.*}}, i128 %{{.*}}, i128 %{{.*}})65  vul = __builtin_s390_vmalhg(vul, vul, vul);66  // CHECK: call <2 x i64> @llvm.s390.vmalhg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})67  ui128 = __builtin_s390_vmalhq(ui128, ui128, ui128);68  // CHECK: call i128 @llvm.s390.vmalhq(i128 %{{.*}}, i128 %{{.*}}, i128 %{{.*}})69 70  si128 = __builtin_s390_vmaeg(vsl, vsl, si128);71  // CHECK: call i128 @llvm.s390.vmaeg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}})72  ui128 = __builtin_s390_vmaleg(vul, vul, ui128);73  // CHECK: call i128 @llvm.s390.vmaleg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}})74  si128 = __builtin_s390_vmaog(vsl, vsl, si128);75  // CHECK: call i128 @llvm.s390.vmaog(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}})76  ui128 = __builtin_s390_vmalog(vul, vul, ui128);77  // CHECK: call i128 @llvm.s390.vmalog(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}})78 79  vsl = __builtin_s390_vmhg(vsl, vsl);80  // CHECK: call <2 x i64> @llvm.s390.vmhg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})81  si128 = __builtin_s390_vmhq(si128, si128);82  // CHECK: call i128 @llvm.s390.vmhq(i128 %{{.*}}, i128 %{{.*}})83  vul = __builtin_s390_vmlhg(vul, vul);84  // CHECK: call <2 x i64> @llvm.s390.vmlhg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})85  ui128 = __builtin_s390_vmlhq(ui128, ui128);86  // CHECK: call i128 @llvm.s390.vmlhq(i128 %{{.*}}, i128 %{{.*}})87 88  si128 = __builtin_s390_vmeg(vsl, vsl);89  // CHECK: call i128 @llvm.s390.vmeg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})90  ui128 = __builtin_s390_vmleg(vul, vul);91  // CHECK: call i128 @llvm.s390.vmleg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})92  si128 = __builtin_s390_vmog(vsl, vsl);93  // CHECK: call i128 @llvm.s390.vmog(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})94  ui128 = __builtin_s390_vmlog(vul, vul);95  // CHECK: call i128 @llvm.s390.vmlog(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})96 97  si128 = __builtin_s390_vceqqs(ui128, ui128, &cc);98  // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})99  si128 = __builtin_s390_vchqs(si128, si128, &cc);100  // CHECK: call { i128, i32 } @llvm.s390.vchqs(i128 %{{.*}}, i128 %{{.*}})101  si128 = __builtin_s390_vchlqs(ui128, ui128, &cc);102  // CHECK: call { i128, i32 } @llvm.s390.vchlqs(i128 %{{.*}}, i128 %{{.*}})103}104