1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00
llvm-mirror/test/Transforms/InstSimplify
Hal Finkel 502475d4f3 Make processing @llvm.assume more efficient by using operand bundles
There was an efficiency problem with how we processed @llvm.assume in
ValueTracking (and other places). The AssumptionCache tracked all of the
assumptions in a given function. In order to find assumptions relevant to
computing known bits, etc. we searched every assumption in the function. For
ValueTracking, that means that we did O(#assumes * #values) work in InstCombine
and other passes (with a constant factor that can be quite large because we'd
repeat this search at every level of recursion of the analysis).

Several of us discussed this situation at the last developers' meeting, and
this implements the discussed solution: Make the values that an assume might
affect operands of the assume itself. To avoid exposing this detail to
frontends and passes that need not worry about it, I've used the new
operand-bundle feature to add these extra call "operands" in a way that does
not affect the intrinsic's signature. I think this solution is relatively
clean. InstCombine adds these extra operands based on what ValueTracking, LVI,
etc. will need and then those passes need only search the users of the values
under consideration. This should fix the computational-complexity problem.

At this point, no passes depend on the AssumptionCache, and so I'll remove
that as a follow-up change.

Differential Revision: https://reviews.llvm.org/D27259

llvm-svn: 289755
2016-12-15 02:53:42 +00:00
..
2010-12-20-Boolean.ll
2011-01-14-Thread.ll
2011-02-01-Vector.ll
2011-09-05-InsertExtractValue.ll
2011-10-27-BinOpCrash.ll
2011-11-23-MaskedBitsCrash.ll
2013-04-19-ConstantFoldingCrash.ll
add-mask.ll Make processing @llvm.assume more efficient by using operand bundles 2016-12-15 02:53:42 +00:00
and-icmps-same-ops.ll [InstSimplify] fixed (?) to not mutate icmps 2016-12-06 22:09:52 +00:00
AndOrXor.ll [InstSimplify] move one and add more tests for potential negation folds 2016-10-19 18:42:12 +00:00
apint-or.ll
assume.ll
bitcast-vector-fold.ll [ConstantFold] Improve the bitcast folding logic for constant vectors. 2016-09-13 14:50:47 +00:00
bswap.ll
call-callconv.ll
call.ll Simplify llvm.masked.load w/ undef masks 2016-07-14 06:58:37 +00:00
cast.ll [InstSimplify] Fold gep (gep V, C), (xor V, -1) to C-1 2016-08-16 06:13:46 +00:00
compare.ll [Constants] don't die processing non-ConstantInt GEP indices in isGEPWithNoNotionalOverIndexing() (PR31262) 2016-12-11 20:07:02 +00:00
dead-code-removal.ll
exact-nsw-nuw.ll
fast-math.ll
fdiv.ll
floating-point-arithmetic.ll [InstSimplify] Add "X / 1.0" to SimplifyFDivInst. 2016-12-08 23:27:40 +00:00
floating-point-compare.ll [instsimplify] Fix incorrect folding of an ordered fcmp with a vector of all NaN. 2016-09-02 14:47:43 +00:00
fold-builtin-fma.ll
gep.ll
icmp-constant.ll [InstSimplify] allow icmp with constant folds for splat vectors, part 2 2016-08-23 18:00:51 +00:00
implies.ll
load-relative-32.ll
load-relative.ll
load.ll [ConstantFolding] Extend FoldReinterpretLoadFromConstPtr to handle negative offsets 2016-07-13 23:33:07 +00:00
maxmin.ll
negate.ll [InstSimplify] fold negation of sign-bit 2016-10-19 21:23:45 +00:00
noalias-ptr.ll
or-icmps-same-ops.ll [InstSimplify] fixed (?) to not mutate icmps 2016-12-06 22:09:52 +00:00
past-the-end.ll
phi.ll
pr28725.ll [ConstantFolding] Use ConstantExpr::getWithOperands 2016-07-29 03:27:31 +00:00
ptr_diff.ll
reassociate.ll
rem.ll
require-dominator.ll Add unittest for r280760 2016-09-08 16:53:40 +00:00
returned.ll Pointer-comparison folding should look through returned-argument functions 2016-07-11 03:37:59 +00:00
select.ll [InstSimplify] don't crash handling a pointer or aggregate type 2016-07-21 21:56:00 +00:00
shift-128-kb.ll
shift-knownbits.ll
shr-nop.ll [ValueTracking] improve ComputeNumSignBits for vector constants 2016-06-22 19:20:59 +00:00
undef.ll [InstCombine] replace divide-by-constant checks with asserts; NFC 2016-08-30 17:31:34 +00:00
vec-cmp.ll
vector_gep.ll
vector_ptr_bitcast.ll