Files
clang-p2996/clang/test/CodeGen/SystemZ/zvector2.c
Maryam Moghadas 155abd0678 [PowerPC] Emit warn_deprecated_lax_vec_conv_all warning only for PPC
This patch is to isolate the lax vector conversions warning only for PPC,
the reason is that SystemZ wants different logic in terms of
vector bool compatibility.

Reviewed By: lei

Differential Revision: https://reviews.llvm.org/D145506
2023-03-21 08:51:25 -05:00

195 lines
5.6 KiB
C

// 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;
void test_assign (void)
{
// CHECK-LABEL: test_assign
// CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: store volatile <4 x float> [[VAL]], ptr @ff
ff = ff2;
}
void test_pos (void)
{
// CHECK-LABEL: test_pos
// CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: store volatile <4 x float> [[VAL]], ptr @ff
ff = +ff2;
}
void test_neg (void)
{
// CHECK-LABEL: test_neg
// CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: %{{.*}} = fneg <4 x float> [[VAL]]
ff = -ff2;
}
void test_preinc (void)
{
// CHECK-LABEL: test_preinc
// CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: %{{.*}} = fadd <4 x float> [[VAL]], <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
++ff2;
}
void test_postinc (void)
{
// CHECK-LABEL: test_postinc
// CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: %{{.*}} = fadd <4 x float> [[VAL]], <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
ff2++;
}
void test_predec (void)
{
// CHECK-LABEL: test_predec
// CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: %{{.*}} = fadd <4 x float> [[VAL]], <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00>
--ff2;
}
void test_postdec (void)
{
// CHECK-LABEL: test_postdec
// CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: %{{.*}} = fadd <4 x float> [[VAL]], <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00>
ff2--;
}
void test_add (void)
{
// CHECK-LABEL: test_add
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: %{{.*}} = fadd <4 x float> [[VAL1]], [[VAL2]]
ff = ff + ff2;
}
void test_add_assign (void)
{
// CHECK-LABEL: test_add_assign
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: %{{.*}} = fadd <4 x float> [[VAL2]], [[VAL1]]
ff += ff2;
}
void test_sub (void)
{
// CHECK-LABEL: test_sub
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: %{{.*}} = fsub <4 x float> [[VAL1]], [[VAL2]]
ff = ff - ff2;
}
void test_sub_assign (void)
{
// CHECK-LABEL: test_sub_assign
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: %{{.*}} = fsub <4 x float> [[VAL1]], [[VAL2]]
ff -= ff2;
}
void test_mul (void)
{
// CHECK-LABEL: test_mul
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: %{{.*}} = fmul <4 x float> [[VAL1]], [[VAL2]]
ff = ff * ff2;
}
void test_mul_assign (void)
{
// CHECK-LABEL: test_mul_assign
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: %{{.*}} = fmul <4 x float> [[VAL2]], [[VAL1]]
ff *= ff2;
}
void test_div (void)
{
// CHECK-LABEL: test_div
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: %{{.*}} = fdiv <4 x float> [[VAL1]], [[VAL2]]
ff = ff / ff2;
}
void test_div_assign (void)
{
// CHECK-LABEL: test_div_assign
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: %{{.*}} = fdiv <4 x float> [[VAL1]], [[VAL2]]
ff /= ff2;
}
void test_cmpeq (void)
{
// CHECK-LABEL: test_cmpeq
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: [[CMP:%[^ ]+]] = fcmp oeq <4 x float> [[VAL1]], [[VAL2]]
// CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
bi = ff == ff2;
}
void test_cmpne (void)
{
// CHECK-LABEL: test_cmpne
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: [[CMP:%[^ ]+]] = fcmp une <4 x float> [[VAL1]], [[VAL2]]
// CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
bi = ff != ff2;
}
void test_cmpge (void)
{
// CHECK-LABEL: test_cmpge
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: [[CMP:%[^ ]+]] = fcmp oge <4 x float> [[VAL1]], [[VAL2]]
// CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
bi = ff >= ff2;
}
void test_cmpgt (void)
{
// CHECK-LABEL: test_cmpgt
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: [[CMP:%[^ ]+]] = fcmp ogt <4 x float> [[VAL1]], [[VAL2]]
// CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
bi = ff > ff2;
}
void test_cmple (void)
{
// CHECK-LABEL: test_cmple
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: [[CMP:%[^ ]+]] = fcmp ole <4 x float> [[VAL1]], [[VAL2]]
// CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
bi = ff <= ff2;
}
void test_cmplt (void)
{
// CHECK-LABEL: test_cmplt
// CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, ptr @ff
// CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, ptr @ff2
// CHECK: [[CMP:%[^ ]+]] = fcmp olt <4 x float> [[VAL1]], [[VAL2]]
// CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32>
bi = ff < ff2;
}