*参照元 [#y7e1dadd]
#backlinks

*説明 [#k919c621]
-パス: [[gcc-8.3/gcc/print-rtl.c]]

-FIXME: これは何?
--説明


**引数 [#e6a1cc8f]
-const_rtx in_rtx
--
--[[gcc-8.3/gcc/const_rtx]]


**返り値 [#le747610]
-なし


**参考 [#mf7f1a4d]


*実装 [#r81bd2b6]
 /* Print IN_RTX onto m_outfile.  This is the recursive part of printing.  */
 
 void
 rtx_writer::print_rtx (const_rtx in_rtx)
 {
   int idx = 0;
 
   if (m_sawclose)
     {
       if (m_simple)
 	fputc (' ', m_outfile);
       else
 	fprintf (m_outfile, "\n%s%*s", print_rtx_head, m_indent * 2, "");
       m_sawclose = 0;
     }
 
   if (in_rtx == 0)
     {
       fputs ("(nil)", m_outfile);
       m_sawclose = 1;
       return;
     }
   else if (GET_CODE (in_rtx) > NUM_RTX_CODE)
     {
        fprintf (m_outfile, "(??? bad code %d\n%s%*s)", GET_CODE (in_rtx),
 		print_rtx_head, m_indent * 2, "");
        m_sawclose = 1;
        return;
     }
 
-
--[[gcc-8.3/gcc/GET_CODE()]]

   fputc ('(', m_outfile);
 
   /* Print name of expression code.  */
 
   /* Handle reuse.  */
 #ifndef GENERATOR_FILE
   if (m_rtx_reuse_manager)
     {
-
--[[gcc-8.3/gcc/m_rtx_reuse_manager(global)]]

       int reuse_id;
       if (m_rtx_reuse_manager->has_reuse_id (in_rtx, &reuse_id))
 	{
 	  /* Have we already seen the defn of this rtx?  */
 	  if (m_rtx_reuse_manager->seen_def_p (reuse_id))
 	    {
 	      fprintf (m_outfile, "reuse_rtx %i)", reuse_id);
 	      m_sawclose = 1;
 	      return;
 	    }
 	  else
 	    {
 	      /* First time we've seen this reused-rtx.  */
 	      fprintf (m_outfile, "%i|", reuse_id);
 	      m_rtx_reuse_manager->set_seen_def (reuse_id);
 	    }
 	}
     }
 #endif /* #ifndef GENERATOR_FILE */
 
   /* In compact mode, prefix the code of insns with "c",
      giving "cinsn", "cnote" etc.  */
   if (m_compact && is_a <const rtx_insn *, const struct rtx_def> (in_rtx))
     {
       /* "ccode_label" is slightly awkward, so special-case it as
 	 just "clabel".  */
       rtx_code code = GET_CODE (in_rtx);
       if (code == CODE_LABEL)
 	fprintf (m_outfile, "clabel");
       else
 	fprintf (m_outfile, "c%s", GET_RTX_NAME (code));
-
--[[gcc-8.3/gcc/GET_CODE()]]
--[[gcc-8.3/gcc/GET_RTX_NAME()]]

     }
   else if (m_simple && CONST_INT_P (in_rtx))
     ; /* no code.  */
-
--[[gcc-8.3/gcc/CONST_INT_P()]]

   else
     fprintf (m_outfile, "%s", GET_RTX_NAME (GET_CODE (in_rtx)));
 
   if (! m_simple)
     {
       if (RTX_FLAG (in_rtx, in_struct))
 	fputs ("/s", m_outfile);
 
       if (RTX_FLAG (in_rtx, volatil))
 	fputs ("/v", m_outfile);
 
       if (RTX_FLAG (in_rtx, unchanging))
 	fputs ("/u", m_outfile);
 
       if (RTX_FLAG (in_rtx, frame_related))
 	fputs ("/f", m_outfile);
 
       if (RTX_FLAG (in_rtx, jump))
 	fputs ("/j", m_outfile);
 
       if (RTX_FLAG (in_rtx, call))
 	fputs ("/c", m_outfile);
 
       if (RTX_FLAG (in_rtx, return_val))
 	fputs ("/i", m_outfile);
 
-
--[[gcc-8.3/gcc/RTX_FLAG()]]

       /* Print REG_NOTE names for EXPR_LIST and INSN_LIST.  */
       if ((GET_CODE (in_rtx) == EXPR_LIST
 	   || GET_CODE (in_rtx) == INSN_LIST
 	   || GET_CODE (in_rtx) == INT_LIST)
 	  && (int)GET_MODE (in_rtx) < REG_NOTE_MAX
 	  && !m_in_call_function_usage)
 	fprintf (m_outfile, ":%s",
 		 GET_REG_NOTE_NAME (GET_MODE (in_rtx)));
 
-
--[[gcc-8.3/gcc/EXPR_LIST]]
--[[gcc-8.3/gcc/INSN_LIST]]
--[[gcc-8.3/gcc/INT_LIST]]
--[[gcc-8.3/gcc/REG_NOTE_MAX]]
--[[gcc-8.3/gcc/GET_MODE()]]
--[[gcc-8.3/gcc/GET_REG_NOTE_NAME()]]

       /* For other rtl, print the mode if it's not VOID.  */
       else if (GET_MODE (in_rtx) != VOIDmode)
 	fprintf (m_outfile, ":%s", GET_MODE_NAME (GET_MODE (in_rtx)));
 
 #ifndef GENERATOR_FILE
       if (GET_CODE (in_rtx) == VAR_LOCATION)
 	{
 	  if (TREE_CODE (PAT_VAR_LOCATION_DECL (in_rtx)) == STRING_CST)
 	    fputs (" <debug string placeholder>", m_outfile);
 	  else
 	    print_mem_expr (m_outfile, PAT_VAR_LOCATION_DECL (in_rtx));
 	  fputc (' ', m_outfile);
 	  print_rtx (PAT_VAR_LOCATION_LOC (in_rtx));
 	  if (PAT_VAR_LOCATION_STATUS (in_rtx)
 	      == VAR_INIT_STATUS_UNINITIALIZED)
 	    fprintf (m_outfile, " [uninit]");
 	  m_sawclose = 1;
 	  idx = GET_RTX_LENGTH (VAR_LOCATION);
 	}
 #endif
     }
 
-
--[[gcc-8.3/gcc/GET_CODE()]]
--[[gcc-8.3/gcc/TREE_CODE()]]
--[[gcc-8.3/gcc/PAT_VAR_LOCATION_DECL()]]
--[[gcc-8.3/gcc/STRING_CST]]
--[[gcc-8.3/gcc/print_mem_expr()]]
--[[gcc-8.3/gcc/PAT_VAR_LOCATION_DECL()]]
--[[gcc-8.3/gcc/PAT_VAR_LOCATION_LOC()]]
--[[gcc-8.3/gcc/PAT_VAR_LOCATION_STATUS()]]
--[[gcc-8.3/gcc/VAR_INIT_STATUS_UNINITIALIZED]]
--[[gcc-8.3/gcc/GET_RTX_LENGTH()]]

 #ifndef GENERATOR_FILE
   if (CONST_DOUBLE_AS_FLOAT_P (in_rtx))
     idx = 5;
 #endif
 
-
--[[gcc-8.3/gcc/CONST_DOUBLE_AS_FLOAT_P()]]

   /* For insns, print the INSN_UID.  */
   if (INSN_CHAIN_CODE_P (GET_CODE (in_rtx)))
     {
       if (flag_dump_unnumbered)
 	fprintf (m_outfile, " #");
       else
 	fprintf (m_outfile, " %d", INSN_UID (in_rtx));
     }
 
-
--[[gcc-8.3/gcc/INSN_CHAIN_CODE_P()]]
--[[gcc-8.3/gcc/GET_CODE()]]
--[[gcc-8.3/gcc/INSN_UID()]]

   /* Determine which is the final operand to print.
      In compact mode, skip trailing operands that have the default values
      e.g. trailing "(nil)" values.  */
   int limit = GET_RTX_LENGTH (GET_CODE (in_rtx));
   if (m_compact)
     while (limit > idx && operand_has_default_value_p (in_rtx, limit - 1))
       limit--;
 
-
--[[gcc-8.3/gcc/GET_RTX_LENGTH()]]
--[[gcc-8.3/gcc/GET_CODE()]]
--[[gcc-8.3/gcc/operand_has_default_value_p()]]

   /* Get the format string and skip the first elements if we have handled
      them already.  */
 
   for (; idx < limit; idx++)
     print_rtx_operand (in_rtx, idx);
 
-
--[[gcc-8.3/gcc/print_rtx_operand()]]
--[[gcc-8.3/gcc/rtx_writer/print_rtx_operand()]]

   switch (GET_CODE (in_rtx))
     {
 #ifndef GENERATOR_FILE
     case MEM:
       if (__builtin_expect (final_insns_dump_p, false))
 	fprintf (m_outfile, " [");
       else
 	fprintf (m_outfile, " [" HOST_WIDE_INT_PRINT_DEC,
 		 (HOST_WIDE_INT) MEM_ALIAS_SET (in_rtx));
 
       if (MEM_EXPR (in_rtx))
 	print_mem_expr (m_outfile, MEM_EXPR (in_rtx));
       else
 	fputc (' ', m_outfile);
 
-
--[[gcc-8.3/gcc/HOST_WIDE_INT_PRINT_DEC]]
--[[gcc-8.3/gcc/HOST_WIDE_INT]]
--[[gcc-8.3/gcc/MEM_ALIAS_SET()]]
--[[gcc-8.3/gcc/MEM_EXPR()]]
--[[gcc-8.3/gcc/print_mem_expr()]]

       if (MEM_OFFSET_KNOWN_P (in_rtx))
 	{
 	  fprintf (m_outfile, "+");
 	  print_poly_int (m_outfile, MEM_OFFSET (in_rtx));
 	}
 
       if (MEM_SIZE_KNOWN_P (in_rtx))
 	{
 	  fprintf (m_outfile, " S");
 	  print_poly_int (m_outfile, MEM_SIZE (in_rtx));
 	}
 
-
--[[gcc-8.3/gcc/MEM_OFFSET_KNOWN_P()]]
--[[gcc-8.3/gcc/MEM_SIZE_KNWON_P()]]
--[[gcc-8.3/gcc/print_poly_int()]]

       if (MEM_ALIGN (in_rtx) != 1)
 	fprintf (m_outfile, " A%u", MEM_ALIGN (in_rtx));
 
       if (!ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (in_rtx)))
 	fprintf (m_outfile, " AS%u", MEM_ADDR_SPACE (in_rtx));
 
-
--[[gcc-8.3/gcc/MEM_ALIGN()]]
--[[gcc-8.3/gcc/ADDR_SPACE_GENERIC_P()]]
--[[gcc-8.3/gcc/MEM_ADDR_SPACE()]]

       fputc (']', m_outfile);
       break;
 
     case CONST_DOUBLE:
       if (FLOAT_MODE_P (GET_MODE (in_rtx)))
 	{
 	  char s[60];
 
 	  real_to_decimal (s, CONST_DOUBLE_REAL_VALUE (in_rtx),
 			   sizeof (s), 0, 1);
 	  fprintf (m_outfile, " %s", s);
 
 	  real_to_hexadecimal (s, CONST_DOUBLE_REAL_VALUE (in_rtx),
 			       sizeof (s), 0, 1);
 	  fprintf (m_outfile, " [%s]", s);
 	}
       break;
 
-
--[[gcc-8.3/gcc/FLOAT_MODE_P()]]
--[[gcc-8.3/gcc/GET_MODE()]]
--[[gcc-8.3/gcc/real_to_decimal()]]
--[[gcc-8.3/gcc/CONST_DOUBLE_REAL_VALUE()]]
--[[gcc-8.3/gcc/real_to_hexadecimal()]]

     case CONST_WIDE_INT:
       fprintf (m_outfile, " ");
       cwi_output_hex (m_outfile, in_rtx);
       break;
 
-
--[[gcc-8.3/gcc/cwi_output_hex()]]

     case CONST_POLY_INT:
       fprintf (m_outfile, " [");
       print_dec (CONST_POLY_INT_COEFFS (in_rtx)[0], m_outfile, SIGNED);
       for (unsigned int i = 1; i < NUM_POLY_INT_COEFFS; ++i)
 	{
 	  fprintf (m_outfile, ", ");
 	  print_dec (CONST_POLY_INT_COEFFS (in_rtx)[i], m_outfile, SIGNED);
 	}
       fprintf (m_outfile, "]");
       break;
 #endif
 
-
--[[gcc-8.3/gcc/print_dec()]]
--[[gcc-8.3/gcc/CONST_POLY_INT_COEFFS()]]
--[[gcc-8.3/gcc/NUM_POLY_INT_COEFFS]]

     case CODE_LABEL:
       if (!m_compact)
 	fprintf (m_outfile, " [%d uses]", LABEL_NUSES (in_rtx));
       switch (LABEL_KIND (in_rtx))
 	{
 	  case LABEL_NORMAL: break;
 	  case LABEL_STATIC_ENTRY: fputs (" [entry]", m_outfile); break;
 	  case LABEL_GLOBAL_ENTRY: fputs (" [global entry]", m_outfile); break;
 	  case LABEL_WEAK_ENTRY: fputs (" [weak entry]", m_outfile); break;
 	  default: gcc_unreachable ();
 	}
       break;
 
-
--[[gcc-8.3/gcc/LABEL_KIND()]]

     default:
       break;
     }
 
   fputc (')', m_outfile);
   m_sawclose = 1;
 }


*コメント [#e9733ba0]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS