libFirm
Method

A method type represents a method, function or procedure type. More...

Macros

#define cc_cdecl_set   (0)
 cdecl calling convention
#define cc_stdcall_set   cc_callee_clear_stk
 stdcall calling convention
#define cc_fastcall_set   (cc_reg_param|cc_callee_clear_stk)
 fastcall calling convention
#define IS_CDECL(cc_mask)   (((cc_mask) & cc_bits) == cc_cdecl_set)
 check for the CDECL calling convention
#define IS_STDCALL(cc_mask)   (((cc_mask) & cc_bits) == cc_stdcall_set)
 check for the STDCALL calling convention
#define IS_FASTCALL(cc_mask)   (((cc_mask) & cc_bits) == cc_fastcall_set)
 check for the FASTCALL calling convention
#define SET_CDECL(cc_mask)   (((cc_mask) & ~cc_bits) | cc_cdecl_set)
 Sets the CDECL convention bits.
#define SET_STDCALL(cc_mask)   (((cc_mask) & ~cc_bits) | cc_stdcall_set)
 Sets the STDCALL convention bits.
#define SET_FASTCALL(cc_mask)   (((cc_mask) & ~cc_bits) | cc_fastcall_set)
 Sets the FASTCALL convention bits.

Enumerations

enum  mtp_additional_properties {
  mtp_no_property = 0, mtp_property_const = 1u << 0, mtp_property_pure = 1u << 1, mtp_property_noreturn = 1u << 2,
  mtp_property_nothrow = 1u << 3, mtp_property_naked = 1u << 4, mtp_property_malloc = 1u << 5, mtp_property_returns_twice = 1u << 6,
  mtp_property_intrinsic = 1u << 7, mtp_property_runtime = 1u << 8, mtp_property_private = 1u << 9, mtp_property_has_loop = 1u << 10,
  mtp_property_always_inline = 1u << 11, mtp_property_noinline = 1u << 12, mtp_property_inline_recommended = 1u << 13, mtp_temporary = 1u << 14
}
 Additional method type properties: Tell about special properties of a method type. More...
