diff options
Diffstat (limited to 'test/CodeGenOpenCL')
-rw-r--r-- | test/CodeGenOpenCL/fpaccuracy.cl | 25 | ||||
-rw-r--r-- | test/CodeGenOpenCL/vector_literals_nested.cl | 23 | ||||
-rw-r--r-- | test/CodeGenOpenCL/vector_logops.cl | 19 |
3 files changed, 67 insertions, 0 deletions
diff --git a/test/CodeGenOpenCL/fpaccuracy.cl b/test/CodeGenOpenCL/fpaccuracy.cl new file mode 100644 index 0000000000000..d27316a799f3e --- /dev/null +++ b/test/CodeGenOpenCL/fpaccuracy.cl @@ -0,0 +1,25 @@ +// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s + +typedef __attribute__(( ext_vector_type(4) )) float float4; + +float spscalardiv(float a, float b) { + // CHECK: @spscalardiv + // CHECK: fdiv{{.*}}, !fpaccuracy ![[MD:[0-9]+]] + return a / b; +} + +float4 spvectordiv(float4 a, float4 b) { + // CHECK: @spvectordiv + // CHECK: fdiv{{.*}}, !fpaccuracy ![[MD]] + return a / b; +} + +#pragma OPENCL EXTENSION cl_khr_fp64 : enable + +double dpscalardiv(double a, double b) { + // CHECK: @dpscalardiv + // CHECK-NOT: !fpaccuracy + return a / b; +} + +// CHECK: ![[MD]] = metadata !{float 2.500000e+00} diff --git a/test/CodeGenOpenCL/vector_literals_nested.cl b/test/CodeGenOpenCL/vector_literals_nested.cl new file mode 100644 index 0000000000000..b9013d0482f98 --- /dev/null +++ b/test/CodeGenOpenCL/vector_literals_nested.cl @@ -0,0 +1,23 @@ +// RUN: %clang_cc1 %s -emit-llvm -O3 -o - | FileCheck %s + +typedef int int2 __attribute((ext_vector_type(2))); +typedef int int4 __attribute((ext_vector_type(4))); + +__constant const int4 itest1 = (int4)(1, 2, ((int2)(3, 4))); +// CHECK: constant <4 x i32> <i32 1, i32 2, i32 3, i32 4> +__constant const int4 itest2 = (int4)(1, 2, ((int2)(3))); +// CHECK: constant <4 x i32> <i32 1, i32 2, i32 3, i32 3> + +typedef float float2 __attribute((ext_vector_type(2))); +typedef float float4 __attribute((ext_vector_type(4))); + +void ftest1(float4 *p) { + *p = (float4)(1.1f, 1.2f, ((float2)(1.3f, 1.4f))); +// CHECK: store <4 x float> <float 0x3FF19999A0000000, float 0x3FF3333340000000, float 0x3FF4CCCCC0000000, float 0x3FF6666660000000> +} + +float4 ftest2(float4 *p) { + *p = (float4)(1.1f, 1.2f, ((float2)(1.3f))); +// CHECK: store <4 x float> <float 0x3FF19999A0000000, float 0x3FF3333340000000, float 0x3FF4CCCCC0000000, float 0x3FF4CCCCC0000000> +} + diff --git a/test/CodeGenOpenCL/vector_logops.cl b/test/CodeGenOpenCL/vector_logops.cl new file mode 100644 index 0000000000000..388f1d7eb74d5 --- /dev/null +++ b/test/CodeGenOpenCL/vector_logops.cl @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 -O3 %s -emit-llvm -o - | FileCheck %s + +typedef int int2 __attribute((ext_vector_type(2))); + +int test1() +{ + int2 a = (int2)(1,0); + int2 b = (int2)(1,1); + return (a&&b).x + (a||b).y; + // CHECK: ret i32 -2 +} + +int test2() +{ + int2 a = (int2)(1,0); + return (!a).y; + // CHECK: ret i32 -1 +} + |