Reverted in rL290173. On Tue, Dec 20, 2016 at 11:02 AM, Daniel Jasper <djas...@google.com> wrote:
> 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@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/ExprCo >> nstant.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/CG >> ExprAgg.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/CG >> ExprComplex.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/CG >> ExprScalar.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/SemaE >> xpr.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/SemaE >> xprCXX.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/SemaI >> nit.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/SemaO >> verload.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/CodeGenOp >> enCL/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/SemaOpenC >> L/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/SemaOpenC >> L/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@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits