summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorIgor Laevsky <igmyrj@gmail.com>2015-02-19 11:02:11 +0000
committerIgor Laevsky <igmyrj@gmail.com>2015-02-19 11:02:11 +0000
commit77f118f878d7b19b8732441bee6bfa6428796884 (patch)
tree35d564daa90a61ff6b5a1f72568f102f6440dd3f /llvm/lib
parent69e8b45b1398764831a1a2987d29362761fa1105 (diff)
downloadbcm5719-llvm-77f118f878d7b19b8732441bee6bfa6428796884.tar.gz
bcm5719-llvm-77f118f878d7b19b8732441bee6bfa6428796884.zip
Add invoke related functionality into StatepointSite classes.
Differential Revision: http://reviews.llvm.org/D7364 llvm-svn: 229838
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/IR/Statepoint.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/llvm/lib/IR/Statepoint.cpp b/llvm/lib/IR/Statepoint.cpp
index 450651a0807..83ee611cc37 100644
--- a/llvm/lib/IR/Statepoint.cpp
+++ b/llvm/lib/IR/Statepoint.cpp
@@ -20,24 +20,34 @@ using namespace std;
using namespace llvm;
bool llvm::isStatepoint(const ImmutableCallSite &CS) {
+ if (!CS.getInstruction()) {
+ // This is not a call site
+ return false;
+ }
+
const Function *F = CS.getCalledFunction();
return (F && F->getIntrinsicID() == Intrinsic::experimental_gc_statepoint);
}
-bool llvm::isStatepoint(const Instruction *inst) {
+bool llvm::isStatepoint(const Value *inst) {
if (isa<InvokeInst>(inst) || isa<CallInst>(inst)) {
ImmutableCallSite CS(inst);
return isStatepoint(CS);
}
return false;
}
-bool llvm::isStatepoint(const Instruction &inst) {
+bool llvm::isStatepoint(const Value &inst) {
return isStatepoint(&inst);
}
bool llvm::isGCRelocate(const ImmutableCallSite &CS) {
+ if (!CS.getInstruction()) {
+ // This is not a call site
+ return false;
+ }
+
return isGCRelocate(CS.getInstruction());
}
-bool llvm::isGCRelocate(const Instruction *inst) {
+bool llvm::isGCRelocate(const Value *inst) {
if (const CallInst *call = dyn_cast<CallInst>(inst)) {
if (const Function *F = call->getCalledFunction()) {
return F->getIntrinsicID() == Intrinsic::experimental_gc_relocate;
@@ -47,9 +57,14 @@ bool llvm::isGCRelocate(const Instruction *inst) {
}
bool llvm::isGCResult(const ImmutableCallSite &CS) {
+ if (!CS.getInstruction()) {
+ // This is not a call site
+ return false;
+ }
+
return isGCResult(CS.getInstruction());
}
-bool llvm::isGCResult(const Instruction *inst) {
+bool llvm::isGCResult(const Value *inst) {
if (const CallInst *call = dyn_cast<CallInst>(inst)) {
if (Function *F = call->getCalledFunction()) {
return (F->getIntrinsicID() == Intrinsic::experimental_gc_result_int ||
OpenPOWER on IntegriCloud