llvm-project/llvm/test/Transforms/ObjCARC
Pete Cooper 697281df42 Teach ObjCARC optimizer about equivalent PHIs when eliminating autoreleaseRV/retainRV pairs
OptimizeAutoreleaseRVCall skips optimizing llvm.objc.autoreleaseReturnValue if it
sees a user which is llvm.objc.retainAutoreleasedReturnValue, and if they have
equivalent arguments (either identical or equivalent PHIs). It then assumes that
ObjCARCOpt::OptimizeRetainRVCall will optimize the pair instead.

Trouble is, ObjCARCOpt::OptimizeRetainRVCall doesn't know about equivalent PHIs
so optimizes in a different way and we are left with an unoptimized llvm.objc.autoreleaseReturnValue.

This teaches ObjCARCOpt::OptimizeRetainRVCall to also understand PHI equivalence.

rdar://problem/47005143

Reviewed By: ahatanak

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

llvm-svn: 350284
2019-01-03 01:38:08 +00:00
..
allocas.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
apelim.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
basic.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
cfg-hazards.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
clang-arc-use-barrier.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
comdat-ipo.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
contract-catchswitch.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
contract-end-of-use-list.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
contract-marker-funclet.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
contract-marker.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
contract-replace-arg-use.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
contract-storestrong-funclet.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
contract-storestrong-ivar.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
contract-storestrong.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
contract-testcases.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
contract.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
empty-block.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
ensure-that-exception-unwind-path-is-visited.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
escape.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
expand.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
funclet.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
gvn.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
intrinsic-use-isolated.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
intrinsic-use.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
invoke-2.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
invoke.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
move-and-form-retain-autorelease.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
move-and-merge-autorelease.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
nested.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
opt-catchswitch.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
path-overflow.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
pointer-types.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
post-inlining.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
pr12270.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
provenance.ll
retain-block-side-effects.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
retain-not-declared.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
rle-s2l.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
rv.ll Teach ObjCARC optimizer about equivalent PHIs when eliminating autoreleaseRV/retainRV pairs 2019-01-03 01:38:08 +00:00
split-backedge.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
tail-call-invariant-enforcement.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
unsafe-claim-rv.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
weak-contract.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
weak-copies.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
weak-dce.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00
weak.ll Change the objc ARC optimizer to use the new objc.* intrinsics 2018-12-18 20:32:49 +00:00