To ensure that we have more accurate line information for a block
authorEric Christopher <echristo@apple.com>
Tue, 10 Apr 2012 18:18:10 +0000 (18:18 +0000)
committerEric Christopher <echristo@apple.com>
Tue, 10 Apr 2012 18:18:10 +0000 (18:18 +0000)
don't elide the branch instruction if it's the only one in the block,
otherwise it's ok.

PR9796 and rdar://11215207

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154417 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/FastISel.cpp
test/CodeGen/ARM/fast-isel-br-const.ll

index 5de66670b2f35d19a521678a766867119c44ca1f..0c1ac6982d2a597a32760de15baa94a57328a34f 100644 (file)
@@ -821,8 +821,11 @@ FastISel::SelectInstruction(const Instruction *I) {
 /// the CFG.
 void
 FastISel::FastEmitBranch(MachineBasicBlock *MSucc, DebugLoc DL) {
-  if (FuncInfo.MBB->isLayoutSuccessor(MSucc)) {
-    // The unconditional fall-through case, which needs no instructions.
+
+  if (FuncInfo.MBB->getBasicBlock()->size() > 1 && FuncInfo.MBB->isLayoutSuccessor(MSucc)) {
+    // For more accurate line information if this is the only instruction
+    // in the block then emit it, otherwise we have the unconditional
+    // fall-through case, which needs no instructions.
   } else {
     // The unconditional branch case.
     TII.InsertBranch(*FuncInfo.MBB, MSucc, NULL,
index 625adc2befec2fb5c12d35ab2bebe80700cf7e27..7c532d5fba3888bd465e95b59354850b8bb89472 100644 (file)
@@ -5,7 +5,7 @@ define i32 @t1(i32 %a, i32 %b) nounwind uwtable ssp {
 entry:
 ; THUMB: t1:
 ; ARM: t1:
-
+  %x = add i32 %a, %b  
   br i1 1, label %if.then, label %if.else
 ; THUMB-NOT: b LBB0_1
 ; ARM-NOT:  b LBB0_1
@@ -24,6 +24,7 @@ if.then2:                                         ; preds = %if.else
   br label %if.end6
 
 if.else3:                                         ; preds = %if.else
+  %y = sub i32 %a, %b
   br i1 1, label %if.then5, label %if.end
 ; THUMB-NOT: b LBB0_5
 ; ARM-NOT:  b LBB0_5