llir-opt  0.0.1
Low-Level Post-Link Optimiser for OCaml and C
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
CallLowering Class Referenceabstract

#include <emitter/call_lowering.h>

Inheritance diagram for CallLowering:
Inheritance graph
[legend]

Classes

struct  ArgLoc
 Location of an argument. More...
 
struct  ArgPart
 Location storing the part of an argument. More...
 
struct  RetLoc
 Location of a return value. More...
 
struct  RetPart
 Storage for a return value. More...
 

Public Types

using arg_iterator = std::vector< ArgLoc >::iterator
 
using const_arg_iterator = std::vector< ArgLoc >::const_iterator
 
using ret_iterator = std::vector< RetLoc >::iterator
 
using const_ret_iterator = std::vector< RetLoc >::const_iterator
 

Public Member Functions

 CallLowering (const Func *func)
 
 CallLowering (const CallSite *call)
 
 CallLowering (const RaiseInst *inst)
 
 CallLowering (const LandingPadInst *inst)
 
 CallLowering (const ReturnInst *inst)
 
unsigned GetNumArgs () const
 Returns the number of arguments.
 
virtual unsigned GetFrameSize () const =0
 Returns the size of the call frame.
 
arg_iterator arg_begin ()
 
arg_iterator arg_end ()
 
const_arg_iterator arg_begin () const
 
const_arg_iterator arg_end () const
 
llvm::iterator_range< arg_iterator > args ()
 Returns a range over all arguments.
 
llvm::iterator_range< const_arg_iterator > args () const
 Return an immutable range over all arguments.
 
const ArgLocArgument (size_t idx) const
 Returns a given argument.
 
ret_iterator ret_begin ()
 
ret_iterator ret_end ()
 
const_ret_iterator ret_begin () const
 
const_ret_iterator ret_end () const
 
llvm::iterator_range< ret_iterator > rets ()
 Returns a range over all returns.
 
llvm::iterator_range< const_ret_iterator > rets () const
 Return an immutable range over all returns.
 
const RetLocReturn (unsigned idx) const
 Returns the type of a return value.
 

Protected Member Functions

virtual void AssignArgC (unsigned i, FlaggedType type)=0
 Location assignment for C.
 
virtual void AssignArgOCaml (unsigned i, FlaggedType type)=0
 Location assignment for Ocaml.
 
virtual void AssignArgOCamlAlloc (unsigned i, FlaggedType type)=0
 Location assignment for OCaml to C allocator calls.
 
virtual void AssignArgOCamlGc (unsigned i, FlaggedType type)=0
 Location assignment for OCaml to GC trampolines.
 
virtual void AssignArgXen (unsigned i, FlaggedType type)=0
 Location assignment for Xen hypercalls.
 
virtual void AssignArgMultiboot (unsigned i, FlaggedType type)
 Location assignment for multiboot.
 
virtual void AssignArgWin64 (unsigned i, FlaggedType type)=0
 Location assignment for Win64.
 
virtual void AssignRetC (unsigned i, FlaggedType type)=0
 Location assignment for C.
 
virtual void AssignRetOCaml (unsigned i, FlaggedType type)=0
 Location assignment for Ocaml.
 
virtual void AssignRetOCamlAlloc (unsigned i, FlaggedType type)=0
 Location assignment for OCaml to C allocator calls.
 
virtual void AssignRetOCamlGc (unsigned i, FlaggedType type)=0
 Location assignment for OCaml to GC trampolines.
 
virtual void AssignRetXen (unsigned i, FlaggedType type)=0
 Location assignment for Xen hypercalls.
 
virtual void AssignRetWin64 (unsigned i, FlaggedType type)=0
 Location assignment for Win64 calls.
 
void AnalyseFunc (const Func *func)
 Analyse a function.
 
void AnalyseCall (const CallSite *call)
 Analyse a call.
 
void AnalyseReturn (const ReturnInst *inst)
 Analyse a return instruction.
 
void AnalyseRaise (const RaiseInst *inst)
 Analyse a raise instruction.
 
void AnalysePad (const LandingPadInst *inst)
 Analyse a landing pad instruction.
 
void AssignArg (unsigned i, FlaggedType type)
 Assigns a location to an argument based on calling conv.
 
void AssignRet (unsigned i, FlaggedType type)
 Assigns a location to a return value based on callig conv.
 

Protected Attributes

CallingConv conv_
 Calling convention.
 
std::vector< ArgLocargs_
 Locations where arguments are assigned.
 
std::vector< RetLocrets_
 Locations where return values are assigned.
 

Detailed Description

Calling convention analysis.


The documentation for this class was generated from the following files: