
Autogenerate the clang/test/CodeGen/SystemZ/zvector{,2}.c test cases to make it easier to update them in the future.
304 lines
11 KiB
C
304 lines
11 KiB
C
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
|
|
// RUN: %clang_cc1 -triple s390x-linux-gnu -target-cpu z14 -fzvector \
|
|
// RUN: -O -emit-llvm -o - -W -Wall -Werror %s | FileCheck %s
|
|
|
|
volatile vector float ff, ff2;
|
|
volatile vector bool int bi;
|
|
|
|
// CHECK-LABEL: define dso_local void @test_assign(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3:![0-9]+]]
|
|
// CHECK-NEXT: store volatile <4 x float> [[TMP0]], ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_assign (void)
|
|
{
|
|
ff = ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_pos(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: store volatile <4 x float> [[TMP0]], ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_pos (void)
|
|
{
|
|
ff = +ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_neg(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[FNEG:%.*]] = fneg <4 x float> [[TMP0]]
|
|
// CHECK-NEXT: store volatile <4 x float> [[FNEG]], ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_neg (void)
|
|
{
|
|
ff = -ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_preinc(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[INC:%.*]] = fadd <4 x float> [[TMP0]], splat (float 1.000000e+00)
|
|
// CHECK-NEXT: store volatile <4 x float> [[INC]], ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_preinc (void)
|
|
{
|
|
++ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_postinc(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[INC:%.*]] = fadd <4 x float> [[TMP0]], splat (float 1.000000e+00)
|
|
// CHECK-NEXT: store volatile <4 x float> [[INC]], ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_postinc (void)
|
|
{
|
|
ff2++;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_predec(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[DEC:%.*]] = fadd <4 x float> [[TMP0]], splat (float -1.000000e+00)
|
|
// CHECK-NEXT: store volatile <4 x float> [[DEC]], ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_predec (void)
|
|
{
|
|
--ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_postdec(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[DEC:%.*]] = fadd <4 x float> [[TMP0]], splat (float -1.000000e+00)
|
|
// CHECK-NEXT: store volatile <4 x float> [[DEC]], ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_postdec (void)
|
|
{
|
|
ff2--;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_add(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[ADD:%.*]] = fadd <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: store volatile <4 x float> [[ADD]], ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_add (void)
|
|
{
|
|
ff = ff + ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_add_assign(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[ADD:%.*]] = fadd <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: store volatile <4 x float> [[ADD]], ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_add_assign (void)
|
|
{
|
|
ff += ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_sub(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[SUB:%.*]] = fsub <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: store volatile <4 x float> [[SUB]], ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_sub (void)
|
|
{
|
|
ff = ff - ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_sub_assign(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[SUB:%.*]] = fsub <4 x float> [[TMP1]], [[TMP0]]
|
|
// CHECK-NEXT: store volatile <4 x float> [[SUB]], ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_sub_assign (void)
|
|
{
|
|
ff -= ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_mul(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[MUL:%.*]] = fmul <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: store volatile <4 x float> [[MUL]], ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_mul (void)
|
|
{
|
|
ff = ff * ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_mul_assign(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[MUL:%.*]] = fmul <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: store volatile <4 x float> [[MUL]], ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_mul_assign (void)
|
|
{
|
|
ff *= ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_div(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[DIV:%.*]] = fdiv <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: store volatile <4 x float> [[DIV]], ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_div (void)
|
|
{
|
|
ff = ff / ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_div_assign(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[DIV:%.*]] = fdiv <4 x float> [[TMP1]], [[TMP0]]
|
|
// CHECK-NEXT: store volatile <4 x float> [[DIV]], ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_div_assign (void)
|
|
{
|
|
ff /= ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_cmpeq(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[CMP:%.*]] = fcmp oeq <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
|
|
// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_cmpeq (void)
|
|
{
|
|
bi = ff == ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_cmpne(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[CMP:%.*]] = fcmp une <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
|
|
// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_cmpne (void)
|
|
{
|
|
bi = ff != ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_cmpge(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[CMP:%.*]] = fcmp oge <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
|
|
// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_cmpge (void)
|
|
{
|
|
bi = ff >= ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_cmpgt(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[CMP:%.*]] = fcmp ogt <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
|
|
// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_cmpgt (void)
|
|
{
|
|
bi = ff > ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_cmple(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[CMP:%.*]] = fcmp ole <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
|
|
// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_cmple (void)
|
|
{
|
|
bi = ff <= ff2;
|
|
}
|
|
|
|
// CHECK-LABEL: define dso_local void @test_cmplt(
|
|
// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
|
|
// CHECK-NEXT: [[ENTRY:.*:]]
|
|
// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: [[CMP:%.*]] = fcmp olt <4 x float> [[TMP0]], [[TMP1]]
|
|
// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>
|
|
// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[TBAA3]]
|
|
// CHECK-NEXT: ret void
|
|
//
|
|
void test_cmplt (void)
|
|
{
|
|
bi = ff < ff2;
|
|
}
|
|
|
|
//.
|
|
// CHECK: [[TBAA3]] = !{[[META4:![0-9]+]], [[META4]], i64 0}
|
|
// CHECK: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}
|
|
// CHECK: [[META5]] = !{!"Simple C/C++ TBAA"}
|
|
//.
|