|
@@ -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
|
|
|
+}
|
|
|
+
|