// REQUIRES: systemz-registered-target // RUN: %clang_cc1 -target-cpu z15 -triple s390x-linux-gnu \ // RUN: -O2 -fzvector -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s // RUN: %clang_cc1 -target-cpu z15 -triple s390x-linux-gnu \ // RUN: -O2 -fzvector -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -S %s -o - | FileCheck %s --check-prefix=CHECK-ASM #include 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 }