Nick Lewycky
							
						 
						
							 
							
							
							
							
								
							
							
								99fb091f65 
								
							 
						 
						
							
							
								
								Add a new icmp+select optz'n. Also shows off the load(cst) folding added in  
							
							 
							
							... 
							
							
							
							r140966.
llvm-svn: 140969 
							
						 
						
							2011-10-02 10:37:37 +00:00  
						
					 
				
					
						
							
							
								 
								Nick Lewycky
							
						 
						
							 
							
							
							
							
								
							
							
								40a34dd9a3 
								
							 
						 
						
							
							
								
								Enhance a couple places where we were doing constant folding of instructions,  
							
							 
							
							... 
							
							
							
							but not load instructions. Noticed by inspection.
llvm-svn: 140966 
							
						 
						
							2011-10-02 09:12:55 +00:00  
						
					 
				
					
						
							
							
								 
								Eli Friedman
							
						 
						
							 
							
							
							
							
								
							
							
								911e12f505 
								
							 
						 
						
							
							
								
								Clean up includes of llvm/Analysis/ConstantFolding.h so it's included where it's used and not included where it isn't.  
							
							 
							
							... 
							
							
							
							llvm-svn: 135628 
							
						 
						
							2011-07-20 21:57:23 +00:00  
						
					 
				
					
						
							
							
								 
								Jay Foad
							
						 
						
							 
							
							
							
							
								
							
							
								f4b14a2b0d 
								
							 
						 
						
							
							
								
								Use ArrayRef in ConstantFoldInstOperands and ConstantFoldCall.  
							
							 
							
							... 
							
							
							
							llvm-svn: 135477 
							
						 
						
							2011-07-19 13:32:40 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								229907cd11 
								
							 
						 
						
							
							
								
								land David Blaikie's patch to de-constify Type, with a few tweaks.  
							
							 
							
							... 
							
							
							
							llvm-svn: 135375 
							
						 
						
							2011-07-18 04:54:35 +00:00  
						
					 
				
					
						
							
							
								 
								Eli Friedman
							
						 
						
							 
							
							
							
							
								
							
							
								2c980fafff 
								
							 
						 
						
							
							
								
								PR10180: Fix a instcombine crash with FP vectors.  
							
							 
							
							... 
							
							
							
							llvm-svn: 133756 
							
						 
						
							2011-06-23 20:40:23 +00:00  
						
					 
				
					
						
							
							
								 
								Benjamin Kramer
							
						 
						
							 
							
							
							
							
								
							
							
								fd53a27f99 
								
							 
						 
						
							
							
								
								ConstantFoldInstOperands doesn't like compares, hand it off to instsimplify instead.  
							
							 
							
							... 
							
							
							
							Fixes PR10040.
llvm-svn: 132254 
							
						 
						
							2011-05-28 10:16:58 +00:00  
						
					 
				
					
						
							
							
								 
								Benjamin Kramer
							
						 
						
							 
							
							
							
							
								
							
							
								749ef5f420 
								
							 
						 
						
							
							
								
								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".
llvm-svn: 132185 
							
						 
						
							2011-05-27 13:00:16 +00:00  
						
					 
				
					
						
							
							
								 
								Eli Friedman
							
						 
						
							 
							
							
							
							
								
							
							
								2fd66441c6 
								
							 
						 
						
							
							
								
								Switch more inst insertion in instcombine to IRBuilder.  
							
							 
							
							... 
							
							
							
							llvm-svn: 131547 
							
						 
						
							2011-05-18 18:10:28 +00:00  
						
					 
				
					
						
							
							
								 
								Eli Friedman
							
						 
						
							 
							
							
							
							
								
							
							
								0b43b9ee98 
								
							 
						 
						
							
							
								
								Switch more inst insertion in instcombine to IRBuilder.  
							
							 
							
							... 
							
							
							
							llvm-svn: 131544 
							
						 
						
							2011-05-18 17:58:37 +00:00  
						
					 
				
					
						
							
							
								 
								Eli Friedman
							
						 
						
							 
							
							
							
							
								
							
							
								cde9c1628c 
								
							 
						 
						
							
							
								
								Switch inst insertion in instcombine transform to IRBuilder.  
							
							 
							
							... 
							
							
							
							llvm-svn: 131542 
							
						 
						
							2011-05-18 17:31:55 +00:00  
						
					 
				
					
						
							
							
								 
								Nick Lewycky
							
						 
						
							 
							
							
							
							
								
							
							
								ebc2f3a68c 
								
							 
						 
						
							
							
								
								Remove tabs I accidentally added.  
							
							 
							
							... 
							
							
							
							llvm-svn: 128413 
							
						 
						
							2011-03-28 17:48:26 +00:00  
						
					 
				
					
						
							
							
								 
								Nick Lewycky
							
						 
						
							 
							
							
							
							
								
							
							
								8544228d5a 
								
							 
						 
						
							
							
								
								Teach the transformation that moves binary operators around selects to preserve  
							
							 
							
							... 
							
							
							
							the subclass optional data.
