llvm-6502/lib/Transforms/InstCombine
Chris Lattner 7acc4b1281 Extend CanEvaluateZExtd to handle and/or/xor more aggressively in the
BitsToClear case.  This allows it to promote expressions which have an
and/or/xor after the lshr, promoting cases like test2 (from PR4216) 
and test3 (random extample extracted from a spec benchmark).

clang now compiles the code in PR4216 into:

_test_bitfield:                                             ## @test_bitfield
	movl	%edi, %eax
	orl	$194, %eax
	movl	$4294902010, %ecx
	andq	%rax, %rcx
	orl	$32768, %edi
	andq	$39936, %rdi
	movq	%rdi, %rax
	orq	%rcx, %rax
	ret

instead of:

_test_bitfield:                                             ## @test_bitfield
	movl	%edi, %eax
	orl	$194, %eax
	movl	$4294902010, %ecx
	andq	%rax, %rcx
	shrl	$8, %edi
	orl	$128, %edi
	shlq	$8, %rdi
	andq	$39936, %rdi
	movq	%rdi, %rax
	orq	%rcx, %rax
	ret

which is still not great, but is progress.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93145 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-11 04:05:13 +00:00
..
CMakeLists.txt split and/or/xor out into one overly-large (2000LOC) file. However, I think 2010-01-05 07:50:36 +00:00
InstCombine.h inline and remove the rest of commonIntCastTransforms. 2010-01-10 01:00:46 +00:00
InstCombineAddSub.cpp reduce indentation 2010-01-05 20:56:24 +00:00
InstCombineAndOrXor.cpp split and/or/xor out into one overly-large (2000LOC) file. However, I think 2010-01-05 07:50:36 +00:00
InstCombineCalls.cpp Remove unnecessary dyn_cast and add a comment. Part of a WIP. 2010-01-08 21:37:11 +00:00
InstCombineCasts.cpp Extend CanEvaluateZExtd to handle and/or/xor more aggressively in the 2010-01-11 04:05:13 +00:00
InstCombineCompares.cpp tidy up some stuff duncan pointed out. 2010-01-08 17:48:19 +00:00
InstCombineLoadStoreAlloca.cpp split out load/store/alloca. 2010-01-05 05:57:49 +00:00
InstCombineMulDivRem.cpp Convert a ton of simple integer type equality tests to the new predicate. 2010-01-05 20:07:06 +00:00
InstCombinePHI.cpp Add newline at EOF. 2010-01-05 13:32:48 +00:00
InstCombineSelect.cpp Convert a ton of simple integer type equality tests to the new predicate. 2010-01-05 20:07:06 +00:00
InstCombineShifts.cpp change the preferred canonical form for a sign extension to be 2010-01-10 07:08:30 +00:00
InstCombineSimplifyDemanded.cpp move the 'SimplifyDemandedFoo' methods out to their own file, cutting 1K lines out of instcombine.cpp 2010-01-04 07:17:19 +00:00
InstCombineVectorOps.cpp reduce indentation 2010-01-05 05:42:08 +00:00
InstCombineWorklist.h remove a ton of unneeded LLVMContext stuff. 2010-01-04 07:02:48 +00:00
InstructionCombining.cpp teach ComputeNumSignBits to look through PHI nodes. 2010-01-07 23:44:37 +00:00
Makefile