- Oct 18, 2011
-
-
Dan Gohman authored
tag on objc_retainBlock calls, which indicates that they may be optimized away. rdar://10211286. llvm-svn: 142298
-
- Oct 17, 2011
-
-
Bill Wendling authored
combining of the landingpad instruction. The ObjC personality function acts almost identically to the C++ personality function. In particular, it uses "null" as a "catch-all" value. llvm-svn: 142256
-
Dan Gohman authored
possibility that it will span multiple CFG diamonds/triangles which could have different controlling predicates. rdar://10282956 llvm-svn: 142222
-
Bill Wendling authored
Some code want to check that *any* call within a function has the 'returns twice' attribute, not just that the current function has one. llvm-svn: 142221
-
Bill Wendling authored
obsolete. Check the attribute instead. <rdar://problem/8031714> llvm-svn: 142212
-
Michael J. Spencer authored
llvm-svn: 142204
-
Devang Patel authored
There is no reason to have simple IR level pass in lib/Target. llvm-svn: 142200
-
Chandler Carruth authored
profile metadata at the same time. Use it to preserve metadata attached to a branch when re-writing it in InstCombine. Add metadata to the canonicalize_branch InstCombine test, and check that it is tranformed correctly. Reviewed by Nick Lewycky! llvm-svn: 142168
-
Chandler Carruth authored
llvm-svn: 142162
-
- Oct 16, 2011
-
-
Nick Lewycky authored
on the memcpy call will pull up other unrelated stuff. Fixes PR11142. llvm-svn: 142150
-
- Oct 15, 2011
-
-
Duncan Sands authored
use can't be dominated, saving one domtree lookup. llvm-svn: 142066
-
Andrew Trick authored
I rewrote the algorithm a while back so it doesn't require map lookup, but neglected to change the data structure. This was caught by llvm-gcc self host, not because there's anything special about llvm-gcc, but because it is the only test for nondeterminism we currently have. Unit tests don't work well for everything; we should always try to have a nondeterminism stress test running. Fixes PR11133: llvm-gcc self host .o mismatch after enable-iv-rewrite=false llvm-svn: 142036
-
- Oct 14, 2011
-
-
Eli Friedman authored
Someone more familiar with LSR should double-check that the extra cast is actually doing the right thing in the overflow cases; I'm not completely confident that's that case. llvm-svn: 141916
-
Eli Friedman authored
Enhance the memdep interface so that users can tell the difference between a dependency which cannot be calculated and a path reaching the entry point of the function. This patch introduces isNonFuncLocal, which replaces isUnknown in some cases. Patch by Xiaoyi Guo. llvm-svn: 141896
-
- Oct 13, 2011
-
-
Eli Friedman authored
Fix a couple hash functions so that they do not depend on undefined shifts. Based on patch by Ahmed Charles. llvm-svn: 141820
-
- Oct 12, 2011
-
-
Nick Lewycky authored
llvm-svn: 141750
-
- Oct 11, 2011
-
-
Cameron Zwarich authored
would have never worked, since the element type of a vector type is never a vector type. Also fix the conditional to be more direct in checking whether EltTy is a vector type. llvm-svn: 141713
-
Cameron Zwarich authored
lowering of NEON code. It provides little-to-no benefit now and only introduces additional complexity. llvm-svn: 141646
-
Andrew Trick authored
I'm not sure we will need it in the long run, but the option is currently useful for checking if the output of LSR is "clean". llvm-svn: 141634
-
Andrew Trick authored
IVs. Indvars previously chose randomly between congruent IVs. Now it will bias the decision toward IVs that SCEVExpander likes to create. This was not done to fix any problem, it's just a welcome side effect of factoring code. llvm-svn: 141633
-
Lang Hames authored
promoting allocas to preferred alignments that exceed the natural alignment. This avoids some potentially expensive dynamic stack realignments. The natural stack alignment is set in target data strings via the "S<size>" option. Size is in bits and must be a multiple of 8. The natural stack alignment defaults to "unspecified" (represented by a zero value), and the "unspecified" value does not prevent any alignment promotions. Target maintainers that care about avoiding promotions should explicitly add the "S<size>" option to their target data strings. llvm-svn: 141599
-
- Oct 08, 2011
-
-
Andrew Trick authored
Fixes rdar://problem/5064068 llvm-svn: 141442
-
- Oct 07, 2011
-
-
Duncan Sands authored
switch (n) { case 27: do_something(x); ... } the call do_something(x) will be replaced with do_something(27). In gcc-as-one-big-file this results in the removal of about 500 lines of bitcode (about 0.02%), so has about 1/10 of the effect of propagating branch conditions. llvm-svn: 141360
-
Eli Friedman authored
llvm-svn: 141333
-
- Oct 06, 2011
-
-
Eli Friedman authored
While I'm here, fix the related issue with strncmp, add some actual tests for strcmp and strncmp, and start using StringRef::compare for constant folding instead of using strcmp/strncmp so that the optimized IR isn't dependent on the host's implementation of strcmp. llvm-svn: 141227
-
- Oct 05, 2011
-
-
Jim Grosbach authored
Just pull the instruction name, but don't change the order of anything else. That keeps --debug happy and non-crashing, but doesn't change how the worklist gets built. llvm-svn: 141210
-
Jim Grosbach authored
llvm-svn: 141209
-
Jim Grosbach authored
When updating the worklist for InstCombine, the Add/AddUsersToWorklist functions may access the instruction(s) being added, for debug output for example. If the instructions aren't yet added to the basic block, this can result in a crash. Finish the instruction transformation before adjusting the worklist instead. rdar://10238555 llvm-svn: 141203
-
Duncan Sands authored
branch "br i1 %x, label %if_true, label %if_false" then it replaces "%x" with "true" in places only reachable via the %if_true arm, and with "false" in places only reachable via the %if_false arm. Except that actually it doesn't: if value numbering shows that %y is equal to %x then, yes, %y will be turned into true/false in this way, but any occurrences of %x itself are not transformed. Fix this. What's more, it's often the case that %x is an equality comparison such as "%x = icmp eq %A, 0", in which case every occurrence of %A that is only reachable via the %if_true arm can be replaced with 0. Implement this and a few other variations on this theme. This reduces the number of lines of LLVM IR in "GCC as one big file" by 0.2%. It has a bigger impact on Ada code, typically reducing the number of lines of bitcode by around 0.4% by removing repeated compiler generated checks. Passes the LLVM nightly testsuite and the Ada ACATS testsuite. llvm-svn: 141177
-
Duncan Sands authored
it's OK for the false/true destination to have multiple predecessors as long as the extra ones are dominated by the branch destination. llvm-svn: 141176
-
- Oct 04, 2011
-
-
Andrew Trick authored
This handles the case in which LSR rewrites an IV user that is a phi and splits critical edges originating from a switch. Fixes <rdar://problem/6453893> LSR is not splitting edges "nicely" llvm-svn: 141059
-
Andrew Trick authored
llvm-svn: 141058
-
- Oct 02, 2011
-
-
Nick Lewycky authored
r140966. llvm-svn: 140969
-
Nick Lewycky authored
but not load instructions. Noticed by inspection. llvm-svn: 140966
-
- Oct 01, 2011
-
-
Andrew Trick authored
We want heuristics to be based on accurate data, but more importantly we don't want llvm to behave randomly. A benign trunc inserted by an upstream pass should not cause a wild swings in optimization level. See PR11034. It's a general problem with threshold-based heuristics, but we can make it less bad. llvm-svn: 140919
-
Andrew Trick authored
llvm-svn: 140916
-
- Sep 30, 2011
-
-
Jim Grosbach authored
llvm-svn: 140875
-
Jim Grosbach authored
InstCombine was incorrectly considering the conversion of the constant zero to be unsafe. We want to transform: define float @bar(float %x) nounwind readnone optsize ssp { %conv = fpext float %x to double %cmp = fcmp olt double %conv, 0.000000e+00 %conv1 = zext i1 %cmp to i32 %conv2 = sitofp i32 %conv1 to float ret float %conv2 } Into: define float @bar(float %x) nounwind readnone optsize ssp { %cmp = fcmp olt float %x, 0.000000e+00 ; <---- This %conv1 = zext i1 %cmp to i32 %conv2 = sitofp i32 %conv1 to float ret float %conv2 } rdar://10215914 llvm-svn: 140869
-
Jim Grosbach authored
llvm-svn: 140865
-
Duncan Sands authored
catch or repeated filter clauses. Teach instcombine a bunch of tricks for simplifying landingpad clauses. Currently the code only recognizes the GNU C++ and Ada personality functions, but that doesn't stop it doing a bunch of "generic" transforms which are hopefully fine for any real-world personality function. If these "generic" transforms turn out not to be generic, they can always be conditioned on the personality function. Probably someone should add the ObjC++ personality function. I didn't as I don't know anything about it. llvm-svn: 140852
-