php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
ir.c File Reference
#include <sys/mman.h>
#include "ir.h"
#include "ir_private.h"
#include <stddef.h>
#include <stdlib.h>
#include <math.h>
#include "ir_fold_hash.h"
#include "ir_fold.h"

Go to the source code of this file.

Macros

#define _GNU_SOURCE
 
#define IR_TYPE_FLAGS(name, type, field, flags)
 
#define IR_TYPE_NAME(name, type, field, flags)
 
#define IR_TYPE_CNAME(name, type, field, flags)
 
#define IR_TYPE_SIZE(name, type, field, flags)
 
#define IR_OP_NAME(name, flags, op1, op2, op3)
 
#define ir_op_flag_v   0
 
#define ir_op_flag_v0X3   (0 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_d   IR_OP_FLAG_DATA
 
#define ir_op_flag_d0   ir_op_flag_d
 
#define ir_op_flag_d1   (ir_op_flag_d | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_d1X1   (ir_op_flag_d | 1 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_d2   (ir_op_flag_d | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_d2C   (ir_op_flag_d | IR_OP_FLAG_COMMUTATIVE | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_d3   (ir_op_flag_d | 3 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_r   IR_OP_FLAG_DATA
 
#define ir_op_flag_r0   ir_op_flag_r
 
#define ir_op_flag_p   (IR_OP_FLAG_DATA | IR_OP_FLAG_PINNED)
 
#define ir_op_flag_p1   (ir_op_flag_p | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_p1X1   (ir_op_flag_p | 1 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_p1X2   (ir_op_flag_p | 1 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_p2   (ir_op_flag_p | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_pN   (ir_op_flag_p | IR_OP_FLAG_VAR_INPUTS)
 
#define ir_op_flag_c   IR_OP_FLAG_CONTROL
 
#define ir_op_flag_c1X2   (ir_op_flag_c | 1 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_c3   (ir_op_flag_c | 3 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_S   (IR_OP_FLAG_CONTROL|IR_OP_FLAG_BB_START)
 
#define ir_op_flag_S0X1   (ir_op_flag_S | 0 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_S1   (ir_op_flag_S | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_S1X1   (ir_op_flag_S | 1 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_S2   (ir_op_flag_S | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_S2X1   (ir_op_flag_S | 2 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_SN   (ir_op_flag_S | IR_OP_FLAG_VAR_INPUTS)
 
#define ir_op_flag_E   (IR_OP_FLAG_CONTROL|IR_OP_FLAG_BB_END)
 
#define ir_op_flag_E1   (ir_op_flag_E | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_E2   (ir_op_flag_E | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_T   (IR_OP_FLAG_CONTROL|IR_OP_FLAG_BB_END|IR_OP_FLAG_TERMINATOR)
 
#define ir_op_flag_T2X1   (ir_op_flag_T | 2 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_T1X2   (ir_op_flag_T | 1 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_l   (IR_OP_FLAG_CONTROL|IR_OP_FLAG_MEM|IR_OP_FLAG_MEM_LOAD)
 
#define ir_op_flag_l0   ir_op_flag_l
 
#define ir_op_flag_l1   (ir_op_flag_l | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_l1X1   (ir_op_flag_l | 1 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_l1X2   (ir_op_flag_l | 1 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_l2   (ir_op_flag_l | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_l3   (ir_op_flag_l | 3 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_s   (IR_OP_FLAG_CONTROL|IR_OP_FLAG_MEM|IR_OP_FLAG_MEM_STORE)
 
#define ir_op_flag_s0   ir_op_flag_s
 
#define ir_op_flag_s1   (ir_op_flag_s | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_s2   (ir_op_flag_s | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_s2X1   (ir_op_flag_s | 2 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_s3   (ir_op_flag_s | 3 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_x1   (IR_OP_FLAG_CONTROL|IR_OP_FLAG_MEM|IR_OP_FLAG_MEM_CALL | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_x2   (IR_OP_FLAG_CONTROL|IR_OP_FLAG_MEM|IR_OP_FLAG_MEM_CALL | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_x3   (IR_OP_FLAG_CONTROL|IR_OP_FLAG_MEM|IR_OP_FLAG_MEM_CALL | 3 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_xN   (IR_OP_FLAG_CONTROL|IR_OP_FLAG_MEM|IR_OP_FLAG_MEM_CALL | IR_OP_FLAG_VAR_INPUTS)
 
#define ir_op_flag_a1   (IR_OP_FLAG_CONTROL|IR_OP_FLAG_MEM|IR_OP_FLAG_MEM_ALLOC | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_flag_a2   (IR_OP_FLAG_CONTROL|IR_OP_FLAG_MEM|IR_OP_FLAG_MEM_ALLOC | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))
 
#define ir_op_kind____   IR_OPND_UNUSED
 
#define ir_op_kind_def   IR_OPND_DATA
 
#define ir_op_kind_ref   IR_OPND_DATA
 
#define ir_op_kind_src   IR_OPND_CONTROL
 
#define ir_op_kind_reg   IR_OPND_CONTROL_DEP
 
#define ir_op_kind_ret   IR_OPND_CONTROL_REF
 
#define ir_op_kind_str   IR_OPND_STR
 
#define ir_op_kind_num   IR_OPND_NUM
 
#define ir_op_kind_fld   IR_OPND_STR
 
#define ir_op_kind_var   IR_OPND_DATA
 
#define ir_op_kind_prb   IR_OPND_PROB
 
#define ir_op_kind_opt   IR_OPND_PROB
 
#define ir_op_kind_pro   IR_OPND_PROTO
 
#define _IR_OP_FLAGS(name, flags, op1, op2, op3)
 
#define IR_FOLD(X)
 
#define IR_FOLD1(X, Y)
 
#define IR_FOLD2(X, Y)
 
#define IR_FOLD_ERROR(msg)
 
#define IR_FOLD_CONST_U(_val)
 
#define IR_FOLD_CONST_I(_val)
 
#define IR_FOLD_CONST_D(_val)
 
#define IR_FOLD_CONST_F(_val)
 
#define IR_FOLD_COPY(op)
 
#define IR_FOLD_BOOL(cond)
 
#define IR_FOLD_NAMED(name)
 
#define IR_FOLD_DO_NAMED(name)
 
#define IR_FOLD_RESTART   goto ir_fold_restart
 
#define IR_FOLD_CSE   goto ir_fold_cse
 
#define IR_FOLD_EMIT   goto ir_fold_emit
 
#define IR_FOLD_NEXT   break
 
#define IR_FOLD_RULE(x)
 
#define IR_FOLD_KEY(x)
 

Typedefs

typedef enum _ir_alias ir_alias
 

Enumerations

enum  _ir_alias { IR_MAY_ALIAS = -1 , IR_NO_ALIAS = 0 , IR_MUST_ALIAS = 1 }
 

Functions

void ir_print_escaped_str (const char *s, size_t len, FILE *f)
 
void ir_print_const (const ir_ctx *ctx, const ir_insn *insn, FILE *f, bool quoted)
 
void ir_truncate (ir_ctx *ctx)
 
void ir_init (ir_ctx *ctx, uint32_t flags, ir_ref consts_limit, ir_ref insns_limit)
 
void ir_free (ir_ctx *ctx)
 
ir_ref ir_unique_const_addr (ir_ctx *ctx, uintptr_t addr)
 
ir_ref ir_const_ex (ir_ctx *ctx, ir_val val, uint8_t type, uint32_t optx)
 
ir_ref ir_const (ir_ctx *ctx, ir_val val, uint8_t type)
 
ir_ref ir_const_i8 (ir_ctx *ctx, int8_t c)
 
ir_ref ir_const_i16 (ir_ctx *ctx, int16_t c)
 
ir_ref ir_const_i32 (ir_ctx *ctx, int32_t c)
 
ir_ref ir_const_i64 (ir_ctx *ctx, int64_t c)
 
ir_ref ir_const_u8 (ir_ctx *ctx, uint8_t c)
 
ir_ref ir_const_u16 (ir_ctx *ctx, uint16_t c)
 
ir_ref ir_const_u32 (ir_ctx *ctx, uint32_t c)
 
ir_ref ir_const_u64 (ir_ctx *ctx, uint64_t c)
 
ir_ref ir_const_bool (ir_ctx *ctx, bool c)
 
ir_ref ir_const_char (ir_ctx *ctx, char c)
 
ir_ref ir_const_float (ir_ctx *ctx, float c)
 
