forked from OSchip/llvm-project
[OpenCL] Support logical vector operators in C++ mode
Support logical operators on vectors in C++ for OpenCL mode, to preserve backwards compatibility with OpenCL C. Differential Revision: https://reviews.llvm.org/D62588 llvm-svn: 362087
This commit is contained in:
parent
c767011329
commit
ce127bb60e
|
@ -10902,7 +10902,7 @@ QualType Sema::CheckVectorLogicalOperands(ExprResult &LHS, ExprResult &RHS,
|
|||
if (vType.isNull())
|
||||
return InvalidOperands(Loc, LHS, RHS);
|
||||
if (getLangOpts().OpenCL && getLangOpts().OpenCLVersion < 120 &&
|
||||
vType->hasFloatingRepresentation())
|
||||
!getLangOpts().OpenCLCPlusPlus && vType->hasFloatingRepresentation())
|
||||
return InvalidOperands(Loc, LHS, RHS);
|
||||
// FIXME: The check for C++ here is for GCC compatibility. GCC rejects the
|
||||
// usage of the logical operators && and || with vectors in C. This
|
||||
|
@ -13165,7 +13165,8 @@ ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc,
|
|||
}
|
||||
} else if (resultType->isExtVectorType()) {
|
||||
if (Context.getLangOpts().OpenCL &&
|
||||
Context.getLangOpts().OpenCLVersion < 120) {
|
||||
Context.getLangOpts().OpenCLVersion < 120 &&
|
||||
!Context.getLangOpts().OpenCLCPlusPlus) {
|
||||
// OpenCL v1.1 6.3.h: The logical operator not (!) does not
|
||||
// operate on vector float types.
|
||||
QualType T = resultType->getAs<ExtVectorType>()->getElementType();
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// RUN: %clang_cc1 %s -emit-llvm -o - -cl-std=CL1.2 -O1 -triple x86_64-unknown-linux-gnu | FileCheck %s
|
||||
// RUN: %clang_cc1 %s -emit-llvm -o - -cl-std=c++ -O1 -triple x86_64-unknown-linux-gnu | FileCheck %s
|
||||
|
||||
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
|
||||
|
||||
|
|
Loading…
Reference in New Issue