参照元

説明

引数

返り値

参考

実装

/* Subroutine of print_rtx_operand for handling code '0'.
   0 indicates a field for internal use that should not be printed.
   However there are various special cases, such as the third field
   of a NOTE, where it indicates that the field has several different
   valid contents.  */

void
rtx_writer::print_rtx_operand_code_0 (const_rtx in_rtx ATTRIBUTE_UNUSED,
				      int idx ATTRIBUTE_UNUSED)
{
#ifndef GENERATOR_FILE
  if (idx == 1 && GET_CODE (in_rtx) == SYMBOL_REF)
    {
      int flags = SYMBOL_REF_FLAGS (in_rtx);
      if (flags)
	fprintf (m_outfile, " [flags %#x]", flags);
      tree decl = SYMBOL_REF_DECL (in_rtx);
      if (decl)
	print_node_brief (m_outfile, "", decl, dump_flags);
    }
  else if (idx == 3 && NOTE_P (in_rtx))
    {
      switch (NOTE_KIND (in_rtx))
	{
	case NOTE_INSN_EH_REGION_BEG:
	case NOTE_INSN_EH_REGION_END:
	  if (flag_dump_unnumbered)
	    fprintf (m_outfile, " #");
	  else
	    fprintf (m_outfile, " %d", NOTE_EH_HANDLER (in_rtx));
	  m_sawclose = 1;
	  break;
	case NOTE_INSN_BLOCK_BEG:
	case NOTE_INSN_BLOCK_END:
	  dump_addr (m_outfile, " ", NOTE_BLOCK (in_rtx));
	  m_sawclose = 1;
	  break;

	case NOTE_INSN_BASIC_BLOCK:
	  {
	    basic_block bb = NOTE_BASIC_BLOCK (in_rtx);
	    if (bb != 0)
	      fprintf (m_outfile, " [bb %d]", bb->index);
	    break;
	  }
	case NOTE_INSN_DELETED_LABEL:
	case NOTE_INSN_DELETED_DEBUG_LABEL:
	  {
	    const char *label = NOTE_DELETED_LABEL_NAME (in_rtx);
	    if (label)
	      fprintf (m_outfile, " (\"%s\")", label);
	    else
	      fprintf (m_outfile, " \"\"");
	  }
	  break;
	case NOTE_INSN_SWITCH_TEXT_SECTIONS:
	  {
	    basic_block bb = NOTE_BASIC_BLOCK (in_rtx);
	    if (bb != 0)
	      fprintf (m_outfile, " [bb %d]", bb->index);
	    break;
	  }

	case NOTE_INSN_VAR_LOCATION:
	  fputc (' ', m_outfile);
	  print_rtx (NOTE_VAR_LOCATION (in_rtx));
	  break;
	case NOTE_INSN_CFI:
	  fputc ('\n', m_outfile);
	  output_cfi_directive (m_outfile, NOTE_CFI (in_rtx));
	  fputc ('\t', m_outfile);
	  break;
	case NOTE_INSN_BEGIN_STMT:
	case NOTE_INSN_INLINE_ENTRY:
#ifndef GENERATOR_FILE
	  {
	    expanded_location xloc
	      = expand_location (NOTE_MARKER_LOCATION (in_rtx));
	    fprintf (m_outfile, " %s:%i", xloc.file, xloc.line);
	  }
#endif
	  break;

	default:
	  break;
	}
    }
  else if (idx == 7 && JUMP_P (in_rtx) && JUMP_LABEL (in_rtx) != NULL
	   && !m_compact)
    {
      /* Output the JUMP_LABEL reference.  */
      fprintf (m_outfile, "\n%s%*s -> ", print_rtx_head, m_indent * 2, "");
      if (GET_CODE (JUMP_LABEL (in_rtx)) == RETURN)
	fprintf (m_outfile, "return");
      else if (GET_CODE (JUMP_LABEL (in_rtx)) == SIMPLE_RETURN)
	fprintf (m_outfile, "simple_return");
      else
	fprintf (m_outfile, "%d", INSN_UID (JUMP_LABEL (in_rtx)));
    }
  else if (idx == 0 && GET_CODE (in_rtx) == VALUE)
    {
      cselib_val *val = CSELIB_VAL_PTR (in_rtx);

      fprintf (m_outfile, " %u:%u", val->uid, val->hash);
      dump_addr (m_outfile, " @", in_rtx);
      dump_addr (m_outfile, "/", (void*)val);
    }
  else if (idx == 0 && GET_CODE (in_rtx) == DEBUG_EXPR)
    {
      fprintf (m_outfile, " D#%i",
	       DEBUG_TEMP_UID (DEBUG_EXPR_TREE_DECL (in_rtx)));
    }
  else if (idx == 0 && GET_CODE (in_rtx) == ENTRY_VALUE)
    {
      m_indent += 2;
      if (!m_sawclose)
	fprintf (m_outfile, " ");
      print_rtx (ENTRY_VALUE_EXP (in_rtx));
      m_indent -= 2;
    }
#endif
}

コメント


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS