1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00
llvm-mirror/lib/Analysis
Ivan A. Kosarev f215f8fe80 [Analysis] Fix merging TBAA tags with different final access types
There are cases when we have to merge TBAA access tags with the
same base access type, but different final access types. For
example, accesses to different members of the same structure may
be vectorized into a single load or store instruction. Since we
currently assume that the tags to merge always share the same
final access type, we incorrectly return a tag that describes an
access to one of the original final access types as the generic
tag. This patch fixes that by producing generic tags for the
common type and not the final access types of the original tags.

Resolves:
PR35225: Wrong tbaa metadata after load store vectorizer due to
recent change
https://bugs.llvm.org/show_bug.cgi?id=35225

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

llvm-svn: 317682
2017-11-08 11:42:21 +00:00
..
AliasAnalysis.cpp
AliasAnalysisEvaluator.cpp
AliasAnalysisSummary.cpp
AliasAnalysisSummary.h
AliasSetTracker.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
Analysis.cpp
AssumptionCache.cpp [Analysis, Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-09-01 21:37:29 +00:00
BasicAliasAnalysis.cpp BasicAA: fix bug where we would return partialalias instead of noalias 2017-11-08 10:59:00 +00:00
BlockFrequencyInfo.cpp Irreducible loop metadata for more accurate block frequency under PGO. 2017-11-02 22:26:51 +00:00
BlockFrequencyInfoImpl.cpp Irreducible loop metadata for more accurate block frequency under PGO. 2017-11-02 22:26:51 +00:00
BranchProbabilityInfo.cpp [BranchProbabilityInfo] Handle irreducible loops. 2017-11-01 15:16:50 +00:00
CallGraph.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
CallGraphSCCPass.cpp
CallPrinter.cpp
CaptureTracking.cpp
CFG.cpp
CFGPrinter.cpp
CFLAndersAliasAnalysis.cpp
CFLGraph.h
CFLSteensAliasAnalysis.cpp
CGSCCPassManager.cpp Use a BumpPtrAllocator for Loop objects 2017-09-28 02:45:42 +00:00
CMakeLists.txt [IPSCCP] Move common functions to ValueLatticeUtils (NFC) 2017-10-13 17:53:44 +00:00
CmpInstAnalysis.cpp [InstCombine][InstSimplify] Teach decomposeBitTestICmp to look through truncate instructions 2017-09-01 21:27:34 +00:00
CodeMetrics.cpp
ConstantFolding.cpp Revert "Fix typo [NFC]" 2017-10-01 00:09:53 +00:00
CostModel.cpp [TargetTransformInfo] Add a new public interface getInstructionCost 2017-09-08 22:29:17 +00:00
Delinearization.cpp
DemandedBits.cpp
DependenceAnalysis.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
DivergenceAnalysis.cpp
DominanceFrontier.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
DomPrinter.cpp
EHPersonalities.cpp
GlobalsModRef.cpp
IndirectCallPromotionAnalysis.cpp
InlineCost.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
InstCount.cpp
InstructionSimplify.cpp Rename OptimizationDiagnosticInfo.* to OptimizationRemarkEmitter.* 2017-10-09 23:19:02 +00:00
Interval.cpp
IntervalPartition.cpp
IteratedDominanceFrontier.cpp
IVUsers.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
LazyBlockFrequencyInfo.cpp
LazyBranchProbabilityInfo.cpp
LazyCallGraph.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
LazyValueInfo.cpp [LVI] Move LVILatticeVal class to separate header file (NFC). 2017-09-28 11:09:22 +00:00
Lint.cpp [Lint] Avoid failed assertion by fetching the proper pointer type 2017-10-03 06:03:49 +00:00
LLVMBuild.txt
Loads.cpp Merge isKnownNonNull into isKnownNonZero 2017-09-09 18:23:11 +00:00
LoopAccessAnalysis.cpp [LV/LAA] Avoid specializing a loop for stride=1 when this predicate implies a 2017-11-05 16:53:15 +00:00
LoopAnalysisManager.cpp Do not call Loop::getName on possibly dead loops 2017-10-04 22:02:27 +00:00
LoopInfo.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
LoopPass.cpp Use a BumpPtrAllocator for Loop objects 2017-09-28 02:45:42 +00:00
LoopUnrollAnalyzer.cpp
MemDepPrinter.cpp
MemDerefPrinter.cpp
MemoryBuiltins.cpp
MemoryDependenceAnalysis.cpp [MemDep] DBG intrinsics don't impact abort limit for call site dependence analysis 2017-10-25 06:15:32 +00:00
MemoryLocation.cpp
MemorySSA.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
MemorySSAUpdater.cpp MemorySSAUpdater: Only add phis to insertedphis if we actually inserted them, not if we just found existing ones 2017-09-27 05:35:19 +00:00
ModuleDebugInfoPrinter.cpp
ModuleSummaryAnalysis.cpp [LTO][ThinLTO] Use the linker resolutions to mark global values as dso_local. 2017-11-04 17:04:39 +00:00
ObjCARCAliasAnalysis.cpp
ObjCARCAnalysisUtils.cpp
ObjCARCInstKind.cpp
OptimizationRemarkEmitter.cpp Rename OptimizationDiagnosticInfo.* to OptimizationRemarkEmitter.* 2017-10-09 23:19:02 +00:00
OrderedBasicBlock.cpp
PHITransAddr.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
PostDominators.cpp
ProfileSummaryInfo.cpp
PtrUseVisitor.cpp
README.txt
RegionInfo.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
RegionPass.cpp
RegionPrinter.cpp
ScalarEvolution.cpp [SCEV] Fix an assertion failure in the max backedge taken count 2017-10-25 21:41:00 +00:00
ScalarEvolutionAliasAnalysis.cpp
ScalarEvolutionExpander.cpp Undo accidental commit 2017-10-31 00:04:09 +00:00
ScalarEvolutionNormalization.cpp
ScopedNoAliasAA.cpp
StratifiedSets.h
TargetLibraryInfo.cpp TargetLibraryInfo: Stop guessing wchar_t size 2017-09-26 02:36:57 +00:00
TargetTransformInfo.cpp [CodeGen][ExpandMemcmp] Allow memcmp to expand to vector loads (2). 2017-10-30 14:19:33 +00:00
Trace.cpp Reverting r315590; it did not include changes for llvm-tblgen, which is causing link errors for several people. 2017-10-15 14:32:27 +00:00
TypeBasedAliasAnalysis.cpp [Analysis] Fix merging TBAA tags with different final access types 2017-11-08 11:42:21 +00:00
TypeMetadataUtils.cpp
ValueLattice.cpp [LVI] Move LVILatticeVal class to separate header file (NFC). 2017-09-28 11:09:22 +00:00
ValueLatticeUtils.cpp [IPSCCP] Move common functions to ValueLatticeUtils (NFC) 2017-10-13 17:53:44 +00:00
ValueTracking.cpp [ValueTracking] readonly (const) is a requirement for converting sqrt to llvm.sqrt; nnan is not 2017-11-06 22:40:09 +00:00
VectorUtils.cpp

Analysis Opportunities:

//===---------------------------------------------------------------------===//

In test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll, the
ScalarEvolution expression for %r is this:

  {1,+,3,+,2}<loop>

Outside the loop, this could be evaluated simply as (%n * %n), however
ScalarEvolution currently evaluates it as

  (-2 + (2 * (trunc i65 (((zext i64 (-2 + %n) to i65) * (zext i64 (-1 + %n) to i65)) /u 2) to i64)) + (3 * %n))

In addition to being much more complicated, it involves i65 arithmetic,
which is very inefficient when expanded into code.

//===---------------------------------------------------------------------===//

In formatValue in test/CodeGen/X86/lsr-delayed-fold.ll,

ScalarEvolution is forming this expression:

((trunc i64 (-1 * %arg5) to i32) + (trunc i64 %arg5 to i32) + (-1 * (trunc i64 undef to i32)))

This could be folded to

(-1 * (trunc i64 undef to i32))

//===---------------------------------------------------------------------===//