From 2d69724938e67ec248e0ba42f86287923b3a5171 Mon Sep 17 00:00:00 2001 From: Dale Johannesen Date: Fri, 27 Mar 2009 01:13:37 +0000 Subject: [PATCH] One more place to skip debug info. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67811 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/CodeGenPrepare.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/Transforms/Scalar/CodeGenPrepare.cpp b/lib/Transforms/Scalar/CodeGenPrepare.cpp index b0214e030da..4eb49e9a95c 100644 --- a/lib/Transforms/Scalar/CodeGenPrepare.cpp +++ b/lib/Transforms/Scalar/CodeGenPrepare.cpp @@ -145,10 +145,11 @@ bool CodeGenPrepare::runOnFunction(Function &F) { return EverMadeChange; } -/// EliminateMostlyEmptyBlocks - eliminate blocks that contain only PHI nodes -/// and an unconditional branch. Passes before isel (e.g. LSR/loopsimplify) -/// often split edges in ways that are non-optimal for isel. Start by -/// eliminating these blocks so we can split them the way we want them. +/// EliminateMostlyEmptyBlocks - eliminate blocks that contain only PHI nodes, +/// debug info directives, and an unconditional branch. Passes before isel +/// (e.g. LSR/loopsimplify) often split edges in ways that are non-optimal for +/// isel. Start by eliminating these blocks so we can split them the way we +/// want them. bool CodeGenPrepare::EliminateMostlyEmptyBlocks(Function &F) { bool MadeChange = false; // Note that this intentionally skips the entry block. @@ -160,12 +161,18 @@ bool CodeGenPrepare::EliminateMostlyEmptyBlocks(Function &F) { if (!BI || !BI->isUnconditional()) continue; - // If the instruction before the branch isn't a phi node, then other stuff - // is happening here. + // If the instruction before the branch (skipping debug info) isn't a phi + // node, then other stuff is happening here. BasicBlock::iterator BBI = BI; if (BBI != BB->begin()) { --BBI; - if (!isa(BBI)) continue; + while (isa(BBI)) { + if (BBI == BB->begin()) + break; + --BBI; + } + if (!isa(BBI) && !isa(BBI)) + continue; } // Do not break infinite loops. -- 2.34.1