mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 19:12:56 +02:00
[CallSite removal] Add CallBase
support to the InstVisitor
in such
a way that it still supports `CallSite` but users can be ported to rely on `CallBase` instead. This will unblock the ports across the analysis and transforms libraries (and out-of-tree users) and once done we can clean this up by removing the `CallSite` layer. Differential Revision: https://reviews.llvm.org/D56182 llvm-svn: 350502
This commit is contained in:
parent
6ee9d1c968
commit
b638387207
@ -268,17 +268,23 @@ public:
|
||||
RetTy visitCmpInst(CmpInst &I) { DELEGATE(Instruction);}
|
||||
RetTy visitUnaryInstruction(UnaryInstruction &I){ DELEGATE(Instruction);}
|
||||
|
||||
// Provide a special visitor for a 'callsite' that visits both calls and
|
||||
// invokes. When unimplemented, properly delegates to either the terminator or
|
||||
// regular instruction visitor.
|
||||
// The next level delegation for `CallBase` is slightly more complex in order
|
||||
// to support visiting cases where the call is also a terminator.
|
||||
RetTy visitCallBase(CallBase &I) {
|
||||
if (isa<InvokeInst>(I))
|
||||
return static_cast<SubClass *>(this)->visitTerminator(I);
|
||||
|
||||
DELEGATE(Instruction);
|
||||
}
|
||||
|
||||
// Provide a legacy visitor for a 'callsite' that visits both calls and
|
||||
// invokes.
|
||||
//
|
||||
// Prefer overriding the type system based `CallBase` instead.
|
||||
RetTy visitCallSite(CallSite CS) {
|
||||
assert(CS);
|
||||
Instruction &I = *CS.getInstruction();
|
||||
if (CS.isCall())
|
||||
DELEGATE(Instruction);
|
||||
|
||||
assert(CS.isInvoke());
|
||||
return static_cast<SubClass *>(this)->visitTerminator(I);
|
||||
DELEGATE(CallBase);
|
||||
}
|
||||
|
||||
// If the user wants a 'default' case, they can choose to override this
|
||||
|
Loading…
Reference in New Issue
Block a user