内省器/GccCpp/rtl.h
外观
< Introspector | GccCpp
这是我的开始
#ifndef RTX_H #define RTX_H // we dont have this fully defined yet, rtx_code class TRefrtx_code : public TRef<int> { public: TREECONSTRUCTOR(TRefrtx_code) operator int(); TRefrtx_code & operator = (TRefrtx_code &); // TRefrtx_code & operator = (rtx_code ); // TRefrtx_code & operator == (rtx_code ); // TRefrtx_code & operator == (int ); }; class rtvec_def; //typedef struct rtvec_def *rtvec; //union tree_node; class rtx; class rtvec; class mem_attrs; class reg_attrs; class addr_diff_vec_flags { public: /* Set at the start of shorten_branches - ONLY WHEN OPTIMIZING - : */ BitRef2 min_align; /* Flags: */ BitRef2 base_after_vec; /* BASE is after the ADDR_DIFF_VEC. */ BitRef2 min_after_vec; /* minimum address target label is after the ADDR_DIFF_VEC. */ BitRef2 max_after_vec; /* maximum address target label is after the ADDR_DIFF_VEC. */ BitRef2 min_after_base; /* minimum address target label is after BASE. */ BitRef2 max_after_base; /* maximum address target label is after BASE. */ /* Set by the actual branch shortening process - ONLY WHEN OPTIMIZING - : */ BitRef2 offset_unsigned; /* offsets have to be treated as unsigned. */ BitRef scale; }; class rtunion_base { public: mystring rtstr; TRef<int> rtint; TRef<unsigned int> rtuint; TRef<rtx> m_rtx; TPtr<rtvec> m_rtvec; TRefmachine_mode rttype; addr_diff_vec_flags rt_addr_diff_vec_flags; cselib_val_struct *rt_cselib; bitmap_head_def *rtbit; tree rttree; basic_block_def *bb; mem_attrs *rtmem; reg_attrs *rtreg; }; //typedef union rtunion_def rtunion; class rtx_u { public: rtunion_base fld[1]; HOST_WIDE_INT hwint[1]; } ; class rtx_insides { public: TRefmachine_mode mode; TRefrtx_code code; /* 1 in a MEM if we should keep the alias set for this mem unchanged when we access a component. 1 in a CALL_INSN if it is a sibling call. 1 in a SET that is for a return. In a CODE_LABEL, part of the two-bit alternate entry field. */ BitRef2 jump ; /* In a CODE_LABEL, part of the two-bit alternate entry field. 1 in a MEM if it cannot trap. */ BitRef2 call ; /* 1 in a REG, MEM, or CONCAT if the value is set at most once, anywhere. 1 in a SUBREG if it references an unsigned object whose mode has been from a promoted to a wider mode. 1 in a SYMBOL_REF if it addresses something in the per-function constants pool. 1 in a CALL_INSN, NOTE, or EXPR_LIST for a const or pure call. 1 in a JUMP_INSN, CALL_INSN, or INSN of an annulling branch. */ BitRef2 unchanging ; /* 1 in a MEM or ASM_OPERANDS expression if the memory reference is volatile. 1 in an INSN, CALL_INSN, JUMP_INSN, CODE_LABEL, BARRIER, or NOTE if it has been deleted. 1 in a REG expression if corresponds to a variable declared by the user, 0 for an internally generated temporary. 1 in a SUBREG with a negative value. 1 in a LABEL_REF or in a REG_LABEL note for a non-local label. In a SYMBOL_REF, this flag is used for machine-specific purposes. */ BitRef2 volatil ; /* 1 in a MEM referring to a field of an aggregate. 0 if the MEM was a variable or the result of a * operator in C; 1 if it was the result of a . or -> operator (on a struct) in C. 1 in a REG if the register is used only in exit code a loop. 1 in a SUBREG expression if was generated from a variable with a promoted mode. 1 in a CODE_LABEL if the label is used for nonlocal gotos and must not be deleted even if its count is zero. 1 in a LABEL_REF if this is a reference to a label outside the current loop. 1 in an INSN, JUMP_INSN or CALL_INSN if this insn must be scheduled together with the preceding insn. Valid only within sched. 1 in an INSN, JUMP_INSN, or CALL_INSN if insn is in a delay slot and from the target of a branch. Valid from reorg until end of compilation; cleared before used. 1 in an INSN, JUMP_INSN or CALL_INSN or related rtx if this insn is dead code. Valid only during dead-code elimination phase; cleared before use. */ BitRef2 in_struct ; /* At the end of RTL generation, 1 if this rtx is used. This is used for copying shared structure. See `unshare_all_rtl'. In a REG, this is not needed for that purpose, and used instead in `leaf_renumber_regs_insn'. 1 in a SYMBOL_REF, means that emit_library_call has used it as the function. */ BitRef2 used ; /* Nonzero if this rtx came from procedure integration. 1 in a REG or PARALLEL means this rtx refers to the return value of the current function. 1 in a SYMBOL_REF if the symbol is weak. */ BitRef2 integrated ; /* 1 in an INSN or a SET if this rtx is related to the call frame, either changing how we compute the frame address or saving and restoring registers in the prologue and epilogue. 1 in a MEM if the MEM refers to a scalar, rather than a member of an aggregate. 1 in a REG if the register is a pointer. 1 in a SYMBOL_REF if it addresses something in the per-function constant string pool. */ BitRef2 frame_related ; rtx_u u; }; class rtx { public: rtx(); rtx(const rtx & ); rtx(rtx &); rtx(rtx *); rtx(int); operator bool(); operator void*(); rtx_insides * operator -> (); }; class rtvec { public: rtvec(int); operator bool(); int num_elem; /* number of elements */ rtx elem[1]; }; #endif