mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-13 06:29:59 +00:00
ObjCARC: Don't look at users of ConstantData
Stop looking at users of UndefValue and ConstantPointerNull in the objective C ARC optimizers. The other users aren't actually interesting, since they're not pointing at a particular object. I imagine these calls could be optimized through -instcombine... maybe they already are? These early returns will be required at some point in the future, with a WIP patch that asserts when someone accesses a use-list on ConstantData. llvm-svn: 282338
This commit is contained in:
parent
2f789947a5
commit
315172f4ca
@ -53,6 +53,11 @@ using namespace llvm::objcarc;
|
||||
/// \brief This is similar to GetRCIdentityRoot but it stops as soon
|
||||
/// as it finds a value with multiple uses.
|
||||
static const Value *FindSingleUseIdentifiedObject(const Value *Arg) {
|
||||
// ConstantData (like ConstantPointerNull and UndefValue) is used across
|
||||
// modules. It's never a single-use value.
|
||||
if (isa<ConstantData>(Arg))
|
||||
return nullptr;
|
||||
|
||||
if (Arg->hasOneUse()) {
|
||||
if (const BitCastInst *BC = dyn_cast<BitCastInst>(Arg))
|
||||
return FindSingleUseIdentifiedObject(BC->getOperand(0));
|
||||
@ -644,6 +649,12 @@ void ObjCARCOpt::OptimizeAutoreleaseRVCall(Function &F,
|
||||
ARCInstKind &Class) {
|
||||
// Check for a return of the pointer value.
|
||||
const Value *Ptr = GetArgRCIdentityRoot(AutoreleaseRV);
|
||||
|
||||
// If the argument is ConstantPointerNull or UndefValue, its other users
|
||||
// aren't actually interesting to look at.
|
||||
if (isa<ConstantData>(Ptr))
|
||||
return;
|
||||
|
||||
SmallVector<const Value *, 2> Users;
|
||||
Users.push_back(Ptr);
|
||||
do {
|
||||
|
Loading…
Reference in New Issue
Block a user