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:33:19 PST 2016


Reverted in rL290173.

On Tue, Dec 20, 2016 at 11:02 AM, Daniel Jasper <djasper at 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 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/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 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/5a2df513/attachment-0001.html>


More information about the cfe-commits mailing list