diff options
Diffstat (limited to 'clang/test/CodeGen/builtins-systemz-zvector3.c')
-rw-r--r-- | clang/test/CodeGen/builtins-systemz-zvector3.c | 468 |
1 files changed, 468 insertions, 0 deletions
diff --git a/clang/test/CodeGen/builtins-systemz-zvector3.c b/clang/test/CodeGen/builtins-systemz-zvector3.c new file mode 100644 index 00000000000..1367d87c58c --- /dev/null +++ b/clang/test/CodeGen/builtins-systemz-zvector3.c @@ -0,0 +1,468 @@ +// REQUIRES: systemz-registered-target +// RUN: %clang_cc1 -target-cpu arch13 -triple s390x-linux-gnu \ +// RUN: -O -fzvector -fno-lax-vector-conversions \ +// RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -target-cpu arch13 -triple s390x-linux-gnu \ +// RUN: -O -fzvector -fno-lax-vector-conversions \ +// RUN: -Wall -Wno-unused -Werror -S %s -o - | FileCheck %s --check-prefix=CHECK-ASM + +#include <vecintrin.h> + +volatile vector signed char vsc; +volatile vector signed short vss; +volatile vector signed int vsi; +volatile vector signed long long vsl; +volatile vector unsigned char vuc; +volatile vector unsigned short vus; +volatile vector unsigned int vui; +volatile vector unsigned long long vul; +volatile vector bool char vbc; +volatile vector bool short vbs; +volatile vector bool int vbi; +volatile vector bool long long vbl; +volatile vector float vf; +volatile vector double vd; + +volatile signed char sc; +volatile signed short ss; +volatile signed int si; +volatile signed long long sl; +volatile unsigned char uc; +volatile unsigned short us; +volatile unsigned int ui; +volatile unsigned long long ul; +volatile float f; +volatile double d; + +const void * volatile cptr; +const signed char * volatile cptrsc; +const signed short * volatile cptrss; +const signed int * volatile cptrsi; +const signed long long * volatile cptrsl; +const unsigned char * volatile cptruc; +const unsigned short * volatile cptrus; +const unsigned int * volatile cptrui; +const unsigned long long * volatile cptrul; +const float * volatile cptrf; +const double * volatile cptrd; + +void * volatile ptr; +signed char * volatile ptrsc; +signed short * volatile ptrss; +signed int * volatile ptrsi; +signed long long * volatile ptrsl; +unsigned char * volatile ptruc; +unsigned short * volatile ptrus; +unsigned int * volatile ptrui; +unsigned long long * volatile ptrul; +float * volatile ptrf; +double * volatile ptrd; + +volatile unsigned int len; +volatile int idx; +int cc; + +void test_core(void) { + // CHECK-ASM-LABEL: test_core + vector signed short vss2; + vector signed int vsi2; + vector signed long long vsl2; + vector unsigned short vus2; + vector unsigned int vui2; + vector unsigned long long vul2; + vector float vf2; + vector double vd2; + + vss += vec_revb(vec_xl(idx, cptrss)); + // CHECK-ASM: vlbrh + vus += vec_revb(vec_xl(idx, cptrus)); + // CHECK-ASM: vlbrh + vsi += vec_revb(vec_xl(idx, cptrsi)); + // CHECK-ASM: vlbrf + vui += vec_revb(vec_xl(idx, cptrui)); + // CHECK-ASM: vlbrf + vsl += vec_revb(vec_xl(idx, cptrsl)); + // CHECK-ASM: vlbrg + vul += vec_revb(vec_xl(idx, cptrul)); + // CHECK-ASM: vlbrg + vf += vec_revb(vec_xl(idx, cptrf)); + // CHECK-ASM: vlbrf + vd += vec_revb(vec_xl(idx, cptrd)); + // CHECK-ASM: vlbrg + + vec_xst(vec_revb(vss), idx, ptrss); + // CHECK-ASM: vstbrh + vec_xst(vec_revb(vus), idx, ptrus); + // CHECK-ASM: vstbrh + vec_xst(vec_revb(vsi), idx, ptrsi); + // CHECK-ASM: vstbrf + vec_xst(vec_revb(vui), idx, ptrui); + // CHECK-ASM: vstbrf + vec_xst(vec_revb(vsl), idx, ptrsl); + // CHECK-ASM: vstbrg + vec_xst(vec_revb(vul), idx, ptrul); + // CHECK-ASM: vstbrg + vec_xst(vec_revb(vf), idx, ptrf); + // CHECK-ASM: vstbrf + vec_xst(vec_revb(vd), idx, ptrd); + // CHECK-ASM: vstbrg + + vss += vec_revb(vec_insert_and_zero(cptrss)); + // CHECK-ASM: vllebrzh + vus += vec_revb(vec_insert_and_zero(cptrus)); + // CHECK-ASM: vllebrzh + vsi += vec_revb(vec_insert_and_zero(cptrsi)); + // CHECK-ASM: vllebrzf + vui += vec_revb(vec_insert_and_zero(cptrui)); + // CHECK-ASM: vllebrzf + vsl += vec_revb(vec_insert_and_zero(cptrsl)); + // CHECK-ASM: vllebrzg + vul += vec_revb(vec_insert_and_zero(cptrul)); + // CHECK-ASM: vllebrzg + vf += vec_revb(vec_insert_and_zero(cptrf)); + // CHECK-ASM: vllebrzf + vd += vec_revb(vec_insert_and_zero(cptrd)); + // CHECK-ASM: vllebrzg + + vss += vec_revb(vec_splats(ss)); + // CHECK-ASM: vlbrreph + vus += vec_revb(vec_splats(us)); + // CHECK-ASM: vlbrreph + vsi += vec_revb(vec_splats(si)); + // CHECK-ASM: vlbrrepf + vui += vec_revb(vec_splats(ui)); + // CHECK-ASM: vlbrrepf + vsl += vec_revb(vec_splats(sl)); + // CHECK-ASM: vlbrrepg + vul += vec_revb(vec_splats(ul)); + // CHECK-ASM: vlbrrepg + vf += vec_revb(vec_splats(f)); + // CHECK-ASM: vlbrrepf + vd += vec_revb(vec_splats(d)); + // CHECK-ASM: vlbrrepg + + vus = vec_splats(__builtin_bswap16(us)); + // CHECK-ASM: vlbrreph + vui = vec_splats(__builtin_bswap32(ui)); + // CHECK-ASM: vlbrrepf + vul = vec_splats((unsigned long long)__builtin_bswap64(ul)); + // CHECK-ASM: vlbrrepg + + vss2 = vss; + vss += vec_revb(vec_insert(ss, vec_revb(vss2), 0)); + // CHECK-ASM: vlebrh + vus2 = vus; + vus += vec_revb(vec_insert(us, vec_revb(vus2), 0)); + // CHECK-ASM: vlebrh + vsi2 = vsi; + vsi += vec_revb(vec_insert(si, vec_revb(vsi2), 0)); + // CHECK-ASM: vlebrf + vui2 = vui; + vui += vec_revb(vec_insert(ui, vec_revb(vui2), 0)); + // CHECK-ASM: vlebrf + vsl2 = vsl; + vsl += vec_revb(vec_insert(sl, vec_revb(vsl2), 0)); + // CHECK-ASM: vlebrg + vul2 = vul; + vul += vec_revb(vec_insert(ul, vec_revb(vul2), 0)); + // CHECK-ASM: vlebrg + vf2 = vf; + vf += vec_revb(vec_insert(f, vec_revb(vf2), 0)); + // CHECK-ASM: vlebrf + vd2 = vd; + vd += vec_revb(vec_insert(d, vec_revb(vd2), 0)); + // CHECK-ASM: vlebrg + + vus2 = vus; + vus = vec_insert(__builtin_bswap16(us), vus2, 0); + // CHECK-ASM: vlebrh + vui2 = vui; + vui = vec_insert(__builtin_bswap32(ui), vui2, 0); + // CHECK-ASM: vlebrf + vul2 = vul; + vul = vec_insert(__builtin_bswap64(ul), vul2, 0); + // CHECK-ASM: vlebrg + + ss = vec_extract(vec_revb(vss), 0); + // CHECK-ASM: vstebrh + us = vec_extract(vec_revb(vus), 0); + // CHECK-ASM: vstebrh + si = vec_extract(vec_revb(vsi), 0); + // CHECK-ASM: vstebrf + ui = vec_extract(vec_revb(vui), 0); + // CHECK-ASM: vstebrf + sl = vec_extract(vec_revb(vsl), 0); + // CHECK-ASM: vstebrg + ul = vec_extract(vec_revb(vul), 0); + // CHECK-ASM: vstebrg + f = vec_extract(vec_revb(vf), 0); + // CHECK-ASM: vstebrf + d = vec_extract(vec_revb(vd), 0); + // CHECK-ASM: vstebrg + + us = __builtin_bswap16(vec_extract(vus, 0)); + // CHECK-ASM: vstebrh + ui = __builtin_bswap32(vec_extract(vui, 0)); + // CHECK-ASM: vstebrf + ul = __builtin_bswap64(vec_extract(vul, 0)); + // CHECK-ASM: vstebrg + + vsc += vec_reve(vec_xl(idx, cptrsc)); + // CHECK-ASM: vlbrq + vuc += vec_reve(vec_xl(idx, cptruc)); + // CHECK-ASM: vlbrq + vss += vec_reve(vec_xl(idx, cptrss)); + // CHECK-ASM: vlerh + vus += vec_reve(vec_xl(idx, cptrus)); + // CHECK-ASM: vlerh + vsi += vec_reve(vec_xl(idx, cptrsi)); + // CHECK-ASM: vlerf + vui += vec_reve(vec_xl(idx, cptrui)); + // CHECK-ASM: vlerf + vsl += vec_reve(vec_xl(idx, cptrsl)); + // CHECK-ASM: vlerg + vul += vec_reve(vec_xl(idx, cptrul)); + // CHECK-ASM: vlerg + vf += vec_reve(vec_xl(idx, cptrf)); + // CHECK-ASM: vlerf + vd += vec_reve(vec_xl(idx, cptrd)); + // CHECK-ASM: vlerg + + vec_xst(vec_reve(vsc), idx, ptrsc); + // CHECK-ASM: vstbrq + vec_xst(vec_reve(vuc), idx, ptruc); + // CHECK-ASM: vstbrq + vec_xst(vec_reve(vss), idx, ptrss); + // CHECK-ASM: vsterh + vec_xst(vec_reve(vus), idx, ptrus); + // CHECK-ASM: vsterh + vec_xst(vec_reve(vsi), idx, ptrsi); + // CHECK-ASM: vsterf + vec_xst(vec_reve(vui), idx, ptrui); + // CHECK-ASM: vsterf + vec_xst(vec_reve(vsl), idx, ptrsl); + // CHECK-ASM: vsterg + vec_xst(vec_reve(vul), idx, ptrul); + // CHECK-ASM: vsterg + vec_xst(vec_reve(vf), idx, ptrf); + // CHECK-ASM: vsterf + vec_xst(vec_reve(vd), idx, ptrd); + // CHECK-ASM: vsterg +} + +void test_integer(void) { + // CHECK-ASM-LABEL: test_integer + + vsc = vec_sldb(vsc, vsc, 0); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsld + vsc = vec_sldb(vsc, vsc, 7); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsld + vuc = vec_sldb(vuc, vuc, 0); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsld + vuc = vec_sldb(vuc, vuc, 7); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsld + vss = vec_sldb(vss, vss, 0); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsld + vss = vec_sldb(vss, vss, 7); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsld + vus = vec_sldb(vus, vus, 0); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsld + vus = vec_sldb(vus, vus, 7); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsld + vsi = vec_sldb(vsi, vsi, 0); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsld + vsi = vec_sldb(vsi, vsi, 7); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsld + vui = vec_sldb(vui, vui, 0); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsld + vui = vec_sldb(vui, vui, 7); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsld + vsl = vec_sldb(vsl, vsl, 0); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsld + vsl = vec_sldb(vsl, vsl, 7); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsld + vul = vec_sldb(vul, vul, 0); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsld + vul = vec_sldb(vul, vul, 7); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsld + vf = vec_sldb(vf, vf, 0); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsld + vf = vec_sldb(vf, vf, 7); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsld + vd = vec_sldb(vd, vd, 0); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsld + vd = vec_sldb(vd, vd, 7); + // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsld + + vsc = vec_srdb(vsc, vsc, 0); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsrd + vsc = vec_srdb(vsc, vsc, 7); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsrd + vuc = vec_srdb(vuc, vuc, 0); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsrd + vuc = vec_srdb(vuc, vuc, 7); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsrd + vss = vec_srdb(vss, vss, 0); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsrd + vss = vec_srdb(vss, vss, 7); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsrd + vus = vec_srdb(vus, vus, 0); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsrd + vus = vec_srdb(vus, vus, 7); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsrd + vsi = vec_srdb(vsi, vsi, 0); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsrd + vsi = vec_srdb(vsi, vsi, 7); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsrd + vui = vec_srdb(vui, vui, 0); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsrd + vui = vec_srdb(vui, vui, 7); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsrd + vsl = vec_srdb(vsl, vsl, 0); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsrd + vsl = vec_srdb(vsl, vsl, 7); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsrd + vul = vec_srdb(vul, vul, 0); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsrd + vul = vec_srdb(vul, vul, 7); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsrd + vf = vec_srdb(vf, vf, 0); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsrd + vf = vec_srdb(vf, vf, 7); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsrd + vd = vec_srdb(vd, vd, 0); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0) + // CHECK-ASM: vsrd + vd = vec_srdb(vd, vd, 7); + // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7) + // CHECK-ASM: vsrd +} + +void test_string(void) { + // CHECK-ASM-LABEL: test_string + + vuc = vec_search_string_cc(vsc, vsc, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0 + vuc = vec_search_string_cc(vbc, vbc, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0 + vuc = vec_search_string_cc(vuc, vuc, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0 + vuc = vec_search_string_cc(vss, vss, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0 + vuc = vec_search_string_cc(vbs, vbs, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0 + vuc = vec_search_string_cc(vus, vus, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0 + vuc = vec_search_string_cc(vsi, vsi, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0 + vuc = vec_search_string_cc(vbi, vbi, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0 + vuc = vec_search_string_cc(vui, vui, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0 + + vuc = vec_search_string_until_zero_cc(vsc, vsc, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} + vuc = vec_search_string_until_zero_cc(vbc, vbc, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} + vuc = vec_search_string_until_zero_cc(vuc, vuc, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} + vuc = vec_search_string_until_zero_cc(vss, vss, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} + vuc = vec_search_string_until_zero_cc(vbs, vbs, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} + vuc = vec_search_string_until_zero_cc(vus, vus, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} + vuc = vec_search_string_until_zero_cc(vsi, vsi, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} + vuc = vec_search_string_until_zero_cc(vbi, vbi, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} + vuc = vec_search_string_until_zero_cc(vui, vui, vuc, &cc); + // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} +} + +void test_float(void) { + // CHECK-ASM-LABEL: test_float + + vd = vec_double(vsl); + // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double> + // CHECK-ASM: vcdgb + vd = vec_double(vul); + // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double> + // CHECK-ASM: vcdlgb + vf = vec_float(vsi); + // CHECK: sitofp <4 x i32> %{{.*}} to <4 x float> + // CHECK-ASM: vcefb + vf = vec_float(vui); + // CHECK: uitofp <4 x i32> %{{.*}} to <4 x float> + // CHECK-ASM: vcelfb + + vsl = vec_signed(vd); + // CHECK: fptosi <2 x double> %{{.*}} to <2 x i64> + // CHECK-ASM: vcgdb + vsi = vec_signed(vf); + // CHECK: fptosi <4 x float> %{{.*}} to <4 x i32> + // CHECK-ASM: vcfeb + vul = vec_unsigned(vd); + // CHECK: fptoui <2 x double> %{{.*}} to <2 x i64> + // CHECK-ASM: vclgdb + vui = vec_unsigned(vf); + // CHECK: fptoui <4 x float> %{{.*}} to <4 x i32> + // CHECK-ASM: vclfeb +} + |