mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-07-08 18:30:04 +00:00
[C++11] Make this interface accept const Use pointers and use override
to ensure we don't mess up any of the overrides. Necessary for cleaning up the Value use iterators and enabling range-based traversing of use lists. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202958 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1a6eca243f
commit
2e816f0d56
@ -45,12 +45,12 @@ namespace llvm {
|
|||||||
/// capture) return false. To search it, return true.
|
/// capture) return false. To search it, return true.
|
||||||
///
|
///
|
||||||
/// U->getUser() is always an Instruction.
|
/// U->getUser() is always an Instruction.
|
||||||
virtual bool shouldExplore(Use *U);
|
virtual bool shouldExplore(const Use *U);
|
||||||
|
|
||||||
/// captured - Information about the pointer was captured by the user of
|
/// captured - Information about the pointer was captured by the user of
|
||||||
/// use U. Return true to stop the traversal or false to continue looking
|
/// use U. Return true to stop the traversal or false to continue looking
|
||||||
/// for more capturing instructions.
|
/// for more capturing instructions.
|
||||||
virtual bool captured(Use *U) = 0;
|
virtual bool captured(const Use *U) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// PointerMayBeCaptured - Visit the value and the values derived from it and
|
/// PointerMayBeCaptured - Visit the value and the values derived from it and
|
||||||
|
@ -372,7 +372,7 @@ namespace {
|
|||||||
|
|
||||||
void tooManyUses() override { Captured = true; }
|
void tooManyUses() override { Captured = true; }
|
||||||
|
|
||||||
bool shouldExplore(Use *U) override {
|
bool shouldExplore(const Use *U) override {
|
||||||
Instruction *I = cast<Instruction>(U->getUser());
|
Instruction *I = cast<Instruction>(U->getUser());
|
||||||
BasicBlock *BB = I->getParent();
|
BasicBlock *BB = I->getParent();
|
||||||
// We explore this usage only if the usage can reach "BeforeHere".
|
// We explore this usage only if the usage can reach "BeforeHere".
|
||||||
@ -388,7 +388,7 @@ namespace {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool captured(Use *U) override {
|
bool captured(const Use *U) override {
|
||||||
Instruction *I = cast<Instruction>(U->getUser());
|
Instruction *I = cast<Instruction>(U->getUser());
|
||||||
BasicBlock *BB = I->getParent();
|
BasicBlock *BB = I->getParent();
|
||||||
// Same logic as in shouldExplore.
|
// Same logic as in shouldExplore.
|
||||||
|
@ -28,7 +28,7 @@ using namespace llvm;
|
|||||||
|
|
||||||
CaptureTracker::~CaptureTracker() {}
|
CaptureTracker::~CaptureTracker() {}
|
||||||
|
|
||||||
bool CaptureTracker::shouldExplore(Use *U) { return true; }
|
bool CaptureTracker::shouldExplore(const Use *U) { return true; }
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
struct SimpleCaptureTracker : public CaptureTracker {
|
struct SimpleCaptureTracker : public CaptureTracker {
|
||||||
@ -37,7 +37,7 @@ namespace {
|
|||||||
|
|
||||||
void tooManyUses() override { Captured = true; }
|
void tooManyUses() override { Captured = true; }
|
||||||
|
|
||||||
bool captured(Use *U) override {
|
bool captured(const Use *U) override {
|
||||||
if (isa<ReturnInst>(U->getUser()) && !ReturnCaptures)
|
if (isa<ReturnInst>(U->getUser()) && !ReturnCaptures)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -81,8 +81,8 @@ static int const Threshold = 20;
|
|||||||
|
|
||||||
void llvm::PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker) {
|
void llvm::PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker) {
|
||||||
assert(V->getType()->isPointerTy() && "Capture is for pointers only!");
|
assert(V->getType()->isPointerTy() && "Capture is for pointers only!");
|
||||||
SmallVector<Use*, Threshold> Worklist;
|
SmallVector<const Use *, Threshold> Worklist;
|
||||||
SmallSet<Use*, Threshold> Visited;
|
SmallSet<const Use *, Threshold> Visited;
|
||||||
int Count = 0;
|
int Count = 0;
|
||||||
|
|
||||||
for (Value::const_use_iterator UI = V->use_begin(), UE = V->use_end();
|
for (Value::const_use_iterator UI = V->use_begin(), UE = V->use_end();
|
||||||
@ -99,7 +99,7 @@ void llvm::PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (!Worklist.empty()) {
|
while (!Worklist.empty()) {
|
||||||
Use *U = Worklist.pop_back_val();
|
const Use *U = Worklist.pop_back_val();
|
||||||
Instruction *I = cast<Instruction>(U->getUser());
|
Instruction *I = cast<Instruction>(U->getUser());
|
||||||
V = U->get();
|
V = U->get();
|
||||||
|
|
||||||
|
@ -344,7 +344,7 @@ namespace {
|
|||||||
|
|
||||||
void tooManyUses() override { Captured = true; }
|
void tooManyUses() override { Captured = true; }
|
||||||
|
|
||||||
bool captured(Use *U) override {
|
bool captured(const Use *U) override {
|
||||||
CallSite CS(U->getUser());
|
CallSite CS(U->getUser());
|
||||||
if (!CS.getInstruction()) { Captured = true; return true; }
|
if (!CS.getInstruction()) { Captured = true; return true; }
|
||||||
|
|
||||||
|
@ -151,14 +151,14 @@ struct AllocaCaptureTracker : public CaptureTracker {
|
|||||||
|
|
||||||
void tooManyUses() override { Captured = true; }
|
void tooManyUses() override { Captured = true; }
|
||||||
|
|
||||||
bool shouldExplore(Use *U) override {
|
bool shouldExplore(const Use *U) override {
|
||||||
Value *V = U->getUser();
|
Value *V = U->getUser();
|
||||||
if (isa<CallInst>(V) || isa<InvokeInst>(V))
|
if (isa<CallInst>(V) || isa<InvokeInst>(V))
|
||||||
UsesAlloca.insert(V);
|
UsesAlloca.insert(V);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool captured(Use *U) override {
|
bool captured(const Use *U) override {
|
||||||
if (isa<ReturnInst>(U->getUser()))
|
if (isa<ReturnInst>(U->getUser()))
|
||||||
return false;
|
return false;
|
||||||
Captured = true;
|
Captured = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user