mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5618 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//===-- llvm/Support/CallSite.h - Abstract Call & Invoke instrs -*- C++ -*-===//
 | 
						|
//
 | 
						|
// This file defines the CallSite class, which is a handy wrapper for code that
 | 
						|
// wants to treat Call and Invoke instructions in a generic way.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef LLVM_SUPPORT_CALLSITE_H
 | 
						|
#define LLVM_SUPPORT_CALLSITE_H
 | 
						|
 | 
						|
#include "llvm/Instruction.h"
 | 
						|
 | 
						|
class CallInst;
 | 
						|
class InvokeInst;
 | 
						|
 | 
						|
class CallSite {
 | 
						|
  Instruction *I;
 | 
						|
public:
 | 
						|
  CallSite(CallInst *CI) : I((Instruction*)CI) {}
 | 
						|
  CallSite(InvokeInst *II) : I((Instruction*)II) {}
 | 
						|
 | 
						|
  /// getCalledValue - Return the pointer to function that is being called...
 | 
						|
  ///
 | 
						|
  Value *getCalledValue() const { return I->getOperand(0); }
 | 
						|
 | 
						|
  /// getCalledFunction - Return the function being called if this is a direct
 | 
						|
  /// call, otherwise return null (if it's an indirect call).
 | 
						|
  ///
 | 
						|
  Function *getCalledFunction() const {
 | 
						|
    return dyn_cast<Function>(getCalledValue());
 | 
						|
  }
 | 
						|
 | 
						|
  /// arg_iterator - The type of iterator to use when looping over actual
 | 
						|
  /// arguments at this call site...
 | 
						|
  typedef User::op_iterator arg_iterator;
 | 
						|
 | 
						|
  /// arg_begin/arg_end - Return iterators corresponding to the actual argument
 | 
						|
  /// list for a call site.
 | 
						|
  ///
 | 
						|
  arg_iterator arg_begin() const {
 | 
						|
    if (I->getOpcode() == Instruction::Call)
 | 
						|
      return I->op_begin()+1; // Skip Function
 | 
						|
    else
 | 
						|
      return I->op_begin()+3; // Skip Function, BB, BB
 | 
						|
  }
 | 
						|
  arg_iterator arg_end() const { return I->op_begin(); }
 | 
						|
};
 | 
						|
 | 
						|
#endif
 |