Chandler Carruth
							
						 
						
							 
							
							
							
							
								
							
							
								7132e00de7 
								
							 
						 
						
							
							
								
								This is the patch to provide clean intrinsic function overloading support in LLVM. It cleans up the intrinsic definitions and generally smooths the process for more complicated intrinsic writing. It will be used by the upcoming atomic intrinsics as well as vector and float intrinsics in the future.  
							
							 
							
							... 
							
							
							
							This also changes the syntax for llvm.bswap, llvm.part.set, llvm.part.select, and llvm.ct* intrinsics. They are automatically upgraded by both the LLVM ASM reader and the bitcode reader. The test cases have been updated, with special tests added to ensure the automatic upgrading is supported.
llvm-svn: 40807 
							
						 
						
							2007-08-04 01:51:18 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								dc2cf228ce 
								
							 
						 
						
							
							
								
								Replacing a cast with another one does not reduce the number of  
							
							 
							
							... 
							
							
							
							casts in the input.
llvm-svn: 40741 
							
						 
						
							2007-08-02 17:23:38 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								222b214be7 
								
							 
						 
						
							
							
								
								Disable an xform that causes an infinite loop.  This fixes PR1594  
							
							 
							
							... 
							
							
							
							llvm-svn: 40739 
							
						 
						
							2007-08-02 16:56:32 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								2740694450 
								
							 
						 
						
							
							
								
								wrap some long lines.  Major offenders that are left include  
							
							 
							
							... 
							
							
							
							gvn, gvnpre, dse, and predsimplify.  To see these, use:
  make check-line-length
llvm-svn: 40738 
							
						 
						
							2007-08-02 16:53:43 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								b0418fc607 
								
							 
						 
						
							
							
								
								Enhance instcombine to be more aggressive about folding casts of  
							
							 
							
							... 
							
							
							
							operations of casts.  This implements InstCombine/zext-fold.ll
llvm-svn: 40726 
							
						 
						
							2007-08-02 06:11:14 +00:00  
						
					 
				
					
						
							
							
								 
								David Greene
							
						 
						
							 
							
							
							
							
								
							
							
								17a5dfe6f7 
								
							 
						 
						
							
							
								
								New CallInst interface to address GLIBCXX_DEBUG errors caused by  
							
							 
							
							... 
							
							
							
							indexing an empty std::vector.
Updates to all clients.
llvm-svn: 40660 
							
						 
						
							2007-08-01 03:43:44 +00:00  
						
					 
				
					
						
							
							
								 
								Lauro Ramos Venancio
							
						 
						
							 
							
							
							
							
								
							
							
								549e775e67 
								
							 
						 
						
							
							
								
								Fix a bug in GetKnownAlignment of packed structs.  
							
							 
							
							... 
							
							
							
							llvm-svn: 40649 
							
						 
						
							2007-07-31 20:13:21 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								dff9d69cfb 
								
							 
						 
						
							
							
								
								Fix a typo/thinko.  
							
							 
							
							... 
							
							
							
							llvm-svn: 40599 
							
						 
						
							2007-07-30 19:53:57 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4512cd2cab 
								
							 
						 
						
							
							
								
								completely remove a transformation that is unsafe in the face of  
							
							 
							
							... 
							
							
							
							undefs.
llvm-svn: 40439 
							
						 
						
							2007-07-23 17:10:17 +00:00  
						
					 
				
					
						
							
							
								 
								Devang Patel
							
						 
						
							 
							
							
							
							
								
							
							
								5e39293e62 
								
							 
						 
						
							
							
								
								Apply temporary work around to fix llvm mis-compilation  
							
							 
							
							... 
							
							
							
							reported in PR 1556.
llvm-svn: 40133 
							
						 
						
							2007-07-21 00:34:29 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d82e4a19cc 
								
							 
						 
						
							
							
								
								this xform is already done by the constant folder.  
							
							 
							
							... 
							
							
							
							llvm-svn: 40124 
							
						 
						
							2007-07-20 22:06:41 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								e31a61eeca 
								
							 
						 
						
							
							
								
								Optimize alignment of loads and stores.  
							
							 
							
							... 
							
							
							
							llvm-svn: 40102 
							
						 
						
							2007-07-20 16:34:21 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								06c60b6032 
								
							 
						 
						
							
							
								
								Fix comments about vectors to use the current wording.  
							
							 
							
							... 
							
							
							
							llvm-svn: 39921 
							
						 
						
							2007-07-16 14:29:03 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								640fd5124d 
								
							 
						 
						
							
							
								
								Repair a regression in Transforms/InstCombine/mul.ll that Reid noticed.  
							
							 
							
							... 
							
							
							
							llvm-svn: 39896 
							
						 
						
							2007-07-16 04:15:34 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d4fef8dbca 
								
							 
						 
						
							
							
								
								Implement shift-simplify.ll:test[45].  
							
							 
							
							... 
							
							
							
							First teach instcombine that sign bit checks only demand the 
sign bit, this allows simplify demanded bits to hack on 
expressions better.
Second, teach instcombine that ashr is useless if only the
sign bit is demanded.
llvm-svn: 39880 
							
						 
						
							2007-07-15 20:54:51 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								06205d5567 
								
							 
						 
						
							
							
								
								Implement shift-simplify.ll:test3, turning:  
							
							 
							
							... 
							
							
							
							(X << 31) <s 0  --> (X&1) != 0
This happens dozens of times in the CFE.
llvm-svn: 39879 
							
						 
						
							2007-07-15 20:42:37 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								fb032b176b 
								
							 
						 
						
							
							
								
								Significantly improve the documentation of the instcombine divide/compare  
							
							 
							
							... 
							
							
							
							transformation.  Also, keep track of which end of the integer interval overflows
occur on.  This fixes Transforms/InstCombine/2007-06-21-DivCompareMiscomp.ll
and rdar://5278853, a miscompilation of perl.
llvm-svn: 37692 
							
						 
						
							2007-06-21 18:11:19 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3bbec59e8b 
								
							 
						 
						
							
							
								
								refactor a bunch of code out of visitICmpInstWithInstAndIntCst into its own  
							
							 
							
							... 
							
							
							
							routine.
llvm-svn: 37679 
							
						 
						
							2007-06-20 23:46:26 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								09a33a4f64 
								
							 
						 
						
							
							
								
								silence a bogus warning Duraid ran into.  
							
							 
							
							... 
							
							
							
							llvm-svn: 37649 
							
						 
						
							2007-06-19 05:43:49 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								373389260f 
								
							 
						 
						
							
							
								
								Generalize many transforms to work on ~ of vectors in addition to ~ of  
							
							 
							
							... 
							
							
							
							integer ops.  This implements Transforms/InstCombine/and-or-not.ll
test3/test4, and finishes off PR1510
llvm-svn: 37589 
							
						 
						
							2007-06-15 06:23:19 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								481e28b1f5 
								
							 
						 
						
							
							
								
								Implement two xforms:  
							
							 
							
							... 
							
							
							
							1. ~(~X | Y) === (X & ~Y)
2. (A|B) & ~(A&B) -> A^B
This allows us to transform  ~(~(a|b) | (a&b)) -> a^b.
This implements PR1510 for scalar values.
llvm-svn: 37584 
							
						 
						
							2007-06-15 05:58:24 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f14e5175ed 
								
							 
						 
						
							
							
								
								delete some obviously dead vector operations, which deletes a few thousand  
							
							 
							
							... 
							
							
							
							operations from Duraids example.
llvm-svn: 37582 
							
						 
						
							2007-06-15 05:26:55 +00:00  
						
					 
				
					
						
							
							
								 
								Lauro Ramos Venancio
							
						 
						
							 
							
							
							
							
								
							
							
								368e8872db 
								
							 
						 
						
							
							
								
								Fix PR1499.  
							
							 
							
							... 
							
							
							
							llvm-svn: 37472 
							
						 
						
							2007-06-06 17:08:48 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f79577d314 
								
							 
						 
						
							
							
								
								fix a miscompilation when passing a float through varargs  
							
							 
							
							... 
							
							
							
							llvm-svn: 37297 
							
						 
						
							2007-05-23 01:17:04 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								a655a157a0 
								
							 
						 
						
							
							
								
								Fix Transforms/InstCombine/2007-05-18-CastFoldBug.ll, a bug that devastates  
							
							 
							
							... 
							
							
							
							objc code due to the way the FE lowers objc message sends.
llvm-svn: 37256 
							
						 
						
							2007-05-19 06:51:32 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								234f96daa8 
								
							 
						 
						
							
							
								
								Fix Transforms/InstCombine/2007-05-14-Crash.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 37057 
							
						 
						
							2007-05-15 00:16:00 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								b5650ebd6a 
								
							 
						 
						
							
							
								
								Fix typos.  
							
							 
							
							... 
							
							
							
							llvm-svn: 36994 
							
						 
						
							2007-05-11 21:10:54 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								600db3eb96 
								
							 
						 
						
							
							
								
								fix regressions from my previous checking, including  
							
							 
							
							... 
							
							
							
							Transforms/InstCombine/2006-12-08-ICmp-Combining.ll
llvm-svn: 36989 
							
						 
						
							2007-05-11 16:58:45 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								fe2b44de9f 
								
							 
						 
						
							
							
								
								fix Transforms/InstCombine/2007-05-10-icmp-or.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 36984 
							
						 
						
							2007-05-11 05:55:56 +00:00  
						
					 
				
					
						
							
							
								 
								Nick Lewycky
							
						 
						
							 
							
							
							
							
								
							
							
								e7da2d6ac3 
								
							 
						 
						
							
							
								
								Fix typo in comment.  
							
							 
							
							... 
							
							
							
							llvm-svn: 36873 
							
						 
						
							2007-05-06 13:37:16 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								9b35b3e863 
								
							 
						 
						
							
							
								
								Fix a bug in my previous patch  
							
							 
							
							... 
							
							
							
							llvm-svn: 36857 
							
						 
						
							2007-05-06 07:24:03 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								5aa73fe34c 
								
							 
						 
						
							
							
								
								Implement Transforms/InstCombine/cast_ptr.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 36809 
							
						 
						
							2007-05-05 22:41:33 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								361e981415 
								
							 
						 
						
							
							
								
								wrap long lines  
							
							 
							
							... 
							
							
							
							llvm-svn: 36807 
							
						 
						
							2007-05-05 22:32:24 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								5c827bda0d 
								
							 
						 
						
							
							
								
								Fix InstCombine/2007-05-04-Crash.ll and PR1384  
							
							 
							
							... 
							
							
							
							llvm-svn: 36775 
							
						 
						
							2007-05-05 01:59:31 +00:00  
						
					 
				
					
						
							
							
								 
								Devang Patel
							
						 
						
							 
							
							
							
							
								
							
							
								8c78a0bff0 
								
							 
						 
						
							
							
								
								Drop 'const'  
							
							 
							
							... 
							
							
							
							llvm-svn: 36662 
							
						 
						
							2007-05-03 01:11:54 +00:00  
						
					 
				
					
						
							
							
								 
								Devang Patel
							
						 
						
							 
							
							
							
							
								
							
							
								e95c6ad802 
								
							 
						 
						
							
							
								
								Use 'static const char' instead of 'static const int'.  
							
							 
							
							... 
							
							
							
							Due to darwin gcc bug, one version of darwin linker coalesces
static const int, which defauts PassID based pass identification.
llvm-svn: 36652 
							
						 
						
							2007-05-02 21:39:20 +00:00  
						
					 
				
					
						
							
							
								 
								Devang Patel
							
						 
						
							 
							
							
							
							
								
							
							
								09f162ca6a 
								
							 
						 
						
							
							
								
								Do not use typeinfo to identify pass in pass manager.  
							
							 
							
							... 
							
							
							
							llvm-svn: 36632 
							
						 
						
							2007-05-01 21:15:47 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								089e35cc57 
								
							 
						 
						
							
							
								
								fix a bug triggered by 403.gcc  
							
							 
							
							... 
							
							
							
							llvm-svn: 36527 
							
						 
						
							2007-04-28 05:27:36 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								6e880871e9 
								
							 
						 
						
							
							
								
								Fix several latent bugs in EmitGEPOffset that didn't manifest with its  
							
							 
							
							... 
							
							
							
							previous clients.  This fixes MallocBench/gs
