brintos

brintos / llvm-project-archived public Read only

0
0
Text · 19.3 KiB · ce8b315 Raw
507 lines · c
1// REQUIRES: systemz-registered-target2// RUN: %clang_cc1 -target-cpu z15 -triple s390x-linux-gnu \3// RUN: -O2 -fzvector -flax-vector-conversions=none \4// RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s5// RUN: %clang_cc1 -target-cpu z15 -triple s390x-linux-gnu \6// RUN: -O2 -fzvector -flax-vector-conversions=none \7// RUN: -Wall -Wno-unused -Werror -S %s -o - | FileCheck %s --check-prefix=CHECK-ASM8 9#include <vecintrin.h>10 11volatile vector signed char vsc;12volatile vector signed short vss;13volatile vector signed int vsi;14volatile vector signed long long vsl;15volatile vector signed __int128 vslll;16volatile vector unsigned char vuc;17volatile vector unsigned short vus;18volatile vector unsigned int vui;19volatile vector unsigned long long vul;20volatile vector unsigned __int128 vulll;21volatile vector bool char vbc;22volatile vector bool short vbs;23volatile vector bool int vbi;24volatile vector bool long long vbl;25volatile vector float vf;26volatile vector double vd;27 28volatile signed char sc;29volatile signed short ss;30volatile signed int si;31volatile signed long long sl;32volatile unsigned char uc;33volatile unsigned short us;34volatile unsigned int ui;35volatile unsigned long long ul;36volatile float f;37volatile double d;38 39const void * volatile cptr;40const signed char * volatile cptrsc;41const signed short * volatile cptrss;42const signed int * volatile cptrsi;43const signed long long * volatile cptrsl;44const signed __int128 * volatile cptrslll;45const unsigned char * volatile cptruc;46const unsigned short * volatile cptrus;47const unsigned int * volatile cptrui;48const unsigned long long * volatile cptrul;49const unsigned __int128 * volatile cptrulll;50const float * volatile cptrf;51const double * volatile cptrd;52 53void * volatile ptr;54signed char * volatile ptrsc;55signed short * volatile ptrss;56signed int * volatile ptrsi;57signed long long * volatile ptrsl;58signed __int128 * volatile ptrslll;59unsigned char * volatile ptruc;60unsigned short * volatile ptrus;61unsigned int * volatile ptrui;62unsigned long long * volatile ptrul;63unsigned __int128 * volatile ptrulll;64float * volatile ptrf;65double * volatile ptrd;66 67volatile unsigned int len;68volatile int idx;69int cc;70 71void test_core(void) {72  // CHECK-ASM-LABEL: test_core73  vector signed short vss2;74  vector signed int vsi2;75  vector signed long long vsl2;76  vector unsigned short vus2;77  vector unsigned int vui2;78  vector unsigned long long vul2;79  vector float vf2;80  vector double vd2;81 82  vss += vec_revb(vec_xl(idx, cptrss));83  // CHECK-ASM: vlbrh84  vus += vec_revb(vec_xl(idx, cptrus));85  // CHECK-ASM: vlbrh86  vsi += vec_revb(vec_xl(idx, cptrsi));87  // CHECK-ASM: vlbrf88  vui += vec_revb(vec_xl(idx, cptrui));89  // CHECK-ASM: vlbrf90  vsl += vec_revb(vec_xl(idx, cptrsl));91  // CHECK-ASM: vlbrg92  vul += vec_revb(vec_xl(idx, cptrul));93  // CHECK-ASM: vlbrg94  vslll += vec_revb(vec_xl(idx, cptrslll));95  // CHECK-ASM: vlbrq96  vulll += vec_revb(vec_xl(idx, cptrulll));97  // CHECK-ASM: vlbrq98  vf += vec_revb(vec_xl(idx, cptrf));99  // CHECK-ASM: vlbrf100  vd += vec_revb(vec_xl(idx, cptrd));101  // CHECK-ASM: vlbrg102 103  vec_xst(vec_revb(vss), idx, ptrss);104  // CHECK-ASM: vstbrh105  vec_xst(vec_revb(vus), idx, ptrus);106  // CHECK-ASM: vstbrh107  vec_xst(vec_revb(vsi), idx, ptrsi);108  // CHECK-ASM: vstbrf109  vec_xst(vec_revb(vui), idx, ptrui);110  // CHECK-ASM: vstbrf111  vec_xst(vec_revb(vsl), idx, ptrsl);112  // CHECK-ASM: vstbrg113  vec_xst(vec_revb(vul), idx, ptrul);114  // CHECK-ASM: vstbrg115  vec_xst(vec_revb(vslll), idx, ptrslll);116  // CHECK-ASM: vstbrq117  vec_xst(vec_revb(vulll), idx, ptrulll);118  // CHECK-ASM: vstbrq119  vec_xst(vec_revb(vf), idx, ptrf);120  // CHECK-ASM: vstbrf121  vec_xst(vec_revb(vd), idx, ptrd);122  // CHECK-ASM: vstbrg123 124  vss += vec_revb(vec_insert_and_zero(cptrss));125  // CHECK-ASM: vllebrzh126  vus += vec_revb(vec_insert_and_zero(cptrus));127  // CHECK-ASM: vllebrzh128  vsi += vec_revb(vec_insert_and_zero(cptrsi));129  // CHECK-ASM: vllebrzf130  vui += vec_revb(vec_insert_and_zero(cptrui));131  // CHECK-ASM: vllebrzf132  vsl += vec_revb(vec_insert_and_zero(cptrsl));133  // CHECK-ASM: vllebrzg134  vul += vec_revb(vec_insert_and_zero(cptrul));135  // CHECK-ASM: vllebrzg136  vf += vec_revb(vec_insert_and_zero(cptrf));137  // CHECK-ASM: vllebrzf138  vd += vec_revb(vec_insert_and_zero(cptrd));139  // CHECK-ASM: vllebrzg140 141  vss += vec_revb(vec_splats(ss));142  // CHECK-ASM: vlbrreph143  vus += vec_revb(vec_splats(us));144  // CHECK-ASM: vlbrreph145  vsi += vec_revb(vec_splats(si));146  // CHECK-ASM: vlbrrepf147  vui += vec_revb(vec_splats(ui));148  // CHECK-ASM: vlbrrepf149  vsl += vec_revb(vec_splats(sl));150  // CHECK-ASM: vlbrrepg151  vul += vec_revb(vec_splats(ul));152  // CHECK-ASM: vlbrrepg153  vf += vec_revb(vec_splats(f));154  // CHECK-ASM: vlbrrepf155  vd += vec_revb(vec_splats(d));156  // CHECK-ASM: vlbrrepg157 158  vus = vec_splats(__builtin_bswap16(us));159  // CHECK-ASM: vlbrreph160  vui = vec_splats(__builtin_bswap32(ui));161  // CHECK-ASM: vlbrrepf162  vul = vec_splats((unsigned long long)__builtin_bswap64(ul));163  // CHECK-ASM: vlbrrepg164 165  vss2 = vss;166  vss += vec_revb(vec_insert(ss, vec_revb(vss2), 0));167  // CHECK-ASM: vlebrh168  vus2 = vus;169  vus += vec_revb(vec_insert(us, vec_revb(vus2), 0));170  // CHECK-ASM: vlebrh171  vsi2 = vsi;172  vsi += vec_revb(vec_insert(si, vec_revb(vsi2), 0));173  // CHECK-ASM: vlebrf174  vui2 = vui;175  vui += vec_revb(vec_insert(ui, vec_revb(vui2), 0));176  // CHECK-ASM: vlebrf177  vsl2 = vsl;178  vsl += vec_revb(vec_insert(sl, vec_revb(vsl2), 0));179  // CHECK-ASM: vlebrg180  vul2 = vul;181  vul += vec_revb(vec_insert(ul, vec_revb(vul2), 0));182  // CHECK-ASM: vlebrg183  vf2 = vf;184  vf += vec_revb(vec_insert(f, vec_revb(vf2), 0));185  // CHECK-ASM: vlebrf186  vd2 = vd;187  vd += vec_revb(vec_insert(d, vec_revb(vd2), 0));188  // CHECK-ASM: vlebrg189 190  vus2 = vus;191  vus = vec_insert(__builtin_bswap16(us), vus2, 0);192  // CHECK-ASM: vlebrh193  vui2 = vui;194  vui = vec_insert(__builtin_bswap32(ui), vui2, 0);195  // CHECK-ASM: vlebrf196  vul2 = vul;197  vul = vec_insert(__builtin_bswap64(ul), vul2, 0);198  // CHECK-ASM: vlebrg199 200  ss = vec_extract(vec_revb(vss), 0);201  // CHECK-ASM: vstebrh202  us = vec_extract(vec_revb(vus), 0);203  // CHECK-ASM: vstebrh204  si = vec_extract(vec_revb(vsi), 0);205  // CHECK-ASM: vstebrf206  ui = vec_extract(vec_revb(vui), 0);207  // CHECK-ASM: vstebrf208  sl = vec_extract(vec_revb(vsl), 0);209  // CHECK-ASM: vstebrg210  ul = vec_extract(vec_revb(vul), 0);211  // CHECK-ASM: vstebrg212  f = vec_extract(vec_revb(vf), 0);213  // CHECK-ASM: vstebrf214  d = vec_extract(vec_revb(vd), 0);215  // CHECK-ASM: vstebrg216 217  us = __builtin_bswap16(vec_extract(vus, 0));218  // CHECK-ASM: vstebrh219  ui = __builtin_bswap32(vec_extract(vui, 0));220  // CHECK-ASM: vstebrf221  ul = __builtin_bswap64(vec_extract(vul, 0));222  // CHECK-ASM: vstebrg223 224  vsc += vec_reve(vec_xl(idx, cptrsc));225  // CHECK-ASM: vlbrq226  vuc += vec_reve(vec_xl(idx, cptruc));227  // CHECK-ASM: vlbrq228  vss += vec_reve(vec_xl(idx, cptrss));229  // CHECK-ASM: vlerh230  vus += vec_reve(vec_xl(idx, cptrus));231  // CHECK-ASM: vlerh232  vsi += vec_reve(vec_xl(idx, cptrsi));233  // CHECK-ASM: vlerf234  vui += vec_reve(vec_xl(idx, cptrui));235  // CHECK-ASM: vlerf236  vsl += vec_reve(vec_xl(idx, cptrsl));237  // CHECK-ASM: vlerg238  vul += vec_reve(vec_xl(idx, cptrul));239  // CHECK-ASM: vlerg240  vf += vec_reve(vec_xl(idx, cptrf));241  // CHECK-ASM: vlerf242  vd += vec_reve(vec_xl(idx, cptrd));243  // CHECK-ASM: vlerg244 245  vec_xst(vec_reve(vsc), idx, ptrsc);246  // CHECK-ASM: vstbrq247  vec_xst(vec_reve(vuc), idx, ptruc);248  // CHECK-ASM: vstbrq249  vec_xst(vec_reve(vss), idx, ptrss);250  // CHECK-ASM: vsterh251  vec_xst(vec_reve(vus), idx, ptrus);252  // CHECK-ASM: vsterh253  vec_xst(vec_reve(vsi), idx, ptrsi);254  // CHECK-ASM: vsterf255  vec_xst(vec_reve(vui), idx, ptrui);256  // CHECK-ASM: vsterf257  vec_xst(vec_reve(vsl), idx, ptrsl);258  // CHECK-ASM: vsterg259  vec_xst(vec_reve(vul), idx, ptrul);260  // CHECK-ASM: vsterg261  vec_xst(vec_reve(vf), idx, ptrf);262  // CHECK-ASM: vsterf263  vec_xst(vec_reve(vd), idx, ptrd);264  // CHECK-ASM: vsterg265}266 267void test_integer(void) {268  // CHECK-ASM-LABEL: test_integer269 270  vsc = vec_sldb(vsc, vsc, 0);271  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)272  // CHECK-ASM: vsld273  vsc = vec_sldb(vsc, vsc, 7);274  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)275  // CHECK-ASM: vsld276  vuc = vec_sldb(vuc, vuc, 0);277  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)278  // CHECK-ASM: vsld279  vuc = vec_sldb(vuc, vuc, 7);280  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)281  // CHECK-ASM: vsld282  vss = vec_sldb(vss, vss, 0);283  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)284  // CHECK-ASM: vsld285  vss = vec_sldb(vss, vss, 7);286  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)287  // CHECK-ASM: vsld288  vus = vec_sldb(vus, vus, 0);289  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)290  // CHECK-ASM: vsld291  vus = vec_sldb(vus, vus, 7);292  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)293  // CHECK-ASM: vsld294  vsi = vec_sldb(vsi, vsi, 0);295  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)296  // CHECK-ASM: vsld297  vsi = vec_sldb(vsi, vsi, 7);298  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)299  // CHECK-ASM: vsld300  vui = vec_sldb(vui, vui, 0);301  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)302  // CHECK-ASM: vsld303  vui = vec_sldb(vui, vui, 7);304  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)305  // CHECK-ASM: vsld306  vsl = vec_sldb(vsl, vsl, 0);307  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)308  // CHECK-ASM: vsld309  vsl = vec_sldb(vsl, vsl, 7);310  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)311  // CHECK-ASM: vsld312  vul = vec_sldb(vul, vul, 0);313  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)314  // CHECK-ASM: vsld315  vul = vec_sldb(vul, vul, 7);316  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)317  // CHECK-ASM: vsld318  vslll = vec_sldb(vslll, vslll, 0);319  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)320  // CHECK-ASM: vsld321  vslll = vec_sldb(vslll, vslll, 7);322  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)323  // CHECK-ASM: vsld324  vulll = vec_sldb(vulll, vulll, 0);325  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)326  // CHECK-ASM: vsld327  vulll = vec_sldb(vulll, vulll, 7);328  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)329  // CHECK-ASM: vsld330  vf = vec_sldb(vf, vf, 0);331  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)332  // CHECK-ASM: vsld333  vf = vec_sldb(vf, vf, 7);334  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)335  // CHECK-ASM: vsld336  vd = vec_sldb(vd, vd, 0);337  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)338  // CHECK-ASM: vsld339  vd = vec_sldb(vd, vd, 7);340  // CHECK: call <16 x i8> @llvm.s390.vsld(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)341  // CHECK-ASM: vsld342 343  vsc = vec_srdb(vsc, vsc, 0);344  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)345  // CHECK-ASM: vsrd346  vsc = vec_srdb(vsc, vsc, 7);347  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)348  // CHECK-ASM: vsrd349  vuc = vec_srdb(vuc, vuc, 0);350  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)351  // CHECK-ASM: vsrd352  vuc = vec_srdb(vuc, vuc, 7);353  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)354  // CHECK-ASM: vsrd355  vss = vec_srdb(vss, vss, 0);356  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)357  // CHECK-ASM: vsrd358  vss = vec_srdb(vss, vss, 7);359  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)360  // CHECK-ASM: vsrd361  vus = vec_srdb(vus, vus, 0);362  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)363  // CHECK-ASM: vsrd364  vus = vec_srdb(vus, vus, 7);365  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)366  // CHECK-ASM: vsrd367  vsi = vec_srdb(vsi, vsi, 0);368  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)369  // CHECK-ASM: vsrd370  vsi = vec_srdb(vsi, vsi, 7);371  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)372  // CHECK-ASM: vsrd373  vui = vec_srdb(vui, vui, 0);374  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)375  // CHECK-ASM: vsrd376  vui = vec_srdb(vui, vui, 7);377  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)378  // CHECK-ASM: vsrd379  vsl = vec_srdb(vsl, vsl, 0);380  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)381  // CHECK-ASM: vsrd382  vsl = vec_srdb(vsl, vsl, 7);383  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)384  // CHECK-ASM: vsrd385  vul = vec_srdb(vul, vul, 0);386  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)387  // CHECK-ASM: vsrd388  vul = vec_srdb(vul, vul, 7);389  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)390  // CHECK-ASM: vsrd391  vslll = vec_srdb(vslll, vslll, 0);392  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)393  // CHECK-ASM: vsrd394  vslll = vec_srdb(vslll, vslll, 7);395  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)396  // CHECK-ASM: vsrd397  vulll = vec_srdb(vulll, vulll, 0);398  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)399  // CHECK-ASM: vsrd400  vulll = vec_srdb(vulll, vulll, 7);401  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)402  // CHECK-ASM: vsrd403  vf = vec_srdb(vf, vf, 0);404  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)405  // CHECK-ASM: vsrd406  vf = vec_srdb(vf, vf, 7);407  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)408  // CHECK-ASM: vsrd409  vd = vec_srdb(vd, vd, 0);410  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)411  // CHECK-ASM: vsrd412  vd = vec_srdb(vd, vd, 7);413  // CHECK: call <16 x i8> @llvm.s390.vsrd(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 7)414  // CHECK-ASM: vsrd415}416 417void test_string(void) {418  // CHECK-ASM-LABEL: test_string419 420  vuc = vec_search_string_cc(vsc, vsc, vuc, &cc);421  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})422  // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0423  vuc = vec_search_string_cc(vbc, vbc, vuc, &cc);424  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})425  // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0426  vuc = vec_search_string_cc(vuc, vuc, vuc, &cc);427  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})428  // CHECK-ASM: vstrsb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0429  vuc = vec_search_string_cc(vss, vss, vuc, &cc);430  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})431  // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0432  vuc = vec_search_string_cc(vbs, vbs, vuc, &cc);433  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})434  // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0435  vuc = vec_search_string_cc(vus, vus, vuc, &cc);436  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})437  // CHECK-ASM: vstrsh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0438  vuc = vec_search_string_cc(vsi, vsi, vuc, &cc);439  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})440  // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0441  vuc = vec_search_string_cc(vbi, vbi, vuc, &cc);442  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})443  // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0444  vuc = vec_search_string_cc(vui, vui, vuc, &cc);445  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrsf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})446  // CHECK-ASM: vstrsf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, 0447 448  vuc = vec_search_string_until_zero_cc(vsc, vsc, vuc, &cc);449  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})450  // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}451  vuc = vec_search_string_until_zero_cc(vbc, vbc, vuc, &cc);452  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})453  // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}454  vuc = vec_search_string_until_zero_cc(vuc, vuc, vuc, &cc);455  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})456  // CHECK-ASM: vstrszb %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}457  vuc = vec_search_string_until_zero_cc(vss, vss, vuc, &cc);458  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})459  // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}460  vuc = vec_search_string_until_zero_cc(vbs, vbs, vuc, &cc);461  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})462  // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}463  vuc = vec_search_string_until_zero_cc(vus, vus, vuc, &cc);464  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszh(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i8> %{{.*}})465  // CHECK-ASM: vstrszh %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}466  vuc = vec_search_string_until_zero_cc(vsi, vsi, vuc, &cc);467  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})468  // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}469  vuc = vec_search_string_until_zero_cc(vbi, vbi, vuc, &cc);470  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})471  // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}472  vuc = vec_search_string_until_zero_cc(vui, vui, vuc, &cc);473  // CHECK: call { <16 x i8>, i32 } @llvm.s390.vstrszf(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i8> %{{.*}})474  // CHECK-ASM: vstrszf %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}475}476 477void test_float(void) {478  // CHECK-ASM-LABEL: test_float479 480  vd = vec_double(vsl);481  // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>482  // CHECK-ASM: vcdgb483  vd = vec_double(vul);484  // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double>485  // CHECK-ASM: vcdlgb486  vf = vec_float(vsi);487  // CHECK: sitofp <4 x i32> %{{.*}} to <4 x float>488  // CHECK-ASM: vcefb489  vf = vec_float(vui);490  // CHECK: uitofp <4 x i32> %{{.*}} to <4 x float>491  // CHECK-ASM: vcelfb492 493  vsl = vec_signed(vd);494  // CHECK: fptosi <2 x double> %{{.*}} to <2 x i64>495  // CHECK-ASM: vcgdb496  vsi = vec_signed(vf);497  // CHECK: fptosi <4 x float> %{{.*}} to <4 x i32>498  // CHECK-ASM: vcfeb499  vul = vec_unsigned(vd);500  // CHECK: fptoui <2 x double> %{{.*}} to <2 x i64>501  // CHECK-ASM: vclgdb502  vui = vec_unsigned(vf);503  // CHECK: fptoui <4 x float> %{{.*}} to <4 x i32>504  // CHECK-ASM: vclfeb505}506 507