blob: 0108d909c94e64f2e99b110084939dd4438f91ce [file] [log] [blame]
Yaxun Liuffb60902016-08-09 20:10:18 +00001// RUN: %clang_cc1 %s -emit-llvm -o - -triple spir-unknown-unknown | FileCheck --check-prefix=CHECK --check-prefix=NODIVOPT %s
2// RUN: %clang_cc1 %s -emit-llvm -o - -triple spir-unknown-unknown -cl-fp32-correctly-rounded-divide-sqrt | FileCheck --check-prefix=CHECK --check-prefix=DIVOPT %s
Neil Hickey88c0fac2016-12-13 16:22:50 +00003// RUN: %clang_cc1 %s -emit-llvm -o - -DNOFP64 -cl-std=CL1.2 -triple r600-unknown-unknown -target-cpu r600 -pedantic | FileCheck --check-prefix=CHECK-FLT %s
Neil Hickeyc881be12016-12-13 17:04:33 +00004// RUN: %clang_cc1 %s -emit-llvm -o - -DFP64 -cl-std=CL1.2 -triple spir-unknown-unknown -pedantic | FileCheck --check-prefix=CHECK-DBL %s
Peter Collingbourne95fd2ca2011-10-27 19:19:51 +00005
6typedef __attribute__(( ext_vector_type(4) )) float float4;
7
8float spscalardiv(float a, float b) {
9 // CHECK: @spscalardiv
Yaxun Liuffb60902016-08-09 20:10:18 +000010 // CHECK: #[[ATTR:[0-9]+]]
11 // CHECK: fdiv{{.*}},
12 // NODIVOPT: !fpmath ![[MD:[0-9]+]]
13 // DIVOPT-NOT: !fpmath ![[MD:[0-9]+]]
Peter Collingbourne95fd2ca2011-10-27 19:19:51 +000014 return a / b;
15}
16
17float4 spvectordiv(float4 a, float4 b) {
18 // CHECK: @spvectordiv
Craig Topper3113ec32018-10-24 17:42:17 +000019 // CHECK: #[[ATTR2:[0-9]+]]
Yaxun Liuffb60902016-08-09 20:10:18 +000020 // CHECK: fdiv{{.*}},
21 // NODIVOPT: !fpmath ![[MD]]
22 // DIVOPT-NOT: !fpmath ![[MD]]
Peter Collingbourne95fd2ca2011-10-27 19:19:51 +000023 return a / b;
24}
25
Neil Hickey88c0fac2016-12-13 16:22:50 +000026#if __OPENCL_C_VERSION__ >=120
27void printf(constant char* fmt, ...);
Neil Hickeyf6036722016-11-14 11:15:51 +000028
Neil Hickey88c0fac2016-12-13 16:22:50 +000029void testdbllit(long *val) {
30 // CHECK-FLT: float 2.000000e+01
31 // CHECK-DBL: double 2.000000e+01
32 printf("%f", 20.0);
33}
34
35#endif
36
37#ifndef NOFP64
38#pragma OPENCL EXTENSION cl_khr_fp64 : enable
Peter Collingbourne95fd2ca2011-10-27 19:19:51 +000039double dpscalardiv(double a, double b) {
40 // CHECK: @dpscalardiv
Yaxun Liuffb60902016-08-09 20:10:18 +000041 // CHECK: #[[ATTR]]
Duncan Sands6fc46192012-04-14 12:37:26 +000042 // CHECK-NOT: !fpmath
Peter Collingbourne95fd2ca2011-10-27 19:19:51 +000043 return a / b;
44}
Neil Hickey88c0fac2016-12-13 16:22:50 +000045#endif
Peter Collingbourne95fd2ca2011-10-27 19:19:51 +000046
Yaxun Liuffb60902016-08-09 20:10:18 +000047// CHECK: attributes #[[ATTR]] = {
Craig Topper3113ec32018-10-24 17:42:17 +000048// NODIVOPT-SAME: "correctly-rounded-divide-sqrt-fp-math"="false"
49// DIVOPT-SAME: "correctly-rounded-divide-sqrt-fp-math"="true"
50// CHECK-SAME: }
51// CHECK: attributes #[[ATTR2]] = {
52// NODIVOPT-SAME: "correctly-rounded-divide-sqrt-fp-math"="false"
53// DIVOPT-SAME: "correctly-rounded-divide-sqrt-fp-math"="true"
54// CHECK-SAME: }
Yaxun Liuffb60902016-08-09 20:10:18 +000055// NODIVOPT: ![[MD]] = !{float 2.500000e+00}