
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.
64 lines
2.3 KiB
C
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
|
|
}
|