llvm-project/llvm/lib/Transforms/Scalar
Eli Friedman 9c4baf5101 [ScalarEvolution] Strictly enforce pointer/int type rules.
Rules:

1. SCEVUnknown is a pointer if and only if the LLVM IR value is a
   pointer.
2. SCEVPtrToInt is never a pointer.
3. If any other SCEV expression has no pointer operands, the result is
   an integer.
4. If a SCEVAddExpr has exactly one pointer operand, the result is a
   pointer.
5. If a SCEVAddRecExpr's first operand is a pointer, and it has no other
   pointer operands, the result is a pointer.
6. If every operand of a SCEVMinMaxExpr is a pointer, the result is a
   pointer.
7. Otherwise, the SCEV expression is invalid.

I'm not sure how useful rule 6 is in practice.  If we exclude it, we can
guarantee that ScalarEvolution::getPointerBase always returns a
SCEVUnknown, which might be a helpful property. Anyway, I'll leave that
for a followup.

This is basically mop-up at this point; all the changes with significant
functional effects have landed.  Some of the remaining changes could be
split off, but I don't see much point.

Differential Revision: https://reviews.llvm.org/D105510
2021-07-09 17:29:26 -07:00
..
ADCE.cpp [DebugInfo] Salvage dbg.value() during ADCE 2021-05-21 05:25:59 -07:00
AlignmentFromAssumptions.cpp Recommit [ScalarEvolution] Make getMinusSCEV() fail for unrelated pointers. 2021-07-06 12:16:05 -07:00
AnnotationRemarks.cpp [Remarks] Add analysis remarks for memset/memcpy/memmove lengths 2021-05-24 10:10:44 -07:00
BDCE.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
CMakeLists.txt [NewPM] Remove SpeculateAroundPHIs pass 2021-06-15 20:35:55 +03:00
CallSiteSplitting.cpp [Support] Introduce a new InstructionCost class 2020-12-11 08:12:54 +00:00
ConstantHoisting.cpp [TTI] NFC: Change getIntImmCost[Inst|Intrin] to return InstructionCost 2021-04-23 16:06:36 +01:00
ConstraintElimination.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
CorrelatedValuePropagation.cpp [CVP] Guard against poison in common phi value transform (PR50399) 2021-05-25 20:47:17 +02:00
DCE.cpp [Scalar] Use range-based for loops (NFC) 2021-02-25 19:54:38 -08:00
DeadStoreElimination.cpp Revert "Transform memset + malloc --> calloc (PR25892)" 2021-07-09 16:26:48 +03:00
DivRemPairs.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
EarlyCSE.cpp [FPEnv] EarlyCSE support for constrained intrinsics, default FP environment edition 2021-05-20 14:40:51 -04:00
FlattenCFGPass.cpp [NFC] Reduce include files dependency and AA header cleanup (part 2). 2020-12-17 14:04:48 +03:00
Float2Int.cpp [NFCI] Move DEBUG_TYPE definition below #includes 2021-05-30 17:31:01 +08:00
GVN.cpp GVN.cpp - remove unused <vector> include. NFCI. 2021-06-13 14:06:32 +01:00
GVNHoist.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
GVNSink.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
GuardWidening.cpp [llvm] Use llvm::all_of (NFC) 2021-01-19 20:19:17 -08:00
IVUsersPrinter.cpp
IndVarSimplify.cpp [IndVarSimplify][NFC] Removed mayThrow from if-condition in predicateLoopExits of IndVarSimplify 2021-05-03 18:25:07 -07:00
InductiveRangeCheckElimination.cpp [NFC][NewPM] Remove some AnalysisManager invalidate methods 2021-04-15 16:51:26 -07:00
InferAddressSpaces.cpp [OpaquePtr][InferAddrSpace] Use PointerType::getWithSamePointeeType() 2021-07-09 10:29:08 -07:00
InstSimplifyPass.cpp
JumpThreading.cpp [CSSPGO] Undoing the concept of dangling pseudo probe 2021-06-18 15:14:11 -07:00
LICM.cpp [LICM] Remove MaybePromotable set (PR50367) 2021-05-18 20:26:01 +02:00
LoopAccessAnalysisPrinter.cpp
LoopBoundSplit.cpp [LoopBoundSplit] Ignore phi node which is not scevable 2021-06-09 09:44:36 +01:00
LoopDataPrefetch.cpp [NFCI] Move DEBUG_TYPE definition below #includes 2021-05-30 17:31:01 +08:00
LoopDeletion.cpp [LoopDeletion] Handle switch in proving that loop exits on first iteration 2021-07-09 18:03:34 +07:00
LoopDistribute.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
LoopFlatten.cpp [LoopNest][LoopFlatten] Change LoopFlattenPass to LoopNest pass 2021-05-28 15:43:12 +00:00
LoopFuse.cpp [ADT] Remove StatisticBase and make NoopStatistic empty 2021-04-26 16:47:32 -07:00
LoopIdiomRecognize.cpp [Intrinsics] Make MemCpyInlineInst a MemCpyInst 2021-07-02 10:25:24 -07:00
LoopInstSimplify.cpp
LoopInterchange.cpp [LoopInterhcange] Handle movement of reduction phis appropriately 2021-05-31 16:27:38 -04:00
LoopLoadElimination.cpp [LoopLoadElim] Pass ScalarEvolution in old pass manager. PR49141 2021-02-15 18:08:23 +07:00
LoopPassManager.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
LoopPredication.cpp [BPI] Improve static heuristics for "cold" paths. 2020-12-23 22:47:36 +07:00
LoopRerollPass.cpp Recommit [ScalarEvolution] Make getMinusSCEV() fail for unrelated pointers. 2021-07-06 12:16:05 -07:00
LoopRotation.cpp [LoopRotate] Don't split loop pass manager 2021-04-08 22:05:18 +02:00
LoopSimplifyCFG.cpp [DominatorTree] Add support for mixed pre/post CFG views. 2021-01-06 14:53:09 -08:00
LoopSink.cpp [llvm] Use set_is_subset (NFC) 2021-02-28 10:59:20 -08:00
LoopStrengthReduce.cpp [ScalarEvolution] Strictly enforce pointer/int type rules. 2021-07-09 17:29:26 -07:00
LoopUnrollAndJamPass.cpp LoopUnrollAndJamPass.cpp - remove unused <vector> include. NFCI. 2021-06-13 14:06:32 +01:00
LoopUnrollPass.cpp [LoopUnroll] Don't modify TripCount/TripMultiple in computeUnrollCount() (NFCI) 2021-06-21 21:34:17 +02:00
LoopUnswitch.cpp Add a subclass of IntrinsicInst for llvm.assume [nfc] 2021-04-06 11:16:22 -07:00
LoopVersioningLICM.cpp [SCEV] Use isa<> pattern for testing for CouldNotCompute [NFC] 2020-11-24 18:47:49 -08:00
LowerAtomic.cpp [NVPTX] Enable lowering of atomics on local memory 2021-04-26 20:12:12 -04:00
LowerConstantIntrinsics.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
LowerExpectIntrinsic.cpp [TargetTransformInfo] move branch probability query from TargetLoweringInfo 2021-03-22 15:55:34 -04:00
LowerGuardIntrinsic.cpp
LowerMatrixIntrinsics.cpp [Matrix] Fix crash during fusion if the same load is re-used. 2021-07-02 14:00:17 +01:00
LowerWidenableCondition.cpp
MakeGuardsExplicit.cpp
MemCpyOptimizer.cpp [Intrinsics] Make MemCpyInlineInst a MemCpyInst 2021-07-02 10:25:24 -07:00
MergeICmps.cpp PR51018: Remove explicit conversions from SmallString to StringRef to future-proof against C++23 2021-07-08 13:37:57 -07:00
MergedLoadStoreMotion.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
NaryReassociate.cpp [NARY] Don't optimize min/max if there are side uses (part2) 2021-04-30 19:02:02 +07:00
NewGVN.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
PartiallyInlineLibCalls.cpp [PartiallyInlineLibCalls] Disable sqrt expansion for strictfp. 2021-06-17 14:15:12 -07:00
PlaceSafepoints.cpp [Transforms] Use llvm::append_range (NFC) 2020-12-27 09:57:29 -08:00
Reassociate.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
Reg2Mem.cpp [Reg2Mem] add support for the new pass manager 2020-11-08 11:14:05 +00:00
RewriteStatepointsForGC.cpp [RS4GC] Treat inttoptr as base pointer 2021-06-07 10:27:23 -07:00
SCCP.cpp Function Specialization Pass 2021-06-11 09:11:29 +01:00
SROA.cpp Preserve more MD_mem_parallel_loop_access and MD_access_group in SROA 2021-06-10 15:47:03 -07:00
Scalar.cpp [ScalarizeMaskedMemIntrin] Add new PM support 2020-12-08 17:15:22 -05:00
ScalarizeMaskedMemIntrin.cpp [ScalarizeMaskedMemIntrin][SelectionDAGBuilder] Use the element type to calculate alignment for gather/scatter when alignment operand is 0. 2021-07-01 19:08:47 -07:00
Scalarizer.cpp Update @llvm.powi to handle different int sizes for the exponent 2021-06-17 09:38:28 +02:00
SeparateConstOffsetFromGEP.cpp SeparateConstOffsetFromGEP::lowerToSingleIndexGEPs - don't use dyn_cast_or_null. NFCI. 2020-12-15 17:27:25 +00:00
SimpleLoopUnswitch.cpp [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
SimplifyCFGPass.cpp [SimplifyCFG] Tail-merging all blocks with `resume` terminator 2021-06-24 21:25:06 +03:00
Sink.cpp [CSSPGO] Unblock optimizations with pseudo probe instrumentation part 2. 2021-04-26 16:52:33 -07:00
SpeculativeExecution.cpp [NewPM] Don't mark AA analyses as preserved 2021-05-18 13:49:03 -07:00
StraightLineStrengthReduce.cpp [Transforms/Scalar] Use range-based for loops (NFC) 2021-02-04 21:18:05 -08:00
StructurizeCFG.cpp [Scalar] Use range-based for loops (NFC) 2021-02-25 19:54:38 -08:00
TailRecursionElimination.cpp [TRE] Reland: allow TRE for non-capturing calls. 2021-05-25 11:35:48 +03:00
WarnMissedTransforms.cpp [SVE] Add support for scalable vectors with vectorize.scalable.enable loop attribute 2020-12-02 13:23:43 +00:00