comparison gcc/sel-sched-dump.c @ 55:77e2b8dfacca gcc-4.4.5

update it from 4.4.3 to 4.5.0
author ryoma <e075725@ie.u-ryukyu.ac.jp>
date Fri, 12 Feb 2010 23:39:51 +0900
parents a06113de4d67
children b7f97abdc517
comparison
equal deleted inserted replaced
52:c156f1bd5cd9 55:77e2b8dfacca
32 #include "insn-attr.h" 32 #include "insn-attr.h"
33 #include "params.h" 33 #include "params.h"
34 #include "output.h" 34 #include "output.h"
35 #include "basic-block.h" 35 #include "basic-block.h"
36 #include "cselib.h" 36 #include "cselib.h"
37 #include "target.h"
37 38
38 #ifdef INSN_SCHEDULING 39 #ifdef INSN_SCHEDULING
39 #include "sel-sched-ir.h" 40 #include "sel-sched-ir.h"
40 #include "sel-sched-dump.h" 41 #include "sel-sched-dump.h"
41 42
72 /* Switch sched_dump to TO. It must not be called twice. */ 73 /* Switch sched_dump to TO. It must not be called twice. */
73 static void 74 static void
74 switch_dump (FILE *to) 75 switch_dump (FILE *to)
75 { 76 {
76 gcc_assert (saved_sched_dump == NULL); 77 gcc_assert (saved_sched_dump == NULL);
77 78
78 saved_sched_dump = sched_dump; 79 saved_sched_dump = sched_dump;
79 sched_dump = to; 80 sched_dump = to;
80 } 81 }
81 82
82 /* Restore previously switched dump. */ 83 /* Restore previously switched dump. */
86 sched_dump = saved_sched_dump; 87 sched_dump = saved_sched_dump;
87 saved_sched_dump = NULL; 88 saved_sched_dump = NULL;
88 } 89 }
89 90
90 91
91 /* Functions for dumping instructions, av sets, and exprs. */ 92 /* Functions for dumping instructions, av sets, and exprs. */
92 93
93 /* Default flags for dumping insns. */ 94 /* Default flags for dumping insns. */
94 static int dump_insn_rtx_flags = DUMP_INSN_RTX_PATTERN; 95 static int dump_insn_rtx_flags = DUMP_INSN_RTX_PATTERN;
95 96
96 /* Default flags for dumping vinsns. */ 97 /* Default flags for dumping vinsns. */
216 void 217 void
217 debug_vinsn (vinsn_t vi) 218 debug_vinsn (vinsn_t vi)
218 { 219 {
219 switch_dump (stderr); 220 switch_dump (stderr);
220 dump_vinsn_1 (vi, debug_vinsn_flags); 221 dump_vinsn_1 (vi, debug_vinsn_flags);
221 sel_print ("\n"); 222 sel_print ("\n");
222 restore_dump (); 223 restore_dump ();
223 } 224 }
224 225
225 /* Dump EXPR honoring flags. */ 226 /* Dump EXPR honoring flags. */
226 void 227 void
278 int orig_bb = EXPR_ORIG_BB_INDEX (expr); 279 int orig_bb = EXPR_ORIG_BB_INDEX (expr);
279 280
280 if (orig_bb != 0) 281 if (orig_bb != 0)
281 sel_print ("orig_bb:%d;", orig_bb); 282 sel_print ("orig_bb:%d;", orig_bb);
282 } 283 }
283 284
284 if (EXPR_TARGET_AVAILABLE (expr) < 1) 285 if (EXPR_TARGET_AVAILABLE (expr) < 1)
285 sel_print ("target:%d;", EXPR_TARGET_AVAILABLE (expr)); 286 sel_print ("target:%d;", EXPR_TARGET_AVAILABLE (expr));
286 sel_print ("]"); 287 sel_print ("]");
287 } 288 }
288 289
365 void 366 void
366 dump_av_set (av_set_t av) 367 dump_av_set (av_set_t av)
367 { 368 {
368 av_set_iterator i; 369 av_set_iterator i;
369 expr_t expr; 370 expr_t expr;
370 371
371 if (!sched_dump_to_dot_p) 372 if (!sched_dump_to_dot_p)
372 sel_print ("{"); 373 sel_print ("{");
373 374
374 FOR_EACH_EXPR (expr, i, av) 375 FOR_EACH_EXPR (expr, i, av)
375 { 376 {
376 dump_expr (expr); 377 dump_expr (expr);
377 if (!sched_dump_to_dot_p) 378 if (!sched_dump_to_dot_p)
378 sel_print (" "); 379 sel_print (" ");
379 else 380 else
380 sel_print ("\n"); 381 sel_print ("\n");
381 } 382 }
382 383
383 if (!sched_dump_to_dot_p) 384 if (!sched_dump_to_dot_p)
384 sel_print ("}"); 385 sel_print ("}");
385 } 386 }
386 387
387 /* Dumps lvset LV. */ 388 /* Dumps lvset LV. */
396 else 397 else
397 { 398 {
398 unsigned i; 399 unsigned i;
399 reg_set_iterator rsi; 400 reg_set_iterator rsi;
400 int count = 0; 401 int count = 0;
401 402
402 EXECUTE_IF_SET_IN_REG_SET (lv, 0, i, rsi) 403 EXECUTE_IF_SET_IN_REG_SET (lv, 0, i, rsi)
403 { 404 {
404 sel_print (" %d", i); 405 sel_print (" %d", i);
405 if (i < FIRST_PSEUDO_REGISTER) 406 if (i < FIRST_PSEUDO_REGISTER)
406 { 407 {
407 sel_print (" [%s]", reg_names[i]); 408 sel_print (" [%s]", reg_names[i]);
408 ++count; 409 ++count;
409 } 410 }
410 411
411 ++count; 412 ++count;
412 413
413 if (sched_dump_to_dot_p && count == 12) 414 if (sched_dump_to_dot_p && count == 12)
414 { 415 {
415 count = 0; 416 count = 0;
416 sel_print ("\n"); 417 sel_print ("\n");
417 } 418 }
418 } 419 }
419 } 420 }
420 421
421 sel_print ("}\n"); 422 sel_print ("}\n");
422 } 423 }
423 424
424 /* Dumps a list of instructions pointed to by P. */ 425 /* Dumps a list of instructions pointed to by P. */
425 static void 426 static void
437 dump_blist (blist_t bnds) 438 dump_blist (blist_t bnds)
438 { 439 {
439 for (; bnds; bnds = BLIST_NEXT (bnds)) 440 for (; bnds; bnds = BLIST_NEXT (bnds))
440 { 441 {
441 bnd_t bnd = BLIST_BND (bnds); 442 bnd_t bnd = BLIST_BND (bnds);
442 443
443 sel_print ("[to: %d; ptr: ", INSN_UID (BND_TO (bnd))); 444 sel_print ("[to: %d; ptr: ", INSN_UID (BND_TO (bnd)));
444 dump_ilist (BND_PTR (bnd)); 445 dump_ilist (BND_PTR (bnd));
445 sel_print ("] "); 446 sel_print ("] ");
446 } 447 }
447 } 448 }
462 void 463 void
463 dump_insn_vector (rtx_vec_t succs) 464 dump_insn_vector (rtx_vec_t succs)
464 { 465 {
465 int i; 466 int i;
466 rtx succ; 467 rtx succ;
467 468
468 for (i = 0; VEC_iterate (rtx, succs, i, succ); i++) 469 for (i = 0; VEC_iterate (rtx, succs, i, succ); i++)
469 if (succ) 470 if (succ)
470 dump_insn (succ); 471 dump_insn (succ);
471 else 472 else
472 sel_print ("NULL "); 473 sel_print ("NULL ");
498 const char * 499 const char *
499 sel_print_insn (const_rtx insn, int aligned ATTRIBUTE_UNUSED) 500 sel_print_insn (const_rtx insn, int aligned ATTRIBUTE_UNUSED)
500 { 501 {
501 static char buf[80]; 502 static char buf[80];
502 503
503 /* '+' before insn means it is a new cycle start and it's not been 504 /* '+' before insn means it is a new cycle start and it's not been
504 scheduled yet. '>' - has been scheduled. */ 505 scheduled yet. '>' - has been scheduled. */
505 if (s_i_d && INSN_LUID (insn) > 0) 506 if (s_i_d && INSN_LUID (insn) > 0)
506 if (GET_MODE (insn) == TImode) 507 if (GET_MODE (insn) == TImode)
507 sprintf (buf, "%s %4d", 508 sprintf (buf, "%s %4d",
508 INSN_SCHED_TIMES (insn) > 0 ? "> " : "< ", 509 INSN_SCHED_TIMES (insn) > 0 ? "> " : "< ",
509 INSN_UID (insn)); 510 INSN_UID (insn));
510 else 511 else
511 sprintf (buf, "%s %4d", 512 sprintf (buf, "%s %4d",
512 INSN_SCHED_TIMES (insn) > 0 ? "! " : " ", 513 INSN_SCHED_TIMES (insn) > 0 ? "! " : " ",
513 INSN_UID (insn)); 514 INSN_UID (insn));
514 else 515 else
515 if (GET_MODE (insn) == TImode) 516 if (GET_MODE (insn) == TImode)
516 sprintf (buf, "+ %4d", INSN_UID (insn)); 517 sprintf (buf, "+ %4d", INSN_UID (insn));
517 else 518 else
535 536
536 char *p = buf; 537 char *p = buf;
537 do 538 do
538 { 539 {
539 p = strstr (p, str1); 540 p = strstr (p, str1);
540 if (p) 541 if (p)
541 { 542 {
542 char *p1 = p + str1_len; 543 char *p1 = p + str1_len;
543 /* Copy the rest of buf and '\0'. */ 544 /* Copy the rest of buf and '\0'. */
544 int n = buf + buf_len - p1; 545 int n = buf + buf_len - p1;
545 int i; 546 int i;
553 p1[i + diff] = p1[i]; 554 p1[i + diff] = p1[i];
554 555
555 /* Copy str2. */ 556 /* Copy str2. */
556 for (i = 0; i < str2_len; i++) 557 for (i = 0; i < str2_len; i++)
557 p[i] = str2[i]; 558 p[i] = str2[i];
558 559
559 p += str2_len; 560 p += str2_len;
560 buf_len += diff; 561 buf_len += diff;
561 } 562 }
562 563
563 } 564 }
568 void 569 void
569 sel_prepare_string_for_dot_label (char *buf) 570 sel_prepare_string_for_dot_label (char *buf)
570 { 571 {
571 static char specials_from[7][2] = { "<", ">", "{", "|", "}", "\"", 572 static char specials_from[7][2] = { "<", ">", "{", "|", "}", "\"",
572 "\n" }; 573 "\n" };
573 static char specials_to[7][3] = { "\\<", "\\>", "\\{", "\\|", "\\}", 574 static char specials_to[7][3] = { "\\<", "\\>", "\\{", "\\|", "\\}",
574 "\\\"", "\\l" }; 575 "\\\"", "\\l" };
575 unsigned i; 576 unsigned i;
576 577
577 for (i = 0; i < 7; i++) 578 for (i = 0; i < 7; i++)
578 replace_str_in_buf (buf, specials_from[i], specials_to[i]); 579 replace_str_in_buf (buf, specials_from[i], specials_to[i]);
798 799
799 restore_dump (); 800 restore_dump ();
800 sched_dump_to_dot_p = false; 801 sched_dump_to_dot_p = false;
801 } 802 }
802 803
803 /* Dump a cfg region to the file specified by TAG honoring flags. 804 /* Dump a cfg region to the file specified by TAG honoring flags.
804 The file is created by the function. */ 805 The file is created by the function. */
805 static void 806 static void
806 sel_dump_cfg_1 (const char *tag, int flags) 807 sel_dump_cfg_1 (const char *tag, int flags)
807 { 808 {
808 char *buf; 809 char *buf;
929 /* Print a current cselib value for X's address to stderr. */ 930 /* Print a current cselib value for X's address to stderr. */
930 rtx 931 rtx
931 debug_mem_addr_value (rtx x) 932 debug_mem_addr_value (rtx x)
932 { 933 {
933 rtx t, addr; 934 rtx t, addr;
935 enum machine_mode address_mode;
934 936
935 gcc_assert (MEM_P (x)); 937 gcc_assert (MEM_P (x));
938 address_mode = targetm.addr_space.address_mode (MEM_ADDR_SPACE (x));
939
936 t = shallow_copy_rtx (x); 940 t = shallow_copy_rtx (x);
937 if (cselib_lookup (XEXP (t, 0), Pmode, 0)) 941 if (cselib_lookup (XEXP (t, 0), address_mode, 0))
938 XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0)); 942 XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0));
939 943
940 t = canon_rtx (t); 944 t = canon_rtx (t);
941 addr = get_addr (XEXP (t, 0)); 945 addr = get_addr (XEXP (t, 0));
942 debug_rtx (t); 946 debug_rtx (t);