[llvm] [ReachingDefAnalysis] Fix management of MBBFrameObjsReachingDefs (PR #124943)

Michael Maitland via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 29 10:17:39 PST 2025


================
@@ -147,16 +147,13 @@ void ReachingDefAnalysis::processDefs(MachineInstr *MI) {
       assert(FrameIndex >= 0 && "Can't handle negative frame indicies yet!");
       if (!isFIDef(*MI, FrameIndex, TII))
         continue;
-      if (MBBFrameObjsReachingDefs.contains(MBBNumber)) {
-        auto Frame2InstrIdx = MBBFrameObjsReachingDefs[MBBNumber];
-        if (Frame2InstrIdx.count(FrameIndex - ObjectIndexBegin) > 0)
-          Frame2InstrIdx[FrameIndex - ObjectIndexBegin].push_back(CurInstr);
-        else
-          Frame2InstrIdx[FrameIndex - ObjectIndexBegin] = {CurInstr};
-      } else {
-        MBBFrameObjsReachingDefs[MBBNumber] = {
-            {FrameIndex - ObjectIndexBegin, {CurInstr}}};
-      }
+
+      int Key = FrameIndex - ObjectIndexBegin;
+      if (MBBFrameObjsReachingDefs.contains(MBBNumber) &&
+          MBBFrameObjsReachingDefs[MBBNumber].count(Key) > 0)
+        MBBFrameObjsReachingDefs[MBBNumber][Key].push_back(CurInstr);
+      else
+        MBBFrameObjsReachingDefs[MBBNumber][Key] = {CurInstr};
----------------
michaelmaitland wrote:

`MBBFrameObjsReachingDefs[MBBNumber]` returns a map. `[Key] = {CurInstr}` will that key value pair into the returned map.

It is equivalent to
```
auto Y = A[b];
Y[c] = a;
```

https://github.com/llvm/llvm-project/pull/124943


More information about the llvm-commits mailing list