ir_ref ir_const_double (ir_ctx *ctx, double c)
 
ir_ref ir_const_addr (ir_ctx *ctx, uintptr_t c)
 
ir_ref ir_const_func_addr (ir_ctx *ctx, uintptr_t c, ir_ref proto)
 
ir_ref ir_const_func (ir_ctx *ctx, ir_ref str, ir_ref proto)
 
ir_ref ir_const_sym (ir_ctx *ctx, ir_ref str)
 
ir_ref ir_const_str (ir_ctx *ctx, ir_ref str)
 
ir_ref ir_str (ir_ctx *ctx, const char *s)
 
ir_ref ir_strl (ir_ctx *ctx, const char *s, size_t len)
 
const char * ir_get_str (const ir_ctx *ctx, ir_ref idx)
 
const char * ir_get_strl (const ir_ctx *ctx, ir_ref idx, size_t *len)
 
ir_ref ir_proto_0 (ir_ctx *ctx, uint8_t flags, ir_type ret_type)
 
ir_ref ir_proto_1 (ir_ctx *ctx, uint8_t flags, ir_type ret_type, ir_type t1)
 
ir_ref ir_proto_2 (ir_ctx *ctx, uint8_t flags, ir_type ret_type, ir_type t1, ir_type t2)
 
ir_ref ir_proto_3 (ir_ctx *ctx, uint8_t flags, ir_type ret_type, ir_type t1, ir_type t2, ir_type t3)
 
ir_ref ir_proto_4 (ir_ctx *ctx, uint8_t flags, ir_type ret_type, ir_type t1, ir_type t2, ir_type t3, ir_type t4)
 
ir_ref ir_proto_5 (ir_ctx *ctx, uint8_t flags, ir_type ret_type, ir_type t1, ir_type t2, ir_type t3, ir_type t4, ir_type t5)
 
ir_ref ir_proto (ir_ctx *ctx, uint8_t flags, ir_type ret_type, uint32_t params_count, uint8_t *param_types)
 
ir_ref ir_emit (ir_ctx *ctx, uint32_t opt, ir_ref op1, ir_ref op2, ir_ref op3)
 
ir_ref ir_emit0 (ir_ctx *ctx, uint32_t opt)
 
ir_ref ir_emit1 (ir_ctx *ctx, uint32_t opt, ir_ref op1)
 
ir_ref ir_emit2 (ir_ctx *ctx, uint32_t opt, ir_ref op1, ir_ref op2)
 
ir_ref ir_emit3 (ir_ctx *ctx, uint32_t opt, ir_ref op1, ir_ref op2, ir_ref op3)
 
ir_ref ir_folding (ir_ctx *ctx, uint32_t opt, ir_ref op1, ir_ref op2, ir_ref op3, ir_insn *op1_insn, ir_insn *op2_insn, ir_insn *op3_insn)
 
ir_ref ir_fold (ir_ctx *ctx, uint32_t opt, ir_ref op1, ir_ref op2, ir_ref op3)
 
ir_ref ir_fold0 (ir_ctx *ctx, uint32_t opt)
 
ir_ref ir_fold1 (ir_ctx *ctx, uint32_t opt, ir_ref op1)
 
ir_ref ir_fold2 (ir_ctx *ctx, uint32_t opt, ir_ref op1, ir_ref op2)
 
ir_ref ir_fold3 (ir_ctx *ctx, uint32_t opt, ir_ref op1, ir_ref op2, ir_ref op3)
 
ir_ref ir_emit_N (ir_ctx *ctx, uint32_t opt, int32_t count)
 
void ir_set_op (ir_ctx *ctx, ir_ref ref, int32_t n, ir_ref val)
 
ir_ref ir_get_op (ir_ctx *ctx, ir_ref ref, int32_t n)
 
ir_ref ir_param (ir_ctx *ctx, ir_type type, ir_ref region, const char *name, int pos)
 
ir_ref ir_var (ir_ctx *ctx, ir_type type, ir_ref region, const char *name)
 
ir_ref ir_bind (ir_ctx *ctx, ir_ref var, ir_ref def)
 
ir_ref ir_binding_find (const ir_ctx *ctx, ir_ref ref)
 
void ir_build_def_use_lists (ir_ctx *ctx)
 
void ir_use_list_remove_all (ir_ctx *ctx, ir_ref from, ir_ref ref)
 
void ir_use_list_remove_one (ir_ctx *ctx, ir_ref from, ir_ref ref)
 
void ir_use_list_replace_one (ir_ctx *ctx, ir_ref ref, ir_ref use, ir_ref new_use)
 
void ir_use_list_replace_all (ir_ctx *ctx, ir_ref ref, ir_ref use, ir_ref new_use)
 
bool ir_use_list_add (ir_ctx *ctx, ir_ref to, ir_ref ref)
 
void ir_use_list_sort (ir_ctx *ctx, ir_ref ref)
 
void ir_replace (ir_ctx *ctx, ir_ref ref, ir_ref new_ref)
 
void ir_update_op (ir_ctx *ctx, ir_ref ref, uint32_t idx, ir_ref new_val)
 
void ir_array_grow (ir_array *a, uint32_t size)
 
void ir_array_insert (ir_array *a, uint32_t i, ir_ref val)
 
void ir_array_remove (ir_array *a, uint32_t i)
 
void ir_list_insert (ir_list *l, uint32_t i, ir_ref val)
 
void ir_list_remove (ir_list *l, uint32_t i)
 
uint32_t ir_list_find (const ir_list *l, ir_ref val)
 
void ir_hashtab_init (ir_hashtab *tab, uint32_t size)
 
void ir_hashtab_free (ir_hashtab *tab)
 
ir_ref ir_hashtab_find (const ir_hashtab *tab, uint32_t key)
 
bool ir_hashtab_add (ir_hashtab *tab, uint32_t key, ir_ref val)
 
void ir_hashtab_key_sort (ir_hashtab *tab)
 
void ir_addrtab_init (ir_hashtab *tab, uint32_t size)
 
void ir_addrtab_free (ir_hashtab *tab)
 
ir_ref ir_addrtab_find (const ir_hashtab *tab, uint64_t key)
 
void ir_addrtab_set (ir_hashtab *tab, uint64_t key, ir_ref val)
 
voidir_mem_mmap (size_t size)
 
int ir_mem_unmap (void *ptr, size_t size)
 
int ir_mem_protect (void *ptr, size_t size)
 
int ir_mem_unprotect (void *ptr, size_t size)
 
int ir_mem_flush (void *ptr, size_t size)
 
ir_alias ir_check_partial_aliasing (const ir_ctx *ctx, ir_ref addr1, ir_ref addr2, ir_type type1, ir_type type2)
 
IR_ALWAYS_INLINE ir_ref ir_find_aliasing_load_i (ir_ctx *ctx, ir_ref ref, ir_type type, ir_ref addr, ir_ref limit)
 
ir_ref ir_find_aliasing_load (ir_ctx *ctx, ir_ref ref, ir_type type, ir_ref addr)
 
IR_ALWAYS_INLINE ir_ref ir_find_aliasing_vload_i (ir_ctx *ctx, ir_ref ref, ir_type type, ir_ref var)
 
ir_ref ir_find_aliasing_vload (ir_ctx *ctx, ir_ref ref, ir_type type, ir_ref var)
 
IR_ALWAYS_INLINE ir_ref ir_find_aliasing_store_i (ir_ctx *ctx, ir_ref ref, ir_ref addr, ir_ref val, ir_ref limit)
 
ir_ref ir_find_aliasing_store (ir_ctx *ctx, ir_ref ref, ir_ref addr, ir_ref val)
 
IR_ALWAYS_INLINE ir_ref ir_find_aliasing_vstore_i (ir_ctx *ctx, ir_ref ref, ir_ref var, ir_ref val)
 
ir_ref ir_find_aliasing_vstore (ir_ctx *ctx, ir_ref ref, ir_ref var, ir_ref val)
 
ir_ref _ir_PARAM (ir_ctx *ctx, ir_type type, const char *name, ir_ref num)
 
ir_ref _ir_VAR (ir_ctx *ctx, ir_type type, const char *name)
 
ir_ref _ir_PHI_2 (ir_ctx *ctx, ir_type type, ir_ref src1, ir_ref src2)
 
ir_ref _ir_PHI_N (ir_ctx *ctx, ir_type type, ir_ref n, ir_ref *inputs)
 
void _ir_PHI_SET_OP (ir_ctx *ctx, ir_ref phi, ir_ref pos, ir_ref src)
 
void _ir_START (ir_ctx *ctx)
 
void _ir_ENTRY (ir_ctx *ctx, ir_ref src, ir_ref num)
 
void _ir_BEGIN (ir_ctx *ctx, ir_ref src)
 
IR_ALWAYS_INLINE ir_ref ir_check_dominating_predicates_i (ir_ctx *ctx, ir_ref ref, ir_ref condition, ir_ref limit)
 
ir_ref ir_check_dominating_predicates (ir_ctx *ctx, ir_ref ref, ir_ref condition)
 
ir_ref _ir_IF (ir_ctx *ctx, ir_ref condition)
 
void _ir_IF_TRUE (ir_ctx *ctx, ir_ref if_ref)
 
void _ir_IF_TRUE_cold (ir_ctx *ctx, ir_ref if_ref)
 
void _ir_IF_FALSE (ir_ctx *ctx, ir_ref if_ref)
 
void _ir_IF_FALSE_cold (ir_ctx *ctx, ir_ref if_ref)
 
ir_ref _ir_END (ir_ctx *ctx)
 
void _ir_MERGE_2 (ir_ctx *ctx, ir_ref src1, ir_ref src2)
 
void _ir_MERGE_N (ir_ctx *ctx, ir_ref n, ir_ref *inputs)
 
void _ir_MERGE_SET_OP (ir_ctx *ctx, ir_ref merge, ir_ref pos, ir_ref src)
 
ir_ref _ir_END_LIST (ir_ctx *ctx, ir_ref list)
 
ir_ref _ir_END_PHI_LIST (ir_ctx *ctx, ir_ref list, ir_ref val)
 
void _ir_MERGE_LIST (ir_ctx *ctx, ir_ref list)
 
ir_ref _ir_PHI_LIST (ir_ctx *ctx, ir_ref list)
 
ir_ref _ir_LOOP_BEGIN (ir_ctx *ctx, ir_ref src1)
 
ir_ref _ir_LOOP_END (ir_ctx *ctx)
 
ir_ref _ir_CALL (ir_ctx *ctx, ir_type type, ir_ref func)
 
ir_ref _ir_CALL_1 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1)
 
ir_ref _ir_CALL_2 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1, ir_ref arg2)
 
ir_ref _ir_CALL_3 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1, ir_ref arg2, ir_ref arg3)
 
ir_ref _ir_CALL_4 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1, ir_ref arg2, ir_ref arg3, ir_ref arg4)
 
ir_ref _ir_CALL_5 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1, ir_ref arg2, ir_ref arg3, ir_ref arg4, ir_ref arg5)
 
ir_ref _ir_CALL_6 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1, ir_ref arg2, ir_ref arg3, ir_ref arg4, ir_ref arg5, ir_ref arg6)
 
ir_ref _ir_CALL_N (ir_ctx *ctx, ir_type type, ir_ref func, uint32_t count, ir_ref *args)
 
void _ir_UNREACHABLE (ir_ctx *ctx)
 
void _ir_TAILCALL (ir_ctx *ctx, ir_type type, ir_ref func)
 
void _ir_TAILCALL_1 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1)
 
void _ir_TAILCALL_2 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1, ir_ref arg2)
 
void _ir_TAILCALL_3 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1, ir_ref arg2, ir_ref arg3)
 
void _ir_TAILCALL_4 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1, ir_ref arg2, ir_ref arg3, ir_ref arg4)
 
void _ir_TAILCALL_5 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1, ir_ref arg2, ir_ref arg3, ir_ref arg4, ir_ref arg5)
 
void _ir_TAILCALL_6 (ir_ctx *ctx, ir_type type, ir_ref func, ir_ref arg1, ir_ref arg2, ir_ref arg3, ir_ref arg4, ir_ref arg5, ir_ref arg6)
 
void _ir_TAILCALL_N (ir_ctx *ctx, ir_type type, ir_ref func, uint32_t count, ir_ref *args)
 
ir_ref _ir_SWITCH (ir_ctx *ctx, ir_ref val)
 
void _ir_CASE_VAL (ir_ctx *ctx, ir_ref switch_ref, ir_ref val)
 
void _ir_CASE_DEFAULT (ir_ctx *ctx, ir_ref switch_ref)
 
void _ir_RETURN (ir_ctx *ctx, ir_ref val)
 
void _ir_IJMP (ir_ctx *ctx, ir_ref addr)
 
ir_ref _ir_ADD_OFFSET (ir_ctx *ctx, ir_ref addr, uintptr_t offset)
 
void _ir_GUARD (ir_ctx *ctx, ir_ref condition, ir_ref addr)
 
void _ir_GUARD_NOT (ir_ctx *ctx, ir_ref condition, ir_ref addr)
 
ir_ref _ir_SNAPSHOT (ir_ctx *ctx, ir_ref n)
 
void _ir_SNAPSHOT_SET_OP (ir_ctx *ctx, ir_ref snapshot, ir_ref pos, ir_ref val)
 
ir_ref _ir_EXITCALL (ir_ctx *ctx, ir_ref func)
 
ir_ref _ir_ALLOCA (ir_ctx *ctx, ir_ref size)
 
void _ir_AFREE (ir_ctx *ctx, ir_ref size)
 
ir_ref _ir_VLOAD (ir_ctx *ctx, ir_type type, ir_ref var)
 
void _ir_VSTORE (ir_ctx *ctx, ir_ref var, ir_ref val)
 
ir_ref _ir_TLS (ir_ctx *ctx, ir_ref index, ir_ref offset)
 
ir_ref _ir_RLOAD (ir_ctx *ctx, ir_type type, ir_ref reg)
 
void _ir_RSTORE (ir_ctx *ctx, ir_ref reg, ir_ref val)
 
ir_ref _ir_LOAD (ir_ctx *ctx, ir_type type, ir_ref addr)
 
void _ir_STORE (ir_ctx *ctx, ir_ref addr, ir_ref val)
 
void _ir_VA_START (ir_ctx *ctx, ir_ref list)
 
void _ir_VA_END (ir_ctx *ctx, ir_ref list)
 
void _ir_VA_COPY (ir_ctx *ctx, ir_ref dst, ir_ref src)
 
ir_ref _ir_VA_ARG (ir_ctx *ctx, ir_type type, ir_ref list)
 
ir_ref _ir_BLOCK_BEGIN (ir_ctx *ctx)
 

Variables

const uint8_t ir_type_flags [IR_LAST_TYPE]
 
const char * ir_type_name [IR_LAST_TYPE]
 
const uint8_t ir_type_size [IR_LAST_TYPE]
 
const char * ir_type_cname [IR_LAST_TYPE]
 
const char * ir_op_name [IR_LAST_OP]
 
const uint32_t ir_op_flags [IR_LAST_OP]
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 18 of file ir.c.

◆ _IR_OP_FLAGS

#define _IR_OP_FLAGS ( name,
flags,
op1,
op2,
op3 )
Value:
IR_OP_FLAGS(ir_op_flag_ ## flags, ir_op_kind_ ## op1, ir_op_kind_ ## op2, ir_op_kind_ ## op3),
#define IR_OP_FLAGS(op_flags, op1_flags, op2_flags, op3_flags)
Definition ir_private.h:955
op2
op1

Definition at line 291 of file ir.c.

◆ IR_FOLD

#define IR_FOLD ( X)
Value:
IR_FOLD1(X, __LINE__)
#define X
Definition encoding.c:238
#define IR_FOLD1(X, Y)
Definition ir.c:877

Definition at line 876 of file ir.c.

◆ IR_FOLD1

#define IR_FOLD1 ( X,
Y )
Value:
#define IR_FOLD2(X, Y)
Definition ir.c:878

Definition at line 877 of file ir.c.

◆ IR_FOLD2

#define IR_FOLD2 ( X,
Y )
Value:
case IR_RULE_ ## Y:

Definition at line 878 of file ir.c.

◆ IR_FOLD_BOOL

#define IR_FOLD_BOOL ( cond)
Value:
#define IR_FOLD_COPY(op)
Definition ir.c:906
#define IR_TRUE
Definition ir.h:398
#define IR_FALSE
Definition ir.h:397

Definition at line 911 of file ir.c.

◆ IR_FOLD_CONST_D

