Nick Lewycky 
							
						 
					 
					
						
						
							
						
						11357d4f40 
					 
					
						
						
							
							Add a new icmp+select optz'n. Also shows off the load(cst) folding added in  
						
						... 
						
						
						
						r140966.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140969  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-10-02 10:37:37 +00:00 
						 
				 
			
				
					
						
							
							
								Nick Lewycky 
							
						 
					 
					
						
						
							
						
						267236ade3 
					 
					
						
						
							
							Enhance a couple places where we were doing constant folding of instructions,  
						
						... 
						
						
						
						but not load instructions. Noticed by inspection.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140966  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-10-02 09:12:55 +00:00 
						 
				 
			
				
					
						
							
							
								Eli Friedman 
							
						 
					 
					
						
						
							
						
						747032522f 
					 
					
						
						
							
							Clean up includes of llvm/Analysis/ConstantFolding.h so it's included where it's used and not included where it isn't.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135628  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-07-20 21:57:23 +00:00 
						 
				 
			
				
					
						
							
							
								Jay Foad 
							
						 
					 
					
						
						
							
						
						1d2f569c34 
					 
					
						
						
							
							Use ArrayRef in ConstantFoldInstOperands and ConstantFoldCall.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135477  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-07-19 13:32:40 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						db125cfaf5 
					 
					
						
						
							
							land David Blaikie's patch to de-constify Type, with a few tweaks.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135375  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-07-18 04:54:35 +00:00 
						 
				 
			
				
					
						
							
							
								Eli Friedman 
							
						 
					 
					
						
						
							
						
						00805fae5b 
					 
					
						
						
							
							PR10180: Fix a instcombine crash with FP vectors.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133756  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-06-23 20:40:23 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						2c5cc68874 
					 
					
						
						
							
							ConstantFoldInstOperands doesn't like compares, hand it off to instsimplify instead.  
						
						... 
						
						
						
						Fixes PR10040.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132254  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-05-28 10:16:58 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						17c1bb5d55 
					 
					
						
						
							
							InstCombine: Make switch folding with equality compares more aggressive by trying instsimplify on the arm where we know the compared value.  
						
						... 
						
						
						
						Stuff like "x == y ? y : x&y" now folds into "x&y".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132185  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-05-27 13:00:16 +00:00 
						 
				 
			
				
					
						
							
							
								Eli Friedman 
							
						 
					 
					
						
						
							
						
						976e7e1cc8 
					 
					
						
						
							
							Switch more inst insertion in instcombine to IRBuilder.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131547  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-05-18 18:10:28 +00:00 
						 
				 
			
				
					
						
							
							
								Eli Friedman 
							
						 
					 
					
						
						
							
						
						1eca76a611 
					 
					
						
						
							
							Switch more inst insertion in instcombine to IRBuilder.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131544  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-05-18 17:58:37 +00:00 
						 
				 
			
				
					
						
							
							
								Eli Friedman 
							
						 
					 
					
						
						
							
						
						e87ca454ba 
					 
					
						
						
							
							Switch inst insertion in instcombine transform to IRBuilder.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131542  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-05-18 17:31:55 +00:00 
						 
				 
			
				
					
						
							
							
								Nick Lewycky 
							
						 
					 
					
						
						
							
						
						2bf026e375 
					 
					
						
						
							
							Remove tabs I accidentally added.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128413  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-03-28 17:48:26 +00:00 
						 
				 
			
				
					
						
							
							
								Nick Lewycky 
							
						 
					 
					
						
						
							
						
						675619ca38 
					 
					
						
						
							
							Teach the transformation that moves binary operators around selects to preserve  
						
						... 
						
						
						
						the subclass optional data.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128388  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-03-27 19:51:23 +00:00 
						 
				 
			
				
					
						
							
							
								Nick Lewycky 
							
						 
					 
					
						
						
							
						
						98cd75027c 
					 
					
						
						
							
							Add a small missed optimization: turn X == C ? X : Y into X == C ? C : Y. This  
						
						... 
						
						
						
						removes one use of X which helps it pass the many hasOneUse() checks.
