From: Neil Hickey Date: Mon, 19 Sep 2016 11:42:14 +0000 (+0000) Subject: Reverting r281714 due to causing an assert when calling builtins that expect a double... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bd7adaf409178dcaa1e9e15f38ae6992d0f982a9;p=clang Reverting r281714 due to causing an assert when calling builtins that expect a double, from CL git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@281899 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 53cd35c613..72a35866ad 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -828,18 +828,8 @@ ExprResult Sema::DefaultArgumentPromotion(Expr *E) { // double. const BuiltinType *BTy = Ty->getAs(); if (BTy && (BTy->getKind() == BuiltinType::Half || - BTy->getKind() == BuiltinType::Float)) { - if (getLangOpts().OpenCL && - !((getLangOpts().OpenCLVersion >= 120 && - Context.getTargetInfo() - .getSupportedOpenCLOpts() - .cl_khr_fp64) || - getOpenCLOptions().cl_khr_fp64)) { - E = ImpCastExprToType(E, Context.FloatTy, CK_FloatingCast).get(); - } else { - E = ImpCastExprToType(E, Context.DoubleTy, CK_FloatingCast).get(); - } - } + BTy->getKind() == BuiltinType::Float)) + E = ImpCastExprToType(E, Context.DoubleTy, CK_FloatingCast).get(); // C++ performs lvalue-to-rvalue conversion as a default argument // promotion, even on class types, but note: @@ -3416,14 +3406,8 @@ ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) { if (getLangOpts().SinglePrecisionConstants) { Res = ImpCastExprToType(Res, Context.FloatTy, CK_FloatingCast).get(); } else if (getLangOpts().OpenCL && - !((getLangOpts().OpenCLVersion >= 120 && - Context.getTargetInfo() - .getSupportedOpenCLOpts() - .cl_khr_fp64) || + !((getLangOpts().OpenCLVersion >= 120) || getOpenCLOptions().cl_khr_fp64)) { - // Impose single-precision float type when: - // - in CL 1.2 or above and cl_khr_fp64 is not supported, or - // - in CL 1.1 or below and cl_khr_fp64 is not enabled. Diag(Tok.getLocation(), diag::warn_double_const_requires_fp64); Res = ImpCastExprToType(Res, Context.FloatTy, CK_FloatingCast).get(); } diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index cd9ebe945f..1619483f08 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -1401,8 +1401,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { Result = Context.DoubleTy; if (S.getLangOpts().OpenCL && - !((S.getLangOpts().OpenCLVersion >= 120 - && S.Context.getTargetInfo().getSupportedOpenCLOpts().cl_khr_fp64) || + !((S.getLangOpts().OpenCLVersion >= 120) || S.getOpenCLOptions().cl_khr_fp64)) { S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_requires_extension) << Result << "cl_khr_fp64"; diff --git a/test/CodeGenOpenCL/fpmath.cl b/test/CodeGenOpenCL/fpmath.cl index c23e03b3ff..780c95f6fb 100644 --- a/test/CodeGenOpenCL/fpmath.cl +++ b/test/CodeGenOpenCL/fpmath.cl @@ -1,6 +1,5 @@ // RUN: %clang_cc1 %s -emit-llvm -o - -triple spir-unknown-unknown | FileCheck --check-prefix=CHECK --check-prefix=NODIVOPT %s // 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 -// RUN: %clang_cc1 %s -emit-llvm -o - -DNOFP64 -cl-std=CL1.1 -triple r600-unknown-unknown -target-cpu r600 -pedantic | FileCheck --check-prefix=CHECK-DBL %s typedef __attribute__(( ext_vector_type(4) )) float float4; @@ -22,26 +21,14 @@ float4 spvectordiv(float4 a, float4 b) { return a / b; } -void printf(constant char* fmt, ...); - -#ifndef NOFP64 #pragma OPENCL EXTENSION cl_khr_fp64 : enable -#endif -void testdbllit(long *val) { - // CHECK-DBL: float 2.000000e+01 - // CHECK: double 2.000000e+01 - printf("%f", 20.0); -} -#ifndef NOFP64 -#pragma OPENCL EXTENSION cl_khr_fp64 : enable double dpscalardiv(double a, double b) { // CHECK: @dpscalardiv // CHECK: #[[ATTR]] // CHECK-NOT: !fpmath return a / b; } -#endif // CHECK: attributes #[[ATTR]] = { // NODIVOPT: "correctly-rounded-divide-sqrt-fp-math"="false" diff --git a/test/SemaOpenCL/extensions.cl b/test/SemaOpenCL/extensions.cl index 33ed2ce2e7..31224e0df7 100644 --- a/test/SemaOpenCL/extensions.cl +++ b/test/SemaOpenCL/extensions.cl @@ -1,16 +1,13 @@ // RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only // RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only -cl-std=CL1.1 -// RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic -fsyntax-only -cl-std=CL1.2 -DFP64 // Test with a target not supporting fp64. // RUN: %clang_cc1 %s -triple r600-unknown-unknown -target-cpu r600 -verify -pedantic -fsyntax-only -DNOFP64 -#if __OPENCL_C_VERSION__ < 120 void f1(double da) { // expected-error {{type 'double' requires cl_khr_fp64 extension}} double d; // expected-error {{type 'double' requires cl_khr_fp64 extension}} (void) 1.0; // expected-warning {{double precision constant requires cl_khr_fp64}} } -#endif #pragma OPENCL EXTENSION cl_khr_fp64 : enable #ifdef NOFP64 @@ -24,12 +21,8 @@ void f2(void) { #endif (void) 1.0; -#ifdef FP64 -// expected-no-diagnostics -#endif - #ifdef NOFP64 -// expected-warning@-6{{double precision constant requires cl_khr_fp64, casting to single precision}} +// expected-warning@-2{{double precision constant requires cl_khr_fp64, casting to single precision}} #endif } @@ -38,8 +31,6 @@ void f2(void) { // expected-warning@-2{{unsupported OpenCL extension 'cl_khr_fp64' - ignoring}} #endif -#if __OPENCL_C_VERSION__ < 120 void f3(void) { double d; // expected-error {{type 'double' requires cl_khr_fp64 extension}} } -#endif