A gccjit::param represents a parameter to a function.
In preparation for creating a function, create a new parameter of the given type and name.
gccjit::param is a subclass of gccjit::lvalue (and thus of gccjit::rvalue and gccjit::object). It is a thin wrapper around the C API’s gcc_jit_param *.
A gccjit::function represents a function - either one that we’re creating ourselves, or one that we’re referencing.
Create a gcc_jit_function with the given name and parameters.
Parameters “is_variadic” and “loc” are optional.
This is a wrapper around the C API’s gcc_jit_context_new_function().
This is a wrapper around the C API’s gcc_jit_context_get_builtin_function().
Get the param of the given index (0-based).
Emit the function in graphviz format to the given path.
Create a new local variable within the function, of the given type and name.
A gccjit::block represents a basic block within a function i.e. a sequence of statements with a single entry point and a single exit point.
gccjit::block is a subclass of gccjit::object.
The first basic block that you create within a function will be the entrypoint.
Each basic block that you create within a function must be terminated, either with a conditional, a jump, or a return.
It’s legal to have multiple basic blocks that return within one function.
Create a basic block of the given name. The name may be NULL, but providing meaningful names is often helpful when debugging: it may show up in dumps of the internal representation, and in error messages.
Add evaluation of an rvalue, discarding the result (e.g. a function call that “returns” void).
This is equivalent to this C code:
(void)expression;
Add evaluation of an rvalue, assigning the result to the given lvalue.
This is roughly equivalent to this C code:
lvalue = rvalue;
Add evaluation of an rvalue, using the result to modify an lvalue.
This is analogous to “+=” and friends:
lvalue += rvalue;
lvalue *= rvalue;
lvalue /= rvalue;
etc. For example:
/* "i++" */
loop_body.add_assignment_op (
i,
GCC_JIT_BINARY_OP_PLUS,
ctxt.one (int_type));
Add a no-op textual comment to the internal representation of the code. It will be optimized away, but will be visible in the dumps seen via GCC_JIT_BOOL_OPTION_DUMP_INITIAL_TREE and GCC_JIT_BOOL_OPTION_DUMP_INITIAL_GIMPLE, and thus may be of use when debugging how your project’s internal representation gets converted to the libgccjit IR.
Parameter “loc” is optional.
Terminate a block by adding evaluation of an rvalue, branching on the result to the appropriate successor block.
This is roughly equivalent to this C code:
if (boolval)
goto on_true;
else
goto on_false;
block, boolval, on_true, and on_false must be non-NULL.
Terminate a block by adding a jump to the given target block.
This is roughly equivalent to this C code:
goto target;
Terminate a block.
Both params are optional.
An rvalue must be provided for a function returning non-void, and must not be provided by a function “returning” void.
If an rvalue is provided, the block is terminated by evaluating the rvalue and returning the value.
This is roughly equivalent to this C code:
return expression;
If an rvalue is not provided, the block is terminated by adding a valueless return, for use within a function with “void” return type.
This is equivalent to this C code:
return;