llvm-svn: 128388 
							
						 
						
							2011-03-27 19:51:23 +00:00  
						
					 
				
					
						
							
							
								 
								Nick Lewycky
							
						 
						
							 
							
							
							
							
								
							
							
								83167df787 
								
							 
						 
						
							
							
								
								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).
llvm-svn: 128373 
							
						 
						
							2011-03-27 07:30:57 +00:00  
						
					 
				
					
						
							
							
								 
								Benjamin Kramer
							
						 
						
							 
							
							
							
							
								
							
							
								51897bcd3e 
								
							 
						 
						
							
							
								
								InstCombine: Fix a thinko where transform an icmp under the assumption that it's a zero comparison when it's not.  
							
							 
							
							... 
							
							
							
							Fixes PR9454.
llvm-svn: 127464 
							
						 
						
							2011-03-11 11:37:40 +00:00  
						
					 
				
					
						
							
							
								 
								Nick Lewycky
							
						 
						
							 
							
							
							
							
								
							
							
								b074e32641 
								
							 
						 
						
							
							
								
								Fold select + select where both selects are on the same condition.  
							
							 
							
							... 
							
							
							
							llvm-svn: 124469 
							
						 
						
							2011-01-28 03:28:10 +00:00  
						
					 
				
					
						
							
							
								 
								Tobias Grosser
							
						 
						
							 
							
							
							
							
								
							
							
								cc21c4aa98 
								
							 
						 
						
							
							
								
								Instcombine: Fix pattern where the sext did not dominate the icmp using it  
							
							 
							
							... 
							
							
							
							llvm-svn: 123121 
							
						 
						
							2011-01-09 16:00:11 +00:00  
						
					 
				
					
						
							
							
								 
								Frits van Bommel
							
						 
						
							 
							
							
							
							
								
							
							
								6a1fb8f235 
								
							 
						 
						
							
							
								
								Fix a bug in r123034 (trying to sext/zext non-integers) and clean up a little.  
							
							 
							
							... 
							
							
							
							llvm-svn: 123061 
							
						 
						
							2011-01-08 10:51:36 +00:00  
						
					 
				
					
						
							
							
								 
								Tobias Grosser
							
						 
						
							 
							
							
							
							
								
							
							
								fc3d7f664b 
								
							 
						 
						
							
							
								
								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
llvm-svn: 123034 
							
						 
						
							2011-01-07 21:33:14 +00:00  
						
					 
				
					
						
							
							
								 
								Tobias Grosser
							
						 
						
							 
							
							
							
							
								
							
							
								411e6eedff 
								
							 
						 
						
							
							
								
								Some whitespace fixes  
							
							 
							
							... 
							
							
							
							llvm-svn: 123033 
							
						 
						
							2011-01-07 21:33:13 +00:00  
						
					 
				
					
						
							
							
								 
								Benjamin Kramer
							
						 
						
							 
							
							
							
							
								
							
							
								8ef5001b27 
								
							 
						 
						
							
							
								
								InstCombine: creating selects from -1 and 0 is fine, they combine into a sext from i1.  
							
							 
							
							... 
							
							
							
							llvm-svn: 122453 
							
						 
						
							2010-12-22 23:12:15 +00:00  
						
					 
				
					
						
							
							
								 
								Benjamin Kramer
							
						 
						
							 
							
							
							
							
								
							
							
								c4169cebe3 
								
							 
						 
						
							
							
								
								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.
llvm-svn: 121609 
							
						 
						
							2010-12-11 10:49:22 +00:00  
						
					 
				
					
						
							
							
								 
								Benjamin Kramer
							
						 
						
							 
							
							
							
							
								
							
							
								c8b035d006 
								
							 
						 
						
							
							
								
								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.
