llvm-project/llvm/test/Transforms/CodeExtractor
Vedant Kumar a1778df474 [CodeExtractor] Do not extract unsafe lifetime markers
Lifetime markers which reference inputs to the extraction region are not
safe to extract. Example ('rhs' will be extracted):

```
               entry:
              +------------+
              | x = alloca |
              | y = alloca |
              +------------+
             /              \
   lhs:                      rhs:
  +-------------------+     +-------------------+
  | lifetime_start(x) |     | lifetime_start(x) |
  | use(x)            |     | lifetime_start(y) |
  | lifetime_end(x)   |     | use(x, y)         |
  | lifetime_start(y) |     | lifetime_end(y)   |
  | use(y)            |     | lifetime_end(x)   |
  | lifetime_end(y)   |     +-------------------+
  +-------------------+
```

Prior to extraction, the stack coloring pass sees that the slots for 'x'
and 'y' are in-use at the same time. After extraction, the coloring pass
infers that 'x' and 'y' are *not* in-use concurrently, because markers
from 'rhs' are no longer available to help decide otherwise.

This leads to a miscompile, because the stack slots actually are in-use
concurrently in the extracted function.

Fix this by moving lifetime start/end markers for memory regions defined
in the calling function around the call to the extracted function.

Fixes llvm.org/PR39671 (rdar://45939472).

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

llvm-svn: 350420
2019-01-04 17:43:22 +00:00
..
X86 [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
2004-03-13-LoopExtractorCrash.ll
2004-03-14-DominanceProblem.ll
2004-03-14-NoSwitchSupport.ll
2004-03-17-MissedLiveIns.ll
2004-03-17-UpdatePHIsOutsideRegion.ll
2004-03-18-InvokeHandling.ll
2004-08-12-BlockExtractPHI.ll
2004-11-12-InvokeExtract.ll
BlockAddressReference.ll
BlockAddressSelfReference.ll
ExtractedFnEntryCount.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
MultipleExitBranchProb.ll
PartialInlineAlloca.ll
PartialInlineAlloca2.ll
PartialInlineAlloca4.ll [CodeExtractor] Do not extract unsafe lifetime markers 2019-01-04 17:43:22 +00:00
PartialInlineAlloca5.ll [CodeExtractor] Do not extract unsafe lifetime markers 2019-01-04 17:43:22 +00:00
PartialInlineAnd.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlineAndOr.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlineAttributes.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlineCallRef.ll
PartialInlineDebug.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlineEntryPHICost.ll [PartialInliner] Make PHIs free in cost computation. 2018-11-27 18:17:27 +00:00
PartialInlineEntryUpdate.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlineHighCost.ll
PartialInlineInvokeProducesOutVal.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlineLiveAcross.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlineNoInline.ll
PartialInlineNoLiveOut.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlineNotViable.ll
PartialInlineORECrash.ll
PartialInlineOptRemark.ll
PartialInlineOr.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlineOrAnd.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlinePGOMultiRegion.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlinePGORegion.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlineVarArg.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
PartialInlineVarArgsDebug.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
SingleCondition.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
cost.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
cost_meta.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
inline_eh.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
inline_eh_1.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
live_shrink.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
live_shrink_gep.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
live_shrink_hoist.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
live_shrink_multiple.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00
live_shrink_unsafe.ll
unreachable-block.ll [hot-cold-split] Name split functions with ".cold" suffix 2018-10-24 18:53:47 +00:00