mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-12 07:22:12 +00:00
397864c712
Summary: This commit renames GCRelocateOperands to GCRelocateInst and makes it an intrinsic wrapper, similar to e.g. MemCpyInst. Also, all users of GCRelocateOperands were changed to use the new intrinsic wrapper instead. Reviewers: sanjoy, reames Subscribers: reames, sanjoy, llvm-commits Differential Revision: http://reviews.llvm.org/D15762 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256811 91177308-0d34-0410-b5e6-96231b3b80d8
62 lines
1.7 KiB
C++
62 lines
1.7 KiB
C++
//===-- IR/Statepoint.cpp -- gc.statepoint utilities --- -----------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/IR/Function.h"
|
|
#include "llvm/IR/Constant.h"
|
|
#include "llvm/IR/Constants.h"
|
|
#include "llvm/IR/Statepoint.h"
|
|
#include "llvm/Support/CommandLine.h"
|
|
|
|
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 Value *inst) {
|
|
if (isa<InvokeInst>(inst) || isa<CallInst>(inst)) {
|
|
ImmutableCallSite CS(inst);
|
|
return isStatepoint(CS);
|
|
}
|
|
return false;
|
|
}
|
|
bool llvm::isStatepoint(const Value &inst) {
|
|
return isStatepoint(&inst);
|
|
}
|
|
|
|
bool llvm::isGCRelocate(const ImmutableCallSite &CS) {
|
|
return CS.getInstruction() && isa<GCRelocateInst>(CS.getInstruction());
|
|
}
|
|
|
|
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 Value *inst) {
|
|
if (const CallInst *call = dyn_cast<CallInst>(inst)) {
|
|
if (Function *F = call->getCalledFunction()) {
|
|
return F->getIntrinsicID() == Intrinsic::experimental_gc_result;
|
|
}
|
|
}
|
|
return false;
|
|
}
|