- Jun 16, 2008
-
-
Owen Anderson authored
llvm-svn: 52306
-
Chris Lattner authored
wants a 'nocapture' predicate. llvm-svn: 52304
-
Chris Lattner authored
in this file, no other changes. llvm-svn: 52303
-
Chris Lattner authored
the purposes of escape analysis. llvm-svn: 52302
-
Chris Lattner authored
pointer derived from a local allocation, if the local allocation never escapes, the pointers can't alias. This implements PR2436 llvm-svn: 52301
-
Owen Anderson authored
Assign indices to empty basic blocks. This will be necessary for StrongPHIElimination in the near future. llvm-svn: 52300
-
Chris Lattner authored
This fixes several minor bugs (such as returning noalias for comparisons between external weak functions an null) but is mostly a cleanup. llvm-svn: 52299
-
Chris Lattner authored
them based on the end-compiler's capabilities. This fixes PR2453 llvm-svn: 52297
-
Chris Lattner authored
llvm-svn: 52295
-
Chris Lattner authored
llvm-svn: 52294
-
- Jun 15, 2008
-
-
Duncan Sands authored
not valid if the load is volatile. Hopefully all wrong DAG combiner transforms of volatile loads and stores have now been caught. llvm-svn: 52293
-
Duncan Sands authored
a non-constant index. llvm-svn: 52292
-
Wojciech Matyjewicz authored
take into account the instrucion pointed by InsertPt. Thanks to it, returning the new value of InsertPt to the InsertBinop() caller can be avoided. The bug was, actually, in visitAddRecExpr() method which wasn't correctly handling changes of InsertPt. There shouldn't be any performance regression, as -gvn pass (run after -indvars) removes any redundant binops. llvm-svn: 52291
-
Wojciech Matyjewicz authored
llvm-svn: 52290
-
Argyrios Kyrtzidis authored
llvm-svn: 52288
-
Argyrios Kyrtzidis authored
This bug made llvm-ld unable to function with "-native" option, since the process that was used to call 'gcc' was crashing. llvm-svn: 52284
-
- Jun 14, 2008
-
-
Duncan Sands authored
on some code when !AfterLegalize - but since this whole code section is turned off by an "if (0)" it's not really turning anything on. llvm-svn: 52276
-
Wojciech Matyjewicz authored
Add a safety measure. It isn't safe to assume in ScalarEvolutionExpander that all loops are in canonical form (but it should be safe for loops that have AddRecs). xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx llvm-svn: 52275
-
Andrew Lenharth authored
llvm-svn: 52270
-
Chris Lattner authored
llvm-svn: 52267
-
Evan Cheng authored
Teach the spiller to commute instructions in order to fold a reload. This hits 410 times on 444.namd and 122 times on 252.eon. llvm-svn: 52266
-
Eli Friedman authored
when trying to sink stores. llvm-svn: 52259
-
- Jun 13, 2008
-
-
Dan Gohman authored
for it to generate use-before-def IR, such as in this testcase. llvm-svn: 52258
-
Eli Friedman authored
structure checks are incorrect if the blocks aren't distinct. Fixes PR2435. llvm-svn: 52257
-
Duncan Sands authored
wrong for volatile loads and stores. In fact this is almost all of them! There are three types of problems: (1) it is wrong to change the width of a volatile memory access. These may be used to do memory mapped i/o, in which case a load can have an effect even if the result is not used. Consider loading an i32 but only using the lower 8 bits. It is wrong to change this into a load of an i8, because you are no longer tickling the other three bytes. It is also unwise to make a load/store wider. For example, changing an i16 load into an i32 load is wrong no matter how aligned things are, since the fact of loading an additional 2 bytes can have i/o side-effects. (2) it is wrong to change the number of volatile load/stores: they may be counted by the hardware. (3) it is wrong to change a volatile load/store that requires one memory access into one that requires several. For example on x86-32, you can store a double in one processor operation, but to store an i64 requires two (two i32 stores). In a multi-threaded program you may want to bitcast an i64 to a double and store as a double because that will occur atomically, and be indivisible to other threads. So it would be wrong to convert the store-of-double into a store of an i64, because this will become two i32 stores - no longer atomic. My policy here is to say that the number of processor operations for an illegal operation is undefined. So it is alright to change a store of an i64 (requires at least two stores; but could be validly lowered to memcpy for example) into a store of double (one processor op). In short, if the new store is legal and has the same size then I say that the transform is ok. It would also be possible to say that transforms are always ok if before they were illegal, whether after they are illegal or not, but that's more awkward to do and I doubt it buys us anything much. However this exposed an interesting thing - on x86-32 a store of i64 is considered legal! That is because operations are marked legal by default, regardless of whether the type is legal or not. In some ways this is clever: before type legalization this means that operations on illegal types are considered legal; after type legalization there are no illegal types so now operations are only legal if they really are. But I consider this to be too cunning for mere mortals. Better to do things explicitly by testing AfterLegalize. So I have changed things so that operations with illegal types are considered illegal - indeed they can never map to a machine operation. However this means that the DAG combiner is more conservative because before it was "accidentally" performing transforms where the type was illegal because the operation was nonetheless marked legal. So in a few such places I added a check on AfterLegalize, which I suppose was actually just forgotten before. This causes the DAG combiner to do slightly more than it used to, which resulted in the X86 backend blowing up because it got a slightly surprising node it wasn't expecting, so I tweaked it. llvm-svn: 52254
-
Wojciech Matyjewicz authored
llvm-svn: 52251
-
Nick Lewycky authored
with code that was expecting different bit widths for different values. Make getTruncateOrZeroExtend a method on ScalarEvolution, and use it. llvm-svn: 52248
-
- Jun 12, 2008
-
-
Gabor Greif authored
llvm-svn: 52247
-
Gabor Greif authored
llvm-svn: 52246
-
Evan Cheng authored
Do not speculatively execute an instruction by hoisting it to its predecessor BB if any of its operands are defined but not used in BB. The transformation will prevent the operand from being sunk into the use block. llvm-svn: 52244
-
Evan Cheng authored
llvm-svn: 52243
-
Owen Anderson authored
llvm-svn: 52242
-
Matthijs Kooijman authored
error that caused it to redirect stderr to stdout too often. This fix is applied identically to the win32 code as well, but that is untested. --Thi line, and those below, will be ignored-- M System/Unix/Program.inc M System/Win32/Program.inc llvm-svn: 52233
-
Matthijs Kooijman authored
functional changes. Win32 code is untested, but should work fine. In the unix variant, rename RedirectFD to RedirectIO and let that function handle empty and null paths instead of doing that in the caller 3 times. This is the same as win32 already does it. In the win32 variant, use Path::isEmpty() instead of checking the resulting c_str() manually. This is the same as unix already does it. llvm-svn: 52230
-
- Jun 11, 2008
-
-
Gabor Greif authored
llvm-svn: 52226
-
Anton Korobeynikov authored
CALLSEQ_BEGIN & CALLSEQ_END. llvm-svn: 52225
-
Evan Cheng authored
For now, avoid generating FP select instructions in order to speculatively execute integer arithmetic instructions. FP selects are more likely to be expensive (even compared to branch on fcmp). This is not a wonderful solution but I rather err on the side of conservative. This fixes the heapsort performance regressions. llvm-svn: 52224
-
Evan Cheng authored
Avoid duplicating loop header which leads to unnatural loops (and just seem like general badness to me, likely to cause code explosion). Patch by Florian Brandner. llvm-svn: 52223
-
Matthijs Kooijman authored
useless insert-extract chains, similar to how it folds them for vectors. Add a testcase for this. llvm-svn: 52217
-
Duncan Sands authored
maps can be deleted. This happens when RAUW replaces a node N with another equivalent node E, deleting the first node. Solve this by adding (N, E) to ReplacedNodes, which is already used to remap nodes to replacements. This means that deleted nodes are being allowed in maps, which can be delicate: the memory may be reused for a new node which might get confused with the old deleted node pointer hanging around in the maps, so detect this and flush out maps if it occurs (ExpungeNode). The expunging operation is expensive, however it never occurs during a llvm-gcc bootstrap or anywhere in the nightly testsuite. It occurs three times in "make check": Alpha/illegal-element-type.ll, PowerPC/illegal-element-type.ll and X86/mmx-shift.ll. If expunging proves to be too expensive then there are other more complicated ways of solving the problem. In the normal case this patch adds the overhead of a few more map lookups, which is hopefully negligable. llvm-svn: 52214
-