[llvm-commits] [llvm] r135465 - /llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp
Akira Hatanaka
ahatanak at gmail.com
Mon Jul 18 20:42:13 PDT 2011
Author: ahatanak
Date: Mon Jul 18 22:42:13 2011
New Revision: 135465
URL: http://llvm.org/viewvc/llvm-project?rev=135465&view=rev
Log:
Make EmitAtomic functions return the correct MachineBasicBlocks so that
ExpandISelPseudos::runOnMachineFunction does not visit instructions that have
just been added.
Modified:
llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp
Modified: llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp?rev=135465&r1=135464&r2=135465&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp Mon Jul 18 22:42:13 2011
@@ -787,7 +787,7 @@
MI->eraseFromParent(); // The instruction is gone now.
- return BB;
+ return exitMBB;
}
MachineBasicBlock *
@@ -831,10 +831,12 @@
// insert new blocks after the current block
const BasicBlock *LLVM_BB = BB->getBasicBlock();
MachineBasicBlock *loopMBB = MF->CreateMachineBasicBlock(LLVM_BB);
+ MachineBasicBlock *sinkMBB = MF->CreateMachineBasicBlock(LLVM_BB);
MachineBasicBlock *exitMBB = MF->CreateMachineBasicBlock(LLVM_BB);
MachineFunction::iterator It = BB;
++It;
MF->insert(It, loopMBB);
+ MF->insert(It, sinkMBB);
MF->insert(It, exitMBB);
// Transfer the remainder of BB and its successor edges to exitMBB.
@@ -908,29 +910,30 @@
BuildMI(BB, dl, TII->get(Mips::BEQ))
.addReg(Tmp13).addReg(Mips::ZERO).addMBB(loopMBB);
BB->addSuccessor(loopMBB);
- BB->addSuccessor(exitMBB);
+ BB->addSuccessor(sinkMBB);
- // exitMBB:
+ // sinkMBB:
// and tmp10,oldval,mask
// srl tmp11,tmp10,shift
// sll tmp12,tmp11,24
// sra dest,tmp12,24
- BB = exitMBB;
+ BB = sinkMBB;
int64_t ShiftImm = (Size == 1) ? 24 : 16;
- MachineBasicBlock::iterator II = BB->begin();
- BuildMI(*BB, II, dl, TII->get(Mips::AND), Tmp10)
+ BuildMI(BB, dl, TII->get(Mips::AND), Tmp10)
.addReg(Oldval).addReg(Mask);
- BuildMI(*BB, II, dl, TII->get(Mips::SRL), Tmp11)
+ BuildMI(BB, dl, TII->get(Mips::SRL), Tmp11)
.addReg(Tmp10).addReg(Shift);
- BuildMI(*BB, II, dl, TII->get(Mips::SLL), Tmp12)
+ BuildMI(BB, dl, TII->get(Mips::SLL), Tmp12)
.addReg(Tmp11).addImm(ShiftImm);
- BuildMI(*BB, II, dl, TII->get(Mips::SRA), Dest)
+ BuildMI(BB, dl, TII->get(Mips::SRA), Dest)
.addReg(Tmp12).addImm(ShiftImm);
+ sinkMBB->addSuccessor(exitMBB);
+
MI->eraseFromParent(); // The instruction is gone now.
- return BB;
+ return exitMBB;
}
MachineBasicBlock *
@@ -999,7 +1002,7 @@
MI->eraseFromParent(); // The instruction is gone now.
- return BB;
+ return exitMBB;
}
MachineBasicBlock *
@@ -1043,11 +1046,13 @@
const BasicBlock *LLVM_BB = BB->getBasicBlock();
MachineBasicBlock *loop1MBB = MF->CreateMachineBasicBlock(LLVM_BB);
MachineBasicBlock *loop2MBB = MF->CreateMachineBasicBlock(LLVM_BB);
+ MachineBasicBlock *sinkMBB = MF->CreateMachineBasicBlock(LLVM_BB);
MachineBasicBlock *exitMBB = MF->CreateMachineBasicBlock(LLVM_BB);
MachineFunction::iterator It = BB;
++It;
MF->insert(It, loop1MBB);
MF->insert(It, loop2MBB);
+ MF->insert(It, sinkMBB);
MF->insert(It, exitMBB);
// Transfer the remainder of BB and its successor edges to exitMBB.
@@ -1085,13 +1090,13 @@
// loop1MBB:
// ll oldval3,0(addr)
// and oldval4,oldval3,mask
- // bne oldval4,oldval2,exitMBB
+ // bne oldval4,oldval2,sinkMBB
BB = loop1MBB;
BuildMI(BB, dl, TII->get(Mips::LL), Oldval3).addReg(Addr).addImm(0);
BuildMI(BB, dl, TII->get(Mips::AND), Oldval4).addReg(Oldval3).addReg(Mask);
BuildMI(BB, dl, TII->get(Mips::BNE))
- .addReg(Oldval4).addReg(Oldval2).addMBB(exitMBB);
- BB->addSuccessor(exitMBB);
+ .addReg(Oldval4).addReg(Oldval2).addMBB(sinkMBB);
+ BB->addSuccessor(sinkMBB);
BB->addSuccessor(loop2MBB);
// loop2MBB:
@@ -1107,26 +1112,27 @@
BuildMI(BB, dl, TII->get(Mips::BEQ))
.addReg(Tmp10).addReg(Mips::ZERO).addMBB(loop1MBB);
BB->addSuccessor(loop1MBB);
- BB->addSuccessor(exitMBB);
+ BB->addSuccessor(sinkMBB);
- // exitMBB:
+ // sinkMBB:
// srl tmp8,oldval4,shift
// sll tmp9,tmp8,24
// sra dest,tmp9,24
- BB = exitMBB;
+ BB = sinkMBB;
int64_t ShiftImm = (Size == 1) ? 24 : 16;
- MachineBasicBlock::iterator II = BB->begin();
- BuildMI(*BB, II, dl, TII->get(Mips::SRL), Tmp8)
+ BuildMI(BB, dl, TII->get(Mips::SRL), Tmp8)
.addReg(Oldval4).addReg(Shift);
- BuildMI(*BB, II, dl, TII->get(Mips::SLL), Tmp9)
+ BuildMI(BB, dl, TII->get(Mips::SLL), Tmp9)
.addReg(Tmp8).addImm(ShiftImm);
- BuildMI(*BB, II, dl, TII->get(Mips::SRA), Dest)
+ BuildMI(BB, dl, TII->get(Mips::SRA), Dest)
.addReg(Tmp9).addImm(ShiftImm);
+ sinkMBB->addSuccessor(exitMBB);
+
MI->eraseFromParent(); // The instruction is gone now.
- return BB;
+ return exitMBB;
}
//===----------------------------------------------------------------------===//
More information about the llvm-commits
mailing list