@@ -620,7 +620,6 @@ void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
620620 }
621621
622622 if (const ReqdWorkGroupSizeAttr *A = FD->getAttr <ReqdWorkGroupSizeAttr>()) {
623- llvm::LLVMContext &Context = getLLVMContext ();
624623 ASTContext &ClangCtx = FD->getASTContext ();
625624 Optional<llvm::APSInt> XDimVal = A->getXDimVal (ClangCtx);
626625 Optional<llvm::APSInt> YDimVal = A->getYDimVal (ClangCtx);
@@ -643,10 +642,9 @@ void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
643642
644643 if (const IntelReqdSubGroupSizeAttr *A =
645644 FD->getAttr <IntelReqdSubGroupSizeAttr>()) {
646- llvm::LLVMContext &Context = getLLVMContext ();
647- Optional<llvm::APSInt> ArgVal =
648- A->getValue ()->getIntegerConstantExpr (FD->getASTContext ());
649- assert (ArgVal.hasValue () && " Not an integer constant expression" );
645+ const auto *CE = dyn_cast<ConstantExpr>(A->getValue ());
646+ assert (CE && " Not an integer constant expression" );
647+ Optional<llvm::APSInt> ArgVal = CE->getResultAsAPSInt ();
650648 llvm::Metadata *AttrMDArgs[] = {llvm::ConstantAsMetadata::get (
651649 Builder.getInt32 (ArgVal->getSExtValue ()))};
652650 Fn->setMetadata (" intel_reqd_sub_group_size" ,
@@ -663,10 +661,9 @@ void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
663661
664662 if (const SYCLIntelNumSimdWorkItemsAttr *A =
665663 FD->getAttr <SYCLIntelNumSimdWorkItemsAttr>()) {
666- llvm::LLVMContext &Context = getLLVMContext ();
667- Optional<llvm::APSInt> ArgVal =
668- A->getValue ()->getIntegerConstantExpr (FD->getASTContext ());
669- assert (ArgVal.hasValue () && " Not an integer constant expression" );
664+ const auto *CE = dyn_cast<ConstantExpr>(A->getValue ());
665+ assert (CE && " Not an integer constant expression" );
666+ Optional<llvm::APSInt> ArgVal = CE->getResultAsAPSInt ();
670667 llvm::Metadata *AttrMDArgs[] = {llvm::ConstantAsMetadata::get (
671668 Builder.getInt32 (ArgVal->getSExtValue ()))};
672669 Fn->setMetadata (" num_simd_work_items" ,
@@ -675,9 +672,9 @@ void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
675672
676673 if (const SYCLIntelSchedulerTargetFmaxMhzAttr *A =
677674 FD->getAttr <SYCLIntelSchedulerTargetFmaxMhzAttr>()) {
678- Optional<llvm::APSInt> ArgVal =
679- A-> getValue ()-> getIntegerConstantExpr (FD-> getASTContext () );
680- assert ( ArgVal. hasValue () && " Not an integer constant expression " );
675+ const auto *CE = dyn_cast<ConstantExpr>(A-> getValue ());
676+ assert (CE && " Not an integer constant expression " );
677+ Optional<llvm::APSInt> ArgVal = CE-> getResultAsAPSInt ( );
681678 llvm::Metadata *AttrMDArgs[] = {llvm::ConstantAsMetadata::get (
682679 Builder.getInt32 (ArgVal->getSExtValue ()))};
683680 Fn->setMetadata (" scheduler_target_fmax_mhz" ,
@@ -686,10 +683,9 @@ void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
686683
687684 if (const SYCLIntelMaxGlobalWorkDimAttr *A =
688685 FD->getAttr <SYCLIntelMaxGlobalWorkDimAttr>()) {
689- llvm::LLVMContext &Context = getLLVMContext ();
690- Optional<llvm::APSInt> ArgVal =
691- A->getValue ()->getIntegerConstantExpr (FD->getASTContext ());
692- assert (ArgVal.hasValue () && " Not an integer constant expression" );
686+ const auto *CE = dyn_cast<ConstantExpr>(A->getValue ());
687+ assert (CE && " Not an integer constant expression" );
688+ Optional<llvm::APSInt> ArgVal = CE->getResultAsAPSInt ();
693689 llvm::Metadata *AttrMDArgs[] = {llvm::ConstantAsMetadata::get (
694690 Builder.getInt32 (ArgVal->getSExtValue ()))};
695691 Fn->setMetadata (" max_global_work_dim" ,
@@ -698,7 +694,6 @@ void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
698694
699695 if (const SYCLIntelMaxWorkGroupSizeAttr *A =
700696 FD->getAttr <SYCLIntelMaxWorkGroupSizeAttr>()) {
701- llvm::LLVMContext &Context = getLLVMContext ();
702697 ASTContext &ClangCtx = FD->getASTContext ();
703698 Optional<llvm::APSInt> XDimVal = A->getXDimVal (ClangCtx);
704699 Optional<llvm::APSInt> YDimVal = A->getYDimVal (ClangCtx);
@@ -723,9 +718,9 @@ void CodeGenFunction::EmitOpenCLKernelMetadata(const FunctionDecl *FD,
723718 FD->getAttr <SYCLIntelNoGlobalWorkOffsetAttr>()) {
724719 const Expr *Arg = A->getValue ();
725720 assert (Arg && " Got an unexpected null argument" );
726- Optional<llvm::APSInt> ArgVal =
727- Arg-> getIntegerConstantExpr (FD-> getASTContext () );
728- assert ( ArgVal. hasValue () && " Not an integer constant expression " );
721+ const auto *CE = dyn_cast<ConstantExpr>(Arg);
722+ assert (CE && " Not an integer constant expression " );
723+ Optional<llvm::APSInt> ArgVal = CE-> getResultAsAPSInt ( );
729724 if (ArgVal->getBoolValue ())
730725 Fn->setMetadata (" no_global_work_offset" , llvm::MDNode::get (Context, {}));
731726 }
0 commit comments