mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-14 09:56:23 +00:00
[AVR] When lowering Select8/Select16, put newly generated MBBs in the same spot
Contributed by Dr. Gergő Érdi. Fixes a bug. Raised from (https://github.com/avr-rust/rust/issues/49). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302973 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8358665160
commit
af4bf77761
@ -1610,8 +1610,9 @@ AVRTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
|
||||
MachineBasicBlock *trueMBB = MF->CreateMachineBasicBlock(LLVM_BB);
|
||||
MachineBasicBlock *falseMBB = MF->CreateMachineBasicBlock(LLVM_BB);
|
||||
|
||||
MachineFunction::iterator I = MBB->getParent()->begin();
|
||||
++I;
|
||||
MachineFunction::iterator I;
|
||||
for (I = MF->begin(); I != MF->end() && &(*I) != MBB; ++I);
|
||||
if (I != MF->end()) ++I;
|
||||
MF->insert(I, trueMBB);
|
||||
MF->insert(I, falseMBB);
|
||||
|
||||
|
35
test/CodeGen/AVR/select-mbb-placement-bug.ll
Normal file
35
test/CodeGen/AVR/select-mbb-placement-bug.ll
Normal file
@ -0,0 +1,35 @@
|
||||
; RUN: llc -mcpu=atmega328p < %s -march=avr | FileCheck %s
|
||||
|
||||
; CHECK-LABEL: loopy
|
||||
define internal fastcc void @loopy() {
|
||||
|
||||
; In this case, when we expand `Select8`/`Select16`, we should be
|
||||
; replacing the existing MBB instead of adding a new one.
|
||||
;
|
||||
; https://github.com/avr-rust/rust/issues/49
|
||||
|
||||
; CHECK: LBB0_1:
|
||||
; CHECK: LBB0_2:
|
||||
; CHECK-NOT: LBB0_3:
|
||||
start:
|
||||
br label %bb7.preheader
|
||||
|
||||
bb7.preheader: ; preds = %bb10, %start
|
||||
%i = phi i8 [ 0, %start ], [ %j, %bb10 ]
|
||||
%j = phi i8 [ 1, %start ], [ %next, %bb10 ]
|
||||
br label %bb10
|
||||
|
||||
bb4: ; preds = %bb10
|
||||
ret void
|
||||
|
||||
bb10: ; preds = %bb7.preheader
|
||||
tail call fastcc void @observe(i8 %i, i8 1)
|
||||
%0 = icmp ult i8 %j, 20
|
||||
%1 = zext i1 %0 to i8
|
||||
%next = add i8 %j, %1
|
||||
br i1 %0, label %bb7.preheader, label %bb4
|
||||
|
||||
}
|
||||
|
||||
declare void @observe(i8, i8);
|
||||
|
Loading…
x
Reference in New Issue
Block a user