llvm-project/clang/test/CodeGenCXX/vector-splat-conversion.cpp
Mehdi Amini e0ac46e69d Revert "Remove rdar links; NFC"
This reverts commit d618f1c3b12effd0c2bdb7d02108d3551f389d3d.
This commit wasn't reviewed ahead of time and significant concerns were
raised immediately after it landed. According to our developer policy
this warrants immediate revert of the commit.

https://llvm.org/docs/DeveloperPolicy.html#patch-reversion-policy

Differential Revision: https://reviews.llvm.org/D155509
2023-07-17 18:08:04 -07:00

63 lines
2.6 KiB
C++

// RUN: %clang_cc1 %s -triple arm64-apple-ios8.1.0 -std=c++11 -emit-llvm -o - | FileCheck %s
typedef __attribute__((__ext_vector_type__(8))) float vector_float8;
typedef vector_float8 float8;
// rdar://20000762
// CHECK-LABEL: define{{.*}} void @_Z23MandelbrotPolyCalcSIMD8v
void MandelbrotPolyCalcSIMD8() {
constexpr float8 v4 = 4.0; // value to compare against abs(z)^2, to see if bounded
float8 vABS;
auto vLT = vABS < v4;
// CHECK: store <8 x float>
// CHECK: [[ZERO:%.*]] = load <8 x float>, ptr [[VARBS:%.*]]
// CHECK: [[CMP:%.*]] = fcmp olt <8 x float> [[ZERO]]
// CHECK: [[SEXT:%.*]] = sext <8 x i1> [[CMP]] to <8 x i32>
// CHECK: store <8 x i32> [[SEXT]], ptr [[VLT:%.*]]
}
typedef __attribute__((__ext_vector_type__(4))) int int4;
typedef __attribute__((__ext_vector_type__(4))) float float4;
typedef __attribute__((__ext_vector_type__(4))) __int128 bigint4;
// CHECK-LABEL: define{{.*}} void @_Z14BoolConversionv
void BoolConversion() {
// CHECK: store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>
int4 intsT = (int4)true;
// CHECK: store <4 x i32> zeroinitializer
int4 intsF = (int4)false;
// CHECK: store <4 x float> <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00>
float4 floatsT = (float4)true;
// CHECK: store <4 x float> zeroinitializer
float4 floatsF = (float4)false;
// CHECK: store <4 x i128> <i128 -1, i128 -1, i128 -1, i128 -1>
bigint4 bigintsT = (bigint4)true;
// CHECK: store <4 x i128> zeroinitializer
bigint4 bigintsF = (bigint4)false;
// CHECK: store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>
constexpr int4 cIntsT = (int4)true;
// CHECK: store <4 x i32> zeroinitializer
constexpr int4 cIntsF = (int4)false;
// CHECK: store <4 x float> <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00>
constexpr float4 cFloatsT = (float4)true;
// CHECK: store <4 x float> zeroinitializer
constexpr float4 cFloatsF = (float4)false;
// CHECK: store <4 x i128> <i128 -1, i128 -1, i128 -1, i128 -1>
constexpr bigint4 cBigintsT = (bigint4)true;
// CHECK: store <4 x i128> zeroinitializer
constexpr bigint4 cBigintsF = (bigint4)false;
}
typedef __attribute__((vector_size(8))) int gcc_int_2;
gcc_int_2 FloatToIntConversion(gcc_int_2 Int2, float f) {
return Int2 + f;
// CHECK: %[[LOAD_INT:.+]] = load <2 x i32>
// CHECK: %[[LOAD:.+]] = load float, ptr
// CHECK: %[[CONV:.+]] = fptosi float %[[LOAD]] to i32
// CHECK: %[[INSERT:.+]] = insertelement <2 x i32> poison, i32 %[[CONV]], i64 0
// CHECK: %[[SPLAT:.+]] = shufflevector <2 x i32> %[[INSERT]], <2 x i32> poison, <2 x i32> zeroinitializer
// CHECK: add <2 x i32> %[[LOAD_INT]], %[[SPLAT]]
}