================ @@ -788,6 +797,17 @@ void LoopInfoStack::push(BasicBlock *Header, clang::ASTContext &Ctx, } } + // Identify loop attribute 'code_align' from Attrs. + // For attribute code_align: + // n - 'llvm.loop.align i32 n' metadata will be emitted. + for (const auto *A : Attrs) { + if (const auto *CodeAlign = dyn_cast<CodeAlignAttr>(A)) { + const auto *CE = cast<ConstantExpr>(CodeAlign->getAlignment()); + llvm::APSInt ArgVal = CE->getResultAsAPSInt(); + setCodeAlign(ArgVal.getSExtValue()); + } + } ---------------- smanna12 wrote:
I have updated codegen change to fix the build issue below: ``` if (const auto *CodeAlign = getSpecificAttr<const CodeAlignAttr>(Attrs)) { const auto *CE = cast<ConstantExpr>(CodeAlign->getAlignment()); llvm::APSInt ArgVal = CE->getResultAsAPSInt(); setCodeAlign(ArgVal.getSExtValue()); ``` .../include/clang/AST/AttrIterator.h: In instantiation of ‘SpecificAttr* clang::specific_attr_iterator<SpecificAttr, Container>::operator*() const [with SpecificAttr = clang::CodeAlignAttr; Container = llvm::ArrayRef<const clang::Attr*>; clang::specific_attr_iterator<SpecificAttr, Container>::reference = clang::CodeAlignAttr*]’: .../include/clang/AST/AttrIterator.h:120:12: required from ‘SpecificAttr* clang::getSpecificAttr(const Container&) [with SpecificAttr = clang::CodeAlignAttr; Container = llvm::ArrayRef<const clang::Attr*>]’ .../lib/CodeGen/CGLoopInfo.cpp:803:67: required from here /.../include/clang/AST/AttrIterator.h:67:30: error: invalid conversion from ‘llvm::CastInfo<clang::CodeAlignAttr, const clang::Attr*, void>::CastReturnType {aka const clang::CodeAlignAttr*}’ to ‘clang::specific_attr_iterator<clang::CodeAlignAttr, llvm::ArrayRef<const clang::Attr*> >::reference {aka clang::CodeAlignAttr*}’ [-fpermissive] return cast<SpecificAttr>(*Current); https://github.com/llvm/llvm-project/pull/70762 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits