[llvm-commits] [llvm] r106291 - /llvm/trunk/lib/CodeGen/IfConversion.cpp
Rafael Espindola
espindola at google.com
Fri Jun 18 10:52:45 PDT 2010
Thanks!
Just in time for a bootstrap test on the beaglebord during the weekend :-)
On 18 June 2010 13:07, Bob Wilson <bob.wilson at apple.com> wrote:
> Author: bwilson
> Date: Fri Jun 18 12:07:23 2010
> New Revision: 106291
>
> URL: http://llvm.org/viewvc/llvm-project?rev=106291&view=rev
> Log:
> Fix PR7372: Conditional branches (at least on ARM) are treated as predicated,
> so when IfConverter::CopyAndPredicateBlock checks to see if it should ignore
> an instruction because it is a branch, it should not check if the branch is
> predicated.
>
> This case (when IgnoreBr is true) is only relevant from IfConvertTriangle,
> where new branches are inserted after the block has been copied and predicated.
> If the original branch is not removed, we end up with multiple conditional
> branches (possibly conflicting) at the end of the block. Aside from any
> immediate errors resulting from that, this confuses the AnalyzeBranch functions
> so that the branches are not analyzable. That in turn causes the IfConverter to
> think that the "Simple" pattern can be applied, and things go downhill fast
> because the "Simple" pattern does _not_ apply if the block can fall through.
>
> This is pretty fragile. If there are other degenerate cases where AnalyzeBranch
> fails, but where the block may still fall through, the IfConverter should not
> perform its "Simple" if-conversion. But, I don't know how to do that with the
> current AnalyzeBranch interface, so for now, the best thing seems to be to
> avoid creating branches that AnalyzeBranch cannot handle.
>
> Evan, please review!
>
> Modified:
> llvm/trunk/lib/CodeGen/IfConversion.cpp
>
> Modified: llvm/trunk/lib/CodeGen/IfConversion.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/IfConversion.cpp?rev=106291&r1=106290&r2=106291&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/IfConversion.cpp (original)
> +++ llvm/trunk/lib/CodeGen/IfConversion.cpp Fri Jun 18 12:07:23 2010
> @@ -1298,16 +1298,15 @@
> for (MachineBasicBlock::iterator I = FromBBI.BB->begin(),
> E = FromBBI.BB->end(); I != E; ++I) {
> const TargetInstrDesc &TID = I->getDesc();
> - bool isPredicated = TII->isPredicated(I);
> // Do not copy the end of the block branches.
> - if (IgnoreBr && !isPredicated && TID.isBranch())
> + if (IgnoreBr && TID.isBranch())
> break;
>
> MachineInstr *MI = MF.CloneMachineInstr(I);
> ToBBI.BB->insert(ToBBI.BB->end(), MI);
> ToBBI.NonPredSize++;
>
> - if (!isPredicated && !MI->isDebugValue()) {
> + if (!TII->isPredicated(I) && !MI->isDebugValue()) {
> if (!TII->PredicateInstruction(MI, Cond)) {
> #ifndef NDEBUG
> dbgs() << "Unable to predicate " << *I << "!\n";
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
Rafael Ávila de Espíndola
More information about the llvm-commits
mailing list