1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00
llvm-mirror/lib/Analysis
James Molloy a250ff5130 [GlobalsAA] An indirect global that is initialized is not fair game
When checking if an indirect global (a global with pointer type) is only assigned by allocation functions, first check if the global is itself initialized. If it is, it's not only assigned by allocation functions.

This fixes PR25309. Thanks to David Majnemer for reducing the test case!

llvm-svn: 251508
2015-10-28 10:41:29 +00:00
..
AliasAnalysis.cpp [AA] Enhance the new AliasAnalysis infrastructure with an optional 2015-10-21 12:15:19 +00:00
AliasAnalysisEvaluator.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
AliasSetTracker.cpp [AliasSetTracker] Use mod/ref information for UnknownInstr 2015-10-27 20:37:04 +00:00
Analysis.cpp [PM/AA] Rebuild LLVM's alias analysis infrastructure in a way compatible 2015-09-09 17:55:00 +00:00
AssumptionCache.cpp
BasicAliasAnalysis.cpp Initialize BasicAAWrapperPass in it's constructor 2015-10-26 21:22:58 +00:00
BlockFrequencyInfo.cpp Recommit r250345, it was reverted in r250366 to investigate a bot failure. 2015-10-15 14:59:40 +00:00
BlockFrequencyInfoImpl.cpp Recommit r250345, it was reverted in r250366 to investigate a bot failure. 2015-10-15 14:59:40 +00:00
BranchProbabilityInfo.cpp Check the case that the numerator and denominator are both zeros when getting edge probabilities in BPI and return 100% in this case. 2015-10-26 18:00:17 +00:00
CallGraph.cpp [PM/AA] Remove the last relics of the separate IPA library from LLVM, 2015-08-18 17:51:53 +00:00
CallGraphSCCPass.cpp [PM/AA] Remove the last relics of the separate IPA library from LLVM, 2015-08-18 17:51:53 +00:00
CallPrinter.cpp [PM/AA] Remove the last relics of the separate IPA library from LLVM, 2015-08-18 17:51:53 +00:00
CaptureTracking.cpp [IR] Give catchret an optional 'return value' operand 2015-08-15 02:46:08 +00:00
CFG.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
CFGPrinter.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
CFLAliasAnalysis.cpp [PM/AA] Rebuild LLVM's alias analysis infrastructure in a way compatible 2015-09-09 17:55:00 +00:00
CGSCCPassManager.cpp
CMakeLists.txt [PM/AA] Rebuild LLVM's alias analysis infrastructure in a way compatible 2015-09-09 17:55:00 +00:00
CodeMetrics.cpp Use all_of to simplify control flow. NFC. 2015-10-24 19:30:37 +00:00
ConstantFolding.cpp Enable constant propagation for more math functions 2015-08-27 19:56:57 +00:00
CostModel.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
Delinearization.cpp SCEV: Allow simple AddRec * Parameter products in delinearization 2015-10-12 08:02:00 +00:00
DemandedBits.cpp Compute demanded bits for icmp instructions 2015-10-08 12:40:06 +00:00
DependenceAnalysis.cpp [SCEV] Introduce ScalarEvolution::getOne and getZero. 2015-09-23 01:59:04 +00:00
DivergenceAnalysis.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
DominanceFrontier.cpp
DomPrinter.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
GlobalsModRef.cpp [GlobalsAA] An indirect global that is initialized is not fair game 2015-10-28 10:41:29 +00:00
InlineCost.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
InstCount.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
InstructionSimplify.cpp [ValueTracking] Expose implies via ValueTracking, NFC 2015-10-28 03:20:19 +00:00
Interval.cpp
IntervalPartition.cpp
IteratedDominanceFrontier.cpp Move IDF Calculation to a separate file, expose an interface to it. 2015-04-21 19:13:02 +00:00
IVUsers.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
LazyCallGraph.cpp
LazyValueInfo.cpp [LazyValueInfo] Report nonnull range for nonnull pointers 2015-09-18 13:01:48 +00:00
LibCallSemantics.cpp [WinEH] Recognize CoreCLR personality function 2015-10-06 20:28:16 +00:00
Lint.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
LLVMBuild.txt [PM/AA] Remove the last relics of the separate IPA library from LLVM, 2015-08-18 17:51:53 +00:00
Loads.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
LoopAccessAnalysis.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
LoopInfo.cpp [IR] Add token types 2015-08-14 05:09:07 +00:00
LoopPass.cpp LoopPass: Remove redoLoop, it isn't used. NFC 2015-10-22 21:31:34 +00:00
Makefile [PM/AA] Remove the last relics of the separate IPA library from LLVM, 2015-08-18 17:51:53 +00:00
MemDepPrinter.cpp [PM/AA] Rebuild LLVM's alias analysis infrastructure in a way compatible 2015-09-09 17:55:00 +00:00
MemDerefPrinter.cpp Take alignment into account in isSafeToSpeculativelyExecute and isSafeToLoadUnconditionally. 2015-08-17 15:54:26 +00:00
MemoryBuiltins.cpp Use find_if to simplify control flow. NFC. 2015-10-24 19:03:15 +00:00
MemoryDependenceAnalysis.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
MemoryLocation.cpp [PM/AA] Split the location computation out of getArgLocation so the 2015-06-17 07:12:40 +00:00
ModuleDebugInfoPrinter.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
ObjCARCAliasAnalysis.cpp [PM/AA] Rebuild LLVM's alias analysis infrastructure in a way compatible 2015-09-09 17:55:00 +00:00
ObjCARCAnalysisUtils.cpp [ARC] Pull the ObjC ARC components that really serve the role of 2015-08-20 08:06:03 +00:00
ObjCARCInstKind.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
OrderedBasicBlock.cpp [CaptureTracker] Provide an ordered basic block to PointerMayBeCapturedBefore 2015-07-31 14:31:35 +00:00
PHITransAddr.cpp [PHITransAddr] Don't assume that instruction operands are translatable 2015-08-09 15:43:02 +00:00
PostDominators.cpp
PtrUseVisitor.cpp
README.txt
RegionInfo.cpp [RegionInfo] Add debug-time region viewer functions 2015-08-10 13:21:59 +00:00
RegionPass.cpp Change range-based for-loops to be -Wrange-loop-analysis clean. 2015-04-15 01:21:15 +00:00
RegionPrinter.cpp [RegionInfo] Add debug-time region viewer functions 2015-08-10 13:21:59 +00:00
ScalarEvolution.cpp [SCEV] Refactor out ScalarEvolution::getDataLayout; NFC 2015-10-27 00:52:09 +00:00
ScalarEvolutionAliasAnalysis.cpp [PM/AA] Rebuild LLVM's alias analysis infrastructure in a way compatible 2015-09-09 17:55:00 +00:00
ScalarEvolutionExpander.cpp [ScalarEvolutionExpander] PHI on a catchpad can be used on both edges 2015-10-27 19:48:28 +00:00
ScalarEvolutionNormalization.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
ScopedNoAliasAA.cpp Fix Clang-tidy modernize-use-nullptr warnings in source directories and generated files; other minor cleanups. 2015-10-06 23:24:35 +00:00
SparsePropagation.cpp Analysis: Remove implicit ilist iterator conversions 2015-10-10 00:53:03 +00:00
StratifiedSets.h Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
TargetLibraryInfo.cpp Populate list of vectorizable functions for Accelerate library. 2015-05-07 17:11:51 +00:00
TargetTransformInfo.cpp Scalarizer for masked.gather and masked.scatter intrinsics. 2015-10-25 15:37:55 +00:00
Trace.cpp
TypeBasedAliasAnalysis.cpp [PM/AA] Rebuild LLVM's alias analysis infrastructure in a way compatible 2015-09-09 17:55:00 +00:00
ValueTracking.cpp [ValueTracking] Expose implies via ValueTracking, NFC 2015-10-28 03:20:19 +00:00
VectorUtils.cpp [LoopVectorize] Shrink integer operations into the smallest type possible 2015-10-12 12:34:45 +00:00

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))

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