mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
102d481261
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 llvm-svn: 256811
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;
|
|
}
|