#define IR_FOLD_CONST_D ( _val)
Value:
do { \
val.d = (_val); \
goto ir_fold_const; \
} while (0)
zval * val
Definition ffi.c:4262

Definition at line 895 of file ir.c.

◆ IR_FOLD_CONST_F

#define IR_FOLD_CONST_F ( _val)
Value:
do { \
val.f = (_val); \
val.u32_hi = 0; \
goto ir_fold_const; \
} while (0)

Definition at line 900 of file ir.c.

◆ IR_FOLD_CONST_I

#define IR_FOLD_CONST_I ( _val)
Value:
do { \
val.i64 = (_val); \
goto ir_fold_const; \
} while (0)

Definition at line 890 of file ir.c.

◆ IR_FOLD_CONST_U

#define IR_FOLD_CONST_U ( _val)
Value:
do { \
val.u64 = (_val); \
goto ir_fold_const; \
} while (0)

Definition at line 885 of file ir.c.

◆ IR_FOLD_COPY

#define IR_FOLD_COPY ( op)
Value:
do { \
ref = (op); \
goto ir_fold_copy; \
} while (0)

Definition at line 906 of file ir.c.

◆ IR_FOLD_CSE

#define IR_FOLD_CSE   goto ir_fold_cse

Definition at line 917 of file ir.c.

◆ IR_FOLD_DO_NAMED

#define IR_FOLD_DO_NAMED ( name)
Value:
goto ir_fold_ ## name
zend_string * name

Definition at line 915 of file ir.c.

◆ IR_FOLD_EMIT

#define IR_FOLD_EMIT   goto ir_fold_emit

Definition at line 918 of file ir.c.

◆ IR_FOLD_ERROR

#define IR_FOLD_ERROR ( msg)
Value:
do { \
IR_ASSERT(0 && (msg)); \
goto ir_fold_emit; \
} while (0)
char * msg
Definition phpdbg.h:289

Definition at line 880 of file ir.c.

◆ IR_FOLD_KEY

#define IR_FOLD_KEY ( x)
Value:
((x) & 0x1fffff)

Definition at line 924 of file ir.c.

◆ IR_FOLD_NAMED

#define IR_FOLD_NAMED ( name)
Value:
ir_fold_ ## name:

Definition at line 914 of file ir.c.

◆ IR_FOLD_NEXT

#define IR_FOLD_NEXT   break

Definition at line 919 of file ir.c.

◆ IR_FOLD_RESTART

#define IR_FOLD_RESTART   goto ir_fold_restart

Definition at line 916 of file ir.c.

◆ IR_FOLD_RULE

#define IR_FOLD_RULE ( x)
Value:
((x) >> 21)

Definition at line 923 of file ir.c.

◆ ir_op_flag_a1

Definition at line 274 of file ir.c.

◆ ir_op_flag_a2

Definition at line 275 of file ir.c.

◆ ir_op_flag_c

#define ir_op_flag_c   IR_OP_FLAG_CONTROL

Definition at line 241 of file ir.c.

◆ ir_op_flag_c1X2

#define ir_op_flag_c1X2   (ir_op_flag_c | 1 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 242 of file ir.c.

◆ ir_op_flag_c3

#define ir_op_flag_c3   (ir_op_flag_c | 3 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 243 of file ir.c.

◆ ir_op_flag_d

#define ir_op_flag_d   IR_OP_FLAG_DATA

Definition at line 226 of file ir.c.

◆ ir_op_flag_d0

#define ir_op_flag_d0   ir_op_flag_d

Definition at line 227 of file ir.c.

◆ ir_op_flag_d1

#define ir_op_flag_d1   (ir_op_flag_d | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 228 of file ir.c.

◆ ir_op_flag_d1X1

#define ir_op_flag_d1X1   (ir_op_flag_d | 1 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 229 of file ir.c.

◆ ir_op_flag_d2

#define ir_op_flag_d2   (ir_op_flag_d | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 230 of file ir.c.

◆ ir_op_flag_d2C

Definition at line 231 of file ir.c.

◆ ir_op_flag_d3

#define ir_op_flag_d3   (ir_op_flag_d | 3 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 232 of file ir.c.

◆ ir_op_flag_E

Definition at line 251 of file ir.c.

◆ ir_op_flag_E1

#define ir_op_flag_E1   (ir_op_flag_E | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 252 of file ir.c.

◆ ir_op_flag_E2

#define ir_op_flag_E2   (ir_op_flag_E | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 253 of file ir.c.

◆ ir_op_flag_l

Definition at line 257 of file ir.c.

◆ ir_op_flag_l0

#define ir_op_flag_l0   ir_op_flag_l

Definition at line 258 of file ir.c.

◆ ir_op_flag_l1

#define ir_op_flag_l1   (ir_op_flag_l | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 259 of file ir.c.

◆ ir_op_flag_l1X1

#define ir_op_flag_l1X1   (ir_op_flag_l | 1 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 260 of file ir.c.

◆ ir_op_flag_l1X2

#define ir_op_flag_l1X2   (ir_op_flag_l | 1 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 261 of file ir.c.

◆ ir_op_flag_l2

#define ir_op_flag_l2   (ir_op_flag_l | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 262 of file ir.c.

◆ ir_op_flag_l3

#define ir_op_flag_l3   (ir_op_flag_l | 3 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 263 of file ir.c.

◆ ir_op_flag_p

#define ir_op_flag_p   (IR_OP_FLAG_DATA | IR_OP_FLAG_PINNED)

Definition at line 235 of file ir.c.

◆ ir_op_flag_p1

#define ir_op_flag_p1   (ir_op_flag_p | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 236 of file ir.c.

◆ ir_op_flag_p1X1

#define ir_op_flag_p1X1   (ir_op_flag_p | 1 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 237 of file ir.c.

◆ ir_op_flag_p1X2

#define ir_op_flag_p1X2   (ir_op_flag_p | 1 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 238 of file ir.c.

◆ ir_op_flag_p2

#define ir_op_flag_p2   (ir_op_flag_p | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 239 of file ir.c.

◆ ir_op_flag_pN

#define ir_op_flag_pN   (ir_op_flag_p | IR_OP_FLAG_VAR_INPUTS)

Definition at line 240 of file ir.c.

◆ ir_op_flag_r

#define ir_op_flag_r   IR_OP_FLAG_DATA

Definition at line 233 of file ir.c.

◆ ir_op_flag_r0

#define ir_op_flag_r0   ir_op_flag_r

Definition at line 234 of file ir.c.

◆ ir_op_flag_S

Definition at line 244 of file ir.c.

◆ ir_op_flag_s

Definition at line 264 of file ir.c.

◆ ir_op_flag_s0

#define ir_op_flag_s0   ir_op_flag_s

Definition at line 265 of file ir.c.

◆ ir_op_flag_S0X1

#define ir_op_flag_S0X1   (ir_op_flag_S | 0 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 245 of file ir.c.

◆ ir_op_flag_S1

#define ir_op_flag_S1   (ir_op_flag_S | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 246 of file ir.c.

◆ ir_op_flag_s1

#define ir_op_flag_s1   (ir_op_flag_s | 1 | (1 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 266 of file ir.c.

◆ ir_op_flag_S1X1

#define ir_op_flag_S1X1   (ir_op_flag_S | 1 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 247 of file ir.c.

◆ ir_op_flag_S2

#define ir_op_flag_S2   (ir_op_flag_S | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 248 of file ir.c.

◆ ir_op_flag_s2

#define ir_op_flag_s2   (ir_op_flag_s | 2 | (2 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 267 of file ir.c.

◆ ir_op_flag_S2X1

#define ir_op_flag_S2X1   (ir_op_flag_S | 2 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 249 of file ir.c.

◆ ir_op_flag_s2X1

#define ir_op_flag_s2X1   (ir_op_flag_s | 2 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 268 of file ir.c.

◆ ir_op_flag_s3

#define ir_op_flag_s3   (ir_op_flag_s | 3 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 269 of file ir.c.

◆ ir_op_flag_SN

#define ir_op_flag_SN   (ir_op_flag_S | IR_OP_FLAG_VAR_INPUTS)

Definition at line 250 of file ir.c.

◆ ir_op_flag_T

Definition at line 254 of file ir.c.

◆ ir_op_flag_T1X2

#define ir_op_flag_T1X2   (ir_op_flag_T | 1 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 256 of file ir.c.

◆ ir_op_flag_T2X1