llvm-svn: 36525 
							
						 
						
							2007-04-28 04:52:43 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c753800800 
								
							 
						 
						
							
							
								
								uhn zap cvs  
							
							 
							
							... 
							
							
							
							llvm-svn: 36523 
							
						 
						
							2007-04-28 03:50:56 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								acbf6a401d 
								
							 
						 
						
							
							
								
								Implement PR1345 and Transforms/InstCombine/bitcast-gep.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 36521 
							
						 
						
							2007-04-28 00:57:34 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								1db224db92 
								
							 
						 
						
							
							
								
								refactor some code relating to pointer cast xforms, pulling it out of the codepath  
							
							 
							
							... 
							
							
							
							for unrelated casts.
llvm-svn: 36511 
							
						 
						
							2007-04-27 17:44:50 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								aafe4e216e 
								
							 
						 
						
							
							
								
								Make use of ConstantInt::isZero instead of ConstantInt::isNullValue.  
							
							 
							
							... 
							
							
							
							llvm-svn: 36261 
							
						 
						
							2007-04-19 05:39:12 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4a6e0cbd41 
								
							 
						 
						
							
							
								
								Extend store merging to support the 'if/then' version in addition to if/then/else.  
							
							 
							
							... 
							
							
							
							This sinks the two stores in this example into a single store in cond_next.  In this
