[BranchFolding] skip debug instr to avoid code change
Use the existing helper function in BranchFolding, "countsAsInstruction",
to skip over non-instructions. Otherwise debug instructions can be
identified as the last real instruction in a block, leading to different
codegen decisions when debug is enabled as demonstrated by the test case.
Patch by: yechunliang (Chris Ye)!
Differential Revision: https://reviews.llvm.org/D66467
diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp
index 455916e..b6e7c9f4 100644
--- a/llvm/lib/CodeGen/BranchFolding.cpp
+++ b/llvm/lib/CodeGen/BranchFolding.cpp
@@ -402,11 +402,12 @@
// the CFI instruction. Later on, this leads to BB2 being 'hacked off' at the
// wrong place (in ReplaceTailWithBranchTo()) which results in losing this CFI
// instruction.
- while (I1 != MBB1->end() && I1->isCFIInstruction()) {
+ // Skip CFI_INSTRUCTION and debugging instruction; necessary to avoid changing the code.
+ while (I1 != MBB1->end() && !countsAsInstruction(*I1)) {
++I1;
}
- while (I2 != MBB2->end() && I2->isCFIInstruction()) {
+ while (I2 != MBB2->end() && !countsAsInstruction(*I2)) {
++I2;
}