[llvm] r270644 - ScheduleDAGInstrs: Fix memory corruption

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Tue May 24 18:18:01 PDT 2016


Author: matze
Date: Tue May 24 20:18:00 2016
New Revision: 270644

URL: http://llvm.org/viewvc/llvm-project?rev=270644&view=rev
Log:
ScheduleDAGInstrs: Fix memory corruption

We have to modify V2SU before inserting new elements into the
CurrentVRegDefs set because that may move V2SU in memory invalidating
the reference.

Modified:
    llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp

Modified: llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp?rev=270644&r1=270643&r2=270644&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp (original)
+++ llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp Tue May 24 20:18:00 2016
@@ -511,10 +511,10 @@ void ScheduleDAGInstrs::addVRegDefDeps(S
     // VReg2SUnit for the non-overlapping part.
     LaneBitmask OverlapMask = V2SU.LaneMask & LaneMask;
     LaneBitmask NonOverlapMask = V2SU.LaneMask & ~LaneMask;
-    if (NonOverlapMask != 0)
-      CurrentVRegDefs.insert(VReg2SUnit(Reg, NonOverlapMask, V2SU.SU));
     V2SU.SU = SU;
     V2SU.LaneMask = OverlapMask;
+    if (NonOverlapMask != 0)
+      CurrentVRegDefs.insert(VReg2SUnit(Reg, NonOverlapMask, DefSU));
   }
   // If there was no CurrentVRegDefs entry for some lanes yet, create one.
   if (LaneMask != 0)




More information about the llvm-commits mailing list