1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-24 05:23:45 +02:00
llvm-mirror/test/Transforms
Adrian Prantl 333e7f1840 Salvage debug info from instructions about to be deleted
This patch improves debug info quality in InstCombine by looking at
values that are about to be deleted, checking whether there are any
dbg.value instrinsics referring to them, and potentially encoding the
semantics of the deleted instruction into the dbg.value's
DIExpression.

In the example in the testcase (which was extracted from XNU) there is a sequence of

  %4 = load %struct.entry*, %struct.entry** %next2, align 8, !dbg !41
  %5 = bitcast %struct.entry* %4 to i8*, !dbg !42
  %add.ptr4 = getelementptr inbounds i8, i8* %5, i64 -8, !dbg !43
  %6 = bitcast i8* %add.ptr4 to %struct.entry*, !dbg !44
  call void @llvm.dbg.value(metadata %struct.entry* %6, i64 0, metadata !20, metadata !21), !dbg 34

When these instructions are eliminated by instcombine one after
another, we can still salvage the otherwise dead debug info:

- Bitcasts have no effect, so have the dbg.value point to operand(0)
- Loads can be expressed via a DW_OP_deref
- Constant gep instructions can be replaced by DWARF expression arithmetic

The API introduced by this patch is not specific to instcombine and
can be useful in other places, too.

rdar://problem/30725338

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