#define ir_op_flag_T2X1   (ir_op_flag_T | 2 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 255 of file ir.c.

◆ ir_op_flag_v

#define ir_op_flag_v   0

Definition at line 224 of file ir.c.

◆ ir_op_flag_v0X3

#define ir_op_flag_v0X3   (0 | (3 << IR_OP_FLAG_OPERANDS_SHIFT))

Definition at line 225 of file ir.c.

◆ ir_op_flag_x1

Definition at line 270 of file ir.c.

◆ ir_op_flag_x2

Definition at line 271 of file ir.c.

◆ ir_op_flag_x3

Definition at line 272 of file ir.c.

◆ ir_op_flag_xN

Definition at line 273 of file ir.c.

◆ ir_op_kind____

#define ir_op_kind____   IR_OPND_UNUSED

Definition at line 277 of file ir.c.

◆ ir_op_kind_def

#define ir_op_kind_def   IR_OPND_DATA

Definition at line 278 of file ir.c.

◆ ir_op_kind_fld

#define ir_op_kind_fld   IR_OPND_STR

Definition at line 285 of file ir.c.

◆ ir_op_kind_num

#define ir_op_kind_num   IR_OPND_NUM

Definition at line 284 of file ir.c.

◆ ir_op_kind_opt

#define ir_op_kind_opt   IR_OPND_PROB

Definition at line 288 of file ir.c.

◆ ir_op_kind_prb

#define ir_op_kind_prb   IR_OPND_PROB

Definition at line 287 of file ir.c.

◆ ir_op_kind_pro

#define ir_op_kind_pro   IR_OPND_PROTO

Definition at line 289 of file ir.c.

◆ ir_op_kind_ref

#define ir_op_kind_ref   IR_OPND_DATA

Definition at line 279 of file ir.c.

◆ ir_op_kind_reg

#define ir_op_kind_reg   IR_OPND_CONTROL_DEP

Definition at line 281 of file ir.c.

◆ ir_op_kind_ret

#define ir_op_kind_ret   IR_OPND_CONTROL_REF

Definition at line 282 of file ir.c.

◆ ir_op_kind_src

#define ir_op_kind_src   IR_OPND_CONTROL

Definition at line 280 of file ir.c.

◆ ir_op_kind_str

#define ir_op_kind_str   IR_OPND_STR

Definition at line 283 of file ir.c.

◆ ir_op_kind_var

#define ir_op_kind_var   IR_OPND_DATA

Definition at line 286 of file ir.c.

◆ IR_OP_NAME

#define IR_OP_NAME ( name,
flags,
op1,
op2,
op3 )
Value:
#name,

Definition at line 49 of file ir.c.

◆ IR_TYPE_CNAME

#define IR_TYPE_CNAME ( name,
type,
field,
flags )
Value:
#type,

Definition at line 47 of file ir.c.

◆ IR_TYPE_FLAGS

#define IR_TYPE_FLAGS ( name,
type,
field,
flags )
Value:
((flags)|sizeof(type)),
zend_ffi_type * type
Definition ffi.c:3812

Definition at line 45 of file ir.c.

◆ IR_TYPE_NAME

#define IR_TYPE_NAME ( name,
type,
field,
flags )
Value:
#name,

Definition at line 46 of file ir.c.

◆ IR_TYPE_SIZE

#define IR_TYPE_SIZE ( name,
type,
field,
flags )
Value:
sizeof(type),

Definition at line 48 of file ir.c.

Typedef Documentation

◆ ir_alias

typedef enum _ir_alias ir_alias

Enumeration Type Documentation

◆ _ir_alias

enum _ir_alias
Enumerator
IR_MAY_ALIAS 
IR_NO_ALIAS 
IR_MUST_ALIAS 

Definition at line 1878 of file ir.c.

Function Documentation

◆ _ir_ADD_OFFSET()

ir_ref _ir_ADD_OFFSET ( ir_ctx * ctx,
ir_ref addr,
uintptr_t offset )

Definition at line 2992 of file ir.c.

◆ _ir_AFREE()

void _ir_AFREE ( ir_ctx * ctx,
ir_ref size )

Definition at line 3075 of file ir.c.

◆ _ir_ALLOCA()

ir_ref _ir_ALLOCA ( ir_ctx * ctx,
ir_ref size )

Definition at line 3069 of file ir.c.

◆ _ir_BEGIN()

void _ir_BEGIN ( ir_ctx * ctx,
ir_ref src )

Definition at line 2391 of file ir.c.

◆ _ir_BLOCK_BEGIN()

ir_ref _ir_BLOCK_BEGIN ( ir_ctx * ctx)

Definition at line 3196 of file ir.c.

◆ _ir_CALL()

ir_ref _ir_CALL ( ir_ctx * ctx,
ir_type type,
ir_ref func )

Definition at line 2690 of file ir.c.

◆ _ir_CALL_1()

ir_ref _ir_CALL_1 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1 )

Definition at line 2696 of file ir.c.

◆ _ir_CALL_2()

ir_ref _ir_CALL_2 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1,
ir_ref arg2 )

Definition at line 2702 of file ir.c.

◆ _ir_CALL_3()

ir_ref _ir_CALL_3 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1,
ir_ref arg2,
ir_ref arg3 )

Definition at line 2716 of file ir.c.

◆ _ir_CALL_4()

ir_ref _ir_CALL_4 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1,
ir_ref arg2,
ir_ref arg3,
ir_ref arg4 )

Definition at line 2731 of file ir.c.

◆ _ir_CALL_5()

ir_ref _ir_CALL_5 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1,
ir_ref arg2,
ir_ref arg3,
ir_ref arg4,
ir_ref arg5 )

Definition at line 2747 of file ir.c.

◆ _ir_CALL_6()

ir_ref _ir_CALL_6 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1,
ir_ref arg2,
ir_ref arg3,
ir_ref arg4,
ir_ref arg5,
ir_ref arg6 )

Definition at line 2764 of file ir.c.

◆ _ir_CALL_N()

ir_ref _ir_CALL_N ( ir_ctx * ctx,
ir_type type,
ir_ref func,
uint32_t count,
ir_ref * args )

Definition at line 2782 of file ir.c.

◆ _ir_CASE_DEFAULT()

void _ir_CASE_DEFAULT ( ir_ctx * ctx,
ir_ref switch_ref )

Definition at line 2964 of file ir.c.

◆ _ir_CASE_VAL()

void _ir_CASE_VAL ( ir_ctx * ctx,
ir_ref switch_ref,
ir_ref val )

Definition at line 2958 of file ir.c.

◆ _ir_END()

ir_ref _ir_END ( ir_ctx * ctx)

Definition at line 2531 of file ir.c.

◆ _ir_END_LIST()

ir_ref _ir_END_LIST ( ir_ctx * ctx,
ir_ref list )

Definition at line 2575 of file ir.c.

◆ _ir_END_PHI_LIST()

ir_ref _ir_END_PHI_LIST ( ir_ctx * ctx,
ir_ref list,
ir_ref val )

Definition at line 2587 of file ir.c.

◆ _ir_ENTRY()

void _ir_ENTRY ( ir_ctx * ctx,
ir_ref src,
ir_ref num )

Definition at line 2381 of file ir.c.

◆ _ir_EXITCALL()

ir_ref _ir_EXITCALL ( ir_ctx * ctx,
ir_ref func )

Definition at line 3063 of file ir.c.

◆ _ir_GUARD()

void _ir_GUARD ( ir_ctx * ctx,
ir_ref condition,
ir_ref addr )

Definition at line 3000 of file ir.c.

◆ _ir_GUARD_NOT()

void _ir_GUARD_NOT ( ir_ctx * ctx,
ir_ref condition,
ir_ref addr )

Definition at line 3020 of file ir.c.

◆ _ir_IF()

ir_ref _ir_IF ( ir_ctx * ctx,
ir_ref condition )

Definition at line 2475 of file ir.c.

◆ _ir_IF_FALSE()

void _ir_IF_FALSE ( ir_ctx * ctx,
ir_ref if_ref )

Definition at line 2514 of file ir.c.

◆ _ir_IF_FALSE_cold()

void _ir_IF_FALSE_cold ( ir_ctx * ctx,
ir_ref if_ref )

Definition at line 2522 of file ir.c.

◆ _ir_IF_TRUE()

void _ir_IF_TRUE ( ir_ctx * ctx,
ir_ref if_ref )

Definition at line 2497 of file ir.c.