In my analysis, this turns up very often where X = A >>exact B and that can't be
simplified unless X has one use (except by increasing the lifetime of A which is
generally a performance loss).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128373  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-03-27 07:30:57 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						6b4972518c 
					 
					
						
						
							
							InstCombine: Fix a thinko where transform an icmp under the assumption that it's a zero comparison when it's not.  
						
						... 
						
						
						
						Fixes PR9454.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127464  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-03-11 11:37:40 +00:00 
						 
				 
			
				
					
						
							
							
								Nick Lewycky 
							
						 
					 
					
						
						
							
						
						df3bfae151 
					 
					
						
						
							
							Fold select + select where both selects are on the same condition.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124469  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-01-28 03:28:10 +00:00 
						 
				 
			
				
					
						
							
							
								Tobias Grosser 
							
						 
					 
					
						
						
							
						
						aa2be84356 
					 
					
						
						
							
							Instcombine: Fix pattern where the sext did not dominate the icmp using it  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123121  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-01-09 16:00:11 +00:00 
						 
				 
			
				
					
						
							
							
								Frits van Bommel 
							
						 
					 
					
						
						
							
						
						b686eb9186 
					 
					
						
						
							
							Fix a bug in r123034 (trying to sext/zext non-integers) and clean up a little.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123061  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-01-08 10:51:36 +00:00 
						 
				 
			
				
					
						
							
							
								Tobias Grosser 
							
						 
					 
					
						
						
							
						
						46431d7a93 
					 
					
						
						
							
							InstCombine: Match min/max hidden by sext/zext  
						
						... 
						
						
						
						X = sext x; x >s c ? X : C+1 --> X = sext x; X <s C+1 ? C+1 : X
X = sext x; x <s c ? X : C-1 --> X = sext x; X >s C-1 ? C-1 : X
X = zext x; x >u c ? X : C+1 --> X = zext x; X <u C+1 ? C+1 : X
X = zext x; x <u c ? X : C-1 --> X = zext x; X >u C-1 ? C-1 : X
X = sext x; x >u c ? X : C+1 --> X = sext x; X <u C+1 ? C+1 : X
X = sext x; x <u c ? X : C-1 --> X = sext x; X >u C-1 ? C-1 : X
Instead of calculating this with mixed types promote all to the
larger type. This enables scalar evolution to analyze this
expression. PR8866
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123034  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-01-07 21:33:14 +00:00 
						 
				 
			
				
					
						
							
							
								Tobias Grosser 
							
						 
					 
					
						
						
							
						
						8d088bd1e4 
					 
					
						
						
							
							Some whitespace fixes  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123033  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-01-07 21:33:13 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						4ac19470dc 
					 
					
						
						
							
							InstCombine: creating selects from -1 and 0 is fine, they combine into a sext from i1.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122453  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-12-22 23:12:15 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						2f7228b80c 
					 
					
						
						
							
							Generalize the and-icmp-select instcombine further by allowing selects of the form  
						
						... 
						
						
						
						(x & 2^n) ? 2^m+C : C
we can offset both arms by C to get the "(x & 2^n) ? 2^m : 0" form, optimize the
select to a shift and apply the offset afterwards.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121609  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-12-11 10:49:22 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						20e3b4b380 
					 
					
						
						
							
							Factor the (x & 2^n) ? 2^m : 0 instcombine into its own method and generalize it  
						
						... 
						
						
						
						to catch cases where n != m with a shift.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121608  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-12-11 09:42:59 +00:00 
						 
				 
			
				
					
						
							
							
								Dale Johannesen 
							
						 
					 
					
						
						
							
						
						f514f52790 
					 
					
						
						
							
							Teach InstCombine not to use Add and Neg on FP.  PR 8490.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117510  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-10-27 23:45:18 +00:00 
						 
				 
			
				
					
						
							
							
								Owen Anderson 
							
						 
					 
					
						
						
							
						
						835d425a16 
					 
					
						
						
							
							Remove the rest of my instcombine changes.  Back to the drawing board on this one.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108530  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-16 16:39:00 +00:00 
						 
				 
			
				
					
						
							
							
								Owen Anderson 
							
						 
					 
					
						
						
							
						
						11acba0470 
					 
					
						
						
							
							Speculatively revert r108429 to fix the clang self-host.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108436  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-15 18:18:57 +00:00 
						 
				 
			
				
					
						
							
							
								Owen Anderson 
							
						 
					 
					
						
						
							
						
						40bf5e7a68 
					 
					
						
						
							
							Per Chris' suggestion, get rid of the select canonicalization and just add  
						
						... 
						
						
						
						the corresponding or-icmp-and pattern.  This has the added benefit of doing
