[PATCH] D14969: MachineScheduler: Allow independent scheduling of sub register defs

Andrew Trick via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 30 10:49:14 PST 2015


atrick requested changes to this revision.
atrick added a comment.
This revision now requires changes to proceed.

How does this avoid creating multiple disjoint live subranges for a single virtual register? Will verifyLiveInterval choke on this?

RegisterPressureTracker now mutates the machine instructions which is conceptually wrong. If there is no other efficient way to handle setting the read-undef flags, then this needs to be very clearly documented in the tracker API and where the scheduler forces it to be used for subregisters.


================
Comment at: lib/CodeGen/MachineScheduler.cpp:335-337
@@ +334,5 @@
+  if (mf.getRegInfo().subRegLivenessEnabled()) {
+    // Dead subregister defs have no users and therefore no dependencies,
+    // moving them around may cause liveintervals to degrade into multiple
+    // component. Change the dead subregister defs to have their own vreg.
+    LIS->renameDeadSubRegDefs();
----------------
How are multiple disjoint live segments avoided in general for non-dead sub register definitions? What if the sub register definitions initially overlap and scheduling makes them disjoint? It looks like we place a read-undef flag on subsequent definitions creating multiple "connected components" in the live range.


Repository:
  rL LLVM

http://reviews.llvm.org/D14969





More information about the llvm-commits mailing list