enum  ir_variadicity { variadicity_non_variadic, variadicity_variadic }
 This enum flags the variadicity of methods (methods with a variable amount of arguments (e.g. More...
enum  calling_convention {
  cc_reg_param = 0x01000000, cc_last_on_top = 0x02000000, cc_callee_clear_stk = 0x04000000, cc_this_call = 0x08000000,
  cc_compound_ret = 0x10000000, cc_frame_on_caller_stk = 0x20000000, cc_fpreg_param = 0x40000000, cc_bits = (0xFF << 24)
}
 Calling conventions: lower 24 bits are the number of register parameters, upper 8 encode the calling conventions. More...

Functions

ir_typenew_type_method (size_t n_param, size_t n_res)
 Create a new method type.
ir_typenew_d_type_method (size_t n_param, size_t n_res, type_dbg_info *db)
 Create a new method type with debug information.
size_t get_method_n_params (const ir_type *method)
 Returns the number of parameters of this method.
ir_typeget_method_param_type (const ir_type *method, size_t pos)
 Returns the type of the parameter at position pos of a method.
void set_method_param_type (ir_type *method, size_t pos, ir_type *tp)
 Sets the type of the parameter at position pos of a method.
size_t get_method_n_ress (const ir_type *method)
 Returns the number of results of a method type.
ir_typeget_method_res_type (const ir_type *method, size_t pos)
 Returns the return type of a method type at position pos.
void set_method_res_type (ir_type *method, size_t pos, ir_type *tp)
 Sets the type of the result at position pos of a method.
const char * get_variadicity_name (ir_variadicity vari)
 Returns the null-terminated name of this variadicity.
ir_variadicity get_method_variadicity (const ir_type *method)
 Returns the variadicity of a method.
void set_method_variadicity (ir_type *method, ir_variadicity vari)
 Sets the variadicity of a method.
mtp_additional_properties get_method_additional_properties (const ir_type *method)
 Returns the mask of the additional graph properties.
void set_method_additional_properties (ir_type *method, mtp_additional_properties property_mask)
 Sets the mask of the additional graph properties.
void add_method_additional_properties (ir_type *method, mtp_additional_properties flag)
 Sets one additional graph property.
unsigned get_method_calling_convention (const ir_type *method)
 Returns the calling convention of an entities graph.
void set_method_calling_convention (ir_type *method, unsigned cc_mask)
 Sets the calling convention of an entities graph.
unsigned get_method_n_regparams (ir_type *method)
 Returns the number of registers parameters, 0 means default.
void set_method_n_regparams (ir_type *method, unsigned n_regs)
 Sets the number of registers parameters, 0 means default.
int is_Method_type (const ir_type *method)
 Returns true if a type is a method type.
const tp_opget_tpop_method (void)
 Returns type opcode for method type.

Variables

const tp_optype_method
 This type opcode marks that the corresponding type is a method type.

Detailed Description

A method type represents a method, function or procedure type.

It contains a list of the parameter and result types, as these are part of the type description. These lists should not be changed by a optimization, as a change creates a new method type. Therefore optimizations should allocated new method types. The set_ routines are only for construction by a frontend.

Macro Definition Documentation

#define cc_cdecl_set   (0)

cdecl calling convention

Definition at line 1701 of file typerep.h.

#define cc_fastcall_set   (cc_reg_param|cc_callee_clear_stk)

fastcall calling convention

Definition at line 1705 of file typerep.h.

#define cc_stdcall_set   cc_callee_clear_stk

stdcall calling convention

Definition at line 1703 of file typerep.h.

#define IS_CDECL (   cc_mask)    (((cc_mask) & cc_bits) == cc_cdecl_set)

check for the CDECL calling convention

Definition at line 1710 of file typerep.h.

#define IS_FASTCALL (   cc_mask)    (((cc_mask) & cc_bits) == cc_fastcall_set)

check for the FASTCALL calling convention

Definition at line 1720 of file typerep.h.

#define IS_STDCALL (   cc_mask)    (((cc_mask) & cc_bits) == cc_stdcall_set)

check for the STDCALL calling convention

Definition at line 1715 of file typerep.h.

#define SET_CDECL (   cc_mask)    (((cc_mask) & ~cc_bits) | cc_cdecl_set)

Sets the CDECL convention bits.

Definition at line 1725 of file typerep.h.

#define SET_FASTCALL (   cc_mask)    (((cc_mask) & ~cc_bits) | cc_fastcall_set)

Sets the FASTCALL convention bits.

Definition at line 1735 of file typerep.h.

#define SET_STDCALL (   cc_mask)    (((cc_mask) & ~cc_bits) | cc_stdcall_set)

Sets the STDCALL convention bits.

Definition at line 1730 of file typerep.h.

Enumeration Type Documentation

Calling conventions: lower 24 bits are the number of register parameters, upper 8 encode the calling conventions.

Enumerator:
cc_reg_param 

Transmit parameters in registers, else the stack is used.

This flag may be set as default on some architectures.

cc_last_on_top 

The last non-register parameter is transmitted on top of the stack.

This is equivalent to the pascal calling convention. If this flag is not set, the first non-register parameter is used (stdcall or cdecl calling convention)

cc_callee_clear_stk 

The callee clears the stack.

This forbids variadic function calls (stdcall).

cc_this_call 

The first parameter is a this pointer and is transmitted in a special way.

cc_compound_ret 

The method returns a compound type.

cc_frame_on_caller_stk 

The method did not allocate an own stack frame, instead the caller must reserve size on its own stack.

cc_fpreg_param 

Transmit floating point parameters in registers, else the stack is used.

cc_bits 

The calling convention bits.

Definition at line 1681 of file typerep.h.

This enum flags the variadicity of methods (methods with a variable amount of arguments (e.g.

C's printf). Default is non_variadic.

Enumerator:
variadicity_non_variadic 

non variadic

variadicity_variadic 

variadic

Definition at line 1652 of file typerep.h.

Additional method type properties: Tell about special properties of a method type.

Some of these may be discovered by analyses.

Enumerator:
mtp_no_property 

no additional properties

mtp_property_const 

This method did not access memory and calculates its return values solely from its parameters.

The only observable effect of a const function must be its return value. So they must not exhibit infinite loops or wait for user input. The return value must not depend on any global variables/state. GCC: attribute((const)).

mtp_property_pure 

This method did NOT write to memory and calculates its return values solely from its parameters and the memory they points to (or global vars).

The only observable effect of a const function must be its return value. So they must not exhibit infinite loops or wait for user input. GCC: attribute((pure)).

mtp_property_noreturn 

This method did not return due to an aborting system call.

GCC: attribute((noreturn)).

mtp_property_nothrow 

This method cannot throw an exception.

GCC: attribute((nothrow)).

mtp_property_naked 

This method is naked.

GCC: attribute((naked)).

mtp_property_malloc 

This method returns newly allocate memory.

GCC: attribute((malloc)).

mtp_property_returns_twice 

This method can return more than one (typically setjmp).

GCC: attribute((returns_twice)).

mtp_property_intrinsic 

This method is intrinsic.

It is expected that a lowering phase will remove all calls to it.

mtp_property_runtime 

This method represents a runtime routine.

mtp_property_private 

All method invocations are known, the backend is free to optimize the call in any possible way.

mtp_property_has_loop 

Set, if this method contains one possibly endless loop.

mtp_property_always_inline 

try to always inline this function, even if it seems nonprofitable

mtp_property_noinline 

the function should not be inlined

mtp_property_inline_recommended 

the programmer recommends to inline the function

mtp_temporary 

stupid hack used by opt_funccall...

Definition at line 249 of file firm_types.h.

Function Documentation

void add_method_additional_properties ( ir_type method,
mtp_additional_properties  flag 
)

Sets one additional graph property.

mtp_additional_properties get_method_additional_properties ( const ir_type method)

Returns the mask of the additional graph properties.

unsigned get_method_calling_convention ( const ir_type method)

Returns the calling convention of an entities graph.

size_t get_method_n_params ( const ir_type method)

Returns the number of parameters of this method.

unsigned get_method_n_regparams ( ir_type method)

Returns the number of registers parameters, 0 means default.

size_t get_method_n_ress ( const ir_type method)

Returns the number of results of a method type.

ir_type* get_method_param_type ( const ir_type method,
size_t  pos 
)

Returns the type of the parameter at position pos of a method.

ir_type* get_method_res_type ( const ir_type method,
size_t  pos 
)

Returns the return type of a method type at position pos.

ir_variadicity get_method_variadicity ( const ir_type method)

Returns the variadicity of a method.

const tp_op* get_tpop_method ( void  )

Returns type opcode for method type.

See Also
type_method
const char* get_variadicity_name ( ir_variadicity  vari)

Returns the null-terminated name of this variadicity.

int is_Method_type ( const ir_type method)

Returns true if a type is a method type.

ir_type* new_d_type_method ( size_t  n_param,
size_t  n_res,
type_dbg_info db 
)

Create a new method type with debug information.

Parameters
n_paramthe number of parameters
n_resthe number of results
dbuser defined debug information

The arrays for the parameter and result types are not initialized by the constructor.

ir_type* new_type_method ( size_t  n_param,
size_t  n_res 
)

Create a new method type.

Parameters
n_paramthe number of parameters
n_resthe number of results

The arrays for the parameter and result types are not initialized by the constructor.

void set_method_additional_properties ( ir_type method,
mtp_additional_properties  property_mask 
)

Sets the mask of the additional graph properties.

void set_method_calling_convention ( ir_type method,
unsigned  cc_mask 
)

Sets the calling convention of an entities graph.

void set_method_n_regparams ( ir_type method,
unsigned  n_regs 
)

Sets the number of registers parameters, 0 means default.

void set_method_param_type ( ir_type method,
size_t  pos,
ir_type tp 
)

Sets the type of the parameter at position pos of a method.

Note: does not change the corresponding parameter entities (if there are any)

void set_method_res_type ( ir_type method,
size_t  pos,
ir_type tp 
)

Sets the type of the result at position pos of a method.

void set_method_variadicity ( ir_type method,
ir_variadicity  vari 
)

Sets the variadicity of a method.

Variable Documentation

const tp_op* type_method

This type opcode marks that the corresponding type is a method type.

Consequently it refers to a list of arguments and results. This struct is dynamically allocated but constant for the lifetime of the library.

Definition at line 1759 of file typerep.h.