WebAssembly: update expected failures, more assert got resolved.
[oota-llvm.git] / lib / IR / Statepoint.cpp
1 //===-- IR/Statepoint.cpp -- gc.statepoint utilities ---  -----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // 
11 //===----------------------------------------------------------------------===//
12
13 #include "llvm/IR/Function.h"
14 #include "llvm/IR/Constant.h"
15 #include "llvm/IR/Constants.h"
16 #include "llvm/IR/Statepoint.h"
17 #include "llvm/Support/CommandLine.h"
18
19 using namespace std;
20 using namespace llvm;
21
22 bool llvm::isStatepoint(const ImmutableCallSite &CS) {
23   if (!CS.getInstruction()) {
24     // This is not a call site
25     return false;
26   }
27
28   const Function *F = CS.getCalledFunction();
29   return (F && F->getIntrinsicID() == Intrinsic::experimental_gc_statepoint);
30 }
31 bool llvm::isStatepoint(const Value *inst) {
32   if (isa<InvokeInst>(inst) || isa<CallInst>(inst)) {
33     ImmutableCallSite CS(inst);
34     return isStatepoint(CS);
35   }
36   return false;
37 }
38 bool llvm::isStatepoint(const Value &inst) {
39   return isStatepoint(&inst);
40 }
41
42 bool llvm::isGCRelocate(const ImmutableCallSite &CS) {
43   return CS.getInstruction() && isa<GCRelocateInst>(CS.getInstruction());
44 }
45
46 bool llvm::isGCResult(const ImmutableCallSite &CS) {
47   if (!CS.getInstruction()) {
48     // This is not a call site
49     return false;
50   }
51
52   return isGCResult(CS.getInstruction());
53 }
54 bool llvm::isGCResult(const Value *inst) {
55   if (const CallInst *call = dyn_cast<CallInst>(inst)) {
56     if (Function *F = call->getCalledFunction()) {
57       return F->getIntrinsicID() == Intrinsic::experimental_gc_result;
58     }
59   }
60   return false;
61 }