case, it allows elimination of the load as well:
        store double 0.000000e+00, double* @s.3060
        %tmp3 = fcmp ogt double %tmp1, 5.000000e-01             ; <i1> [#uses=1]
        br i1 %tmp3, label %cond_true, label %cond_next
cond_true:              ; preds = %entry
        store double 1.000000e+00, double* @s.3060
        br label %cond_next
cond_next:              ; preds = %entry, %cond_true
        %tmp6 = load double* @s.3060            ; <double> [#uses=1]
This implements Transforms/InstCombine/store-merge.ll:test2
llvm-svn: 36040 
							
						 
						
							2007-04-15 01:02:18 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								14a251b937 
								
							 
						 
						
							
							
								
								refactor some code, no functionality change.  
							
							 
							
							... 
							
							
							
							llvm-svn: 36037 
							
						 
						
							2007-04-15 00:07:55 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								28d921d04f 
								
							 
						 
						
							
							
								
								fix long lines  
							
							 
							
							... 
							
							
							
							llvm-svn: 36031 
							
						 
						
							2007-04-14 23:32:02 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								7bfdd0abe1 
								
							 
						 
						
							
							
								
								Implement Transforms/InstCombine/vec_extract_elt.ll, transforming:  
							
							 
							
							... 
							
							
							
							define i32 @test(float %f) {
        %tmp7 = insertelement <4 x float> undef, float %f, i32 0
        %tmp17 = bitcast <4 x float> %tmp7 to <4 x i32>
        %tmp19 = extractelement <4 x i32> %tmp17, i32 0
        ret i32 %tmp19
}
into:
define i32 @test(float %f) {
        %tmp19 = bitcast float %f to i32                ; <i32> [#uses=1]
        ret i32 %tmp19
}
On PPC, this is the difference between:
_test:
        mfspr r2, 256
        oris r3, r2, 8192
        mtspr 256, r3
        stfs f1, -16(r1)
        addi r3, r1, -16
        addi r4, r1, -32
        lvx v2, 0, r3
        stvx v2, 0, r4
        lwz r3, -32(r1)
        mtspr 256, r2
        blr
and:
_test:
        stfs f1, -4(r1)
        nop
        nop
        nop
        lwz r3, -4(r1)
        blr
llvm-svn: 36025 
							
						 
						
							2007-04-14 23:02:14 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								b37fb6a0da 
								
							 
						 
						
							
							
								
								Implement InstCombine/vec_demanded_elts.ll:test2.  This allows us to turn  
							
							 
							
							... 
							
							
							
							unsigned test(float f) {
 return _mm_cvtsi128_si32( (__m128i) _mm_set_ss( f*f ));
}
into:
_test:
        movss 4(%esp), %xmm0
        mulss %xmm0, %xmm0
        movd %xmm0, %eax
        ret
instead of:
_test:
        movss 4(%esp), %xmm0
        mulss %xmm0, %xmm0
        xorps %xmm1, %xmm1
        movss %xmm0, %xmm1
        movd %xmm1, %eax
        ret
GCC gets:
_test:
        subl    $28, %esp
        movss   32(%esp), %xmm0
        mulss   %xmm0, %xmm0
        xorps   %xmm1, %xmm1
        movss   %xmm0, %xmm1
        movaps  %xmm1, %xmm0
        movd    %xmm0, 12(%esp)
        movl    12(%esp), %eax
        addl    $28, %esp
        ret
llvm-svn: 36020 
							
						 
						
							2007-04-14 22:29:23 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								efb33d28c6 
								
							 
						 
						
							
							
								
								Implement PR1201 and test/Transforms/InstCombine/malloc-free-delete.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 35981 
							
						 
						
							2007-04-14 00:20:02 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								74ff60ff84 
								
							 
						 
						
							
							
								
								Turn stuff like:  
							
							 
							
							... 
							
							
							
							icmp slt i32 %X, 0              ; <i1>:0 [#uses=1]
        sext i1 %0 to i32               ; <i32>:1 [#uses=1]
into:
        %X.lobit = ashr i32 %X, 31              ; <i32> [#uses=1]
This implements InstCombine/icmp.ll:test[34]
llvm-svn: 35891 
							
						 
						
							2007-04-11 06:57:46 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d0f7942e23 
								
							 
						 
						
							
							
								
								Simplify some comparisons to arithmetic, this implements:  
							
							 
							
							... 
							
							
							
							Transforms/InstCombine/icmp.ll
llvm-svn: 35890 
							
						 
						
							2007-04-11 06:53:04 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								20f2372a7c 
								
							 
						 
						
							
							
								
								canonicalize (x <u 2147483648) -> (x >s -1) and (x >u 2147483647) -> (x <s 0)  
							
							 
							
							... 
							
							
							
							llvm-svn: 35886 
							
						 
						
							2007-04-11 06:12:58 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								7ddbff090a 
								
							 
						 
						
							
							
								
								fix a miscompilation of:  
							
							 
							
							... 
							
							
							
							define i32 @test(i32 %X) {
entry:
        %Y = and i32 %X, 4              ; <i32> [#uses=1]
        icmp eq i32 %Y, 0               ; <i1>:0 [#uses=1]
        sext i1 %0 to i32               ; <i32>:1 [#uses=1]
        ret i32 %1
}
by moving code out of commonIntCastTransforms into visitZExt.  Simplify the
APInt gymnastics in it etc.
llvm-svn: 35885 
							
						 
						
							2007-04-11 05:45:39 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								467b69cabb 
								
							 
						 
						
							
							
								
								Strengthen the boundary conditions of this fold, implementing  
							
							 
							
							... 
							
							
							
							InstCombine/set.ll:test25
llvm-svn: 35852 
							
						 
						
							2007-04-09 23:52:13 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								a87c9f6114 
								
							 
						 
						
							
							
								
								Fix PR1304 and Transforms/InstCombine/2007-04-08-SingleEltVectorCrash.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 35792 
							
						 
						
							2007-04-09 01:37:55 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4ca9cbb170 
								
							 
						 
						
							
							
								
								Eliminate useless insertelement instructions.  This implements  
							
							 
							
							... 
							
							
							
							Transforms/InstCombine/vec_insertelt.ll and fixes PR1286.
We now compile the code from that bug into:
_foo:
        movl 4(%esp), %eax
        movdqa (%eax), %xmm0
        movl 8(%esp), %ecx
        psllw (%ecx), %xmm0
        movdqa %xmm0, (%eax)
        ret
instead of:
_foo:
        subl $4, %esp
        movl %ebp, (%esp)
        movl %esp, %ebp
        movl 12(%ebp), %eax
        movdqa (%eax), %xmm0
        #IMPLICIT_DEF %eax
        pinsrw $2, %eax, %xmm0
        xorl %ecx, %ecx
        pinsrw $3, %ecx, %xmm0
        pinsrw $4, %eax, %xmm0
        pinsrw $5, %ecx, %xmm0
        pinsrw $6, %eax, %xmm0
        pinsrw $7, %ecx, %xmm0
        movl 8(%ebp), %eax
        movdqa (%eax), %xmm1
        psllw %xmm0, %xmm1
        movdqa %xmm1, (%eax)
        movl %ebp, %esp
        popl %ebp
        ret
woo :)
llvm-svn: 35788 
							
						 
						
							2007-04-09 01:11:16 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c8d3788f71 
								
							 
						 
						
							
							
								
								reenable this xform, whoops :)  
							
							 
							
							... 
							
							
							
							llvm-svn: 35765 
							
						 
						
							2007-04-08 08:01:49 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								7621a031d8 
								
							 
						 
						
							
							
								
								Fix regression on Instcombine/apint-or2.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 35763 
							
						 
						
							2007-04-08 07:55:22 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								1150df9cc4 
								
							 
						 
						
							
							
								
								Generalize the code that handles (A&B)|(A&C) to work where B/C are not constants.  
							
							 
							
							... 
							
							
							
							Add a new xform to simplify (A&B)|(~A&C).  THis implements InstCombine/or2.ll:test1
llvm-svn: 35760 
							
						 
						
							2007-04-08 07:47:01 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3dbe65f80a 
								
							 
						 
						
							
							
								
								implement Transforms/InstCombine/malloc2.ll and PR1313  
							
							 
							
							... 
							
							
							
							llvm-svn: 35700 
							
						 
						
							2007-04-06 18:57:34 +00:00  
						
					 
				
					
						
							
							
								 
								Dale Johannesen
							
						 
						
							 
							
							
							
							
								
							
							
								7c2001d014 
								
							 
						 
						
							
							
								
								Prevent transformConstExprCastCall from generating conversions that assert  
							
							 
							
							... 
							
							
							
							elsewhere.
llvm-svn: 35668 
							
						 
						
							2007-04-04 19:16:42 +00:00  
						
					 
				
					
						
							
							
								 
								Jeff Cohen
							
						 
						
							 
							
							
							
							
								
							
							
								5a1c750f31 
								
							 
						 
						
							
							
								
								Fix 2007-04-04-BadFoldBitcastIntoMalloc.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 35665 
							
						 
						
							2007-04-04 16:58:57 +00:00  
						
					 
				
					
						
							
							
								 
								Duncan Sands
							
						 
						
							 
							
							
							
							
								
							
							
								f01a47c93c 
								
							 
						 
						
							
							
								
								Fix comment.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35655 
							
						 
						
							2007-04-04 06:42:45 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								e5bbb3cb1a 
								
							 
						 
						
							
							
								
								Fix a bug I introduced with my patch yesterday which broke Qt (I converted  
							
							 
							
							... 
							
							
							
							some constant exprs to apints).
Thanks to Anton for tracking down a small testcase that triggered this!
llvm-svn: 35633 
							
						 
						
							2007-04-03 23:29:39 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								a74deafb13 
								
							 
						 
						
							
							
								
								reinstate the previous two patches, with a bugfix :)  
							
							 
							
							... 
							
							
							
							ldecod now passes.
llvm-svn: 35626 
							
						 
						
							2007-04-03 17:43:25 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								7511fa280d 
								
							 
						 
						
							
							
								
								Reverting back to 1.723. The last two commits broke JM (and possibily others) on ARM.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35620 
							
						 
						
							2007-04-03 08:11:50 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								64c764cebc 
								
							 
						 
						
							
							
								
								Split a whole ton of code out of visitICmpInst into visitICmpInstWithInstAndIntCst.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35614 
							
						 
						
							2007-04-03 04:46:52 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								8b2ec5f506 
								
							 
						 
						
							
							
								
								Fix PR1253 and xor2.ll:test[01]  
							
							 
							
							... 
							
							
							
							llvm-svn: 35612 
							
						 
						
							2007-04-03 01:47:41 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								9bc8ab100d 
								
							 
						 
						
							
							
								
								1. Make use of APInt operation instead of using ConstantExpr::getXXX.  
							
							 
							
							... 
							
							
							
							2. Use cheaper APInt methods.
llvm-svn: 35594 
							
						 
						
							2007-04-02 13:45:30 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								56cda95658 
								
							 
						 
						
							
							
								
								Use uint32_t for bitwidth instead of unsigned.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35593 
							
						 
						
							2007-04-02 08:20:41 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								9d5aacee92 
								
							 
						 
						
							
							
								
								Wrap long line  
							
							 
							
							... 
							
							
							
							llvm-svn: 35588 
							
						 
						
							2007-04-02 05:48:58 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								50490d54f2 
								
							 
						 
						
							
							
								
								use more obvious function name.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35587 
							
						 
						
							2007-04-02 05:42:22 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								b24acc7bee 
								
							 
						 
						
							
							
								
								simplify (x+c)^signbit as (x+c+signbit), pointed out by PR1288.  This implements  
							
							 
							
							... 
							
							
							
							test/Transforms/InstCombine/xor.ll:test28
llvm-svn: 35584 
							
						 
						
							2007-04-02 05:36:22 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c3eeb42809 
								
							 
						 
						
							
							
								
								simplify this code, make it work for ap ints  
							
							 
							
							... 
							
							
							
							llvm-svn: 35561 
							
						 
						
							2007-04-01 20:57:36 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								150f3bbab2 
								
							 
						 
						
							
							
								
								Avoid unnecessary APInt construction.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35555 
							
						 
						
							2007-04-01 17:13:37 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								6bba6c8143 
								
							 
						 
						
							
							
								
								For PR1297:  
							
							 
							
							... 
							
							
							
							Support overloaded intrinsics bswap, ctpop, cttz, ctlz.
llvm-svn: 35547 
							
						 
						
							2007-04-01 07:35:23 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0427799531 
								
							 
						 
						
							
							
								
								Fix InstCombine/2007-03-31-InfiniteLoop.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 35536 
							
						 
						
							2007-04-01 05:36:37 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								82c42284f4 
								
							 
						 
						
							
							
								
								Delete dead code.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35525 
							
						 
						
							2007-03-31 02:50:26 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								4f16402e0d 
								
							 
						 
						
							
							
								
								Use APInt operators to calculate the carry bits, remove this loop.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35524 
							
						 
						
							2007-03-31 02:38:39 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								fd28a33031 
								
							 
						 
						
							
							
								
								Make sure the use of ConstantInt::getZExtValue() for shift amount safe.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35510 
							
						 
						
							2007-03-30 17:20:39 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								b25806fa5f 
								
							 
						 
						
							
							
								
								1. Make sure the use of ConstantInt::getZExtValue() for getting shift  
							
							 
							
							... 
							
							
							
							amount is safe.
2. Use new method on ConstantInt instead of (? :) operator.
3. Use new method uge() on ConstantInt to simplify codes.
llvm-svn: 35505 
							
						 
						
							2007-03-30 09:29:48 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								5e60a4a6b0 
								
							 
						 
						
							
							
								
								Use APInt operation instead of ConstantExpr::getXX.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35503 
							
						 
						
							2007-03-30 05:45:18 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								b3a80b1d70 
								
							 
						 
						
							
							
								
								1. Make more use of APInt::getHighBitsSet/getLowBitsSet.  
							
							 
							
							... 
							
							
							
							2. Let APInt variable do the binary operation stuff instead of using
   ConstantExpr::getXXX.
llvm-svn: 35450 
							
						 
						
							2007-03-29 08:15:12 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								444af49cc0 
								
							 
						 
						
							
							
								
								Clean up some codes in InstCombiner::SimplifyDemandedBits().  
							
							 
							
							... 
							
							
							
							llvm-svn: 35446 
							
						 
						
							2007-03-29 04:45:55 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								a4475575c0 
								
							 
						 
						
							
							
								
								Clean up codes in InstCombiner::SimplifyDemandedBits():  
							
							 
							
							... 
							
							
							
							1. Line out nested call of APInt::zext/trunc.
2. Make more use of APInt::getHighBitsSet/getLowBitsSet.
3. Use APInt[] operator instead of expression like "APIntVal & SignBit".
llvm-svn: 35444 
							
						 
						
							2007-03-29 02:26:30 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								4961cf1c06 
								
							 
						 
						
							
							
								
								1. Make the APInt variable do the binary operation stuff if possible  
							
							 
							
							... 
							
							
							
							instead of using ConstantExpr::getXX.
2. Use constant reference to APInt if possible instead of expensive
   APInt copy.
llvm-svn: 35443 
							
						 
						
							2007-03-29 01:57:21 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								117477e28b 
								
							 
						 
						
							
							
								
								Avoid unnecessary APInt construction.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35431 
							
						 
						
							2007-03-28 17:38:21 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								23f7a1c947 
								
							 
						 
						
							
							
								
								1. Make more use of getLowBitsSet/getHighBitsSet.  
							
							 
							
							... 
							
							
							
							2. Use APInt[] instead of "X & SignBit".
3. Clean up some codes.
4. Make the expression like "ShiftAmt = ShiftAmtC->getZExtValue()" safe.
llvm-svn: 35424 
							
						 
						
							2007-03-28 15:02:20 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								2777a31850 
								
							 
						 
						
							
							
								
								1. Make more use of getLowBitsSet/getHighBitsSet.  
							
							 
							
							... 
							
							
							
							2. Make the APInt value do the zext/trunc stuff instead of using
   ConstantExpr::getZExt().
llvm-svn: 35422 
							
						 
						
							2007-03-28 09:19:01 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								c2d3309b99 
								
							 
						 
						
							
							
								
								Use UnknownBIts[BitWidth-1] instead of UnknownBIts & SignBits.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35418 
							
						 
						
							2007-03-28 05:15:57 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								18570b1f14 
								
							 
						 
						
							
							
								
								Remove unused APInt variable.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35414 
							
						 
						
							2007-03-28 03:02:21 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								57e3f7324b 
								
							 
						 
						
							
							
								
								Clean up codes in ComputeMaskedBits():  
							
							 
							
							... 
							
							
							
							1. Line out nested use of zext/trunc.
2. Make more use of getHighBitsSet/getLowBitsSet.
3. Use APInt[] != 0 instead of "(APInt & SignBit) != 0".
llvm-svn: 35408 
							
						 
						
							2007-03-28 02:19:03 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								a5c18bf798 
								
							 
						 
						
							
							
								
								For PR1280:  
							
							 
							
							... 
							
							
							
							When converting an add/xor/and triplet into a trunc/sext, only do so if the
intermediate integer type is a bitwidth that the targets can handle.
llvm-svn: 35400 
							
						 
						
							2007-03-28 01:36:16 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								a4ed8a512a 
								
							 
						 
						
							
							
								
								Unbreaks non-debug builds.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35383 
							
						 
						
							2007-03-27 16:44:48 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								54d5b1b8f8 
								
							 
						 
						
							
							
								
								Implement some minor review feedback.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35373 
							
						 
						
							2007-03-26 23:58:26 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								441486c172 
								
							 
						 
						
							
							
								
								For PR1271:  
							
							 
							
							... 
							
							
							
							Fix another incorrectly converted shift mask.
llvm-svn: 35371 
							
						 
						
							2007-03-26 23:45:51 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d2602d5054 
								
							 
						 
						
							
							
								
								eliminate use of std::set  
							
							 
							
							... 
							
							
							
							llvm-svn: 35361 
							
						 
						
							2007-03-26 20:40:50 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								755d0e7ffc 
								
							 
						 
						
							
							
								
								Get better debug output by having modified instructions print both the  
							
							 
							
							... 
							
							
							
							original and new instruction. A slight performance hit with ostringstream
but it is only for debug.
Also, clean up an uninitialized variable warning noticed in a release build.
llvm-svn: 35358 
							
						 
						
							2007-03-26 17:44:01 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								769a5a8e0b 
								
							 
						 
						
							
							
								
								Get the number of bits to set in a mask correct for a shl/lshr transform.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35357 
							
						 
						
							2007-03-26 17:18:58 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								50898607a9 
								
							 
						 
						
							
							
								
								For PR1271:  
							
							 
							
							... 
							
							
							
							Fix SingleSource/Regression/C/2003-05-21-UnionBitFields.c by changing a
getHighBitsSet call to getLowBitsSet call that was incorrectly converted
from the original lshr constant expression.
llvm-svn: 35348 
							
						 
						
							2007-03-26 05:25:00 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								52830327e9 
								
							 
						 
						
							
							
								
								For PR1271:  
							
							 
							
							... 
							
							
							
							Remove a use of getLowBitsSet that caused the mask used for replacement of
shl/lshr pairs with an AND instruction to be computed incorrectly. Its not
clear exactly why this is the case. This solves the disappearing shifts
problem, but it doesn't fix Regression/C/2003-05-21-UnionBitFields. It
seems there is more going on.
llvm-svn: 35342 
							
						 
						
							2007-03-25 21:11:44 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								9bf53ffaa2 
								
							 
						 
						
							
							
								
								implement Transforms/InstCombine/cast2.ll:test3 and PR1263  
							
							 
							
							... 
							
							
							
							llvm-svn: 35341 
							
						 
						
							2007-03-25 20:43:09 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								624766f8a2 
								
							 
						 
						
							
							
								
								Some cleanup from review:  
							
							 
							
							... 
							
							
							
							* Don't assume shift amounts are <= 64 bits
* Avoid creating an extra APInt in SubOne and AddOne by using -- and ++
* Add another use of getLowBitsSet
* Convert a series of if statements to a switch
llvm-svn: 35339 
							
						 
						
							2007-03-25 19:55:33 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								80263aadf3 
								
							 
						 
						
							
							
								
								Refactor several ConstantExpr::getXXX calls with ConstantInt arguments  
							
							 
							
							... 
							
							
							
							using the facilities of APInt. While this duplicates a tiny fraction of
the constant folding code, it also makes the code easier to read and
avoids large ConstantExpr overhead for simple, known computations.
llvm-svn: 35335 
							
						 
						
							2007-03-25 05:33:51 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								222d5ebfd2 
								
							 
						 
						
							
							
								
								1. Avoid unnecessary APInt construction if possible.  
							
							 
							
							... 
							
							
							
							2. Use isStrictlyPositive() instead of isPositive() in two places where
   they need APInt value > 0 not only >=0.
llvm-svn: 35333 
							
						 
						
							2007-03-25 05:01:29 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								cd99fbdf3b 
								
							 
						 
						
							
							
								
								Make more uses of getHighBitsSet and get rid of some pointless & of an  
							
							 
							
							... 
							
							
							
							APInt with its type mask.
llvm-svn: 35325 
							
						 
						
							2007-03-25 04:26:16 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								d8aad61d4d 
								
							 
						 
						
							
							
								
								More APIntification:  
							
							 
							
							... 
							
							
							
							* Convert the last use of a uint64_t that should have been an APInt.
* Change ComputeMaskedBits to have a const reference argument for the Mask
  so that recursions don't cause unneeded temporaries. This causes temps
  to be needed in other places (where the mask has to change) but this
  change optimizes for the recursion which is more frequent.
* Remove two instances of &ing a Mask with getAllOnesValue. Its not
  needed any more because APInt is accurate in its bit computations.
* Start using the getLowBitsSet and getHighBits set methods on APInt
  instead of shifting. This makes it more clear in the code what is
  going on.
llvm-svn: 35321 
							
						 
						
							2007-03-25 02:03:12 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3a8248f79d 
								
							 
						 
						
							
							
								
								fix a regression on vector or instructions.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35314 
							
						 
						
							2007-03-24 23:56:43 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								e9ebd3f6ba 
								
							 
						 
						
							
							
								
								Make some codes more efficient.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35297 
							
						 
						
							2007-03-24 15:34:37 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								a962d18774 
								
							 
						 
						
							
							
								
								For PR1205:  
							
							 
							
							... 
							
							
							
							Convert some calls to ConstantInt::getZExtValue() into getValue() and
use APInt facilities in the subsequent computations.
llvm-svn: 35294 
							
						 
						
							2007-03-24 00:42:08 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								959a21d3dc 
								
							 
						 
						
							
							
								
								For PR1205:  
							
							 
							
							... 
							
							
							
							* APIntify visitAdd and visitSelectInst
* Remove unused uint64_t versions of utility functions that have been
  replaced with APInt versions.
This completes most of the changes for APIntification of InstCombine. This
passes llvm-test and llvm/test/Transforms/InstCombine/APInt.
Patch by Zhou Sheng.
llvm-svn: 35287 
							
						 
						
							2007-03-23 21:24:59 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								6d39206bc2 
								
							 
						 
						
							
							
								
								For PR1205:  
							
							 
							
							... 
							
							
							
							APIntify visitDiv, visitMul and visitRem.
Patch by Zhou Sheng.
llvm-svn: 35283 
							
						 
						
							2007-03-23 20:05:17 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								12b89cc148 
								
							 
						 
						
							
							
								
								switch AddReachableCodeToWorklist from being recursive to being iterative.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35282 
							
						 
						
							2007-03-23 19:17:18 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								6274c72ee1 
								
							 
						 
						
							
							
								
								For PR1205:  
							
							 
							
							... 
							
							
							
							APIntify several utility functions supporting logical operators and shift
operators.
Patch by Zhou Sheng.
llvm-svn: 35281 
							
						 
						
							2007-03-23 18:46:34 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								0900993ebc 
								
							 
						 
						
							
							
								
								Make the "KnownZero ^ TypeMask" computation just once.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35276 
							
						 
						
							2007-03-23 03:13:21 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								755f04b5d7 
								
							 
						 
						
							
							
								
								Simplify the code.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35275 
							
						 
						
							2007-03-23 02:39:25 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								b722f2b110 
								
							 
						 
						
							
							
								
								For PR1205:  
							
							 
							
							... 
							
							
							
							APInt support for logical operators in visitAnd, visitOr, and visitXor.
Patch by Zhou Sheng.
llvm-svn: 35273 
							
						 
						
							2007-03-22 22:19:58 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								4154e732e6 
								
							 
						 
						
							
							
								
								For PR1205:  
							
							 
							
							... 
							
							
							
							* APIntify commonIntCastTransforms
* APIntify visitTrunc
* APIntify visitZExt
Patch by Zhou Sheng.
llvm-svn: 35271 
							
						 
						
							2007-03-22 20:56:53 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								c3e3b8a32f 
								
							 
						 
						
							
							
								
								For PR1205:  
							
							 
							
							... 
							
							
							
							* Re-enable the APInt version of MaskedValueIsZero.
* APIntify the Comput{Un}SignedMinMaxValuesFromKnownBits functions
* APIntify visitICmpInst.
llvm-svn: 35270 
							
						 
						
							2007-03-22 20:36:03 +00:00  
						
					 
				
					
						
							
							
								 
								Dan Gohman
							
						 
						
							 
							
							
							
							
								
							
							
								dcb291faa4 
								
							 
						 
						
							
							
								
								Change uses of Function::front to Function::getEntryBlock for readability.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35265 
							
						 
						
							2007-03-22 16:38:57 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								f40711637f 
								
							 
						 
						
							
							
								
								For PR1248:  
							
							 
							
							... 
							
							
							
							* Fix some indentation and comments in InsertRangeTest
* Add an "IsSigned" parameter to AddWithOverflow and make it handle signed
  additions. Also, APIntify this function so it works with any bitwidth.
* For the icmp pred ([us]div %X, C1), C2 transforms, exit early if the
  div instruction's RHS is zero.
* Finally, for icmp pred (sdiv %X, C1), -C2, fix an off-by-one error. The
  HiBound needs to be incremented in order to get the range test correct.
llvm-svn: 35247 
							
						 
						
							2007-03-21 23:19:50 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								b3949340c8 
								
							 
						 
						
							
							
								
								Simplify isHighOnes().  
							
							 
							
							... 
							
							
							
							llvm-svn: 35211 
							
						 
						
							2007-03-20 12:49:06 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								6682721316 
								
							 
						 
						
							
							
								
								Make isOneBitSet faster by using APInt::isPowerOf2. Thanks Chris.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35194 
							
						 
						
							2007-03-20 00:16:52 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								cc031a43aa 
								
							 
						 
						
							
							
								
								APIntify the isHighOnes utility function.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35190 
							
						 
						
							2007-03-19 21:29:50 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								ef599b0786 
								
							 
						 
						
							
							
								
								Implement isMaxValueMinusOne in terms of APInt instead of uint64_t.  
							
							 
							
							... 
							
							
							
							Patch by Sheng Zhou.
llvm-svn: 35188 
							
						 
						
							2007-03-19 21:10:28 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								3b93db72b4 
								
							 
						 
						
							
							
								
								Implement isMinValuePlusOne using facilities of APInt instead of uint64_t  
							
							 
							
							... 
							
							
							
							Patch by Zhou Sheng.
llvm-svn: 35187 
							
						 
						
							2007-03-19 21:08:07 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								129a86792d 
								
							 
						 
						
							
							
								
								Implement isOneBitSet in terms of APInt::countPopulation.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35186 
							
						 
						
							2007-03-19 21:04:43 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								450434ed65 
								
							 
						 
						
							
							
								
								1. Use APInt::getSignBit to reduce clutter (patch by Sheng Zhou)  
							
							 
							
							... 
							
							
							
							2. Replace uses of the "isPositive" utility function with APInt::isPositive
llvm-svn: 35185 
							
						 
						
							2007-03-19 20:58:18 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								03c31d5bb0 
								
							 
						 
						
							
							
								
								Remove a redundant clause in an if statement.  
							
							 
							
							... 
							
							
							
							Patch by Sheng Zhou.
llvm-svn: 35184 
							
						 
						
							2007-03-19 20:47:50 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0741842b3b 
								
							 
						 
						
							
							
								
								Implement InstCombine/and-xor-merge.ll:test[12].  
							
							 
							
							... 
							
							
							
							Rearrange some code to simplify it now that shifts are binops
llvm-svn: 35145 
							
						 
						
							2007-03-18 22:51:34 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								d8c645b0ba 
								
							 
						 
						
							
							
								
								ShiftAmt might equal to zero. Handle this situation.  
							
							 
							
							... 
							
							
							
							llvm-svn: 35094 
							
						 
						
							2007-03-14 09:07:33 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								b912844554 
								
							 
						 
						
							
							
								
								Enable KnownZero/One.clear().  
							
							 
							
							... 
							
							
							
							llvm-svn: 35093 
							
						 
						
							2007-03-14 03:21:24 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d1bce956b4 
								
							 
						 
						
							
							
								
								ifdef out some dead code.  
							
							 
							
							... 
							
							
							
							Fix PR1244 and Transforms/InstCombine/2007-03-13-CompareMerge.ll
llvm-svn: 35082 
							
						 
						
							2007-03-13 14:27:42 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								ebe634e662 
								
							 
						 
						
							
							
								
								For expression like  
							
							 
							
							... 
							
							
							
							"APInt::getAllOnesValue(ShiftAmt).zextOrCopy(BitWidth)",
to handle ShiftAmt == BitWidth situation, use zextOrCopy() instead of
zext().
llvm-svn: 35080 
							
						 
						
							2007-03-13 06:40:59 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								af4341d441 
								
							 
						 
						
							
							
								
								In APInt version ComputeMaskedBits():  
							
							 
							
							... 
							
							
							
							1. Ensure VTy, KnownOne and KnownZero have same bitwidth.
  2. Make code more efficient.
llvm-svn: 35078 
							
						 
						
							2007-03-13 02:23:10 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								1791f23803 
								
							 
						 
						
							
							
								
								Add an APInt version of SimplifyDemandedBits.  
							
							 
							
							... 
							
							
							
							Patch by Zhou Sheng.
llvm-svn: 35064 
							
						 
						
							2007-03-12 17:25:59 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								d9281784be 
								
							 
						 
						
							
							
								
								Add an APInt version of ShrinkDemandedConstant.  
							
							 
							
							... 
							
							
							
							Patch by Zhou Sheng.
llvm-svn: 35063 
							
						 
						
							2007-03-12 17:15:10 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								be171ee5cd 
								
							 
						 
						
							
							
								
								Avoid to assert on "(KnownZero & KnownOne) == 0".  
							
							 
							
							... 
							
							
							
							llvm-svn: 35062 
							
						 
						
							2007-03-12 16:54:56 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								b3e00c4656 
								
							 
						 
						
							
							
								
								In function ComputeMaskedBits():  
							
							 
							
							... 
							
							
							
							1. Replace getSignedMinValue() with getSignBit() for better code readability.
  2. Replace APIntOps::shl() with operator<<= for convenience.
  3. Make APInt construction more effective.
llvm-svn: 35060 
							
						 
						
							2007-03-12 05:44:52 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								d1eb3d593e 
								
							 
						 
						
							
							
								
								Fix a bug in function ComputeMaskedBits().  
							
							 
							
							... 
							
							
							
							llvm-svn: 35027 
							
						 
						
							2007-03-08 15:15:18 +00:00  
						
					 
				
					
						
							
							
								 
								Zhou Sheng
							
						 
						
							 
							
							
							
							
								
							
							
								387d7b1a35 
								
							 
						 
						
							
							
								
								Fix a bug in APIntified ComputeMaskedBits().  
							
							 
							
							... 
							
							
							
							llvm-svn: 35022 
							
						 
						
							2007-03-08 05:42:00 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								bb5741fb02 
								
							 
						 
						
							
							
								
								For PR1205:  
							
							 
							
							... 
							
							
							
							Provide an APIntified version of MaskedValueIsZero. This will (temporarily)
cause a "defined but not used" message from the compiler. It will be used
in the next patch in this series.
Patch by Sheng Zhou.
llvm-svn: 35019 
							
						 
						
							2007-03-08 01:52:58 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								aa69640b10 
								
							 
						 
						
							
							
								
								For PR1205:  
							
							 
							
							... 
							
							
							
							Add a new ComputeMaskedBits function that is APIntified. We'll slowly
convert things over to use this version. When its all done, we'll remove
the existing version.
llvm-svn: 35018 
							
						 
						
							2007-03-08 01:46:38 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								3939b1a274 
								
							 
						 
						
							
							
								
								Remove an unnecessary if statement and adjust indentation.  
							
							 
							
							... 
							
							
							
							llvm-svn: 34939 
							
						 
						
							2007-03-05 23:36:13 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								fe53cf2459 
								
							 
						 
						
							
							
								
								fix a subtle bug that caused an MSVC warning.  Thanks to Jeffc for pointing this out.  
							
							 
							
							... 
							
							
							
							llvm-svn: 34920 
							
						 
						
							2007-03-05 00:11:19 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								5fdded1d2f 
								
							 
						 
						
							
							
								
								Add some simplifications for demanded bits, this allows instcombine to turn:  
							
							 
							
							... 
							
							
							
							define i64 @test(i64 %A, i32 %B) {
        %tmp12 = zext i32 %B to i64             ; <i64> [#uses=1]
        %tmp3 = shl i64 %tmp12, 32              ; <i64> [#uses=1]
        %tmp5 = add i64 %tmp3, %A               ; <i64> [#uses=1]
        %tmp6 = and i64 %tmp5, 123              ; <i64> [#uses=1]
        ret i64 %tmp6
}
into:
define i64 @test(i64 %A, i32 %B) {
        %tmp6 = and i64 %A, 123         ; <i64> [#uses=1]
        ret i64 %tmp6
}
This implements Transforms/InstCombine/add2.ll:test1
llvm-svn: 34919 
							
						 
						
							2007-03-05 00:02:29 +00:00  
						
					 
				
					
						
							
							
								 
								Jeff Cohen
							
						 
						
							 
							
							
							
							
								
							
							
								b622c11f77 
								
							 
						 
						
							
							
								
								Unbreak VC++ build.  
							
							 
							
							... 
							
							
							
							llvm-svn: 34917 
							
						 
						
							2007-03-05 00:00:42 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								ab2f913b68 
								
							 
						 
						
							
							
								
								simplify some code  
							
							 
							
							... 
							
							
							
							llvm-svn: 34914 
							
						 
						
							2007-03-04 23:16:36 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								8258b44b22 
								
							 
						 
						
							
							
								
								Speed up -instcombine by 20% by avoiding a particularly expensive passmgr call.  
							
							 
							
							... 
							
							
							
							llvm-svn: 34902 
							
						 
						
							2007-03-04 04:27:24 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								da1d04a057 
								
							 
						 
						
							
							
								
								my recent change caused a failure in a bswap testcase, because it changed  
							
							 
							
							... 
							
							
							
							the order that instcombine processed instructions in the testcase.  The end
result is that instcombine finished with:
define i16 @test1(i16 %a) {
        %tmp = zext i16 %a to i32               ; <i32> [#uses=2]
        %tmp21 = lshr i32 %tmp, 8               ; <i32> [#uses=1]
        %tmp5 = shl i32 %tmp, 8         ; <i32> [#uses=1]
        %tmp.upgrd.32 = or i32 %tmp21, %tmp5            ; <i32> [#uses=1]
        %tmp.upgrd.3 = trunc i32 %tmp.upgrd.32 to i16           ; <i16> [#uses=1]
        ret i16 %tmp.upgrd.3
}
which can't get matched as a bswap.
This patch makes instcombine more sophisticated about removing truncating
casts, allowing it to turn this into:
define i16 @test2(i16 %a) {
        %tmp211 = lshr i16 %a, 8
        %tmp52 = shl i16 %a, 8
        %tmp.upgrd.323 = or i16 %tmp211, %tmp52
        ret i16 %tmp.upgrd.323
}
which then matches as bswap.  This fixes bswap.ll and implements
InstCombine/cast2.ll:test[12].  This also implements cast elimination of
add/sub.
llvm-svn: 34870 
							
						 
						
							2007-03-03 05:27:34 +00:00