- Jun 19, 2004
-
-
Chris Lattner authored
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
-
Chris Lattner authored
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
-
- Jun 18, 2004
-
-
Brian Gaeke authored
llvm-svn: 14206
-
- Jun 17, 2004
-
-
Chris Lattner authored
PR371 llvm-svn: 14203
-
Chris Lattner authored
llvm-svn: 14201
-
- Jun 16, 2004
-
-
Brian Gaeke authored
llvm-svn: 14192
-
- Jun 15, 2004
-
-
Chris Lattner authored
llvm-svn: 14186
-
- Jun 14, 2004
-
-
Brian Gaeke authored
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
-
- Jun 13, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 14168
-
- Jun 11, 2004
-
-
Chris Lattner authored
llvm-svn: 14150
-
- May 27, 2004
-
-
Chris Lattner authored
llvm-svn: 13823
-
Chris Lattner authored
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
-
Alkis Evlogimenos authored
appended anywhere. llvm-svn: 13798
-
- May 26, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 13792
-
- May 25, 2004
-
-
Reid Spencer authored
llvm-svn: 13754
-
Reid Spencer authored
llvm-svn: 13751
-
- May 19, 2004
-
-
Brian Gaeke authored
effects as) CloneFunctionInto(). llvm-svn: 13601
-
Brian Gaeke authored
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
-
- May 12, 2004
-
-
Chris Lattner authored
give the extracted function a more useful name than just foo_code. llvm-svn: 13493
-
Chris Lattner authored
instruction in them. llvm-svn: 13490
-
Chris Lattner authored
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
-
Chris Lattner authored
* 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
-
Chris Lattner authored
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
-
Chris Lattner authored
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
-
- May 02, 2004
-
-
Chris Lattner authored
llvm-svn: 13316
-
Chris Lattner authored
llvm-svn: 13315
-
Chris Lattner authored
llvm-svn: 13312
-
Chris Lattner authored
Turning "if (A < B && B < C)" into "if (A < B & B < C)" llvm-svn: 13311
-
Chris Lattner authored
llvm-svn: 13307
-
Chris Lattner authored
llvm-svn: 13306
-
- Apr 24, 2004
-
-
Misha Brukman authored
* Commandline option (for now) controls that flag that is passed in llvm-svn: 13141
-
- Apr 21, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 13091
-
- Apr 17, 2004
-
-
Chris Lattner authored
llvm-svn: 13011
-
- Apr 16, 2004
-
-
Brian Gaeke authored
Debian.) llvm-svn: 12986
-
Chris Lattner authored
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
-
- Apr 13, 2004
-
-
Chris Lattner authored
llvm-svn: 12919
-
- Apr 10, 2004
-
-
Chris Lattner authored
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
-
- Apr 08, 2004
-
-
Chris Lattner authored
llvm-svn: 12779
-
- Apr 02, 2004
-
-
Chris Lattner authored
llvm-svn: 12618
-
Chris Lattner authored
This actually causes us to turn code like: return C ? A : B; into a select instruction. llvm-svn: 12617
-