mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00: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. = /. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180590 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e1f079064a
commit
d15d29e7c8
@ -30,7 +30,6 @@
|
|||||||
#include "ObjCARCAliasAnalysis.h"
|
#include "ObjCARCAliasAnalysis.h"
|
||||||
#include "ProvenanceAnalysis.h"
|
#include "ProvenanceAnalysis.h"
|
||||||
#include "llvm/ADT/DenseMap.h"
|
#include "llvm/ADT/DenseMap.h"
|
||||||
#include "llvm/ADT/DenseSet.h"
|
|
||||||
#include "llvm/ADT/STLExtras.h"
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/ADT/SmallPtrSet.h"
|
#include "llvm/ADT/SmallPtrSet.h"
|
||||||
#include "llvm/ADT/Statistic.h"
|
#include "llvm/ADT/Statistic.h"
|
||||||
@ -986,13 +985,6 @@ namespace {
|
|||||||
/// A flag indicating whether this optimization pass should run.
|
/// A flag indicating whether this optimization pass should run.
|
||||||
bool 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
|
/// Declarations for ObjC runtime functions, for use in creating calls to
|
||||||
/// them. These are initialized lazily to avoid cluttering up the Module
|
/// them. These are initialized lazily to avoid cluttering up the Module
|
||||||
/// with unused declarations.
|
/// with unused declarations.
|
||||||
@ -1042,27 +1034,6 @@ namespace {
|
|||||||
|
|
||||||
bool IsRetainBlockOptimizable(const Instruction *Inst);
|
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);
|
void OptimizeRetainCall(Function &F, Instruction *Retain);
|
||||||
bool OptimizeRetainRVCall(Function &F, Instruction *RetainRV);
|
bool OptimizeRetainRVCall(Function &F, Instruction *RetainRV);
|
||||||
void OptimizeAutoreleaseRVCall(Function &F, Instruction *AutoreleaseRV,
|
void OptimizeAutoreleaseRVCall(Function &F, Instruction *AutoreleaseRV,
|
||||||
@ -1388,12 +1359,6 @@ ObjCARCOpt::OptimizeAutoreleaseRVCall(Function &F, Instruction *AutoreleaseRV,
|
|||||||
AutoreleaseRVCI->setTailCall(false); // Never tail call objc_autorelease.
|
AutoreleaseRVCI->setTailCall(false); // Never tail call objc_autorelease.
|
||||||
Class = IC_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");
|
DEBUG(dbgs() << "New: " << *AutoreleaseRV << "\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -3129,14 +3094,11 @@ bool ObjCARCOpt::runOnFunction(Function &F) {
|
|||||||
|
|
||||||
DEBUG(dbgs() << "\n");
|
DEBUG(dbgs() << "\n");
|
||||||
|
|
||||||
ImpreciseAutoreleaseSet.clear();
|
|
||||||
|
|
||||||
return Changed;
|
return Changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjCARCOpt::releaseMemory() {
|
void ObjCARCOpt::releaseMemory() {
|
||||||
PA.clear();
|
PA.clear();
|
||||||
ImpreciseAutoreleaseSet.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
Loading…
Reference in New Issue
Block a user