diff options
| author | Oliver Hunt <oliver@apple.com> | 2025-10-20 01:38:07 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-20 01:38:07 -0700 |
| commit | 7de01aa5d0418bd4e8db2917f831e7383c6863bb (patch) | |
| tree | 1db866f57c2236573cd4b4c2d141d6d420f87a92 /flang/lib/Optimizer/HLFIR/Transforms/ConvertToFIR.cpp | |
| parent | 6bc540043d4c3fed8f44c8f6de86be0d1740582e (diff) | |
| parent | 46a866ab7735aaa0f89fde209d516271c4825c49 (diff) | |
Merge branch 'main' into users/ojhunt/ptrauth-additionsusers/ojhunt/ptrauth-additions
Diffstat (limited to 'flang/lib/Optimizer/HLFIR/Transforms/ConvertToFIR.cpp')
| -rw-r--r-- | flang/lib/Optimizer/HLFIR/Transforms/ConvertToFIR.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/flang/lib/Optimizer/HLFIR/Transforms/ConvertToFIR.cpp b/flang/lib/Optimizer/HLFIR/Transforms/ConvertToFIR.cpp index 8104e53920c2..6a57bf2ae6fe 100644 --- a/flang/lib/Optimizer/HLFIR/Transforms/ConvertToFIR.cpp +++ b/flang/lib/Optimizer/HLFIR/Transforms/ConvertToFIR.cpp @@ -23,6 +23,7 @@ #include "flang/Optimizer/HLFIR/HLFIROps.h" #include "flang/Optimizer/HLFIR/Passes.h" #include "mlir/Transforms/DialectConversion.h" +#include "llvm/ADT/SmallSet.h" namespace hlfir { #define GEN_PASS_DEF_CONVERTHLFIRTOFIR @@ -312,10 +313,12 @@ public: // Propagate other attributes from hlfir.declare to fir.declare. // OpenACC's acc.declare is one example. Right now, the propagation // is verbatim. - mlir::NamedAttrList elidedAttrs = - mlir::NamedAttrList{firDeclareOp->getAttrs()}; + llvm::SmallSet<llvm::StringRef, 8> elidedAttrs; + for (const mlir::NamedAttribute &firAttr : firDeclareOp->getAttrs()) + elidedAttrs.insert(firAttr.getName()); + elidedAttrs.insert(declareOp.getSkipReboxAttrName()); for (const mlir::NamedAttribute &attr : declareOp->getAttrs()) - if (!elidedAttrs.get(attr.getName())) + if (!elidedAttrs.contains(attr.getName())) firDeclareOp->setAttr(attr.getName(), attr.getValue()); auto firBase = firDeclareOp.getResult(); @@ -328,6 +331,8 @@ public: auto genHlfirBox = [&]() -> mlir::Value { if (auto baseBoxType = mlir::dyn_cast<fir::BaseBoxType>(firBase.getType())) { + if (declareOp.getSkipRebox()) + return firBase; // Rebox so that lower bounds and attributes are correct. if (baseBoxType.isAssumedRank()) return fir::ReboxAssumedRankOp::create( |