◆ _ir_IF_TRUE_cold()

void _ir_IF_TRUE_cold ( ir_ctx * ctx,
ir_ref if_ref )

Definition at line 2505 of file ir.c.

◆ _ir_IJMP()

void _ir_IJMP ( ir_ctx * ctx,
ir_ref addr )

Definition at line 2984 of file ir.c.

◆ _ir_LOAD()

ir_ref _ir_LOAD ( ir_ctx * ctx,
ir_type type,
ir_ref addr )

Definition at line 3132 of file ir.c.

◆ _ir_LOOP_BEGIN()

ir_ref _ir_LOOP_BEGIN ( ir_ctx * ctx,
ir_ref src1 )

Definition at line 2673 of file ir.c.

◆ _ir_LOOP_END()

ir_ref _ir_LOOP_END ( ir_ctx * ctx)

Definition at line 2680 of file ir.c.

◆ _ir_MERGE_2()

void _ir_MERGE_2 ( ir_ctx * ctx,
ir_ref src1,
ir_ref src2 )

Definition at line 2541 of file ir.c.

◆ _ir_MERGE_LIST()

void _ir_MERGE_LIST ( ir_ctx * ctx,
ir_ref list )

Definition at line 2599 of file ir.c.

◆ _ir_MERGE_N()

void _ir_MERGE_N ( ir_ctx * ctx,
ir_ref n,
ir_ref * inputs )

Definition at line 2547 of file ir.c.

◆ _ir_MERGE_SET_OP()

void _ir_MERGE_SET_OP ( ir_ctx * ctx,
ir_ref merge,
ir_ref pos,
ir_ref src )

Definition at line 2565 of file ir.c.

◆ _ir_PARAM()

ir_ref _ir_PARAM ( ir_ctx * ctx,
ir_type type,
const char * name,
ir_ref num )

Definition at line 2291 of file ir.c.

◆ _ir_PHI_2()

ir_ref _ir_PHI_2 ( ir_ctx * ctx,
ir_type type,
ir_ref src1,
ir_ref src2 )

Definition at line 2316 of file ir.c.

◆ _ir_PHI_LIST()

ir_ref _ir_PHI_LIST ( ir_ctx * ctx,
ir_ref list )

Definition at line 2638 of file ir.c.

◆ _ir_PHI_N()

ir_ref _ir_PHI_N ( ir_ctx * ctx,
ir_type type,
ir_ref n,
ir_ref * inputs )

Definition at line 2326 of file ir.c.

◆ _ir_PHI_SET_OP()

void _ir_PHI_SET_OP ( ir_ctx * ctx,
ir_ref phi,
ir_ref pos,
ir_ref src )

Definition at line 2362 of file ir.c.

◆ _ir_RETURN()

void _ir_RETURN ( ir_ctx * ctx,
ir_ref val )

Definition at line 2970 of file ir.c.

◆ _ir_RLOAD()

ir_ref _ir_RLOAD ( ir_ctx * ctx,
ir_type type,
ir_ref reg )

Definition at line 3120 of file ir.c.

◆ _ir_RSTORE()

void _ir_RSTORE ( ir_ctx * ctx,
ir_ref reg,
ir_ref val )

Definition at line 3126 of file ir.c.

◆ _ir_SNAPSHOT()

ir_ref _ir_SNAPSHOT ( ir_ctx * ctx,
ir_ref n )

Definition at line 3040 of file ir.c.

◆ _ir_SNAPSHOT_SET_OP()

void _ir_SNAPSHOT_SET_OP ( ir_ctx * ctx,
ir_ref snapshot,
ir_ref pos,
ir_ref val )

Definition at line 3051 of file ir.c.

◆ _ir_START()

void _ir_START ( ir_ctx * ctx)

Definition at line 2374 of file ir.c.

◆ _ir_STORE()

void _ir_STORE ( ir_ctx * ctx,
ir_ref addr,
ir_ref val )

Definition at line 3156 of file ir.c.

◆ _ir_SWITCH()

ir_ref _ir_SWITCH ( ir_ctx * ctx,
ir_ref val )

Definition at line 2948 of file ir.c.

◆ _ir_TAILCALL()

void _ir_TAILCALL ( ir_ctx * ctx,
ir_type type,
ir_ref func )

Definition at line 2806 of file ir.c.

◆ _ir_TAILCALL_1()

void _ir_TAILCALL_1 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1 )

Definition at line 2817 of file ir.c.

◆ _ir_TAILCALL_2()

void _ir_TAILCALL_2 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1,
ir_ref arg2 )

Definition at line 2828 of file ir.c.

◆ _ir_TAILCALL_3()

void _ir_TAILCALL_3 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1,
ir_ref arg2,
ir_ref arg3 )

Definition at line 2846 of file ir.c.

◆ _ir_TAILCALL_4()

void _ir_TAILCALL_4 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1,
ir_ref arg2,
ir_ref arg3,
ir_ref arg4 )

Definition at line 2865 of file ir.c.

◆ _ir_TAILCALL_5()

void _ir_TAILCALL_5 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1,
ir_ref arg2,
ir_ref arg3,
ir_ref arg4,
ir_ref arg5 )

Definition at line 2885 of file ir.c.

◆ _ir_TAILCALL_6()

void _ir_TAILCALL_6 ( ir_ctx * ctx,
ir_type type,
ir_ref func,
ir_ref arg1,
ir_ref arg2,
ir_ref arg3,
ir_ref arg4,
ir_ref arg5,
ir_ref arg6 )

Definition at line 2906 of file ir.c.

◆ _ir_TAILCALL_N()

void _ir_TAILCALL_N ( ir_ctx * ctx,
ir_type type,
ir_ref func,
uint32_t count,
ir_ref * args )

Definition at line 2928 of file ir.c.

◆ _ir_TLS()

ir_ref _ir_TLS ( ir_ctx * ctx,
ir_ref index,
ir_ref offset )

Definition at line 3114 of file ir.c.

◆ _ir_UNREACHABLE()

void _ir_UNREACHABLE ( ir_ctx * ctx)

Definition at line 2798 of file ir.c.

◆ _ir_VA_ARG()

ir_ref _ir_VA_ARG ( ir_ctx * ctx,
ir_type type,
ir_ref list )

Definition at line 3190 of file ir.c.

◆ _ir_VA_COPY()

void _ir_VA_COPY ( ir_ctx * ctx,
ir_ref dst,
ir_ref src )

Definition at line 3184 of file ir.c.

◆ _ir_VA_END()

void _ir_VA_END ( ir_ctx * ctx,
ir_ref list )

Definition at line 3178 of file ir.c.

◆ _ir_VA_START()

void _ir_VA_START ( ir_ctx * ctx,
ir_ref list )

Definition at line 3172 of file ir.c.

◆ _ir_VAR()

ir_ref _ir_VAR ( ir_ctx * ctx,
ir_type type,
const char * name )

Definition at line 2299 of file ir.c.

◆ _ir_VLOAD()

ir_ref _ir_VLOAD ( ir_ctx * ctx,
ir_type type,
ir_ref var )

Definition at line 3081 of file ir.c.

◆ _ir_VSTORE()

void _ir_VSTORE ( ir_ctx * ctx,
ir_ref var,
ir_ref val )

Definition at line 3102 of file ir.c.

◆ ir_addrtab_find()

ir_ref ir_addrtab_find ( const ir_hashtab * tab,
uint64_t key )

Definition at line 1730 of file ir.c.

◆ ir_addrtab_free()

void ir_addrtab_free ( ir_hashtab * tab)

Definition at line 1722 of file ir.c.

◆ ir_addrtab_init()

void ir_addrtab_init ( ir_hashtab * tab,
uint32_t size )

Definition at line 1709 of file ir.c.

◆ ir_addrtab_set()

void ir_addrtab_set ( ir_hashtab * tab,
uint64_t key,
ir_ref val )

Definition at line 1746 of file ir.c.

◆ ir_array_grow()

void ir_array_grow ( ir_array * a,
uint32_t size )

Definition at line 1485 of file ir.c.

◆ ir_array_insert()

void ir_array_insert ( ir_array * a,
uint32_t i,
ir_ref val )

Definition at line 1492 of file ir.c.

◆ ir_array_remove()

void ir_array_remove ( ir_array * a,
uint32_t i )

Definition at line 1502 of file ir.c.

◆ ir_bind()

ir_ref ir_bind ( ir_ctx * ctx,
ir_ref var,
ir_ref def )

