1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 04:22:57 +02:00

Revert "[objc-arc] Added ImpreciseAutoreleaseSet to track autorelease calls that were once autoreleaseRV instructions."

This reverts commit r180222.

I think this might tie in with a different problem which will require a
different approach potentially. I am reverting this in the case I need to go
down that second path.

My apologies for the noise. = /.

llvm-svn: 180590
This commit is contained in:
Michael Gottesman 2013-04-26 01:12:18 +00:00
parent 4f7b7f0655
commit 9bb33b83ef

View File

@ -30,7 +30,6 @@
#include "ObjCARCAliasAnalysis.h"
#include "ProvenanceAnalysis.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/Statistic.h"
@ -986,13 +985,6 @@ namespace {
/// A flag indicating whether this optimization pass should run.
bool Run;
/// This set contains references to objc_autorelease calls that at one point
/// in time were objc_autoreleaseRV calls. Thus we can disambiguate
/// in between objc_autorelease that were inserted from the frontend (which
/// we must be very conservative with) and those as a result of strength
/// reducing objc_autoreleaseRV calls (which are more flexible).
DenseSet<Instruction *> ImpreciseAutoreleaseSet;
/// Declarations for ObjC runtime functions, for use in creating calls to
/// them. These are initialized lazily to avoid cluttering up the Module
/// with unused declarations.
@ -1042,27 +1034,6 @@ namespace {
bool IsRetainBlockOptimizable(const Instruction *Inst);
/// Erase an instruction.
///
/// This is included separately from the EraseInstruction in ObjCARC.h
/// (which this uses internally) in order to make sure that state is cleaned
/// up. Currently this just means attempting to remove said instruction from
/// ImpreciseAutoreleaseSet if it is an autorelease instruction. This will
/// prevent bugs of the sort where we erase an instruction and forget to
/// remove any associated state.
///
/// TODO: Maybe remove this, the ImpreciseAutoreleaseSet, the
/// MetadataKind/Callee variables into a separate class.
void EraseInstruction(Instruction *Inst) {
// If Inst is an autorelease instruction, erase it from
// ImpreciseAutoreleaseSet if it is contained there in.
if (GetBasicInstructionClass(Inst) == IC_Autorelease) {
ImpreciseAutoreleaseSet.erase(Inst);
}
// Invoke the normal EraseInstruction.
llvm::objcarc::EraseInstruction(Inst);
}
void OptimizeRetainCall(Function &F, Instruction *Retain);
bool OptimizeRetainRVCall(Function &F, Instruction *RetainRV);
void OptimizeAutoreleaseRVCall(Function &F, Instruction *AutoreleaseRV,
@ -1388,12 +1359,6 @@ ObjCARCOpt::OptimizeAutoreleaseRVCall(Function &F, Instruction *AutoreleaseRV,
AutoreleaseRVCI->setTailCall(false); // Never tail call objc_autorelease.
Class = IC_Autorelease;
// Stash the given instruction in the ImpreciseAutoreleaseSet so we can check
// later on that this instruction was an autoreleaseRV instruction that was
// converted to an autorelease instead of an autorelease inserted by the
// frontend (which we can not touch).
ImpreciseAutoreleaseSet.insert(AutoreleaseRVCI);
DEBUG(dbgs() << "New: " << *AutoreleaseRV << "\n");
}
@ -3129,14 +3094,11 @@ bool ObjCARCOpt::runOnFunction(Function &F) {
DEBUG(dbgs() << "\n");
ImpreciseAutoreleaseSet.clear();
return Changed;
}
void ObjCARCOpt::releaseMemory() {
PA.clear();
ImpreciseAutoreleaseSet.clear();
}
/// @}