mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 09:16:05 +00:00

levels: -- none: no lax vector conversions [new GCC default] -- integer: only conversions between integer vectors [old GCC default] -- all: all conversions between same-size vectors [Clang default] For now, Clang still defaults to "all" mode, but per my proposal on cfe-dev (2019-04-10) the default will be changed to "integer" as soon as that doesn't break lots of testcases. (Eventually I'd like to change the default to "none" to match GCC and general sanity.) Following GCC's behavior, the driver flag -flax-vector-conversions is translated to -flax-vector-conversions=integer. This reinstates r371805, reverted in r371813, with an additional fix for lldb. llvm-svn: 371817
51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
// REQUIRES: systemz-registered-target
|
|
// RUN: %clang_cc1 -target-cpu z13 -triple s390x-linux-gnu \
|
|
// RUN: -fzvector -flax-vector-conversions=none -std=c++11 \
|
|
// RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s
|
|
|
|
bool gb;
|
|
|
|
// There was an issue where we weren't properly converting constexprs to
|
|
// vectors with elements of the appropriate width. (e.g.
|
|
// (vector signed short)0 would be lowered as [4 x i32] in some cases)
|
|
|
|
// CHECK-LABEL: @_Z8testIntsDv4_i
|
|
void testInts(vector int VI) {
|
|
constexpr vector int CI1 = (vector int)0LL;
|
|
// CHECK: icmp
|
|
gb = (VI == CI1)[0];
|
|
|
|
// Likewise for float inits.
|
|
constexpr vector int CI2 = (vector int)char(0);
|
|
// CHECK: icmp
|
|
gb = (VI == CI2)[0];
|
|
|
|
constexpr vector int CF1 = (vector int)0.0;
|
|
// CHECK: icmp
|
|
gb = (VI == CF1)[0];
|
|
|
|
constexpr vector int CF2 = (vector int)0.0f;
|
|
// CHECK: icmp
|
|
gb = (VI == CF2)[0];
|
|
}
|
|
|
|
// CHECK-LABEL: @_Z10testFloatsDv2_d
|
|
void testFloats(vector double VD) {
|
|
constexpr vector double CI1 = (vector double)0LL;
|
|
// CHECK: fcmp
|
|
gb = (VD == CI1)[0];
|
|
|
|
// Likewise for float inits.
|
|
constexpr vector double CI2 = (vector double)char(0);
|
|
// CHECK: fcmp
|
|
gb = (VD == CI2)[0];
|
|
|
|
constexpr vector double CF1 = (vector double)0.0;
|
|
// CHECK: fcmp
|
|
gb = (VD == CF1)[0];
|
|
|
|
constexpr vector double CF2 = (vector double)0.0f;
|
|
// CHECK: fcmp
|
|
gb = (VD == CF2)[0];
|
|
}
|