[PATCH] D32563: Add LiveRangeShrink pass to shrink live range within BB.

Andrea Di Biagio via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri May 5 08:35:45 PDT 2017


andreadb added a comment.

I had a quick look at the code, and I noticed that you never check for the presence of DBG_VALUE instructions in a basic block.
I think that your pass would not work as expected with debug info.

More in general:

- When you check the number of uses of a register, you should skip debug values.
- When you move an instruction, you should also move its associated debug values.

A lot of tests have changed as a result of this patch. However, I think there is a value in adding your original test cases involving function calls.
Could you please add a new MIR test with code from (at least one of) your original small test cases?



================
Comment at: lib/CodeGen/LiveRangeShrink.cpp:112
+      ++Next;
+      if (MI->isPHI() || MI->isCompare())
+        continue;
----------------
You should probably skip debug values.


================
Comment at: lib/CodeGen/LiveRangeShrink.cpp:115
+      // If MI has side effects, it should become a barrier for code motion.
+      // IOM is rebuild from the next instrctuion to prevent later instructions
+      // from moved before this MI.
----------------
s/instrctuion/instruction


================
Comment at: lib/CodeGen/LiveRangeShrink.cpp:126
+      // Number of live-ranges that will be shortened. We do not count
+      // live-ranges that are defined by a COPY as it could be coalesed later.
+      int NumEligibleUse = 0;
----------------
s/coalesed/coalesced


================
Comment at: lib/CodeGen/LiveRangeShrink.cpp:142
+          // than one use.
+          if (DefMO || !MRI.hasOneUse(MO.getReg())) {
+            Insert = nullptr;
----------------
We want to skip uses that are debug instructions.


================
Comment at: lib/CodeGen/LiveRangeShrink.cpp:147
+          DefMO = &MO;
+        } else if (MRI.hasOneUse(MO.getReg()) && MRI.hasOneDef(MO.getReg())) {
+          MachineInstr *DefInstr = &*MRI.def_instr_begin(MO.getReg());
----------------
Same. We don't want to count debug uses.


https://reviews.llvm.org/D32563





More information about the llvm-commits mailing list