the matching earlier, and thus being less susceptible to being confused by
earlier transforms.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108429  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-15 17:24:23 +00:00 
						 
				 
			
				
					
						
							
							
								Owen Anderson 
							
						 
					 
					
						
						
							
						
						96fe621e07 
					 
					
						
						
							
							Reapply r108378, with bugfixes, testcase, and improved comment formatting.  
						
						... 
						
						
						
						This now passes LIT, nighty test, and llvm-gcc bootstrap on my machine.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108422  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-15 15:00:23 +00:00 
						 
				 
			
				
					
						
							
							
								Eli Friedman 
							
						 
					 
					
						
						
							
						
						5e84e8e52a 
					 
					
						
						
							
							Speculatively revert r108378; may be causing bootstrap failures.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108389  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-15 00:33:00 +00:00 
						 
				 
			
				
					
						
							
							
								Owen Anderson 
							
						 
					 
					
						
						
							
						
						bd129a7460 
					 
					
						
						
							
							Add instcombine transforms to optimize tests of multiple bits of the same value into a single larger comparison.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108378  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-14 23:33:51 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						1db071f0da 
					 
					
						
						
							
							Teach instcombine to transform  
						
						... 
						
						
						
						(X >s -1) ? C1 : C2 and (X <s  0) ? C2 : C1
into ((X >>s 31) & (C2 - C1)) + C1, avoiding the conditional.
This optimization could be extended to take non-const C1 and C2 but we better
stay conservative to avoid code size bloat for now.
for
int sel(int n) {
     return n >= 0 ? 60 : 100;
}
we now generate
  sarl  $31, %edi
  andl  $40, %edi
  leal  60(%rdi), %eax
instead of
  testl %edi, %edi
  movl  $60, %ecx
  movl  $100, %eax
  cmovnsl %ecx, %eax
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107866  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-08 11:39:10 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						047542669a 
					 
					
						
						
							
							move some select simplifications out out instcombine into  
						
						... 
						
						
						
						inst simplify.  No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101873  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-04-20 05:32:14 +00:00 
						 
				 
			
				
					
						
							
							
								Dan Gohman 
							
						 
					 
					
						
						
							
						
						21dc20cbd6 
					 
					
						
						
							
							Don't do (X != Y) ? X : Y  -> X for floating-point values; it doesn't  
						
						... 
						
						
						
						handle NaN properly.
Do (X une Y) ? X : Y  -> X if one of X and Y is not zero.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96955  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-02-23 17:17:57 +00:00 
						 
				 
			
				
					
						
							
							
								Duncan Sands 
							
						 
					 
					
						
						
							
						
						b0bc6c361d 
					 
					
						
						
							
							Uniformize the names of type predicates: rather than having isFloatTy and  
						
						... 
						
						
						
						isInteger, we now have isFloatTy and isIntegerTy.  Requested by Chris!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96223  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-02-15 16:12:20 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						abb992d6a3 
					 
					
						
						
							
							change the canonical form of "cond ? -1 : 0" to be  
						
						... 
						
						
						
						"sext cond" instead of a select.  This simplifies some instcombine
code, matches the policy for zext (cond ? 1 : 0 -> zext), and allows
us to generate better code for a testcase on ppc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94339  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-01-24 00:09:49 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						11acaa374c 
					 
					
						
						
							
							Convert a ton of simple integer type equality tests to the new predicate.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92760  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-01-05 20:07:06 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						1c22c80d71 
					 
					
						
						
							
							clean up header.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92688  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-01-05 06:05:07 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						c6334b97e1 
					 
					
						
						
							
							split select out to its own file.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92687  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-01-05 06:03:12 +00:00