[llvm-commits] [llvm] r88805 - /llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp
Evan Cheng
evan.cheng at apple.com
Sun Nov 15 22:44:40 PST 2009
Hi Jim,
Some comments for 86999 and friends:
/// ReorderThumb2JumpTables - Use tbb / tbh instructions to generate smaller
/// jumptables when it's possible.
bool ARMConstantIslands::ReorderThumb2JumpTables(MachineFunction &MF) {
This comment is misleading. tbb / tbh are formed later, right?
+ // FIXME: If it's a small block terminated by an unconditional branch,
+ // try to move it; otherwise, create a new block following the jump
+ // table that branches back to the actual target. This is an overly
+ // simplistic heuristic here for proof-of-concept.
What do you plan as a replacement? Jump + jump seems bad for performance? Why not just add a unconditional branch to replace the fall through?
+ // If the block is small and ends in an unconditional branch, move it.
+ if (Size < 50 && Cond.empty())
Where is 50 coming from?
Evan
On Nov 14, 2009, at 12:10 PM, Jim Grosbach wrote:
> Author: grosbach
> Date: Sat Nov 14 14:10:18 2009
> New Revision: 88805
>
> URL: http://llvm.org/viewvc/llvm-project?rev=88805&view=rev
> Log:
> Cleanup flow, and only update the jump table we're analyzing when replacing a destination MBB.
>
> Modified:
> llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp
>
> Modified: llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp?rev=88805&r1=88804&r2=88805&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp Sat Nov 14 14:10:18 2009
> @@ -1749,7 +1749,7 @@
> MachineBasicBlock *NewBB =
> AdjustJTTargetBlockForward(MBB, MI->getParent());
> if (NewBB)
> - MJTI->ReplaceMBBInJumpTables(JTBBs[j], NewBB);
> + MJTI->ReplaceMBBInJumpTable(JTI, JTBBs[j], NewBB);
> MadeChange = true;
> }
> }
> @@ -1772,16 +1772,16 @@
> int Size = BBSizes[BBI];
> MachineBasicBlock *TBB = 0, *FBB = 0;
> SmallVector<MachineOperand, 4> Cond;
> - // If the block terminator isn't analyzable, don't try to move the block
> - if (TII->AnalyzeBranch(*BB, TBB, FBB, Cond))
> - return NULL;
> -
> // If the block is small and ends in an unconditional branch, move it.
> if (Size < 50 && Cond.empty()) {
> + // If the block terminator isn't analyzable, don't try to move the block
> + if (TII->AnalyzeBranch(*BB, TBB, FBB, Cond))
> + return NULL;
> +
> MachineFunction::iterator OldPrior = prior(BB);
> BB->moveAfter(JTBB);
> OldPrior->updateTerminator();
> - //BB->updateTerminator();
> + BB->updateTerminator();
> ++NumJTMoved;
> return NULL;
> }
> @@ -1792,20 +1792,22 @@
> MachineFunction::iterator MBBI = JTBB; ++MBBI;
> MF.insert(MBBI, NewBB);
>
> + //MF.splice(MBBI, NewBB, NewBB);
> +
> // Add an unconditional branch from NewBB to BB.
> // There doesn't seem to be meaningful DebugInfo available; this doesn't
> // correspond directly to anything in the source.
> assert (isThumb2 && "Adjusting for TB[BH] but not in Thumb2?");
> BuildMI(NewBB, DebugLoc::getUnknownLoc(), TII->get(ARM::t2B)).addMBB(BB);
>
> + // Update internal data structures to account for the newly inserted MBB.
> + MF.RenumberBlocks(NewBB);
> +
> // Update the CFG.
> NewBB->addSuccessor(BB);
> JTBB->removeSuccessor(BB);
> JTBB->addSuccessor(NewBB);
>
> - // Update internal data structures to account for the newly inserted MBB.
> - MF.RenumberBlocks();
> -
> // Insert a size into BBSizes to align it properly with the (newly
> // renumbered) block numbers.
> BBSizes.insert(BBSizes.begin()+NewBB->getNumber(), 0);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list