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