| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 23411
|
| |
|
|
|
|
|
| |
This implements SimplifyCFG/branch-fold.ll, and is useful on ?:/min/max heavy
code
llvm-svn: 23410
|
| |
|
|
| |
llvm-svn: 23408
|
| |
|
|
| |
llvm-svn: 23407
|
| |
|
|
|
|
|
|
|
| |
not define a value that is used outside of it's block. This catches many
more simplifications, e.g. 854 in 176.gcc, 137 in vpr, etc.
This implements branch-phi-thread.ll:test3.ll
llvm-svn: 23397
|
| |
|
|
|
|
| |
predecessors. This implements branch-phi-thread.ll::test1
llvm-svn: 23395
|
| |
|
|
| |
llvm-svn: 23393
|
| |
|
|
| |
llvm-svn: 23392
|
| |
|
|
|
|
|
| |
control across branches with determined outcomes. More generality to follow.
This triggers a couple thousand times in specint.
llvm-svn: 23391
|
| |
|
|
|
|
| |
occurred while bugpointing another testcase
llvm-svn: 22621
|
| |
|
|
|
|
|
|
| |
Transforms/SimplifyCFG/2005-08-01-PHIUpdateFail.ll
the right way
llvm-svn: 22615
|
| |
|
|
| |
llvm-svn: 22613
|
| |
|
|
|
|
| |
function with no side-effects
llvm-svn: 22612
|
| |
|
|
| |
llvm-svn: 22611
|
| |
|
|
|
|
| |
some duplicated code
llvm-svn: 22610
|
| |
|
|
|
|
| |
call it from the only place it is live. No functionality changes.
llvm-svn: 22609
|
| |
|
|
|
|
|
|
|
| |
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20050801/027345.html
This breaks real programs and only fixes an obscure regression testcase. A
real fix is in development.
llvm-svn: 22606
|
| |
|
|
| |
llvm-svn: 22605
|
| |
|
|
|
|
|
|
| |
consideration the case where a reference in an unreachable block could
occur. This fixes Transforms/SimplifyCFG/2005-08-01-PHIUpdateFail.ll,
something I ran into while bugpoint'ing another pass.
llvm-svn: 22584
|
| |
|
|
|
|
| |
This fixes PR584 and Transforms/SimplifyCFG/2005-06-16-PHICrash.ll
llvm-svn: 22232
|
| |
|
|
| |
llvm-svn: 22158
|
| |
|
|
|
|
|
| |
a call. This fixes Prolangs-C++/deriv2, kimwitu++, and Misc-C++/bigfib
on X86 with -enable-x86-fastcc.
llvm-svn: 22023
|
| |
|
|
| |
llvm-svn: 21427
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
convert this:
%tmp.1 = seteq int %i, 0 ; <bool> [#uses=1]
br bool %tmp.1, label %shortcirc_done, label %shortcirc_next
shortcirc_next: ; preds = %entry
%tmp.4 = seteq int %j, 0 ; <bool> [#uses=1]
br label %shortcirc_done
shortcirc_done: ; preds = %shortcirc_next, %entry
%shortcirc_val = phi bool [ %tmp.4, %shortcirc_next ], [ true, %entry ] ; <bool> [#uses=1]
to this:
%tmp.1 = seteq int %i, 0 ; <bool> [#uses=1]
%tmp.4 = seteq int %j, 0 ; <bool> [#uses=1]
%shortcirc_val = select bool %tmp.1, bool true, bool %tmp.4 ; <bool> [#uses=1]
... which is later simplified by instcombine into an or.
llvm-svn: 21388
|
| |
|
|
| |
llvm-svn: 21253
|
| |
|
|
| |
llvm-svn: 20343
|
| |
|
|
| |
llvm-svn: 20334
|
| |
|
|
|
|
|
|
| |
This does a simple form of "jump threading", which eliminates CFG edges that
are provably dead. This triggers 90 times in the external tests, and
eliminating CFG edges is always always a good thing! :)
llvm-svn: 20300
|
| |
|
|
| |
llvm-svn: 19898
|
| |
|
|
|
|
|
|
| |
SimplifyCFG is one of those passes that we use for final cleanup: it should
not rely on other passes to clean up its garbage. This fixes the "why are
trivially dead setcc's in the output of gccas" problem.
llvm-svn: 19212
|
| |
|
|
|
|
| |
and the failure on make_dparser last night.
llvm-svn: 18766
|
| |
|
|
| |
llvm-svn: 18381
|
| |
|
|
| |
llvm-svn: 18369
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
if (x) {
code
...
} else {
code
...
}
Turn it into:
code
if (x) {
...
} else {
...
}
This reduces code size and in some common cases allows us to completely
eliminate the conditional. This turns several if/then/else blocks in loops
into straightline code in 179.art, turning the loops into single basic blocks
(good for modsched even!).
Maybe now brg will leave me alone ;-)
llvm-svn: 18366
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This speeds up simplifycfg on this program, from 44.87s to 0.29s (with
a profiled build):
#define CL0(a) case a: goto c;
#define CL1(a) CL0(a##0) CL0(a##1) CL0(a##2) CL0(a##3) CL0(a##4) CL0(a##5) \
CL0(a##6) CL0(a##7) CL0(a##8) CL0(a##9)
#define CL2(a) CL1(a##0) CL1(a##1) CL1(a##2) CL1(a##3) CL1(a##4) CL1(a##5) \
CL1(a##6) CL1(a##7) CL1(a##8) CL1(a##9)
#define CL3(a) CL2(a##0) CL2(a##1) CL2(a##2) CL2(a##3) CL2(a##4) CL2(a##5) \
CL2(a##6) CL2(a##7) CL2(a##8) CL2(a##9)
#define CL4(a) CL3(a##0) CL3(a##1) CL3(a##2) CL3(a##3) CL3(a##4) CL3(a##5) \
CL3(a##6) CL3(a##7) CL3(a##8) CL3(a##9)
void f();
void a() {
int b;
c: switch (b) {
CL4(1)
}
}
This testcase is contrived to expose N^2 behavior, but this patch should speedup
simplifycfg on any programs that use large switch statements. This testcase
comes from GCC PR17895.
llvm-svn: 17389
|
| |
|
|
| |
llvm-svn: 17163
|
| |
|
|
|
|
|
| |
Simplify code by simplifying terminators that branch to blocks that start
with an unreachable instruction.
llvm-svn: 17116
|
| |
|
|
|
|
|
|
| |
nodes unless we KNOW that we are able to promote all of them.
This fixes: test/Regression/Transforms/SimplifyCFG/PhiNoEliminate.ll
llvm-svn: 16973
|
| |
|
|
|
|
| |
potentially fold more in one pass.
llvm-svn: 16583
|
| |
|
|
|
|
| |
Patch contributed by Paolo Invernizzi. Thanks Paolo!
llvm-svn: 16368
|
| |
|
|
|
|
| |
Patch contributed by Paolo Invernizzi!
llvm-svn: 16152
|
| |
|
|
|
|
|
|
| |
Move include/Config and include/Support into include/llvm/Config,
include/llvm/ADT and include/llvm/Support. From here on out, all LLVM
public header files must be under include/llvm/.
llvm-svn: 16137
|
| |
|
|
|
|
| |
"Support/Debug.h".
llvm-svn: 15089
|
| |
|
|
| |
llvm-svn: 15022
|
| |
|
|
|
|
| |
- Minimize redundant isa<GlobalValue> usage
llvm-svn: 14948
|
| |
|
|
| |
llvm-svn: 14840
|
| |
|
|
| |
llvm-svn: 14622
|
| |
|
|
|
|
|
|
|
|
|
| |
since May 1st. In this code, the pred iterator was being invalidated sometimes
causing the wrong entries to be added to PHI nodes.
The fix for this is to defererence and safe the *PI value before we hack on
branch instructions, which changes use/def chains, which SOMETIMES invalidates
the iterator.
llvm-svn: 14278
|
| |
|
|
|
|
|
| |
Fix another non-deterministic behavior, this one should actually speed up the
code though as it was doing silly things.
llvm-svn: 14258
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
nondeterministic results that depend on where these objects land in memory.
Instead, sort by the value of the constant, which is stable.
Before this patch, the -simplifycfg pass run from two different compilers
could cause different code to be generated, though it was semantically the
same:
@@ -12258,8 +12258,8 @@
%s_addr.1 = phi sbyte* [ %s, %entry ], [ %inc.0, %no_exit ] ; <sbyte*> [#uses=5]
%tmp.1 = load sbyte* %s_addr.1 ; <sbyte> [#uses=1]
switch sbyte %tmp.1, label %no_exit [
- sbyte 0, label %loopexit
sbyte 46, label %loopexit
+ sbyte 0, label %loopexit
]
We need to stomp all of this stuff out.
llvm-svn: 14243
|