diff options
author | Davide Italiano <davide@freebsd.org> | 2017-07-11 23:10:17 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2017-07-11 23:10:17 +0000 |
commit | b8ad3eebcad9417cab81418d302dfda4b910f5eb (patch) | |
tree | 8ef2f7360c24f9c4e79062d340a77d3a347f2775 /llvm/lib | |
parent | a69df6f843ce8f6ce22bbe1b36f642ab8c42ba4f (diff) | |
download | bcm5719-llvm-b8ad3eebcad9417cab81418d302dfda4b910f5eb.tar.gz bcm5719-llvm-b8ad3eebcad9417cab81418d302dfda4b910f5eb.zip |
[IPO] Temporarily rollback r307215.
[GlobalOpt] Remove unreachable blocks before optimizing a function.
While the change is presumably correct, it exposes a latent bug
in DI which breaks on of the CFI checks. I'll analyze it further
and try to understand what's going on.
llvm-svn: 307729
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/IPO/GlobalOpt.cpp | 18 |
1 files changed, 0 insertions, 18 deletions
diff --git a/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/llvm/lib/Transforms/IPO/GlobalOpt.cpp index 93eab680ca6..3d57acf06e7 100644 --- a/llvm/lib/Transforms/IPO/GlobalOpt.cpp +++ b/llvm/lib/Transforms/IPO/GlobalOpt.cpp @@ -2026,24 +2026,6 @@ OptimizeFunctions(Module &M, TargetLibraryInfo *TLI, continue; } - // LLVM's definition of dominance allows instructions that are cyclic - // in unreachable blocks, e.g.: - // %pat = select i1 %condition, @global, i16* %pat - // because any instruction dominates an instruction in a block that's - // not reachable from entry. - // So, remove unreachable blocks from the function, because a) there's - // no point in analyzing them and b) GlobalOpt should otherwise grow - // some more complicated logic to break these cycles. - // Removing unreachable blocks might invalidate the dominator so we - // recalculate it. - if (!F->isDeclaration()) { - if (removeUnreachableBlocks(*F)) { - auto &DT = LookupDomTree(*F); - DT.recalculate(*F); - Changed = true; - } - } - Changed |= processGlobal(*F, TLI, LookupDomTree); if (!F->hasLocalLinkage()) |