r290171 - [OpenCL] Enabling the usage of CLK_NULL_QUEUE as compare operand.
Daniel Jasper via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 20 02:02:35 PST 2016
This triggers a bunch of warnings:
lib/AST/Expr.cpp:1519:11: error: enumeration value 'CK_ZeroToOCLQueue'
not handled in switch [-Werror,-Wswitch]
lib/CodeGen/CGExprConstant.cpp:654:13: error: enumeration value
'CK_ZeroToOCLQueue' not handled in switch [-Werror,-Wswitch]
lib/Edit/RewriteObjCFoundationAPI.cpp:1000:13: error: enumeration value
'CK_ZeroToOCLQueue' not handled in switch [-Werror,-Wswitch]
lib/StaticAnalyzer/Core/ExprEngineC.cpp:314:13: error: enumeration value
'CK_ZeroToOCLQueue' not handled in switch [-Werror,-Wswitch]
Can you please fix or roll back quickly?
On Tue, Dec 20, 2016 at 10:15 AM, Egor Churaev via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: echuraev
> Date: Tue Dec 20 03:15:21 2016
> New Revision: 290171
>
> URL: http://llvm.org/viewvc/llvm-project?rev=290171&view=rev
> Log:
> [OpenCL] Enabling the usage of CLK_NULL_QUEUE as compare operand.
>
> Summary: Enabling the compression of CLK_NULL_QUEUE to variable of type
> queue_t.
>
> Reviewers: Anastasia
>
> Subscribers: cfe-commits, yaxunl, bader
>
> Differential Revision: https://reviews.llvm.org/D27569
>
> Added:
> cfe/trunk/test/CodeGenOpenCL/null_queue.cl
> cfe/trunk/test/SemaOpenCL/null_queue.cl
> cfe/trunk/test/SemaOpenCL/queue_t_overload.cl
> Modified:
> cfe/trunk/include/clang/AST/OperationKinds.def
> cfe/trunk/include/clang/Sema/Initialization.h
> cfe/trunk/include/clang/Sema/Overload.h
> cfe/trunk/lib/AST/ExprConstant.cpp
> cfe/trunk/lib/CodeGen/CGExprAgg.cpp
> cfe/trunk/lib/CodeGen/CGExprComplex.cpp
> cfe/trunk/lib/CodeGen/CGExprScalar.cpp
> cfe/trunk/lib/Sema/SemaExpr.cpp
> cfe/trunk/lib/Sema/SemaExprCXX.cpp
> cfe/trunk/lib/Sema/SemaInit.cpp
> cfe/trunk/lib/Sema/SemaOverload.cpp
>
> Modified: cfe/trunk/include/clang/AST/OperationKinds.def
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/
> clang/AST/OperationKinds.def?rev=290171&r1=290170&r2=290171&view=diff
> ============================================================
> ==================
> --- cfe/trunk/include/clang/AST/OperationKinds.def (original)
> +++ cfe/trunk/include/clang/AST/OperationKinds.def Tue Dec 20 03:15:21
> 2016
> @@ -321,6 +321,9 @@ CAST_OPERATION(BuiltinFnToFnPtr)
> // Convert a zero value for OpenCL event_t initialization.
> CAST_OPERATION(ZeroToOCLEvent)
>
> +// Convert a zero value for OpenCL queue_t initialization.
> +CAST_OPERATION(ZeroToOCLQueue)
> +
> // Convert a pointer to a different address space.
> CAST_OPERATION(AddressSpaceConversion)
>
>
> Modified: cfe/trunk/include/clang/Sema/Initialization.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/
> clang/Sema/Initialization.h?rev=290171&r1=290170&r2=290171&view=diff
> ============================================================
> ==================
> --- cfe/trunk/include/clang/Sema/Initialization.h (original)
> +++ cfe/trunk/include/clang/Sema/Initialization.h Tue Dec 20 03:15:21 2016
> @@ -751,6 +751,8 @@ public:
> SK_StdInitializerListConstructorCall,
> /// \brief Initialize an OpenCL sampler from an integer.
> SK_OCLSamplerInit,
> + /// \brief Initialize queue_t from 0.
> + SK_OCLZeroQueue,
> /// \brief Passing zero to a function where OpenCL event_t is
> expected.
> SK_OCLZeroEvent
> };
> @@ -1148,6 +1150,9 @@ public:
> /// constant.
> void AddOCLZeroEventStep(QualType T);
>
> + /// \brief Add a step to initialize an OpenCL queue_t from 0.
> + void AddOCLZeroQueueStep(QualType T);
> +
> /// \brief Add steps to unwrap a initializer list for a reference
> around a
> /// single element and rewrap it at the end.
> void RewrapReferenceInitList(QualType T, InitListExpr *Syntactic);
>
> Modified: cfe/trunk/include/clang/Sema/Overload.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/
> clang/Sema/Overload.h?rev=290171&r1=290170&r2=290171&view=diff
> ============================================================
> ==================
> --- cfe/trunk/include/clang/Sema/Overload.h (original)
> +++ cfe/trunk/include/clang/Sema/Overload.h Tue Dec 20 03:15:21 2016
> @@ -83,6 +83,7 @@ namespace clang {
> ICK_TransparentUnionConversion, ///< Transparent Union Conversions
> ICK_Writeback_Conversion, ///< Objective-C ARC writeback conversion
> ICK_Zero_Event_Conversion, ///< Zero constant to event (OpenCL1.2
> 6.12.10)
> + ICK_Zero_Queue_Conversion, ///< Zero constant to queue
> ICK_C_Only_Conversion, ///< Conversions allowed in C, but not C++
> ICK_Incompatible_Pointer_Conversion, ///< C-only conversion between
> pointers
> /// with incompatible types
>
> Modified: cfe/trunk/lib/AST/ExprConstant.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/
> ExprConstant.cpp?rev=290171&r1=290170&r2=290171&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/AST/ExprConstant.cpp (original)
> +++ cfe/trunk/lib/AST/ExprConstant.cpp Tue Dec 20 03:15:21 2016
> @@ -8340,6 +8340,7 @@ bool IntExprEvaluator::VisitCastExpr(con
> case CK_IntegralComplexToFloatingComplex:
> case CK_BuiltinFnToFnPtr:
> case CK_ZeroToOCLEvent:
> + case CK_ZeroToOCLQueue:
> case CK_NonAtomicToAtomic:
> case CK_AddressSpaceConversion:
> case CK_IntToOCLSampler:
> @@ -8837,6 +8838,7 @@ bool ComplexExprEvaluator::VisitCastExpr
> case CK_CopyAndAutoreleaseBlockObject:
> case CK_BuiltinFnToFnPtr:
> case CK_ZeroToOCLEvent:
> + case CK_ZeroToOCLQueue:
> case CK_NonAtomicToAtomic:
> case CK_AddressSpaceConversion:
> case CK_IntToOCLSampler:
>
> Modified: cfe/trunk/lib/CodeGen/CGExprAgg.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/
> CGExprAgg.cpp?rev=290171&r1=290170&r2=290171&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/CodeGen/CGExprAgg.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExprAgg.cpp Tue Dec 20 03:15:21 2016
> @@ -751,6 +751,7 @@ void AggExprEmitter::VisitCastExpr(CastE
> case CK_CopyAndAutoreleaseBlockObject:
> case CK_BuiltinFnToFnPtr:
> case CK_ZeroToOCLEvent:
> + case CK_ZeroToOCLQueue:
> case CK_AddressSpaceConversion:
> case CK_IntToOCLSampler:
> llvm_unreachable("cast kind invalid for aggregate types");
>
> Modified: cfe/trunk/lib/CodeGen/CGExprComplex.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/
> CGExprComplex.cpp?rev=290171&r1=290170&r2=290171&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/CodeGen/CGExprComplex.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExprComplex.cpp Tue Dec 20 03:15:21 2016
> @@ -480,6 +480,7 @@ ComplexPairTy ComplexExprEmitter::EmitCa
> case CK_CopyAndAutoreleaseBlockObject:
> case CK_BuiltinFnToFnPtr:
> case CK_ZeroToOCLEvent:
> + case CK_ZeroToOCLQueue:
> case CK_AddressSpaceConversion:
> case CK_IntToOCLSampler:
> llvm_unreachable("invalid cast kind for complex value");
>
> Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/
> CGExprScalar.cpp?rev=290171&r1=290170&r2=290171&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Tue Dec 20 03:15:21 2016
> @@ -1593,6 +1593,11 @@ Value *ScalarExprEmitter::VisitCastExpr(
> return llvm::Constant::getNullValue(ConvertType(DestTy));
> }
>
> + case CK_ZeroToOCLQueue: {
> + assert(DestTy->isQueueT() && "CK_ZeroToOCLQueue cast on non queue_t
> type");
> + return llvm::Constant::getNullValue(ConvertType(DestTy));
> + }
> +
> case CK_IntToOCLSampler:
> return CGF.CGM.createOpenCLIntToSamplerConversion(E, CGF);
>
>
> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/
> SemaExpr.cpp?rev=290171&r1=290170&r2=290171&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Tue Dec 20 03:15:21 2016
> @@ -9635,6 +9635,18 @@ QualType Sema::CheckCompareOperands(Expr
> return ResultTy;
> }
>
> + if (getLangOpts().OpenCLVersion >= 200) {
> + if (LHSIsNull && RHSType->isQueueT()) {
> + LHS = ImpCastExprToType(LHS.get(), RHSType, CK_NullToPointer);
> + return ResultTy;
> + }
> +
> + if (LHSType->isQueueT() && RHSIsNull) {
> + RHS = ImpCastExprToType(RHS.get(), LHSType, CK_NullToPointer);
> + return ResultTy;
> + }
> + }
> +
> return InvalidOperands(Loc, LHS, RHS);
> }
>
>
> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/
> SemaExprCXX.cpp?rev=290171&r1=290170&r2=290171&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Tue Dec 20 03:15:21 2016
> @@ -3878,6 +3878,12 @@ Sema::PerformImplicitConversion(Expr *Fr
> From->getValueKind()).get();
> break;
>
> + case ICK_Zero_Queue_Conversion:
> + From = ImpCastExprToType(From, ToType,
> + CK_ZeroToOCLQueue,
> + From->getValueKind()).get();
> + break;
> +
> case ICK_Lvalue_To_Rvalue:
> case ICK_Array_To_Pointer:
> case ICK_Function_To_Pointer:
>
> Modified: cfe/trunk/lib/Sema/SemaInit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/
> SemaInit.cpp?rev=290171&r1=290170&r2=290171&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Sema/SemaInit.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaInit.cpp Tue Dec 20 03:15:21 2016
> @@ -3077,6 +3077,7 @@ void InitializationSequence::Step::Destr
> case SK_StdInitializerListConstructorCall:
> case SK_OCLSamplerInit:
> case SK_OCLZeroEvent:
> + case SK_OCLZeroQueue:
> break;
>
> case SK_ConversionSequence:
> @@ -3365,6 +3366,13 @@ void InitializationSequence::AddOCLZeroE
> Steps.push_back(S);
> }
>
> +void InitializationSequence::AddOCLZeroQueueStep(QualType T) {
> + Step S;
> + S.Kind = SK_OCLZeroQueue;
> + S.Type = T;
> + Steps.push_back(S);
> +}
> +
> void InitializationSequence::RewrapReferenceInitList(QualType T,
> InitListExpr
> *Syntactic) {
> assert(Syntactic->getNumInits() == 1 &&
> @@ -5030,6 +5038,20 @@ static bool TryOCLZeroEventInitializatio
> return true;
> }
>
> +static bool TryOCLZeroQueueInitialization(Sema &S,
> + InitializationSequence
> &Sequence,
> + QualType DestType,
> + Expr *Initializer) {
> + if (!S.getLangOpts().OpenCL || S.getLangOpts().OpenCLVersion < 200 ||
> + !DestType->isQueueT() ||
> + !Initializer->isIntegerConstantExpr(S.getASTContext()) ||
> + (Initializer->EvaluateKnownConstInt(S.getASTContext()) != 0))
> + return false;
> +
> + Sequence.AddOCLZeroQueueStep(DestType);
> + return true;
> +}
> +
> InitializationSequence::InitializationSequence(Sema &S,
> const InitializedEntity
> &Entity,
> const InitializationKind
> &Kind,
> @@ -5292,6 +5314,9 @@ void InitializationSequence::InitializeF
> if (TryOCLZeroEventInitialization(S, *this, DestType, Initializer))
> return;
>
> + if (TryOCLZeroQueueInitialization(S, *this, DestType, Initializer))
> + return;
> +
> // Handle initialization in C
> AddCAssignmentStep(DestType);
> MaybeProduceObjCObject(S, *this, Entity);
> @@ -6529,7 +6554,8 @@ InitializationSequence::Perform(Sema &S,
> case SK_ProduceObjCObject:
> case SK_StdInitializerList:
> case SK_OCLSamplerInit:
> - case SK_OCLZeroEvent: {
> + case SK_OCLZeroEvent:
> + case SK_OCLZeroQueue: {
> assert(Args.size() == 1);
> CurInit = Args[0];
> if (!CurInit.get()) return ExprError();
> @@ -7213,6 +7239,15 @@ InitializationSequence::Perform(Sema &S,
> CurInit.get()->getValueKind());
> break;
> }
> + case SK_OCLZeroQueue: {
> + assert(Step->Type->isQueueT() &&
> + "Event initialization on non queue type.");
> +
> + CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type,
> + CK_ZeroToOCLQueue,
> + CurInit.get()->getValueKind());
> + break;
> + }
> }
> }
>
> @@ -8041,6 +8076,10 @@ void InitializationSequence::dump(raw_os
> case SK_OCLZeroEvent:
> OS << "OpenCL event_t from zero";
> break;
> +
> + case SK_OCLZeroQueue:
> + OS << "OpenCL queue_t from zero";
> + break;
> }
>
> OS << " [" << S->Type.getAsString() << ']';
>
> Modified: cfe/trunk/lib/Sema/SemaOverload.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/
> SemaOverload.cpp?rev=290171&r1=290170&r2=290171&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Sema/SemaOverload.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaOverload.cpp Tue Dec 20 03:15:21 2016
> @@ -1785,6 +1785,11 @@ static bool IsStandardConversion(Sema &S
> From->EvaluateKnownConstInt(S.getASTContext()) == 0) {
> SCS.Second = ICK_Zero_Event_Conversion;
> FromType = ToType;
> + } else if (ToType->isQueueT() &&
> + From->isIntegerConstantExpr(S.getASTContext()) &&
> + (From->EvaluateKnownConstInt(S.getASTContext()) == 0)) {
> + SCS.Second = ICK_Zero_Queue_Conversion;
> + FromType = ToType;
> } else {
> // No second conversion required.
> SCS.Second = ICK_Identity;
> @@ -5162,6 +5167,7 @@ static bool CheckConvertedConstantConver
> case ICK_Function_Conversion:
> case ICK_Integral_Promotion:
> case ICK_Integral_Conversion: // Narrowing conversions are checked
> elsewhere.
> + case ICK_Zero_Queue_Conversion:
> return true;
>
> case ICK_Boolean_Conversion:
>
> Added: cfe/trunk/test/CodeGenOpenCL/null_queue.cl
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> CodeGenOpenCL/null_queue.cl?rev=290171&view=auto
> ============================================================
> ==================
> --- cfe/trunk/test/CodeGenOpenCL/null_queue.cl (added)
> +++ cfe/trunk/test/CodeGenOpenCL/null_queue.cl Tue Dec 20 03:15:21 2016
> @@ -0,0 +1,18 @@
> +// RUN: %clang_cc1 -O0 -cl-std=CL2.0 -emit-llvm %s -o - | FileCheck %s
> +extern queue_t get_default_queue();
> +
> +bool compare() {
> + return 0 == get_default_queue() &&
> + get_default_queue() == 0;
> + // CHECK: icmp eq %opencl.queue_t* null, %{{.*}}
> + // CHECK: icmp eq %opencl.queue_t* %{{.*}}, null
> +}
> +
> +void func(queue_t q);
> +
> +void init() {
> + queue_t q = 0;
> + func(0);
> + // CHECK: store %opencl.queue_t* null, %opencl.queue_t** %q
> + // CHECK: call void @func(%opencl.queue_t* null)
> +}
>
> Added: cfe/trunk/test/SemaOpenCL/null_queue.cl
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> SemaOpenCL/null_queue.cl?rev=290171&view=auto
> ============================================================
> ==================
> --- cfe/trunk/test/SemaOpenCL/null_queue.cl (added)
> +++ cfe/trunk/test/SemaOpenCL/null_queue.cl Tue Dec 20 03:15:21 2016
> @@ -0,0 +1,12 @@
> +// RUN: %clang_cc1 %s -cl-std=CL2.0 -verify -pedantic -fsyntax-only
> +extern queue_t get_default_queue();
> +
> +bool compare() {
> + return 1 == get_default_queue() && // expected-error{{invalid operands
> to binary expression ('int' and 'queue_t')}}
> + get_default_queue() == 1; // expected-error{{invalid operands to
> binary expression ('queue_t' and 'int')}}
> +}
> +
> +void init() {
> + queue_t q1 = 1; // expected-error{{initializing 'queue_t' with an
> expression of incompatible type 'int'}}
> + queue_t q = 0;
> +}
>
> Added: cfe/trunk/test/SemaOpenCL/queue_t_overload.cl
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/
> SemaOpenCL/queue_t_overload.cl?rev=290171&view=auto
> ============================================================
> ==================
> --- cfe/trunk/test/SemaOpenCL/queue_t_overload.cl (added)
> +++ cfe/trunk/test/SemaOpenCL/queue_t_overload.cl Tue Dec 20 03:15:21 2016
> @@ -0,0 +1,12 @@
> +// RUN: %clang_cc1 %s -cl-std=CL2.0 -verify -pedantic -fsyntax-only
> +
> +void __attribute__((overloadable)) foo(queue_t, __local char *); //
> expected-note {{candidate function not viable: no known conversion from
> 'int' to 'queue_t' for 1st argument}} // expected-note {{candidate
> function}}
> +void __attribute__((overloadable)) foo(queue_t, __local float *); //
> expected-note {{candidate function not viable: no known conversion from
> 'int' to 'queue_t' for 1st argument}} // expected-note {{candidate
> function}}
> +
> +void kernel ker(__local char *src1, __local float *src2, __global int
> *src3) {
> + queue_t q;
> + foo(q, src1);
> + foo(0, src2);
> + foo(q, src3); // expected-error {{call to 'foo' is ambiguous}}
> + foo(1, src3); // expected-error {{no matching function for call to
> 'foo'}}
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161220/eec39ac6/attachment-0001.html>
More information about the cfe-commits
mailing list