| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 14622
|
|
|
|
| |
llvm-svn: 14348
|
|
|
|
| |
llvm-svn: 14340
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
breaking the build on sparc is not acceptable.
llvm-svn: 14277
|
|
|
|
|
|
|
| |
Fix another non-deterministic behavior, this one should actually speed up the
code though as it was doing silly things.
llvm-svn: 14258
|
|
|
|
| |
llvm-svn: 14247
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
non-deterministic things like the ordering of blocks in the dominance
frontier of a BB. Unfortunately, I don't know of a better way to solve
this problem than to explicitly sort the BB's in function-order before
processing them. This is guaranteed to slow the pass down a bit, but
is absolutely necessary to get usable diffs between two different tools
executing the mem2reg or scalarrepl pass.
Before this, bazillions of spurious diff failures occurred all over the
place due to the different order of processing PHIs:
- %tmp.111 = getelementptr %struct.Connector_struct* %upcon.0.0, uint 0, uint 0
+ %tmp.111 = getelementptr %struct.Connector_struct* %upcon.0.1, uint 0, uint 0
Now, the diffs match.
llvm-svn: 14244
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 14206
|
|
|
|
|
|
| |
PR371
llvm-svn: 14203
|
|
|
|
| |
llvm-svn: 14201
|
|
|
|
| |
llvm-svn: 14192
|
|
|
|
| |
llvm-svn: 14186
|
|
|
|
|
|
|
|
| |
is write an autoconf macro that checks whether __isnan or isnan actually works
**using the C++ compiler after #include <cmath>**, instead of doing it the easy
way with AC_CHECK_FUNCS().
llvm-svn: 14171
|
|
|
|
| |
llvm-svn: 14168
|
|
|
|
| |
llvm-svn: 14150
|
|
|
|
| |
llvm-svn: 13823
|
|
|
|
|
|
|
|
| |
Add support for acos/asin/atan. 188.ammp contains three calls to acos with
constant arguments. Constant folding it allows elimination of those 3 calls
and three FP divisions of the results.
llvm-svn: 13821
|
|
|
|
|
|
| |
appended anywhere.
llvm-svn: 13798
|
|
|
|
| |
llvm-svn: 13792
|
|
|
|
| |
llvm-svn: 13754
|
|
|
|
| |
llvm-svn: 13751
|
|
|
|
|
|
| |
effects as) CloneFunctionInto().
llvm-svn: 13601
|
|
|
|
|
|
|
|
| |
CloneTrace, and because it is primarily an operation on ValueMaps. It
is now a global (non-static) function which can be pulled in using
ValueMapper.h.
llvm-svn: 13600
|
|
|
|
|
|
| |
give the extracted function a more useful name than just foo_code.
llvm-svn: 13493
|
|
|
|
|
|
| |
instruction in them.
llvm-svn: 13490
|
|
|
|
|
|
|
|
|
|
| |
PHI node entries from multiple outside-the-region blocks. This also fixes
extraction of the entry block in a function. Yaay.
This has successfully block extracted all (but one) block from the score_move
function in obsequi (out of 33). Hrm, I wonder which block the bug is in. :)
llvm-svn: 13489
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add a stub for the severSplitPHINodes which will allow us to bbextract
bb's with PHI nodes in them soon.
* Remove unused arguments from findInputsOutputs
* Dramatically simplify the code in findInputsOutputs. In particular,
nothing really cares whether or not a PHI node is using something.
* Move moveCodeToFunction to after emitCallAndSwitchStatement as that's the
order they get called.
* Fix a bug where we would code extract a region that included a call to
vastart. Like 'alloca', calls to vastart must stay in the function that
they are defined in.
* Add some comments.
llvm-svn: 13482
|
|
|
|
|
|
|
|
|
|
|
| |
from the extracted region. If the return has 0 or 1 exit blocks, the new
function returns void. If it has 2 exits, it returns bool, otherwise it
returns a ushort as before.
This allows us to use a conditional branch instruction when there are two
exit blocks, as often happens during block extraction.
llvm-svn: 13481
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. Get rid of the silly abort block. When doing bb extraction, we get one
abort block for every block extracted, which is kinda annoying.
2. If the switch ends up having a single destination, turn it into an
unconditional branch.
I would like to add support for conditional branches, but to do this we will
want to have the function return a bool instead of a ushort.
llvm-svn: 13478
|
|
|
|
| |
llvm-svn: 13316
|
|
|
|
| |
llvm-svn: 13315
|
|
|
|
| |
llvm-svn: 13312
|
|
|
|
|
|
| |
Turning "if (A < B && B < C)" into "if (A < B & B < C)"
llvm-svn: 13311
|
|
|
|
| |
llvm-svn: 13307
|
|
|
|
| |
llvm-svn: 13306
|
|
|
|
|
|
| |
* Commandline option (for now) controls that flag that is passed in
llvm-svn: 13141
|
|
|
|
| |
llvm-svn: 13091
|
|
|
|
| |
llvm-svn: 13011
|
|
|
|
|
|
| |
Debian.)
llvm-svn: 12986
|
|
|
|
|
|
|
|
| |
Basically we were using SimplifyCFG as a huge sledgehammer for a simple
optimization. Because simplifycfg does so many things, we can't use it
for this purpose.
llvm-svn: 12977
|
|
|
|
| |
llvm-svn: 12919
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
if (C)
V1 |= V2;
into:
Vx = V1 | V2;
V1 = select C, V1, Vx
when the expression can be evaluated unconditionally and is *cheap* to
execute. This limited form of if conversion is quite handy in lots of cases.
For example, it turns this testcase into straight-line code:
int in0 ; int in1 ; int in2 ; int in3 ;
int in4 ; int in5 ; int in6 ; int in7 ;
int in8 ; int in9 ; int in10; int in11;
int in12; int in13; int in14; int in15;
long output;
void mux(void) {
output =
(in0 ? 0x00000001 : 0) | (in1 ? 0x00000002 : 0) |
(in2 ? 0x00000004 : 0) | (in3 ? 0x00000008 : 0) |
(in4 ? 0x00000010 : 0) | (in5 ? 0x00000020 : 0) |
(in6 ? 0x00000040 : 0) | (in7 ? 0x00000080 : 0) |
(in8 ? 0x00000100 : 0) | (in9 ? 0x00000200 : 0) |
(in10 ? 0x00000400 : 0) | (in11 ? 0x00000800 : 0) |
(in12 ? 0x00001000 : 0) | (in13 ? 0x00002000 : 0) |
(in14 ? 0x00004000 : 0) | (in15 ? 0x00008000 : 0) ;
}
llvm-svn: 12798
|
|
|
|
| |
llvm-svn: 12779
|
|
|
|
| |
llvm-svn: 12618
|
|
|
|
|
|
|
|
|
|
| |
This actually causes us to turn code like:
return C ? A : B;
into a select instruction.
llvm-svn: 12617
|
|
|
|
| |
llvm-svn: 12597
|
|
|
|
|
|
| |
this and the other patches 253.perlbmk links again.
llvm-svn: 12565
|
|
|
|
|
|
|
|
| |
instcombine
pass can eliminate many nasty cases of them, start generating them in the optimizers
llvm-svn: 12545
|