// 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
}

