llvm-6502/test/Transforms/InstCombine
Benjamin Kramer 91e37ef278 InstCombine: Add a bunch of combines of the form x | (y ^ z).
We usually catch this kind of optimization through InstSimplify's distributive
magic, but or doesn't distribute over xor in general.

"A | ~(A | B) -> A | ~B" hits 24 times on gcc.c.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126081 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-20 13:23:43 +00:00
..
2002-03-11-InstCombineHang.ll
2002-05-14-SubFailure.ll
2002-08-02-CastTest.ll
2002-12-05-MissedConstProp.ll
2003-05-26-CastMiscompile.ll
2003-05-27-ConstExprCrash.ll
2003-06-05-BranchInvertInfLoop.ll
2003-07-21-ExternalConstant.ll
2003-08-12-AllocaNonNull.ll remove a use of llvm-dis 2010-11-30 02:04:15 +00:00
2003-09-09-VolatileLoadElim.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-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-13-DemandedMiscompile.ll
2006-02-28-Crash.ll
2006-03-30-ExtractElement.ll
2006-04-28-ShiftShiftLongLong.ll Enhance a bunch of transformations in instcombine to start generating 2011-02-10 05:36:31 +00:00
2006-05-04-DemandedBitCrash.ll
2006-09-15-CastToBool.ll
2006-10-19-SignedToUnsignedCastAndConst-2.ll
2006-10-20-mask.ll
2006-10-26-VectorReassoc.ll
2006-11-03-Memmove64.ll
2006-11-10-ashr-miscompile.ll
2006-12-01-BadFPVectorXform.ll
2006-12-05-fp-to-int-ext.ll
2006-12-08-Phi-ICmp-Op-Fold.ll
2006-12-08-Select-ICmp.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 Enhance a bunch of transformations in instcombine to start generating 2011-02-10 05:36:31 +00:00
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-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-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-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
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 My auto-simplifier noticed that ((X/Y)*Y)/Y occurs several times in SPEC 2011-01-28 16:51:11 +00:00
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
2009-01-31-Pressure.ll
2009-02-04-FPBitcast.ll
2009-02-20-InstCombine-SROA.ll
2009-02-21-LoadCST.ll
2009-02-25-CrashZeroSizeArray.ll
2009-03-18-vector-ashr-crash.ll
2009-03-20-AShrOverShift.ll
2009-03-24-InfLoop.ll
2009-04-07-MulPromoteToI96.ll
2009-05-23-FCmpToICmp.ll
2009-06-11-StoreAddrSpace.ll
2009-06-16-SRemDemandedBits.ll
2009-07-02-MaskedIntVector.ll
2009-12-17-CmpSelectNull.ll
2010-01-28-NegativeSRem.ll
2010-03-03-ExtElim.ll
2010-11-01-lshr-mask.ll Have SimplifyBinOp dispatch Xor, Add and Sub to the corresponding methods 2010-12-20 14:47:04 +00:00
2010-11-21-SizeZeroTypeGEP.ll If a GEP index simply advances by multiples of a type of zero size, 2010-11-22 16:32:50 +00:00
2010-11-23-Distributed.ll Add a generic expansion transform: A op (B op' C) -> (A op B) op' (A op C) 2010-12-22 13:36:08 +00:00
2011-02-14-InfLoop.ll Fix 9216 - Endless loop in InstCombine pass. 2011-02-15 07:13:48 +00:00
2011-02-16-InsertelementHang.ll PR9218: SimplifyDemandedVectorElts can return a non-null value that is not 2011-02-19 22:42:40 +00:00
add2.ll preserve NUW/NSW when transforming add x,x 2011-02-17 02:23:02 +00:00
add3.ll
add-shrink.ll
add-sitofp.ll
add.ll Also fold (A+B) == A -> B == 0 when the add is commuted. 2011-02-11 21:46:48 +00:00
addnegneg.ll
adjust-for-sminmax.ll
align-2d-gep.ll
align-addr.ll
align-external.ll
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-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
badmalloc.ll
binop-cast.ll
bit-checks.ll
bit-tracking.ll
bitcast-sext-vector.ll
bitcast-store.ll
bitcast-vec-canon.ll
bitcast-vec-uniform.ll Enhance constant folding of bitcast operations on vectors of floats. 2011-02-17 21:22:27 +00:00
bitcast-vector-fold.ll
bitcast.ll
bitcount.ll
bittest.ll
bswap-fold.ll
bswap.ll
call2.ll
call-cast-target.ll
call-intrinsics.ll
call.ll
canonicalize_branch.ll
cast_ptr.ll
cast-mul-select.ll
cast-set.ll
cast.ll Enhance a bunch of transformations in instcombine to start generating 2011-02-10 05:36:31 +00:00
compare-signs.ll
constant-fold-compare.ll
constant-fold-gep.ll implement constant folding support for an exotic constant expr: 2011-01-06 06:19:46 +00:00
CPP_min_max.ll
crash.ll fix PR9013, an infinite loop in instcombine. 2011-01-21 05:29:50 +00:00
dce-iterate.ll
deadcode.ll
dg.exp
div.ll
enforce-known-alignment.ll
exact.ll add PR# 2011-02-13 08:27:31 +00:00
extractvalue.ll Transform (extractvalue (load P), ...) to (load (gep P, 0, ...)) if the load has no other uses, shrinking the load. 2010-11-29 21:56:20 +00:00
fcmp-select.ll
fcmp-special.ll
fold-bin-operand.ll
fold-calls.ll
fold-vector-select.ll Fix 9173. 2011-02-11 19:37:55 +00:00
fold-vector-zero.ll
fp-ret-bitcast.ll
fpcast.ll
fpextend.ll
fsub.ll
gepgep.ll
getelementptr.ll
hoist_instr.ll
icmp.ll Add some transforms of the kind X-Y>X -> 0>Y which are valid when there is no 2011-02-18 16:25:37 +00:00
idioms.ll
IntPtrCast.ll
intrinsics.ll X86 supports i8/i16 overflow ops (except i8 multiplies), we should 2010-12-19 20:03:11 +00:00
invariant.ll
JavaCompare.ll
known_align.ll
load3.ll
load-cmp.ll
load-select.ll
load.ll
loadstore-alignment.ll
logical-select.ll
lshr-phi.ll
malloc2.ll
malloc3.ll
malloc-free-delete.ll
malloc.ll
memcpy-to-load.ll
memcpy.ll
memmove.ll
memset2.ll Test case for r122215 when InstCombine optimizes memset 2010-12-20 01:06:23 +00:00
memset_chk.ll
memset.ll
mul-masked-bits.ll
mul.ll
multi-use-or.ll
narrow.ll
neon-intrinsics.ll
no-negzero.ll
not-fcmp.ll
not.ll
nothrow.ll
nsw.ll Enhance a bunch of transformations in instcombine to start generating 2011-02-10 05:36:31 +00:00
objsize.ll Revert 122959, it needs more thought. Add it back to README.txt with additional notes. 2011-01-07 20:42:20 +00:00
odr-linkage.ll
or-fcmp.ll Just because we have determined that an (fcmp | fcmp) is true for A < B, 2011-01-21 19:39:42 +00:00
or-to-xor.ll
or-xor.ll InstCombine: Add a bunch of combines of the form x | (y ^ z). 2011-02-20 13:23:43 +00:00
or.ll Teach InstCombine to merge (icmp ult (X + CA), C1) | (icmp eq X, C2) into (icmp ult (X + CA), C1 + 1) if C2 + CA == C1. 2010-12-20 16:18:51 +00:00
overflow.ll recognize an unsigned add with overflow idiom into uadd. 2010-12-19 19:37:52 +00:00
phi-merge-gep.ll
phi.ll have instcombine preserve nsw/nuw/exact when sinking 2011-02-17 23:01:49 +00:00
pr2645-0.ll
pr2645-1.ll
pr2996.ll
pr8547.ll Enhance a bunch of transformations in instcombine to start generating 2011-02-10 05:36:31 +00:00
preserve-sminmax.ll
ptr-int-cast.ll
README.txt
rem.ll InstCombine: Add a missing irem identity (X % X -> 0). 2010-11-17 19:11:46 +00:00
sdiv-1.ll
sdiv-2.ll
sdiv-shift.ll
select-2.ll
select-crash.ll
select-load-call.ll
select.ll Clean up the tests a little, make sure we match an instruction in the right 2011-01-28 05:13:17 +00:00
set.ll
setcc-strength-reduce.ll
sext.ll Enhance a bunch of transformations in instcombine to start generating 2011-02-10 05:36:31 +00:00
shift-sra.ll
shift.ll Enhance a bunch of transformations in instcombine to start generating 2011-02-10 05:36:31 +00:00
shufflemask-undef.ll
shufflevec-constant.ll
signed-comparison.ll
signext.ll Enhance a bunch of transformations in instcombine to start generating 2011-02-10 05:36:31 +00:00
simplify-demanded-bits-pointer.ll
sink_instruction.ll
sitofp.ll
sqrt.ll
srem1.ll
srem-simplify-bug.ll
srem.ll
stack-overalign.ll
stacksaverestore.ll
store.ll
strcpy_chk.ll
sub.ll Add some transforms of the kind X-Y>X -> 0>Y which are valid when there is no 2011-02-18 16:25:37 +00:00
trunc.ll Enhance a bunch of transformations in instcombine to start generating 2011-02-10 05:36:31 +00:00
udiv_select_to_select_shift.ll
udiv-simplify-bug-0.ll
udiv-simplify-bug-1.ll
udivrem-change-width.ll
urem-simplify-bug.ll
urem.ll
vec_demanded_elts.ll Teach instcombine about the rest of the SSE and SSE2 conversion 2011-01-10 07:19:37 +00:00
vec_extract_elt.ll
vec_insertelt.ll
vec_narrow.ll
vec_sext.ll Add vector versions of some existing scalar transforms to aid codegen in matching psign & pblend operations to the IR produced by clang/gcc for their C idioms. 2010-12-17 23:12:19 +00:00
vec_shuffle.ll
vector-casts.ll Teach PatternMatch that splat vectors could be floating point as well as 2011-02-15 23:13:23 +00:00
vector-srem.ll
volatile_store.ll
xor2.ll
xor-undef.ll
xor.ll
zero-point-zero-add.ll
zeroext-and-reduce.ll
zext-bool-add-sub.ll
zext-fold.ll
zext-or-icmp.ll
zext.ll

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.