llvm-svn: 297971
2017-03-16 18:22:52 +00:00
..
ADCE
AddDiscriminators Encode duplication factor from loop vectorization and loop unrolling to discriminator. 2017-02-10 21:09:07 +00:00
AlignmentFromAssumptions
ArgumentPromotion Verifier: Disallow a line number without a file in DISubprogram 2017-02-17 23:57:42 +00:00
AtomicExpand
BBVectorize Introduce -unroll-partial-threshold to separate PartialThreshold from Threshold in loop unorller. 2017-01-17 23:39:33 +00:00
BDCE
BranchFolding
CodeExtractor
CodeGenPrepare [SimplifyCFG] move tests for PR31028 from CGP 2017-03-13 19:59:14 +00:00
ConstantHoisting [Constant Hoisting] Avoid inserting instructions before EH pads 2017-03-01 22:41:12 +00:00
ConstantMerge Don't merge global constants with non-dbg metadata. 2017-03-09 00:03:37 +00:00
ConstProp opt: Rename -default-data-layout flag to -data-layout and make it always override the layout. 2017-02-17 17:36:52 +00:00
Coroutines [coroutines] Add handling for unwind coro.ends 2017-03-07 21:00:54 +00:00
CorrelatedValuePropagation Revert r282872 "CVP. Turn marking adds as no wrap on by default" 2017-02-23 22:29:00 +00:00
CountingFunctionInserter
CrossDSOCFI
DCE
DeadArgElim
DeadStoreElimination [DeadStoreElimination] Check function modref behavior before considering memory clobbered 2017-03-01 14:38:29 +00:00
EarlyCSE [EarlyCSE] Don't DSE across readnone functions that may throw 2017-01-17 20:15:47 +00:00
EliminateAvailableExternally
Float2Int
ForcedFunctionAttrs
FunctionAttrs [FunctionAttrs] try to extend nonnull-ness of arguments from a callsite back to its parent function 2017-02-13 23:10:51 +00:00
FunctionImport [ModuleSummaryAnalysis] Don't crash when referencing unnamed globals. 2017-02-22 18:53:38 +00:00
GCOVProfiling
GlobalDCE [PH] Replace uses of AssertingVH from members of analysis results with 2017-01-24 12:55:57 +00:00
GlobalMerge
GlobalOpt Verifier: Disallow a line number without a file in DISubprogram 2017-02-17 23:57:42 +00:00
GlobalSplit Fix one-after-the-end type metadata handling in globalsplit. 2017-03-07 22:18:48 +00:00
GuardWidening
GVN opt: Rename -default-data-layout flag to -data-layout and make it always override the layout. 2017-02-17 17:36:52 +00:00
GVNHoist Handle UnreachableInst in isGuaranteedToTransferExecutionToSuccessor 2017-03-08 01:54:50 +00:00
IndVarSimplify [ValueTracking] Don't do an unchecked shift in ComputeNumSignBits 2017-02-25 20:30:45 +00:00
InferAddressSpaces Bug 31948: Fix assertion when bitcasting constantexpr pointers 2017-02-17 00:32:19 +00:00
InferFunctionAttrs
Inline [PM/Inliner] Fix a bug in r297374 where we would leave stale calls in 2017-03-16 10:45:42 +00:00
InstCombine Salvage debug info from instructions about to be deleted 2017-03-16 18:22:52 +00:00
InstMerge Remove the load hoisting code of MLSM, it is completely subsumed by GVNHoist 2017-01-24 19:55:36 +00:00
InstSimplify [InstSimplify] allow folds for bool vector div/rem 2017-03-09 21:56:03 +00:00
InterleavedAccess [ARM/AArch64] Support wide interleaved accesses 2017-03-02 15:11:20 +00:00
Internalize
IPConstantProp [IPCP] Don't propagate return value for naked functions. 2017-02-04 19:44:14 +00:00
IRCE [IRCE] Add a missing invariant check 2017-02-07 23:59:07 +00:00
JumpThreading [JumpThread] Use AA in SimplifyPartiallyRedundantLoad() 2017-03-08 15:22:30 +00:00
LCSSA
LICM Use a WeakVH for UnknownInstructions in AliasSetTracker 2017-03-11 01:15:48 +00:00
LoadCombine [LoadCombine] Change test to not use instcombine. 2017-02-10 00:44:08 +00:00
LoadStoreVectorizer LoadStoreVectorizer: Split even sized illegal chains properly 2017-02-23 03:58:53 +00:00
LoopDataPrefetch
LoopDeletion [PM] Teach LoopDeletion to correctly update the LPM when loops are 2017-01-18 02:41:26 +00:00
LoopDistribute
LoopIdiom Fix some broken CHECK lines. 2017-01-22 20:28:56 +00:00
LoopInterchange
LoopLoadElim [PM] Port LoopLoadElimination to the new pass manager and wire it into 2017-01-27 01:32:26 +00:00
LoopPredication Loop predication expand both sides of the widened condition 2017-02-27 15:44:49 +00:00
LoopReroll
LoopRotate [LoopRotate] Propagate dbg.value intrinsics 2017-03-08 09:56:22 +00:00
LoopSimplify [BasicBlockUtils] Use getFirstNonPHIOrDbg to set debugloc for instructions created in SplitBlockPredecessors 2017-02-14 21:10:40 +00:00
LoopSimplifyCFG
LoopStrengthReduce Set option enabling LSR alternative way to resolve complex solution to false. 2017-03-04 03:14:05 +00:00
LoopUnroll [LoopUnrolling] Fix loop size check for peeling 2017-03-07 06:03:15 +00:00
LoopUnswitch Fix a bug when unswitching on partial LIV for SwitchInst 2017-02-27 18:00:13 +00:00
LoopVectorize [TargetTransformInfo] getIntrinsicInstrCost() scalarization estimation improved 2017-03-14 06:35:36 +00:00
LoopVersioning
LoopVersioningLICM
LowerAtomic
LowerExpectIntrinsic
LowerGuardIntrinsic
LowerInvoke
LowerSwitch
LowerTypeTests IR: Type ID summary extensions for WPD; thread summary into WPD pass. 2017-02-13 19:26:18 +00:00
Mem2Reg
MemCpyOpt MemCpyOptimizer: don't create new addrspace casts 2017-03-14 22:37:38 +00:00
MergeFunc MergeFunctions: Preserve debug info in thunks, under option -mergefunc-preserve-debug-info 2017-01-21 02:02:56 +00:00
MetaRenamer
NameAnonGlobals
NaryReassociate
NewGVN Add missing condprop-xfail.ll that contains the remaining xfail'd tests 2017-03-14 01:46:51 +00:00
ObjCARC
PartiallyInlineLibCalls
PGOProfile Revert "[PGO] Value profile for size of memory intrinsic calls" 2017-03-16 13:16:35 +00:00
PhaseOrdering
PlaceSafepoints
PreISelIntrinsicLowering
PruneEH
Reassociate [Reassociate] Add negated value of negative constant to the Duplicates list. 2017-02-23 18:49:03 +00:00
Reg2Mem
RewriteStatepointsForGC
SafeStack [Fuchsia] Use thread-pointer ABI slots for stack-protector and safe-stack 2017-02-24 03:10:10 +00:00
SampleProfile Remove the sample pgo annotation heuristic that uses call count to annotate basic block count. 2017-03-06 17:49:59 +00:00
Scalarizer
SCCP opt: Rename -default-data-layout flag to -data-layout and make it always override the layout. 2017-02-17 17:36:52 +00:00
SeparateConstOffsetFromGEP
SimplifyCFG [SimplifyCFG] move tests for PR31028 from CGP 2017-03-13 19:59:14 +00:00
Sink
SLPVectorizer [X86] Add missing BITREVERSE costs for SSE2 vectors and i8/i16/i32/i64 scalars 2017-03-15 19:34:55 +00:00
SpeculativeExecution
SROA
StraightLineStrengthReduce
StripDeadPrototypes
StripSymbols
StructurizeCFG Revert "Fix PR 24415 (at least), by making our post-dominator tree behavior sane." 2017-03-02 21:08:37 +00:00
TailCallElim
ThinLTOBitcodeWriter ThinLTOBitcodeWriter: Do not follow operand edges of type GlobalValue when looking for virtual functions. 2017-03-02 23:10:17 +00:00
Util PredicateInfo: Support switch statements 2017-02-22 22:20:58 +00:00
WholeProgramDevirt WholeProgramDevirt: Implement export/import support for VCP. 2017-03-10 20:13:58 +00:00