Definition at line 1142 of file ir.c.

◆ ir_binding_find()

ir_ref ir_binding_find ( const ir_ctx * ctx,
ir_ref ref )

Definition at line 1161 of file ir.c.

◆ ir_build_def_use_lists()

void ir_build_def_use_lists ( ir_ctx * ctx)

Definition at line 1224 of file ir.c.

◆ ir_check_dominating_predicates()

ir_ref ir_check_dominating_predicates ( ir_ctx * ctx,
ir_ref ref,
ir_ref condition )

Definition at line 2469 of file ir.c.

◆ ir_check_dominating_predicates_i()

IR_ALWAYS_INLINE ir_ref ir_check_dominating_predicates_i ( ir_ctx * ctx,
ir_ref ref,
ir_ref condition,
ir_ref limit )

Definition at line 2436 of file ir.c.

◆ ir_check_partial_aliasing()

ir_alias ir_check_partial_aliasing ( const ir_ctx * ctx,
ir_ref addr1,
ir_ref addr2,
ir_type type1,
ir_type type2 )

Definition at line 1920 of file ir.c.

◆ ir_const()

ir_ref ir_const ( ir_ctx * ctx,
ir_val val,
uint8_t type )

Definition at line 557 of file ir.c.

◆ ir_const_addr()

ir_ref ir_const_addr ( ir_ctx * ctx,
uintptr_t c )

Definition at line 645 of file ir.c.

◆ ir_const_bool()

ir_ref ir_const_bool ( ir_ctx * ctx,
bool c )

Definition at line 618 of file ir.c.

◆ ir_const_char()

ir_ref ir_const_char ( ir_ctx * ctx,
char c )

Definition at line 623 of file ir.c.

◆ ir_const_double()

ir_ref ir_const_double ( ir_ctx * ctx,
double c )

Definition at line 638 of file ir.c.

◆ ir_const_ex()

ir_ref ir_const_ex ( ir_ctx * ctx,
ir_val val,
uint8_t type,
uint32_t optx )

Definition at line 512 of file ir.c.

◆ ir_const_float()

ir_ref ir_const_float ( ir_ctx * ctx,
float c )

Definition at line 630 of file ir.c.

◆ ir_const_func()

ir_ref ir_const_func ( ir_ctx * ctx,
ir_ref str,
ir_ref proto )

Definition at line 666 of file ir.c.

◆ ir_const_func_addr()

ir_ref ir_const_func_addr ( ir_ctx * ctx,
uintptr_t c,
ir_ref proto )

Definition at line 655 of file ir.c.

◆ ir_const_i16()

ir_ref ir_const_i16 ( ir_ctx * ctx,
int16_t c )

Definition at line 569 of file ir.c.

◆ ir_const_i32()

ir_ref ir_const_i32 ( ir_ctx * ctx,
int32_t c )

Definition at line 576 of file ir.c.

◆ ir_const_i64()

ir_ref ir_const_i64 ( ir_ctx * ctx,
int64_t c )

Definition at line 583 of file ir.c.

◆ ir_const_i8()

ir_ref ir_const_i8 ( ir_ctx * ctx,
int8_t c )

Definition at line 562 of file ir.c.

◆ ir_const_str()

ir_ref ir_const_str ( ir_ctx * ctx,
ir_ref str )

Definition at line 681 of file ir.c.

◆ ir_const_sym()

ir_ref ir_const_sym ( ir_ctx * ctx,
ir_ref str )

Definition at line 674 of file ir.c.

◆ ir_const_u16()

ir_ref ir_const_u16 ( ir_ctx * ctx,
uint16_t c )

Definition at line 597 of file ir.c.

◆ ir_const_u32()

ir_ref ir_const_u32 ( ir_ctx * ctx,
uint32_t c )

Definition at line 604 of file ir.c.

◆ ir_const_u64()

ir_ref ir_const_u64 ( ir_ctx * ctx,
uint64_t c )

Definition at line 611 of file ir.c.

◆ ir_const_u8()

ir_ref ir_const_u8 ( ir_ctx * ctx,
uint8_t c )

Definition at line 590 of file ir.c.

◆ ir_emit()

ir_ref ir_emit ( ir_ctx * ctx,
uint32_t opt,
ir_ref op1,
ir_ref op2,
ir_ref op3 )

Definition at line 811 of file ir.c.

◆ ir_emit0()

ir_ref ir_emit0 ( ir_ctx * ctx,
uint32_t opt )

Definition at line 824 of file ir.c.

◆ ir_emit1()

ir_ref ir_emit1 ( ir_ctx * ctx,
uint32_t opt,
ir_ref op1 )

Definition at line 829 of file ir.c.

◆ ir_emit2()

ir_ref ir_emit2 ( ir_ctx * ctx,
uint32_t opt,
ir_ref op1,
ir_ref op2 )

Definition at line 834 of file ir.c.

◆ ir_emit3()

ir_ref ir_emit3 ( ir_ctx * ctx,
uint32_t opt,
ir_ref op1,
ir_ref op2,
ir_ref op3 )

Definition at line 839 of file ir.c.

◆ ir_emit_N()

ir_ref ir_emit_N ( ir_ctx * ctx,
uint32_t opt,
int32_t count )

Definition at line 1077 of file ir.c.

◆ ir_find_aliasing_load()

ir_ref ir_find_aliasing_load ( ir_ctx * ctx,
ir_ref ref,
ir_type type,
ir_ref addr )

Definition at line 2064 of file ir.c.

◆ ir_find_aliasing_load_i()

IR_ALWAYS_INLINE ir_ref ir_find_aliasing_load_i ( ir_ctx * ctx,
ir_ref ref,
ir_type type,
ir_ref addr,
ir_ref limit )

Definition at line 2014 of file ir.c.

◆ ir_find_aliasing_store()

ir_ref ir_find_aliasing_store ( ir_ctx * ctx,
ir_ref ref,
ir_ref addr,
ir_ref val )

Definition at line 2204 of file ir.c.

◆ ir_find_aliasing_store_i()

IR_ALWAYS_INLINE ir_ref ir_find_aliasing_store_i ( ir_ctx * ctx,
ir_ref ref,
ir_ref addr,
ir_ref val,
ir_ref limit )

Definition at line 2115 of file ir.c.

◆ ir_find_aliasing_vload()

ir_ref ir_find_aliasing_vload ( ir_ctx * ctx,
ir_ref ref,
ir_type type,
ir_ref var )

Definition at line 2110 of file ir.c.

◆ ir_find_aliasing_vload_i()

IR_ALWAYS_INLINE ir_ref ir_find_aliasing_vload_i ( ir_ctx * ctx,
ir_ref ref,
ir_type type,
ir_ref var )

Definition at line 2069 of file ir.c.

◆ ir_find_aliasing_vstore()

ir_ref ir_find_aliasing_vstore ( ir_ctx * ctx,
ir_ref ref,
ir_ref var,
ir_ref val )

Definition at line 2284 of file ir.c.

◆ ir_find_aliasing_vstore_i()

IR_ALWAYS_INLINE ir_ref ir_find_aliasing_vstore_i ( ir_ctx * ctx,
ir_ref ref,
ir_ref var,
ir_ref val )

Definition at line 2209 of file ir.c.

◆ ir_fold()

ir_ref ir_fold ( ir_ctx * ctx,
uint32_t opt,
ir_ref op1,
ir_ref op2,
ir_ref op3 )

Definition at line 1046 of file ir.c.

◆ ir_fold0()

ir_ref ir_fold0 ( ir_ctx * ctx,
uint32_t opt )

Definition at line 1057 of file ir.c.

◆ ir_fold1()

ir_ref ir_fold1 ( ir_ctx * ctx,
uint32_t opt,
ir_ref op1 )

Definition at line 1062 of file ir.c.

◆ ir_fold2()

ir_ref ir_fold2 ( ir_ctx * ctx,
uint32_t opt,
ir_ref op1,
ir_ref op2 )

Definition at line 1067 of file ir.c.

◆ ir_fold3()

ir_ref ir_fold3 ( ir_ctx * ctx,
uint32_t opt,
ir_ref op1,
ir_ref op2,
ir_ref op3 )

Definition at line 1072 of file ir.c.

◆ ir_folding()

ir_ref ir_folding ( ir_ctx * ctx,
uint32_t opt,
ir_ref op1,
ir_ref op2,
ir_ref op3,
ir_insn * op1_insn,
ir_insn * op2_insn,
ir_insn * op3_insn )

