llvm-project/clang/test/CodeGen/SystemZ/builtins-systemz-zvector4.c
Ulrich Weigand 1283ccb610 Support z16 processor name
The recently announced IBM z16 processor implements the architecture
already supported as "arch14" in LLVM.  This patch adds support for
"z16" as an alternate architecture name for arch14.
2022-04-21 19:58:22 +02:00

64 lines
2.3 KiB
C

// REQUIRES: systemz-registered-target
// RUN: %clang_cc1 -target-cpu z16 -triple s390x-linux-gnu \
// RUN: -O2 -fzvector -flax-vector-conversions=none \
// RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s
// RUN: %clang_cc1 -target-cpu z16 -triple s390x-linux-gnu \
// RUN: -O2 -fzvector -flax-vector-conversions=none \
// 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;
void test_nnp_assist(void) {
// CHECK-ASM-LABEL: test_nnp_assist
vf = vec_extend_to_fp32_hi(vus, 0);
// CHECK: call <4 x float> @llvm.s390.vclfnhs(<8 x i16> %{{.*}}, i32 0)
// CHECK-ASM: vclfnh
vf = vec_extend_to_fp32_hi(vus, 15);
// CHECK: call <4 x float> @llvm.s390.vclfnhs(<8 x i16> %{{.*}}, i32 15)
// CHECK-ASM: vclfnh
vf = vec_extend_to_fp32_lo(vus, 0);
// CHECK: call <4 x float> @llvm.s390.vclfnls(<8 x i16> %{{.*}}, i32 0)
// CHECK-ASM: vclfnl
vf = vec_extend_to_fp32_lo(vus, 15);
// CHECK: call <4 x float> @llvm.s390.vclfnls(<8 x i16> %{{.*}}, i32 15)
// CHECK-ASM: vclfnl
vus = vec_round_from_fp32(vf, vf, 0);
// CHECK: call <8 x i16> @llvm.s390.vcrnfs(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i32 0)
// CHECK-ASM: vcrnf
vus = vec_round_from_fp32(vf, vf, 15);
// CHECK: call <8 x i16> @llvm.s390.vcrnfs(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i32 15)
// CHECK-ASM: vcrnf
vus = vec_convert_to_fp16(vus, 0);
// CHECK: call <8 x i16> @llvm.s390.vcfn(<8 x i16> %{{.*}} i32 0)
// CHECK-ASM: vcfn
vus = vec_convert_to_fp16(vus, 15);
// CHECK: call <8 x i16> @llvm.s390.vcfn(<8 x i16> %{{.*}} i32 15)
// CHECK-ASM: vcfn
vus = vec_convert_from_fp16(vus, 0);
// CHECK: call <8 x i16> @llvm.s390.vcnf(<8 x i16> %{{.*}} i32 0)
// CHECK-ASM: vcnf
vus = vec_convert_from_fp16(vus, 15);
// CHECK: call <8 x i16> @llvm.s390.vcnf(<8 x i16> %{{.*}} i32 15)
// CHECK-ASM: vcnf
}