kito <npick...@gmail.com> writes: > Hello every body > I have read the rtl.h & rtl.c, > but I don't realize the format for insn, call_insn and junp_insn > > it's define in rtl.def > > DEF_RTL_EXPR(JUMP_INSN, "jump_insn", "iuuBieie0", RTX_INSN) > > and it's dump by some real program > > (jump_insn 14 /* i */ > 13 /* u */ > 15 /* u */ > 1 /* B */ > (set (pc) > (if_then_else (le (reg:CCGC 17 flags) > (const_int 0 [0x0])) > (label_ref 24) > (pc))) /* e?? */ > -1 /* i? */ > (nil) /* e? */ > (nil) /* 0? */ ) > > so my question is where is the i after B ??
Which program is doing the dump? The generator programs (genattrtab, etc.) produce different dumps from the compilers. The 'i' after the 'B' represents an insn locator, a value of type source_location aka location_t aka unsigned int. A generator program will never print that value. A compiler will print it only if it has a value--if the instruction has a known location. It will be printed as filename:lineno when available. The corresponding code in print-rtl.c is: case 'i': if (i == 4 && INSN_P (in_rtx)) { #ifndef GENERATOR_FILE /* Pretty-print insn locators. Ignore scoping as it is mostly redundant with line number information and do not print anything when there is no location information available. */ if (INSN_LOCATOR (in_rtx) && insn_file (in_rtx)) fprintf(outfile, " %s:%i", insn_file (in_rtx), insn_line (in_rtx)); #endif Ian