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

Reply via email to