Owen Anderson 
							
						 
					 
					
						
						
							
						
						61378363b7 
					 
					
						
						
							
							Re-apply the infamous r108614, with a fix pointed out by Dirk Steinke.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110036  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-08-02 09:32:13 +00:00 
						 
				 
			
				
					
						
							
							
								Daniel Dunbar 
							
						 
					 
					
						
						
							
						
						10b173a1e7 
					 
					
						
						
							
							Speculatively revert r108614, "Another attempt at getting the clang self-host to  
						
						... 
						
						
						
						like my instcombine patch.", in an attempt to fix Clang i386 bootstrap.
 - Also PR7719.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109953  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-31 19:51:11 +00:00 
						 
				 
			
				
					
						
							
							
								Owen Anderson 
							
						 
					 
					
						
						
							
						
						7e3012c345 
					 
					
						
						
							
							Another attempt at getting the clang self-host to like my instcombine patch.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108614  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-17 06:56:35 +00:00 
						 
				 
			
				
					
						
							
							
								Eric Christopher 
							
						 
					 
					
						
						
							
						
						de309a8b52 
					 
					
						
						
							
							Also revert 108422, it's causing some test failures.  
						
						... 
						
						
						
						Working on testcases for Owen.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108494  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-16 01:36:12 +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 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						07c9b64719 
					 
					
						
						
							
							revert r108320, I see the failures now...  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108322  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-14 06:16:35 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						7e185af930 
					 
					
						
						
							
							reapply benjamin's instcombine patch, I don't see anything wrong with it and can't repro any problems with a manual self-host.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108320  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-14 05:59:13 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						c9fe6374b7 
					 
					
						
						
							
							Nope, still breaks the release selfhost bots :(  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108153  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-12 16:38:48 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						8fd437c43f 
					 
					
						
						
							
							Reapply the "or" half of r108136, which seems to be less problematic.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108152  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-12 16:15:48 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						e2d07b5208 
					 
					
						
						
							
							Revert r108141 again, sigh.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108148  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-12 14:42:04 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						98a8206e58 
					 
					
						
						
							
							Reapply 108136 with an ugly pasto fixed.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108141  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-12 13:44:00 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						ad854f0764 
					 
					
						
						
							
							Move optimization to avoid redundant matching.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108140  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-12 13:34:22 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						0cc4ed1ca5 
					 
					
						
						
							
							Revert r108136 until I figure out why it broke selfhost.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108139  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-12 12:35:49 +00:00 
						 
				 
			
				
					
						
							
							
								Benjamin Kramer 
							
						 
					 
					
						
						
							
						
						4fc719e607 
					 
					
						
						
							
							instcombine: fold (x & y) | (~x & z) and (x & y) ^ (~x & z) into ((y ^ z) & x) ^ z which is one instruction shorter. (PR6773)  
						
						... 
						
						
						
						before:
  %and = and i32 %y, %x
  %neg = xor i32 %x, -1
  %and4 = and i32 %z, %neg
  %xor = xor i32 %and4, %and
after:
  %xor1 = xor i32 %z, %y
  %and2 = and i32 %xor1, %x
  %xor = xor i32 %and2, %z
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108136  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-07-12 11:54:45 +00:00 
						 
				 
			
				
					
						
							
							
								Dan Gohman 
							
						 
					 
					
						
						
							
						
						6c3ae655b8 
					 
					
						
						
							
							Minor code simplification.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100859  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-04-09 14:53:59 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						f34f48c578 
					 
					
						
						
							
							Fix PR6503.  This turned into a much more interesting and nasty bug.  Various  
						
						... 
						
						
						
						parts of the cmp|cmp and cmp&cmp folding logic wasn't prepared for vectors
(unrelated to the bug but noticed while in the code) and the code was 
*definitely* not safe to use by the (cast icmp)|(cast icmp) handling logic
that I added in r95855.  Fix all this up by changing the various routines
to more consistently use IRBuilder and not pass in the I which had the wrong 
type.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97801  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-05 08:46:26 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						d6f645ac09 
					 
					
						
						
							
							simplify some functions and make them work with vector  
						
						... 
						
						
						
						compares, noticed by inspection.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97795  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-05 07:47:57 +00:00 
						 
				 
			
				
					
						
							
							
								Bill Wendling 
							
						 
					 
					
						
						
							
						
						7d9f2b93a3 
					 
					
						
						
							
							This test case:  
						
						... 
						
						
						
						long test(long x) { return (x & 123124) | 3; }
Currently compiles to:
_test:
        orl     $3, %edi
        movq    %rdi, %rax
        andq    $123127, %rax
        ret
This is because instruction and DAG combiners canonicalize
  (or (and x, C), D) -> (and (or, D), (C | D))
However, this is only profitable if (C & D) != 0. It gets in the way of the
3-addressification because the input bits are known to be zero.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97616  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-03-03 00:35:56 +00:00 
						 
				 
			
				
					
						
							
							
								Duncan Sands 
							
						 
					 
					
						
						
							
						
						1df9859c40 
					 
					
						
						
							
							There are two ways of checking for a given type, for example isa<PointerType>(T)  
						
						... 
						
						
						
						and T->isPointerTy().  Convert most instances of the first form to the second form.
Requested by Chris.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96344  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-02-16 11:11:14 +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 
							
						 
					 
					
						
						
							
						
						8c5ad3a5da 
					 
					
						
						
							
							Rename ValueRequiresCast to ShouldOptimizeCast, to better reflect  
						
						... 
						
						
						
						what it does.  Enhance it to return false to optimizing vector
sign extensions from vector comparisions, which is the idiom used
to get a splatted vector for a vector comparison.
Doing this breaks vector-casts.ll, add some compensating 
transformations to handle the important case they cover without
depending on this canonicalization.
This fixes rdar://7434900 a serious pessimization of vector compares.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95855  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-02-11 06:26:33 +00:00 
						 
				 
			
				
					
						
							
							
								Dan Gohman 
							
						 
					 
					
						
						
							
						
						f451cb870e 
					 
					
						
						
							
							Fix "the the" and similar typos.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95781  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-02-10 16:03:48 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						e576f292ee 
					 
					
						
						
							
							simplify this code, duh.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95643  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-02-09 01:14:06 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						e538db4fb0 
					 
					
						
						
							
							fix PR6193, only considering sign extensions *from i1* for this  
						
						... 
						
						
						
						xform.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95642  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-02-09 01:12:41 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						74529826a7 
					 
					
						
						
							
							fix logical-select to invoke filecheck right, and fix hte instcombine  
						
						... 
						
						
						
						xform it is checking to actually pass.  There is no need to match
m_SelectCst<0, -1> since instcombine canonicalizes that into not(sext).
Add matches for sext(not(x)) in addition to not(sext(x)).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95420  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-02-05 19:53:02 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						39ceb471b7 
					 
					
						
						
							
							don't turn (A & (C0?-1:0)) | (B & ~(C0?-1:0)) ->  C0 ? A : B  
						
						... 
						
						
						
						for vectors.  Codegen is generating awful code or segfaulting
in various cases (e.g. PR6204).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95058  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-02-02 02:43:51 +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 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						c0404b3715 
					 
					
						
						
							
							optimize ~(~X >>s Y) --> (X >>s Y), patch by Edmund Grimley  
						
						... 
						
						
						
						Evans!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93884  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-01-19 18:16:19 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						8e76764de8 
					 
					
						
						
							
							add one more bitfield optimization, allowing clang to generate  
						
						... 
						
						
						
						good code on PR4216:
_test_bitfield:                                             ## @test_bitfield
	orl	$32962, %edi
	movl	$4294941946, %eax
	andq	%rdi, %rax
	ret
instead of:
_test_bitfield:
        movl    $4294941696, %ecx
        movl    %edi, %eax
        orl     $194, %edi
        orl     $32768, %eax
        andq    $250, %rdi
        andq    %rax, %rcx
        movq    %rdi, %rax
        orq     %rcx, %rax
        ret
Evan is looking into the remaining andq+imm -> andl optimization.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93147  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-01-11 06:55:24 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						25f2a23b4a 
					 
					
						
						
							
							split and/or/xor out into one overly-large (2000LOC) file.  However, I think  
						
						... 
						
						
						
						it does make sense to keep them together, at least for now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92711  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-01-05 07:50:36 +00:00