1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-20 19:42:54 +02:00
llvm-mirror/lib/Analysis
Joseph Tremoulet 56089ea65e [WinEH] Require token linkage in EH pad/ret signatures
Summary:
WinEHPrepare is going to require that cleanuppad and catchpad produce values
of token type which are consumed by any cleanupret or catchret exiting the
pad.  This change updates the signatures of those operators to require/enforce
that the type produced by the pads is token type and that the rets have an
appropriate argument.

The catchpad argument of a `CatchReturnInst` must be a `CatchPadInst` (and
similarly for `CleanupReturnInst`/`CleanupPadInst`).  To accommodate that
restriction, this change adds a notion of an operator constraint to both
LLParser and BitcodeReader, allowing appropriate sentinels to be constructed
for forward references and appropriate error messages to be emitted for
illegal inputs.

Also add a verifier rule (noted in LangRef) that a catchpad with a catchpad
predecessor must have no other predecessors; this ensures that WinEHPrepare
will see the expected linear relationship between sibling catches on the
same try.

Lastly, remove some superfluous/vestigial casts from instruction operand
setters operating on BasicBlocks.

Reviewers: rnk, majnemer

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D12108

llvm-svn: 245797
2015-08-23 00:26:33 +00:00
..
AliasAnalysis.cpp [PM/AA] Simplify the AliasAnalysis interface by removing a wrapper 2015-08-06 02:05:46 +00:00
AliasAnalysisCounter.cpp [PM/AA] Sink all the actual code from AliasAnalysisCounter back into the 2015-08-14 02:12:12 +00:00
AliasAnalysisEvaluator.cpp [PM/AA] Simplify the AliasAnalysis interface by removing a wrapper 2015-08-06 02:05:46 +00:00
AliasSetTracker.cpp [PM/AA] Simplify the AliasAnalysis interface by removing a wrapper 2015-08-06 02:05:46 +00:00
Analysis.cpp [ARC] Pull the ObjC ARC components that really serve the role of 2015-08-20 08:06:03 +00:00
AssumptionCache.cpp [PM] Actually add the new pass manager support for the assumption cache. 2015-01-22 21:53:09 +00:00
BasicAliasAnalysis.cpp [BasicAA] Revert r221876 because it can produce incorrect aliasing 2015-08-19 00:07:20 +00:00
BlockFrequencyInfo.cpp Add new constructors for LoopInfo/DominatorTree/BFI/BPI 2015-07-16 23:23:35 +00:00
BlockFrequencyInfoImpl.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
BranchProbabilityInfo.cpp Create a wrapper pass for BranchProbabilityInfo. 2015-07-15 22:48:29 +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 [CaptureTracking] Avoid long compilation time on large basic blocks 2015-06-24 17:53:17 +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] Hoist the value handle definition for CFLAA into the header to 2015-08-14 02:50:34 +00:00
CGSCCPassManager.cpp [PM] Remove the defunt CGSCC-specific debug flag. 2015-01-13 22:45:13 +00:00
CMakeLists.txt [ARC] Pull the ObjC ARC components that really serve the role of 2015-08-20 08:06:03 +00:00
CodeMetrics.cpp [IR] Add token types 2015-08-14 05:09:07 +00:00
ConstantFolding.cpp Fix assert when inlining a constantexpr addrspacecast 2015-07-27 18:31:03 +00:00
CostModel.cpp Roll forward r243250 2015-07-26 19:10:03 +00:00
Delinearization.cpp [PM] Port ScalarEvolution to the new pass manager. 2015-08-17 02:08:17 +00:00
DemandedBits.cpp Separate out BDCE's analysis into a separate DemandedBits analysis. 2015-08-14 11:09:09 +00:00
DependenceAnalysis.cpp Fix how DependenceAnalysis calls delinearization 2015-08-19 02:56:36 +00:00
DivergenceAnalysis.cpp Rename inst_range() to instructions() for consistency. NFC 2015-08-06 19:10:45 +00:00
DominanceFrontier.cpp Templatify DominanceFrontier. 2014-07-12 21:59:52 +00:00
DomPrinter.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
GlobalsModRef.cpp [PM/AA] Remove the last relics of the separate IPA library from LLVM, 2015-08-18 17:51:53 +00:00
InlineCost.cpp [WinEH] Require token linkage in EH pad/ret signatures 2015-08-23 00:26:33 +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 [InstSimplify] add nuw %x, C2 must be at least C2 2015-08-20 23:01:41 +00:00
Interval.cpp Revert "[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ranges." 2014-07-21 17:06:51 +00:00
IntervalPartition.cpp [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-15 04:59:12 +00:00
IteratedDominanceFrontier.cpp Move IDF Calculation to a separate file, expose an interface to it. 2015-04-21 19:13:02 +00:00
IVUsers.cpp [PM] Port ScalarEvolution to the new pass manager. 2015-08-17 02:08:17 +00:00
LazyCallGraph.cpp Revert r225854: [PM] Move the LazyCallGraph printing functionality to 2015-01-14 00:27:45 +00:00
LazyValueInfo.cpp [LVI] Use a SmallVector instead of SmallPtrSet. NFC 2015-08-21 21:18:26 +00:00
LibCallSemantics.cpp [PM/AA] Delete the LibCallAliasAnalysis and all the associated 2015-08-15 09:22:21 +00:00
Lint.cpp [PM/AA] Simplify the AliasAnalysis interface by removing a wrapper 2015-08-06 02:05:46 +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 [PM/AA] Extract the ModRef enums from the AliasAnalysis class in 2015-07-22 23:15:57 +00:00
LoopAccessAnalysis.cpp [LAA] Hold bounds via ValueHandles during SCEV expansion 2015-08-21 23:19:57 +00:00
LoopInfo.cpp [IR] Add token types 2015-08-14 05:09:07 +00:00
LoopPass.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +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 Rename inst_range() to instructions() for consistency. NFC 2015-08-06 19:10:45 +00:00
MemDerefPrinter.cpp Take alignment into account in isSafeToSpeculativelyExecute and isSafeToLoadUnconditionally. 2015-08-17 15:54:26 +00:00
MemoryBuiltins.cpp DataLayout is mandatory, update the API to reflect it with references. 2015-03-10 02:37:25 +00:00
MemoryDependenceAnalysis.cpp [PM/AA] Add missing static dependency edges from DSE and memdep to TLI. 2015-08-12 18:10:45 +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
NoAliasAnalysis.cpp [PM/AA] Extract the ModRef enums from the AliasAnalysis class in 2015-07-22 23:15:57 +00:00
ObjCARCAliasAnalysis.cpp [ARC] Pull the ObjC ARC components that really serve the role of 2015-08-20 08:06:03 +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 [ARC] Pull the ObjC ARC components that really serve the role of 2015-08-20 08:06: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 [Modules] Fix potential ODR violations by sinking the DEBUG_TYPE 2014-04-22 02:48:03 +00:00
PtrUseVisitor.cpp Update SetVector to rely on the underlying set's insert to return a pair<iterator, bool> 2014-11-19 07:49:26 +00:00
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] Fix GCC 4.8.0 ICE in lambda function 2015-08-19 17:26:07 +00:00
ScalarEvolutionAliasAnalysis.cpp [PM] Port ScalarEvolution to the new pass manager. 2015-08-17 02:08:17 +00:00
ScalarEvolutionExpander.cpp [ScalarEvolutionExpander] Reuse findExistingExpansion during expansion cost calculation for division 2015-08-17 16:37:04 +00:00
ScalarEvolutionNormalization.cpp Fix typos in comments, NFC 2014-08-29 21:53:01 +00:00
ScopedNoAliasAA.cpp [PM/AA] Hoist ScopedNoAliasAA's interface into a header and move the 2015-08-14 02:55:50 +00:00
SparsePropagation.cpp [Modules] Fix potential ODR violations by sinking the DEBUG_TYPE 2014-04-22 02:48: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 [TTI] Add a hook for specifying per-target defaults for Interleaved Accesses 2015-08-10 14:50:54 +00:00
Trace.cpp
TypeBasedAliasAnalysis.cpp [PM/AA] Hoist the interface to TBAA into a dedicated header along with 2015-08-14 03:33:48 +00:00
ValueTracking.cpp [ValueTracking] computeOverflowForSignedAdd and isKnownNonNegative 2015-08-20 18:27:04 +00:00
VectorUtils.cpp [InstSimplify] Don't assume getAggregateElement will succeed 2015-08-18 22:07:25 +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))

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