110 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: -ffp-exception-behavior=strict \5// RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s6// RUN: %clang_cc1 -target-cpu z15 -triple s390x-linux-gnu \7// RUN: -O2 -fzvector -flax-vector-conversions=none \8// RUN: -ffp-exception-behavior=strict \9// RUN: -Wall -Wno-unused -Werror -S %s -o - | FileCheck %s --check-prefix=CHECK-ASM10 11#include <vecintrin.h>12 13volatile vector signed int vsi;14volatile vector signed long long vsl;15volatile vector unsigned int vui;16volatile vector unsigned long long vul;17volatile vector float vf;18volatile vector double vd;19 20volatile float f;21volatile double d;22 23const float * volatile cptrf;24const double * volatile cptrd;25 26float * volatile ptrf;27double * volatile ptrd;28 29volatile int idx;30 31void test_core(void) {32 // CHECK-ASM-LABEL: test_core33 vector float vf2;34 vector double vd2;35 36 vf += vec_revb(vec_xl(idx, cptrf));37 // CHECK-ASM: vlbrf38 vd += vec_revb(vec_xl(idx, cptrd));39 // CHECK-ASM: vlbrg40 41 vec_xst(vec_revb(vf), idx, ptrf);42 // CHECK-ASM: vstbrf43 vec_xst(vec_revb(vd), idx, ptrd);44 // CHECK-ASM: vstbrg45 46 vf += vec_revb(vec_insert_and_zero(cptrf));47 // CHECK-ASM: vllebrzf48 vd += vec_revb(vec_insert_and_zero(cptrd));49 // CHECK-ASM: vllebrzg50 51 vf += vec_revb(vec_splats(f));52 // CHECK-ASM: vlbrrepf53 vd += vec_revb(vec_splats(d));54 // CHECK-ASM: vlbrrepg55 56 vf2 = vf;57 vf += vec_revb(vec_insert(f, vec_revb(vf2), 0));58 // CHECK-ASM: vlebrf59 vd2 = vd;60 vd += vec_revb(vec_insert(d, vec_revb(vd2), 0));61 // CHECK-ASM: vlebrg62 63 f = vec_extract(vec_revb(vf), 0);64 // CHECK-ASM: vstebrf65 d = vec_extract(vec_revb(vd), 0);66 // CHECK-ASM: vstebrg67 68 vf += vec_reve(vec_xl(idx, cptrf));69 // CHECK-ASM: vlerf70 vd += vec_reve(vec_xl(idx, cptrd));71 // CHECK-ASM: vlerg72 73 vec_xst(vec_reve(vf), idx, ptrf);74 // CHECK-ASM: vsterf75 vec_xst(vec_reve(vd), idx, ptrd);76 // CHECK-ASM: vsterg77}78 79void test_float(void) {80 // CHECK-ASM-LABEL: test_float81 82 vd = vec_double(vsl);83 // CHECK: call <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %{{.*}}, metadata !{{.*}})84 // CHECK-ASM: vcdgb85 vd = vec_double(vul);86 // CHECK: call <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %{{.*}}, metadata !{{.*}})87 // CHECK-ASM: vcdlgb88 vf = vec_float(vsi);89 // CHECK: call <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %{{.*}}, metadata !{{.*}})90 // CHECK-ASM: vcefb91 vf = vec_float(vui);92 // CHECK: call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %{{.*}}, metadata !{{.*}})93 // CHECK-ASM: vcelfb94 95 vsl = vec_signed(vd);96 // CHECK: call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double> %{{.*}}, metadata !{{.*}})97 // CHECK-ASM: vcgdb98 vsi = vec_signed(vf);99 // CHECK: call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float> %{{.*}}, metadata !{{.*}})100 // CHECK-ASM: vcfeb101 vul = vec_unsigned(vd);102 // CHECK: call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double> %{{.*}}, metadata !{{.*}})103 // CHECK-ASM: vclgdb104 vui = vec_unsigned(vf);105 // xHECK: fptoui <4 x float> %{{.*}} to <4 x i32>106 // CHECK: call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float> %{{.*}}, metadata !{{.*}})107 // CHECK-ASM: vclfeb108}109 110