- Sep 21, 2011
-
-
Bill Wendling authored
Some passes require breaking critical edges before they're called. Don't segfault because of that. llvm-svn: 140196
-
Bill Wendling authored
Place the check for an exit landing pad where it will be run on both code paths through the if-then-else. llvm-svn: 140195
-
Bill Wendling authored
The landing pad must accompany the invoke when it's extracted. However, if it does, then the loop isn't properly extracted. I.e., the resulting extraction has a loop in it. The extracted function is then extracted, etc. resulting in an infinite loop. llvm-svn: 140193
-
- Sep 20, 2011
-
-
Bill Wendling authored
llvm-svn: 140176
-
Bill Wendling authored
extract its associated landing pad block as well. However, that landing pad block may have more than one predecessor. So split the landing pad block so that individual landing pads have only one predecessor. This type of transformation may produce a false positive with bugpoint. llvm-svn: 140173
-
Bill Wendling authored
llvm-svn: 140172
-
Devang Patel authored
llvm-svn: 140169
-
Bill Wendling authored
llvm-svn: 140168
-
Devang Patel authored
llvm-svn: 140167
-
Bill Wendling authored
llvm-svn: 140164
-
Devang Patel authored
llvm-svn: 140156
-
Devang Patel authored
llvm-svn: 140154
-
Devang Patel authored
GCOVLines is always accessed through a StringMap where the key is FileName. llvm-svn: 140151
-
Devang Patel authored
There is no need to write a local utility routine to find subprogram info if the utility routine is already available in DebugInfo. llvm-svn: 140145
-
Bill Wendling authored
llvm-svn: 140094
-
Bill Wendling authored
extract the landing pad block. Otherwise, there will be a situation where the invoke's unwind edge lands on a non-landing pad. We also forbid the user from extracting the landing pad block by itself. Again, this is not a valid transformation. llvm-svn: 140083
-
- Sep 19, 2011
-
-
Eli Friedman authored
Fix an infinite loop where a transform in InstCombiner::visitAnd claims a construct is changed when it is not. (See included testcase.) Patch by Xiaoyi Guo. llvm-svn: 140072
-
Andrew Trick authored
llvm-svn: 140026
-
- Sep 15, 2011
-
-
Andrew Trick authored
llvm-svn: 139842
-
Eli Friedman authored
llvm-svn: 139768
-
- Sep 14, 2011
-
-
Dan Gohman authored
which could theoretically throw. llvm-svn: 139710
-
Dan Gohman authored
in memory relevant to the optimizer. rdar://10050579. llvm-svn: 139708
-
- Sep 13, 2011
-
-
Andrew Trick authored
llvm-svn: 139583
-
Andrew Trick authored
llvm-svn: 139579
-
Andrew Trick authored
llvm-svn: 139574
-
Eli Friedman authored
llvm-svn: 139571
-
Eli Friedman authored
llvm-svn: 139565
-
- Sep 12, 2011
-
-
Eli Friedman authored
No tests; these changes aren't really interesting in the sense that the logic is the same for volatile and atomic. I believe this completes all of the changes necessary for the optimizer to handle loads and stores correctly. I'm going to try and come up with some additional testing, though. llvm-svn: 139533
-
Andrew Trick authored
llvm-svn: 139517
-
- Sep 10, 2011
-
-
Andrew Trick authored
better. Don't immediately give up when an add operation can't be trivially sign/zero-extended within a loop. If it has NSW/NUW flags, generate a new expression with sign extended (non-recurrent) operand. As before, if SCEV says that all sign extends are loop invariant, then we can widen the operation. llvm-svn: 139453
-
- Sep 09, 2011
-
-
Andrew Trick authored
llvm-svn: 139375
-
- Sep 06, 2011
-
-
Andrew Trick authored
llvm-svn: 139169
-
Devang Patel authored
llvm-svn: 139156
-
Owen Anderson authored
Try again at r138809 (make DSE more aggressive in removing dead stores at the end of a function), now with less deleting stores before memcpy's. llvm-svn: 139150
-
Duncan Sands authored
init.trampoline and adjust.trampoline intrinsics, into two intrinsics like in GCC. While having one combined intrinsic is tempting, it is not natural because typically the trampoline initialization needs to be done in one function, and the result of adjust trampoline is needed in a different (nested) function. To get around this llvm-gcc hacks the nested function lowering code to insert an additional parent variable holding the adjust.trampoline result that can be accessed from the child function. Dragonegg doesn't have the luxury of tweaking GCC code, so it stored the result of adjust.trampoline in the memory GCC set aside for the trampoline itself (this is always available in the child function), and set up some new memory (using an alloca) to hold the trampoline. Unfortunately this breaks Go which allocates trampoline memory on the heap and wants to use it even after the parent has exited (!). Rather than doing even more hacks to get Go working, it seemed best to just use two intrinsics like in GCC. Patch mostly by Sanjoy Das. llvm-svn: 139140
-
- Sep 05, 2011
-
-
Duncan Sands authored
exception. llvm-svn: 139117
-
- Sep 04, 2011
-
-
Bill Wendling authored
Use Duncan's patch to delete the instructions in reverse order (minus the landingpad and terminator). llvm-svn: 139090
-
- Sep 02, 2011
-
-
Bill Wendling authored
llvm-svn: 139023
-
Andrew Trick authored
This changes loop unrolling to use the same mechanism for trip count computation as indvars. This is a stronger check that tends to unroll more loops. A very common side-effect is that many single iteration loops will be removed sooner. The real goal was simply to remove dependence on canonical IVs. x86 is break even. ARM performance changes to expect (+ is good): External/SPEC/CFP2000/183.equake/183.equake +13% SingleSource/Benchmarks/Dhrystone/fldry +21% MultiSource/Applications/spiff/spiff +3% SingleSource/Benchmarks/Stanford/Puzzle -14% The Puzzle regression is actually an improvement in loop optimization that defeats GVN: rdar://problem/10065079. llvm-svn: 139009
-
Jakub Staszak authored
will be valid. This fixes PR10820. llvm-svn: 139005
-