- Feb 05, 2010
-
-
Bob Wilson authored
short-circuited conditions to AND/OR expressions, and those expressions are often converted back to a short-circuited form in code gen. The original source order may have been optimized to take advantage of the expected values, and if we reassociate them, we change the order and subvert that optimization. Radar 7497329. llvm-svn: 95333
-
- Feb 03, 2010
-
-
Bob Wilson authored
The SRThreshold value makes perfect sense for checking if an entire aggregate should be promoted to a scalar integer, but it is not so good for splitting an aggregate into its separate elements. A struct may contain a large embedded array along with some scalar fields that would benefit from being split apart by SROA. Even if the total aggregate size is large, it may still be good to perform SROA. Thus, the most important piece of this patch is simply moving the aggregate size comparison vs. SRThreshold so that it guards only the aggregate promotion. We have also been checking the number of elements to decide if an aggregate should be split up. The limit of "SRThreshold/4" seemed rather arbitrary, and I don't think it's very useful to derive this limit from SRThreshold anyway. I've collected some data showing that the current default limit of 32 (since SRThreshold defaults to 128) is a reasonable cutoff for struct types. One thing suggested by the data is that distinguishing between structs and arrays might be useful. There are (obviously) a lot more large arrays than large structs (as measured by the number of elements and not the total size -- a large array inside a struct still counts as a single element given the way we do SROA right now). Out of 8377 arrays where we successfully performed SROA while compiling a large set of benchmarks, only 16 of them had more than 8 elements. And, for those 16 arrays, it's not at all clear that SROA was actually beneficial. So, to offset the compile time cost of investigating more large structs for SROA, the patch lowers the limit on array elements to 8. This fixes Apple Radar 7563690. llvm-svn: 95224
-
Evan Cheng authored
llvm-svn: 95198
-
Bob Wilson authored
llvm-svn: 95170
-
Eric Christopher authored
llvm-svn: 95165
-
Eric Christopher authored
llvm-svn: 95154
-
- Feb 02, 2010
-
-
Eric Christopher authored
Passed bootstrap and nightly test run here. llvm-svn: 95145
-
Chris Lattner authored
llvm-svn: 95055
-
Eric Christopher authored
don't use TargetData here. llvm-svn: 95040
-
Eric Christopher authored
llvm-svn: 95036
-
Eric Christopher authored
llvm-svn: 95035
-
Eric Christopher authored
llvm-svn: 95027
-
- Feb 01, 2010
-
-
Bob Wilson authored
disabled by default. This divides the existing load PRE code into 2 phases: first it checks that it is safe to move the load to each of the predecessors where it is unavailable, and then if it is safe, the code is changed to move the load. Radar 7571861. llvm-svn: 95007
-
- Jan 31, 2010
-
-
Evan Cheng authored
Do not mark no-return calls tail calls. It'll screw up special calls like longjmp and it doesn't make much sense for performance reason. If my logic is faulty, please let me know. llvm-svn: 94937
-
- Jan 30, 2010
-
-
Bob Wilson authored
unconditionally. Besides checking the offset, also check that the underlying object is aligned as much as the load itself. llvm-svn: 94875
-
- Jan 29, 2010
-
-
Eric Christopher authored
llvm-svn: 94841
-
Bob Wilson authored
indices are safe if the result is known to be within the bounds of the underlying object. llvm-svn: 94829
-
Eric Christopher authored
llvm-svn: 94783
-
Bill Wendling authored
llvm-svn: 94771
-
Bill Wendling authored
llvm-svn: 94765
-
- Jan 27, 2010
-
-
Benjamin Kramer authored
llvm-svn: 94683
-
- Jan 25, 2010
-
-
Bob Wilson authored
already checked that TmpBB->getSinglePredecessor() is non-null. llvm-svn: 94451
-
Bob Wilson authored
parameter with a default value, instead of just hardcoding it in the implementation. The limit of MaxLookup = 6 was introduced in r69151 to fix a performance problem with O(n^2) behavior in instcombine, but the scalarrepl pass is relying on getUnderlyingObject to go all the way back to an AllocaInst. Making the limit part of the method signature makes it clear that by default the result is limited and should help avoid similar problems in the future. This fixes pr6126. llvm-svn: 94433
-
- Jan 24, 2010
-
-
Chris Lattner authored
llvm-svn: 94378
-
- Jan 23, 2010
-
-
Chris Lattner authored
for arbitrary terminators in predecessors, don't assume it is a conditional or uncond branch. The testcase shows an example where they can happen with switches. llvm-svn: 94323
-
Chris Lattner authored
handle the case when we can infer an input to the xor from all inputs that agree, instead of going into an infinite loop. Another part of PR6199 llvm-svn: 94321
-
Chris Lattner authored
llvm-svn: 94319
-
Eric Christopher authored
for strcpy. llvm-svn: 94287
-
- Jan 22, 2010
-
-
Bob Wilson authored
test on ARM. llvm-svn: 94198
-
Chris Lattner authored
missing ones are libsupport, libsystem and libvmcore. libvmcore is currently blocked on bugpoint, which uses EH. Once it stops using EH, we can switch it off. This #if 0's out 3 unit tests, because gtest requires RTTI information. Suggestions welcome on how to fix this. llvm-svn: 94164
-
Dan Gohman authored
llvm-svn: 94123
-
Victor Hernandez authored
DbgInfoIntrinsics no longer appear in an instruction's use list; so clean up looking for them in use iterations and remove OnlyUsedByDbgInfoIntrinsics() llvm-svn: 94111
-
Dan Gohman authored
loop-variant components, adds must be inserted after the increment. Keep track of the increment position for this case, and insert these adds in the correct location. llvm-svn: 94110
-
- Jan 21, 2010
-
-
Dan Gohman authored
llvm-svn: 94108
-
Dan Gohman authored
operands exceeds the number of registers used in the initial solution, as that wouldn't lead to a profitable solution anyway. llvm-svn: 94107
-
Dan Gohman authored
llvm-svn: 94104
-
Dan Gohman authored
This new version is much more aggressive about doing "full" reduction in cases where it reduces register pressure, and also more aggressive about rewriting induction variables to count down (or up) to zero when doing so reduces register pressure. It currently uses fairly simplistic algorithms for finding reuse opportunities, but it introduces a new framework allows it to combine multiple strategies at once to form hybrid solutions, instead of doing all full-reduction or all base+index. llvm-svn: 94061
-
Eric Christopher authored
answers. This will update as object size checking gets better information. llvm-svn: 94059
-
- Jan 19, 2010
-
-
Dan Gohman authored
than the scaled register. This makes it more likely that subsequent AddrModeMatcher queries will match the new address the same way as the old, instead of accidentally matching what had been the base register as the new scaled register, and then failing to match the scaled register. This fixes some problems with address-mode sinking multiple muls into a block, which will be a lot more common with some upcoming LoopStrengthReduction changes. llvm-svn: 93935
-
Bob Wilson authored
are the same. I had already fixed a similar problem where the source and destination were different bitcasts derived from the same alloca, but the previous fix still did not handle the case where both operands are exactly the same value. Radar 7552893. llvm-svn: 93848
-