llvm-svn: 121608 
							
						 
						
							2010-12-11 09:42:59 +00:00  
						
					 
				
					
						
							
							
								 
								Dale Johannesen
							
						 
						
							 
							
							
							
							
								
							
							
								16bb87a90e 
								
							 
						 
						
							
							
								
								Teach InstCombine not to use Add and Neg on FP.  PR 8490.  
							
							 
							
							... 
							
							
							
							llvm-svn: 117510 
							
						 
						
							2010-10-27 23:45:18 +00:00  
						
					 
				
					
						
							
							
								 
								Owen Anderson
							
						 
						
							 
							
							
							
							
								
							
							
								8a39c807e2 
								
							 
						 
						
							
							
								
								Remove the rest of my instcombine changes.  Back to the drawing board on this one.  
							
							 
							
							... 
							
							
							
							llvm-svn: 108530 
							
						 
						
							2010-07-16 16:39:00 +00:00  
						
					 
				
					
						
							
							
								 
								Owen Anderson
							
						 
						
							 
							
							
							
							
								
							
							
								eaf64d5c1e 
								
							 
						 
						
							
							
								
								Speculatively revert r108429 to fix the clang self-host.  
							
							 
							
							... 
							
							
							
							llvm-svn: 108436 
							
						 
						
							2010-07-15 18:18:57 +00:00  
						
					 
				
					
						
							
							
								 
								Owen Anderson
							
						 
						
							 
							
							
							
							
								
							
							
								eb08d01061 
								
							 
						 
						
							
							
								
								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.
llvm-svn: 108429 
							
						 
						
							2010-07-15 17:24:23 +00:00  
						
					 
				
					
						
							
							
								 
								Owen Anderson
							
						 
						
							 
							
							
							
							
								
							
							
								7151dfd48a 
								
							 
						 
						
							
							
								
								Reapply r108378, with bugfixes, testcase, and improved comment formatting.  
							
							 
							
							... 
							
							
							
							This now passes LIT, nighty test, and llvm-gcc bootstrap on my machine.
llvm-svn: 108422 
							
						 
						
							2010-07-15 15:00:23 +00:00  
						
					 
				
					
						
							
							
								 
								Eli Friedman
							
						 
						
							 
							
							
							
							
								
							
							
								a8b4e3732b 
								
							 
						 
						
							
							
								
								Speculatively revert r108378; may be causing bootstrap failures.  
							
							 
							
							... 
							
							
							
							llvm-svn: 108389 
							
						 
						
							2010-07-15 00:33:00 +00:00  
						
					 
				
					
						
							
							
								 
								Owen Anderson
							
						 
						
							 
							
							
							
							
								
							
							
								37d91d84af 
								
							 
						 
						
							
							
								
								Add instcombine transforms to optimize tests of multiple bits of the same value into a single larger comparison.  
							
							 
							
							... 
							
							
							
							llvm-svn: 108378 
							
						 
						
							2010-07-14 23:33:51 +00:00  
						
					 
				
					
						
							
							
								 
								Benjamin Kramer
							
						 
						
							 
							
							
							
							
								
							
							
								2321e6a4d4 
								
							 
						 
						
							
							
								
								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
llvm-svn: 107866 
							
						 
						
							2010-07-08 11:39:10 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c707fa9651 
								
							 
						 
						
							
							
								
								move some select simplifications out out instcombine into  
							
							 
							
							... 
							
							
							
							inst simplify.  No functionality change.
llvm-svn: 101873 
							
						 
						
							2010-04-20 05:32:14 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								cd4c03e886 
								
							 
						 
						
							
							
								
								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.
llvm-svn: 96955 
							
						 
						
							2010-02-23 17:17:57 +00:00  
						
					 
				
					
						
							
							
								 
								Duncan Sands
							
						 
						
							 
							
							
							
							
								
							
							
								9dff9bec31 
								
							 
						 
						
							
							
								
								Uniformize the names of type predicates: rather than having isFloatTy and  
							
							 
							
							... 
							
							
							
							isInteger, we now have isFloatTy and isIntegerTy.  Requested by Chris!
llvm-svn: 96223 
							
						 
						
							2010-02-15 16:12:20 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								1b35bbe813 
								
							 
						 
						
							
							
								
								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.
llvm-svn: 94339 
							
						 
						
							2010-01-24 00:09:49 +00:00  
						
					 
				
					
						
							
							
								 
								Benjamin Kramer
							
						 
						
							 
							
							
							
							
								
							
							
								a81a6dff0d 
								
							 
						 
						
							
							
								
								Convert a ton of simple integer type equality tests to the new predicate.  
							
							 
							
							... 
							
							
							
							llvm-svn: 92760 
							
						 
						
							2010-01-05 20:07:06 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								1e7b7b50b1 
								
							 
						 
						
							
							
								
								clean up header.  
							
							 
							
							... 
							
							
							
							llvm-svn: 92688 
							
						 
						
							2010-01-05 06:05:07 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								8f771cb78f 
								
							 
						 
						
							
							
								
								split select out to its own file.  
							
							 
							
							... 
							
							
							
							llvm-svn: 92687 
							
						 
						
							2010-01-05 06:03:12 +00:00