summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
Commit message (Collapse)AuthorAgeFilesLines
...
* If the block that we're threading through is jumped to by an indirect branch,Bill Wendling2011-06-041-0/+69
| | | | | | | | | | | | then we don't want to set the destination in the indirect branch to the destination. This is because the indirect branch needs its destinations to have had their block addresses taken. This isn't so of the new critical edge that's split during this process. If it turns out that the destination block has only one predecessor, and that being a BB with an indirect branch, then it won't be marked as 'used' and may be removed. PR10072 llvm-svn: 132638
* Add a testcase to demonstrate the problem where phi translation isDan Gohman2011-06-041-0/+27
| | | | | | ignored for clobbering partial-alias loads. llvm-svn: 132633
* Disable the main feature of 130180, the elimination of loads that areDan Gohman2011-06-041-12/+12
| | | | | | | | | | redundant with partially-aliasing loads. When computing what portion of a clobbering load value is needed, it doesn't consider phi-translation which may have occurred between the clobbing load and the redundant load. llvm-svn: 132631
* Bail on unswitching a switch statement for a case with a critical edge. We nameNick Lewycky2011-06-031-0/+28
| | | | | | | which edge to split by pred/succ pair, which means that we can end up splitting the wrong edge (by case value) in the switch statement entirely. Fixes PR10031! llvm-svn: 132535
* Test case pasto (failed when run with IR verifier).Andrew Trick2011-06-021-2/+2
| | | | llvm-svn: 132516
* PR10067: Add missing safety check to call return transformation in ↵Eli Friedman2011-06-021-0/+36
| | | | | | MemCpyOpt::processStore. If something accesses the dest of the "copy" between the call and the copy, the performCallSlotOptzn transformation is not valid. llvm-svn: 132485
* When marking a block as being unanalyzable, use "Clobber" on the terminator ↵Eli Friedman2011-06-021-0/+61
| | | | | | | | | | | | instead of the first instruction in the block. This is a bit of a hack; "Clobber" isn't really the right marking in the first place. memdep doesn't really have any way of properly expressing "unanalyzable" at the moment. Using it on the terminator is much less ambiguous than using it on an arbitrary instruction, though. In the given testcase, the "Clobber" was pointing to a load, and GVN was incorrectly assuming that meant that the "Clobber" load overlapped the load being analyzed (when they are actually unrelated). The included testcase tests both this commit and r132434. Part two of rdar://9429882. (r132434 was mislabeled.) llvm-svn: 132442
* Reapply 132348 with fixes. rdar://problem/6501862Stuart Hastings2011-06-011-6/+39
| | | | llvm-svn: 132402
* First, do no harm -- even if we can't find a selector for an enclosingJohn McCall2011-06-011-2/+29
| | | | | | | landing pad, forward llvm.eh.resume calls to it instead of turning them invalidly into invokes. llvm-svn: 132382
* scev: Better sign-extend removal. Normalize postincrement recurrencesAndrew Trick2011-05-311-17/+12
| | | | | | so that their sign extended forms are congruent when no overflow occurs. llvm-svn: 132360
* Revert to pacify a buildbot. rdar://problem/6501862Stuart Hastings2011-05-311-39/+6
| | | | llvm-svn: 132351
* Followup to 132316; accept arbitrary constants, add with a constant,Stuart Hastings2011-05-311-6/+39
| | | | | | | sub with a non-constant. Fix comments, enlarge test case. rdar://problem/6501862 llvm-svn: 132348
* (1 - X) * (-2) -> (x - 1) * 2, for all positive nonzero powers of 2Stuart Hastings2011-05-301-0/+24
| | | | | | rdar://problem/6501862 llvm-svn: 132316
* Add the test case for phis in the outer landing pad during the inliner'sJohn McCall2011-05-301-1/+111
| | | | | | forwarding of eh.resume that I promised yesterday. llvm-svn: 132307
* Add testcase for r132290, to check for the crasher caught by the buildbotsNick Lewycky2011-05-291-2/+12
| | | | | | doing llvm-gcc selfhost (or cross). llvm-svn: 132292
* Obey the isVolatile bit on memory intrinsics when analyzing uses of a globalNick Lewycky2011-05-291-0/+19
| | | | | | | | | variable. Noticed by inspection. Simulate memset in EvaluateFunction where the target of the memset and the value we're setting are both the null value. Fixes PR10047! llvm-svn: 132288
* ConstantFoldInstOperands doesn't like compares, hand it off to instsimplify ↵Benjamin Kramer2011-05-281-0/+10
| | | | | | | | instead. Fixes PR10040. llvm-svn: 132254
* Implement and document the llvm.eh.resume intrinsic, which isJohn McCall2011-05-281-13/+18
| | | | | | | | | | | | | | | | | transformed by the inliner into a branch to the enclosing landing pad (when inlined through an invoke). If not so optimized, it is lowered DWARF EH preparation into a call to _Unwind_Resume (or _Unwind_SjLj_Resume as appropriate). Its chief advantage is that it takes both the exception value and the selector value as arguments, meaning that there is zero effort in recovering these; however, the frontend is required to pass these down, which is not actually particularly difficult. Also document the behavior of landing pads a bit better, and make it clearer that it's okay that personality functions don't always land at landing pads. This is just a fact of life. Don't write optimizations that rely on pushing things over an unwind edge. llvm-svn: 132253
* Fix the inliner to maintain the current de facto invoke semantics:John McCall2011-05-271-0/+103
| | | | | | | | | | | | | | - the selector for the landing pad must provide all available information about the handlers, filters, and cleanups within that landing pad - calls to _Unwind_Resume must be converted to branches to the enclosing lpad so as to avoid re-entering the unwinder when the lpad claimed it was going to handle the exception in some way This is quite specific to libUnwind-based unwinding. In an effort to not interfere too badly with other unwinders, and with existing hacks in frontends, this only triggers on _Unwind_Resume (not _Unwind_Resume_or_Rethrow) and does nothing with selectors if it cannot find a selector call for either lpad. llvm-svn: 132200
* InstCombine: Make switch folding with equality compares more aggressive by ↵Benjamin Kramer2011-05-271-0/+40
| | | | | | | | trying instsimplify on the arm where we know the compared value. Stuff like "x == y ? y : x&y" now folds into "x&y". llvm-svn: 132185
* Renamed llvm.x86.sse42.crc32 intrinsics; crc64 doesn't exist. Chad Rosier2011-05-261-3/+3
| | | | | | | crc32.[8|16|32] have been renamed to .crc32.32.[8|16|32] and crc64.[8|16|32] have been renamed to .crc32.64.[8|64]. llvm-svn: 132163
* indvars: incremental fixes for -disable-iv-rewrite and testcases.Andrew Trick2011-05-261-1/+66
| | | | | | | | Use a proper worklist for use-def traversal without holding onto an iterator. Now that we process all IV uses, we need complete logic for resusing existing derived IV defs. See HoistStep. llvm-svn: 132103
* PR9998: ashr exact %x, 31 is not equivalent to sdiv exact %x, -2147483648.Eli Friedman2011-05-251-0/+16
| | | | llvm-svn: 132097
* indvars: fixed IV cloning in -disable-iv-rewrite mode with associatedAndrew Trick2011-05-252-0/+216
| | | | | | cleanup and overdue test cases. llvm-svn: 132038
* Fix "make check" in Release by removing debug-only options from an 'opt' ↵Cameron Zwarich2011-05-241-2/+2
| | | | | | invocation. llvm-svn: 131972
* Make LoadAndStorePromoter preserve debug info and create llvm.dbg.values whenCameron Zwarich2011-05-242-0/+62
| | | | | | promoting allocas to SSA variables. Fixes <rdar://problem/9479036>. llvm-svn: 131953
* FileCheck-ize a couple of IV unit tests.Andrew Trick2011-05-242-7/+13
| | | | llvm-svn: 131946
* Test case for r130799 - indvars: Added canExpandBackEdgeTakenCount.Andrew Trick2011-05-241-1/+5
| | | | llvm-svn: 131939
* fix a really nasty basicaa mod/ref calculation bug that was causing ↵Chris Lattner2011-05-231-0/+17
| | | | | | | | miscompilation of UnitTests/ObjC/messages-2.m with the recent optimizer improvements. llvm-svn: 131897
* Transform any logical shift of a power of two into an exact/NUW shift whenChris Lattner2011-05-231-0/+21
| | | | | | in a known-non-zero context. llvm-svn: 131887
* Teach valuetracking that byval arguments with a specified alignment areChris Lattner2011-05-231-0/+20
| | | | | | | | | | | | | | | | | | | | | | aligned. Teach memcpyopt to not give up all hope when confonted with an underaligned memcpy feeding an overaligned byval. If the *source* of the memcpy can be determined to be adequeately aligned, or if it can be forced to be, we can eliminate the memcpy. This addresses PR9794. We now compile the example into: define i32 @f(%struct.p* nocapture byval align 8 %q) nounwind ssp { entry: %call = call i32 @g(%struct.p* byval align 8 %q) nounwind ret i32 %call } in both x86-64 and x86-32 mode. We still don't get a tailcall though, because tailcalls apparently can't handle byval. llvm-svn: 131884
* implement PR9315, constant folding exp2 in terms of pow (since hosts withoutChris Lattner2011-05-221-1/+6
| | | | | | C99 runtimes don't have exp2). llvm-svn: 131872
* Carve out a place in instcombine to put transformations which work knowing ↵Chris Lattner2011-05-221-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | that their result is non-zero. Implement an example optimization (PR9814), which allows us to transform: A / ((1 << B) >>u 2) into: A >>u (B-2) which we compile into: _divu3: ## @divu3 leal -2(%rsi), %ecx shrl %cl, %edi movl %edi, %eax ret instead of: _divu3: ## @divu3 movb %sil, %cl movl $1, %esi shll %cl, %esi shrl $2, %esi movl %edi, %eax xorl %edx, %edx divl %esi, %eax ret llvm-svn: 131860
* Fix PR9815: I was trying to get out of "generating code and thenChris Lattner2011-05-221-0/+37
| | | | | | | | failing to form a memset, then having to delete it" but my approximation isn't safe for self recurrent loops. Instead of doign a hack, just do it the right way. llvm-svn: 131858
* Add a parameter to ConstantFoldTerminator() that callers can use to ask it ↵Frits van Bommel2011-05-221-0/+52
| | | | | | | | to also clean up the condition of any conditional terminator it folds to be unconditional, if that turns the condition into dead code. This just means it calls RecursivelyDeleteTriviallyDeadInstructions() in strategic spots. It defaults to the old behavior. I also changed -simplifycfg, -jump-threading and -codegenprepare to use this to produce slightly better code without any extra cleanup passes (AFAICT this was the only place in -simplifycfg where now-dead conditions of replaced terminators weren't being cleaned up). The only other user of this function is -sccp, but I didn't read that thoroughly enough to figure out whether it might be holding pointers to instructions that could be deleted by this. llvm-svn: 131855
* fix PR9856, an incorrectly conservative assertion: a global can beChris Lattner2011-05-221-0/+14
| | | | | | "stored once" even if its address is compared. llvm-svn: 131849
* fix PR9841 by having GVN not process dead loads. This wasChris Lattner2011-05-221-0/+12
| | | | | | | causing it to get into infinite loops when it would widen a load (which can necessarily leave around dead loads). llvm-svn: 131847
* remove a trivial test, make some other tests less trivial.Chris Lattner2011-05-224-14/+11
| | | | llvm-svn: 131846
* make this test less trivial.Chris Lattner2011-05-221-4/+6
| | | | llvm-svn: 131845
* Commit test change, forgotten as part of r131838.Nick Lewycky2011-05-221-1/+1
| | | | llvm-svn: 131839
* Teach the inliner to emit llvm.lifetime.start/end, to scope the local variablesNick Lewycky2011-05-221-0/+78
| | | | | | of the inlinee to the code representing the original function. llvm-svn: 131838
* Fix grammar in test.Nick Lewycky2011-05-221-1/+1
| | | | llvm-svn: 131831
* Revert "InstCombine: Turn mul.with.overflow(X, 2) into the cheaper ↵Benjamin Kramer2011-05-211-21/+0
| | | | | | | | add.with.overflow(X, X)" It's better to do this in codegen, mul.with.overflow(X, 2) is more canonical because it has only one use on "X". llvm-svn: 131798
* InstCombine: Turn mul.with.overflow(X, 2) into the cheaper ↵Benjamin Kramer2011-05-211-0/+21
| | | | | | add.with.overflow(X, X) llvm-svn: 131789
* Revert r131664 and fix it in instcombine instead. rdar://9467055Evan Cheng2011-05-201-0/+17
| | | | llvm-svn: 131708
* Move test to Transforms/InstCombine.Stuart Hastings2011-05-191-0/+16
| | | | llvm-svn: 131634
* Add test for PR9946.Rafael Espindola2011-05-191-0/+18
| | | | llvm-svn: 131621
* More instcombine cleanup, towards improving debug line info.Eli Friedman2011-05-181-2/+2
| | | | llvm-svn: 131604
* When forming an ICmpZero LSRUse, normalize the non-IV operandDan Gohman2011-05-181-0/+91
| | | | | | | of the comparison, so that the resulting expression is fully normalized. This fixes PR9939. llvm-svn: 131576
* More instcombine cleanup aimed towards improving debug line info.Eli Friedman2011-05-181-4/+4
| | | | llvm-svn: 131559
OpenPOWER on IntegriCloud