Definition at line 932 of file ir.c.

◆ ir_free()

void ir_free ( ir_ctx * ctx)

Definition at line 412 of file ir.c.

◆ ir_get_op()

ir_ref ir_get_op ( ir_ctx * ctx,
ir_ref ref,
int32_t n )

Definition at line 1114 of file ir.c.

◆ ir_get_str()

const char * ir_get_str ( const ir_ctx * ctx,
ir_ref idx )

Definition at line 709 of file ir.c.

◆ ir_get_strl()

const char * ir_get_strl ( const ir_ctx * ctx,
ir_ref idx,
size_t * len )

Definition at line 715 of file ir.c.

◆ ir_hashtab_add()

bool ir_hashtab_add ( ir_hashtab * tab,
uint32_t key,
ir_ref val )

Definition at line 1617 of file ir.c.

◆ ir_hashtab_find()

ir_ref ir_hashtab_find ( const ir_hashtab * tab,
uint32_t key )

Definition at line 1601 of file ir.c.

◆ ir_hashtab_free()

void ir_hashtab_free ( ir_hashtab * tab)

Definition at line 1593 of file ir.c.

◆ ir_hashtab_init()

void ir_hashtab_init ( ir_hashtab * tab,
uint32_t size )

Definition at line 1580 of file ir.c.

◆ ir_hashtab_key_sort()

void ir_hashtab_key_sort ( ir_hashtab * tab)

Definition at line 1653 of file ir.c.

◆ ir_init()

void ir_init ( ir_ctx * ctx,
uint32_t flags,
ir_ref consts_limit,
ir_ref insns_limit )

Definition at line 381 of file ir.c.

◆ ir_list_find()

uint32_t ir_list_find ( const ir_list * l,
ir_ref val )

Definition at line 1527 of file ir.c.

◆ ir_list_insert()

void ir_list_insert ( ir_list * l,
uint32_t i,
ir_ref val )

Definition at line 1509 of file ir.c.

◆ ir_list_remove()

void ir_list_remove ( ir_list * l,
uint32_t i )

Definition at line 1520 of file ir.c.

◆ ir_mem_flush()

int ir_mem_flush ( void * ptr,
size_t size )

Definition at line 1862 of file ir.c.

◆ ir_mem_mmap()

void * ir_mem_mmap ( size_t size)

Definition at line 1821 of file ir.c.

◆ ir_mem_protect()

int ir_mem_protect ( void * ptr,
size_t size )

Definition at line 1840 of file ir.c.

◆ ir_mem_unmap()

int ir_mem_unmap ( void * ptr,
size_t size )

Definition at line 1834 of file ir.c.

◆ ir_mem_unprotect()

int ir_mem_unprotect ( void * ptr,
size_t size )

Definition at line 1851 of file ir.c.

◆ ir_param()

ir_ref ir_param ( ir_ctx * ctx,
ir_type type,
ir_ref region,
const char * name,
int pos )

Definition at line 1130 of file ir.c.

◆ ir_print_const()

void ir_print_const ( const ir_ctx * ctx,
const ir_insn * insn,
FILE * f,
bool quoted )

Definition at line 117 of file ir.c.

◆ ir_print_escaped_str()

void ir_print_escaped_str ( const char * s,
size_t len,
FILE * f )

Definition at line 78 of file ir.c.

◆ ir_proto()

ir_ref ir_proto ( ir_ctx * ctx,
uint8_t flags,
ir_type ret_type,
uint32_t params_count,
uint8_t * param_types )

Definition at line 798 of file ir.c.

◆ ir_proto_0()

ir_ref ir_proto_0 ( ir_ctx * ctx,
uint8_t flags,
ir_type ret_type )

Definition at line 721 of file ir.c.

◆ ir_proto_1()

ir_ref ir_proto_1 ( ir_ctx * ctx,
uint8_t flags,
ir_type ret_type,
ir_type t1 )

Definition at line 731 of file ir.c.

◆ ir_proto_2()

ir_ref ir_proto_2 ( ir_ctx * ctx,
uint8_t flags,
ir_type ret_type,
ir_type t1,
ir_type t2 )

Definition at line 742 of file ir.c.

◆ ir_proto_3()

ir_ref ir_proto_3 ( ir_ctx * ctx,
uint8_t flags,
ir_type ret_type,
ir_type t1,
ir_type t2,
ir_type t3 )

Definition at line 754 of file ir.c.

◆ ir_proto_4()

ir_ref ir_proto_4 ( ir_ctx * ctx,
uint8_t flags,
ir_type ret_type,
ir_type t1,
ir_type t2,
ir_type t3,
ir_type t4 )

Definition at line 767 of file ir.c.

◆ ir_proto_5()

ir_ref ir_proto_5 ( ir_ctx * ctx,
uint8_t flags,
ir_type ret_type,
ir_type t1,
ir_type t2,
ir_type t3,
ir_type t4,
ir_type t5 )

Definition at line 782 of file ir.c.

◆ ir_replace()

void ir_replace ( ir_ctx * ctx,
ir_ref ref,
ir_ref new_ref )

Definition at line 1430 of file ir.c.

◆ ir_set_op()

void ir_set_op ( ir_ctx * ctx,
ir_ref ref,
int32_t n,
ir_ref val )

Definition at line 1098 of file ir.c.

◆ ir_str()

ir_ref ir_str ( ir_ctx * ctx,
const char * s )

Definition at line 688 of file ir.c.

◆ ir_strl()

ir_ref ir_strl ( ir_ctx * ctx,
const char * s,
size_t len )

Definition at line 700 of file ir.c.

◆ ir_truncate()

void ir_truncate ( ir_ctx * ctx)

Definition at line 370 of file ir.c.

◆ ir_unique_const_addr()

ir_ref ir_unique_const_addr ( ir_ctx * ctx,
uintptr_t addr )

Definition at line 472 of file ir.c.

◆ ir_update_op()

void ir_update_op ( ir_ctx * ctx,
ir_ref ref,
uint32_t idx,
ir_ref new_val )

Definition at line 1469 of file ir.c.

◆ ir_use_list_add()

bool ir_use_list_add ( ir_ctx * ctx,
ir_ref to,
ir_ref ref )

Definition at line 1378 of file ir.c.

◆ ir_use_list_remove_all()

void ir_use_list_remove_all ( ir_ctx * ctx,
ir_ref from,
ir_ref ref )

Definition at line 1295 of file ir.c.

◆ ir_use_list_remove_one()

void ir_use_list_remove_one ( ir_ctx * ctx,
ir_ref from,
ir_ref ref )

Definition at line 1321 of file ir.c.

◆ ir_use_list_replace_all()

void ir_use_list_replace_all ( ir_ctx * ctx,
ir_ref ref,
ir_ref use,
ir_ref new_use )

Definition at line 1363 of file ir.c.

◆ ir_use_list_replace_one()

void ir_use_list_replace_one ( ir_ctx * ctx,
ir_ref ref,
ir_ref use,
ir_ref new_use )

Definition at line 1347 of file ir.c.

◆ ir_use_list_sort()

void ir_use_list_sort ( ir_ctx * ctx,
ir_ref ref )

Definition at line 1417 of file ir.c.

◆ ir_var()

ir_ref ir_var ( ir_ctx * ctx,
ir_type type,
ir_ref region,
const char * name )

Definition at line 1136 of file ir.c.

Variable Documentation

◆ ir_op_flags

const uint32_t ir_op_flags[IR_LAST_OP]
Initial value:
= {
}

Definition at line 294 of file ir.c.

◆ ir_op_name

const char* ir_op_name[IR_LAST_OP]
Initial value:
= {
}

Definition at line 71 of file ir.c.

◆ ir_type_cname

const char* ir_type_cname[IR_LAST_TYPE]
Initial value:
= {
"void",
}

Definition at line 66 of file ir.c.

◆ ir_type_flags

const uint8_t ir_type_flags[IR_LAST_TYPE]
Initial value:
= {
0,
}

Definition at line 51 of file ir.c.

◆ ir_type_name

const char* ir_type_name[IR_LAST_TYPE]
Initial value:
= {
"void",
}

Definition at line 56 of file ir.c.

◆ ir_type_size

const uint8_t ir_type_size[IR_LAST_TYPE]
Initial value:
= {
0,
}

Definition at line 61 of file ir.c.