llvm-6502/test/Transforms/InstCombine
Eli Friedman 2451a64687 Canonicalize bitcasts between types like <1 x i64> and i64 to
insertelement/extractelement.

I'm not entirely sure this is precisely what we want to do: should we 
prefer bitcast(insertelement) or insertelement(bitcast)?  Similarly. should we 
prefer extractelement(bitcast) or bitcast(extractelement)?



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76345 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-18 23:06:53 +00:00
..
2002-03-11-InstCombineHang.ll
2002-05-14-SubFailure.ll
2002-05-14-TouchDeletedInst.ll
2002-08-02-CastTest.ll
2002-09-17-GetElementPtrCrash.ll
2002-12-05-MissedConstProp.ll
2003-05-26-CastMiscompile.ll
2003-05-27-ConstExprCrash.ll
2003-06-05-BranchInvertInfLoop.ll
2003-06-22-ConstantExprCrash.ll
2003-07-21-ExternalConstant.ll
2003-08-12-AllocaNonNull.ll
2003-09-09-VolatileLoadElim.ll
2003-10-23-InstcombineNullFail.ll
2003-10-29-CallSiteResolve.ll
2003-11-03-VarargsCallBug.ll
2003-11-13-ConstExprCastCall.ll
2004-01-13-InstCombineInvokePHI.ll
2004-02-23-ShiftShiftOverflow.ll
2004-03-13-InstCombineInfLoop.ll
2004-04-04-InstCombineReplaceAllUsesWith.ll
2004-05-07-UnsizedCastLoad.ll
2004-07-27-ConstantExprMul.ll
2004-08-09-RemInfLoop.ll
2004-08-10-BoolSetCC.ll
2004-09-20-BadLoadCombine2.ll
2004-09-20-BadLoadCombine.ll
2004-09-28-BadShiftAndSetCC.ll
2004-11-22-Missed-and-fold.ll
2004-11-27-SetCCForCastLargerAndConstant.ll
2004-12-08-InstCombineCrash.ll
2004-12-08-RemInfiniteLoop.ll
2005-03-04-ShiftOverflow.ll
2005-04-07-UDivSelectCrash.ll
2005-06-15-DivSelectCrash.ll
2005-06-15-ShiftSetCCCrash.ll
2005-06-16-RangeCrash.ll
2005-06-16-SetCCOrSetCCMiscompile.ll
2005-07-07-DeadPHILoop.ll
2006-02-07-SextZextCrash.ll
2006-02-13-DemandedMiscompile.ll
2006-02-28-Crash.ll
2006-03-30-ExtractElement.ll
2006-04-01-InfLoop.ll
2006-04-28-ShiftShiftLongLong.ll
2006-05-04-DemandedBitCrash.ll
2006-05-06-Infloop.ll
2006-06-28-infloop.ll
2006-09-11-EmptyStructCrash.ll
2006-09-15-CastToBool.ll
2006-10-19-SignedToUnsignedCastAndConst-2.ll
2006-10-19-SignedToUnsignedCastAndConst.ll
2006-10-20-mask.ll
2006-10-26-VectorReassoc.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
2006-11-03-Memmove64.ll
2006-11-10-ashr-miscompile.ll
2006-11-27-XorBug.ll
2006-12-01-BadFPVectorXform.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
2006-12-05-fp-to-int-ext.ll
2006-12-08-ICmp-Combining.ll
2006-12-08-Phi-ICmp-Op-Fold.ll
2006-12-08-Select-ICmp.ll
2006-12-10-ICmp-GEP-GEP.ll
2006-12-15-Range-Test.ll
2006-12-23-Select-Cmp-Cmp.ll
2007-01-13-ExtCompareMiscompile.ll
2007-01-14-FcmpSelf.ll
2007-01-18-VectorInfLoop.ll
2007-01-27-AndICmp.ll
2007-02-01-LoadSinkAlloca.ll
2007-02-07-PointerCast.ll
2007-02-23-PhiFoldInfLoop.ll
2007-03-13-CompareMerge.ll
2007-03-19-BadTruncChangePR1261.ll
2007-03-21-SignedRangeTest.ll
2007-03-25-BadShiftMask.ll
2007-03-25-DoubleShift.ll
2007-03-26-BadShiftMask.ll
2007-03-27-PR1280.ll
2007-03-31-InfiniteLoop.ll
2007-04-04-BadFoldBitcastIntoMalloc.ll
2007-04-08-SingleEltVectorCrash.ll
2007-05-04-Crash.ll
2007-05-10-icmp-or.ll
2007-05-14-Crash.ll
2007-05-18-CastFoldBug.ll
2007-06-06-AshrSignBit.ll
2007-06-21-DivCompareMiscomp.ll
2007-08-02-InfiniteLoop.ll
2007-09-05-EqualGEP.ll
2007-09-10-AliasConstFold.ll
2007-09-11-Trampoline.ll
2007-09-17-AliasConstFold2.ll
2007-10-10-EliminateMemCpy.ll
2007-10-12-Crash.ll
2007-10-28-EmptyField.ll
2007-10-28-stacksave.ll
2007-10-31-RangeCrash.ll
2007-10-31-StringCrash.ll
2007-11-07-OpaqueAlignCrash.ll
2007-11-15-CompareMiscomp.ll
2007-11-22-IcmpCrash.ll
2007-11-25-CompatibleAttributes.ll
2007-12-10-ConstFoldCompare.ll
2007-12-12-GEPScale.ll
2007-12-16-AsmNoUnwind.ll
2007-12-18-AddSelCmpSub.ll
2007-12-28-IcmpSub2.ll
2008-01-06-BitCastAttributes.ll
2008-01-06-CastCrash.ll
2008-01-06-VoidCast.ll
2008-01-13-AndCmpCmp.ll
2008-01-13-NoBitCastAttributes.ll
2008-01-14-DoubleNest.ll
2008-01-14-VarArgTrampoline.ll
2008-01-21-MismatchedCastAndCompare.ll
2008-01-21-MulTrunc.ll
2008-01-27-FloatSelect.ll
2008-01-29-AddICmp.ll
2008-02-04-GEPIdxBug.ll
2008-02-13-MulURem.ll
2008-02-16-SDivOverflow2.ll
2008-02-16-SDivOverflow.ll
2008-02-23-MulSub.ll
2008-02-28-OrFCmpCrash.ll
2008-03-13-IntToPtr.ll
2008-04-22-ByValBitcast.ll
2008-04-28-VolatileStore.ll
2008-04-29-VolatileLoadDontMerge.ll
2008-04-29-VolatileLoadMerge.ll
2008-05-08-LiveStoreDelete.ll
2008-05-08-StrLenSink.ll
2008-05-09-SinkOfInvoke.ll
2008-05-17-InfLoop.ll
2008-05-18-FoldIntToPtr.ll
2008-05-22-IDivVector.ll
2008-05-22-NegValVector.ll
2008-05-23-CompareFold.ll
2008-05-31-AddBool.ll
2008-05-31-Bools.ll
2008-06-05-ashr-crash.ll
2008-06-08-ICmpPHI.ll
2008-06-13-InfiniteLoopStore.ll
2008-06-13-ReadOnlyCallStore.ll
2008-06-19-UncondLoad.ll
2008-06-21-CompareMiscomp.ll
2008-06-24-StackRestore.ll
2008-07-08-AndICmp.ll
2008-07-08-ShiftOneAndOne.ll
2008-07-08-SubAnd.ll
2008-07-08-VolatileLoadMerge.ll
2008-07-09-SubAndError.ll
2008-07-10-CastSextBool.ll
2008-07-10-ICmpBinOp.ll
2008-07-11-RemAnd.ll
2008-07-13-DivZero.ll
2008-07-16-fsub.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
2008-07-16-sse2_storel_dq.ll
2008-08-05-And.ll
2008-08-17-ICmpXorSignbit.ll
2008-09-02-VectorCrash.ll
2008-09-29-FoldingOr.ll
2008-10-11-DivCompareFold.ll
2008-10-23-ConstFoldWithoutMask.ll
2008-11-01-SRemDemandedBits.ll
2008-11-08-FCmp.ll
2008-11-20-DivMulRem.ll
2008-11-27-IDivVector.ll
2008-11-27-MultiplyIntVec.ll
2008-11-27-UDivNegative.ll
2008-12-17-SRemNegConstVec.ll
2009-01-05-i128-crash.ll
2009-01-08-AlignAlloca.ll
2009-01-16-PointerAddrSpace.ll
2009-01-19-fmod-constant-float-specials.ll
2009-01-19-fmod-constant-float.ll
2009-01-24-EmptyStruct.ll
2009-01-31-InfIterate.ll reduce testcase. 2009-02-02 06:55:45 +00:00
2009-01-31-Pressure.ll
2009-02-04-FPBitcast.ll Allow the inverse transform x86_fp80 -> i80 (also 2009-02-04 11:17:06 +00:00
2009-02-20-InstCombine-SROA.ll rename a function to indicate that it checks for profitability as well 2009-02-21 00:46:50 +00:00
2009-02-21-LoadCST.ll Don't sign extend the char when expanding char -> int during 2009-02-21 20:50:42 +00:00
2009-02-25-CrashZeroSizeArray.ll Fix PR3667 2009-02-25 18:20:01 +00:00
2009-03-02-VarLengthArrayGEP.ll Fix PR3694: add an instcombine micro-optimization that helps 2009-03-02 09:18:21 +00:00
2009-03-18-vector-ashr-crash.ll Fix PR3826 - InstComb assert with vector shift, by not calling ComputeNumSignBits on a vector. 2009-03-18 16:32:19 +00:00
2009-03-20-AShrOverShift.ll Fix instcombine to not introduce undefined shifts when merging two 2009-03-20 22:41:15 +00:00
2009-03-24-InfLoop.ll Fix PR3874 by restoring a condition I removed, but making it more 2009-03-25 00:28:58 +00:00
2009-04-06-GEP-Index-Crash.ll fix rdar://6762290, a crash compiling cxx filt with clang. 2009-04-07 05:03:34 +00:00
2009-04-07-MulPromoteToI96.ll Instcombine should not promote whole computation trees to "strange" 2009-04-08 05:41:03 +00:00
2009-05-23-FCmpToICmp.ll Fix bug in FoldFCmp_IntToFP_Cst. If inttofp is a uintofp, use unsigned instead of signed integer constant. 2009-05-22 23:10:53 +00:00
2009-06-11-StoreAddrSpace.ll fix testcase to properly check for the patch in r73195. 2009-06-15 05:46:02 +00:00
2009-06-16-SRemDemandedBits.ll Correct an accidental duplication of the test (patch doesn't handle 2009-06-17 03:05:00 +00:00
2009-07-02-MaskedIntVector.ll do not try to analyze bitcasts from i64 to <2 x i32> in ComputedMaskedBits. While 2009-07-02 16:04:08 +00:00
add2.ll
add-shrink.ll
add-sitofp.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
add.ll
addnegneg.ll
adjust-for-sminmax.ll
align-2d-gep.ll
align-addr.ll
align-inc.ll Change these tests to use regular loads instead of llvm.x86.sse2.loadu.dq. 2009-02-16 00:44:23 +00:00
alloca.ll
and2.ll
and-compare.ll
and-fcmp.ll
and-not-or.ll
and-or-and.ll
and-or-not.ll
and-or.ll
and-xor-merge.ll
and.ll
apint-add1.ll
apint-add2.ll
apint-and1.ll
apint-and2.ll
apint-and-compare.ll
apint-and-or-and.ll
apint-and-xor-merge.ll
apint-call-cast-target.ll
apint-cast-and-cast.ll
apint-cast-cast-to-and.ll
apint-cast.ll
apint-div1.ll
apint-div2.ll
apint-elim-logicalops.ll
apint-mul1.ll
apint-mul2.ll
apint-not.ll
apint-or1.ll
apint-or2.ll
apint-rem1.ll
apint-rem2.ll
apint-select.ll
apint-shift-simplify.ll
apint-shift.ll
apint-shl-trunc.ll
apint-sub.ll
apint-xor1.ll
apint-xor2.ll
apint-zext1.ll
apint-zext2.ll
ashr-nop.ll Fix a ValueTracking rule: RHS means operand 1, not 0. Add a simple 2009-02-24 02:00:40 +00:00
binop-cast.ll
bit-tracking.ll
bitcast-gep.ll
bitcast-scalar-to-vector.ll Fix an instcombine abort on a scalar-to-vector bitcast. This fixes PR4487. 2009-07-01 21:38:46 +00:00
bitcast-vec-canon.ll Canonicalize bitcasts between types like <1 x i64> and i64 to 2009-07-18 23:06:53 +00:00
bitcast-vector-fold.ll
bitcount.ll
bittest.ll
bswap-fold.ll
bswap.ll
call2.ll
call-cast-target.ll
call-intrinsics.ll
call.ll
canonicalize_branch.ll
cast2.ll
cast_ld_addr_space.ll Instrcombine should not change load(cast p) to cast(load p) if the cast 2009-02-07 22:19:29 +00:00
cast_ptr.ll
cast-and-cast.ll
cast-cast-to-and.ll
cast-load-gep.ll
cast-malloc.ll
cast-mul-select.ll
cast-propagate.ll
cast-set.ll
cast-sext-zext.ll
cast-store-gep.ll
cast.ll
constant-fold-ptr-casts.ll Revert 71165. It did more than just revert 71158 and it introduced 2009-05-07 19:46:24 +00:00
CPP_min_max.ll
dce-iterate.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
deadcode.ll
dg.exp
div-cmp-overflow.ll
div.ll
enforce-known-alignment.ll Change the argument type in this test to something less convoluted, 2009-02-18 04:25:04 +00:00
extractvalue.ll
fold-bin-operand.ll Don't restrict the set of instructions where we try to constant-fold the 2009-07-15 22:13:34 +00:00
fold-vector-zero.ll
fp-ret-bitcast.ll
fpcast.ll
fpextend.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
fsub-fsub.ll Don't do (x - (y - z)) --> (x + (z - y)) on floating-point types, because 2009-06-12 19:23:25 +00:00
GEPIdxCanon.ll
getelementptr_cast.ll
getelementptr_const.ll
getelementptr_index.ll
getelementptr_promote.ll
getelementptr-setcc.ll
getelementptr-seteq.ll
getelementptr.ll
hoist_instr.ll
icmp.ll
IntPtrCast.ll
JavaCompare.ll make this condition more precise. 2008-07-11 03:54:57 +00:00
known_align.ll
load2.ll
load3.ll
load.ll
loadstore-alignment.ll
logical-select.ll
lshr-phi.ll Teach ValueTracking a new way to analyze PHI nodes, and and teach 2009-05-21 02:28:33 +00:00
malloc2.ll
malloc3.ll
malloc-free-delete.ll
malloc.ll
memcpy-to-load.ll
memmove.ll
memset.ll
mul-masked-bits.ll
mul.ll Fix trivial todo in instcombine. 2009-07-14 02:01:53 +00:00
multi-use-or.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
narrow.ll
not-fcmp.ll
not.ll
nothrow.ll calls in nothrow functions can be marked nothrow even if the callee 2009-05-13 17:39:14 +00:00
odr-linkage.ll Add a new "available_externally" linkage type. This is intended 2009-04-13 05:44:34 +00:00
or2.ll
or-fcmp.ll
or-to-xor.ll
or.ll
phi-merge.ll
phi.ll
pr2645-0.ll
pr2645-1.ll
pr2996.ll
preserve-sminmax.ll
ptr-int-cast.ll canonicalize inttoptr and ptrtoint instructions which cast pointers 2009-03-24 18:35:40 +00:00
README.txt
rem.ll
sdiv-1.ll
sdiv-2.ll
sdiv-shift.ll Add combine: X sdiv (1 << Y) -> X udiv (1 << Y) when X doesn't have the 2009-07-18 09:53:21 +00:00
select-2.ll Throttle back "fold select into operand" transformation. InstCombine should not generate selects of two constants unless they are selects of 0 and 1. 2009-03-31 20:42:45 +00:00
select-load-call.ll Testcase for r73506 2009-06-16 17:23:25 +00:00
select.ll
set.ll
setcc-cast-cast.ll
setcc-strength-reduce.ll
sext-misc.ll
shift-simplify.ll
shift-sra.ll
shift-trunc-shift.ll
shift.ll two changes: 2009-03-24 18:15:30 +00:00
shl-icmp.ll
shl-trunc.ll
shufflemask-undef.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
shufflevec-constant.ll Add suppport for ConstantExprs of shufflevectors whose result type is not equal to the 2009-02-12 21:28:33 +00:00
signed-comparison.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
signext.ll
sink_instruction.ll
sitofp.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
srem1.ll
srem-simplify-bug.ll
srem.ll
stack-overalign.ll Add a testcase for the problem fixed in r65289. 2009-02-24 02:17:42 +00:00
stacksaverestore.ll
store-merge.ll
store.ll
sub.ll
trunc-mask-ext.ll Generalize the zext(trunc(t) & C) instcombine to work even with 2009-06-18 16:30:21 +00:00
udiv_select_to_select_shift.ll
udiv-simplify-bug-0.ll
udiv-simplify-bug-1.ll
udivrem-change-width.ll PR4548: optimize zext+udiv+trunc to udiv. 2009-07-13 22:46:01 +00:00
urem-simplify-bug.ll
urem.ll
vec_demanded_elts-2.ll APInt'fy SimplifyDemandedVectorElts so it can analyze vectors with more than 64 elements. 2009-02-03 10:05:09 +00:00
vec_demanded_elts-3.ll PR4340: Run SimplifyDemandedVectorElts on insertelement instructions; 2009-06-06 20:08:03 +00:00
vec_demanded_elts.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
vec_extract_elt.ll
vec_insert_to_shuffle.ll
vec_insertelt.ll
vec_narrow.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
vec_shuffle2.ll
vec_shuffle.ll
vector-casts-0.ll Generalize a few more instcombines to be vector/scalar-independent. 2009-06-16 19:55:29 +00:00
vector-casts-1.ll Generalize a few more instcombines to be vector/scalar-independent. 2009-06-16 19:55:29 +00:00
vector-srem.ll
volatile_store.ll
xor2.ll
xor-demorgans.ll
xor-undef.ll
xor.ll
zero-point-zero-add.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
zeroext-and-reduce.ll
zext-bool-add-sub.ll Fix bug in run-line. 2009-07-13 22:31:30 +00:00
zext-fold.ll
zext-or-icmp.ll
zext.ll commit a tweaked version of Daniel's patch for PR3599. We now 2009-02-17 20:47:23 +00:00

This directory contains test cases for the instcombine transformation.  The
dated tests are actual bug tests, whereas the named tests are used to test
for features that the this pass should be capable of performing.