Do not call replaceAllUsesWith to upgrade calls to ARC runtime functions
authorAkira Hatanaka <ahatanaka@apple.com>
Mon, 12 Aug 2019 23:53:23 +0000 (23:53 +0000)
committerAkira Hatanaka <ahatanaka@apple.com>
Mon, 12 Aug 2019 23:53:23 +0000 (23:53 +0000)
commit6817ce24c17261a8c9ec52d0dfd211ec89483962
tree2b3cc5cc9b0bb683feb261e47d64e69c5edec95b
parent5b32752d107aec1dbe8676a080c4ae9866a2607c
Do not call replaceAllUsesWith to upgrade calls to ARC runtime functions
to intrinsic calls

This fixes a bug in r368311.

It turns out that the ARC runtime functions in the IR can have pointer
parameter types that are not i8* or i8**. Instead of RAUWing normal
functions with intrinsics, manually bitcast the arguments before passing
them to the intrinsic functions and bitcast the return value back to the
type of the original call instruction.

rdar://problem/54125406

llvm-svn: 368634
llvm/lib/IR/AutoUpgrade.cpp
llvm/test/Bitcode/upgrade-arc-runtime-calls.bc
llvm/test/Bitcode/upgrade-arc-runtime-calls.ll
llvm/test/Bitcode/upgrade-mrr-runtime-calls.bc