Add parameters to all DBG makros, fixed node copy algorithm
[libfirm] / ir / ir / iropt_dbg.h
1 /*
2  * Project:     libFIRM
3  * File name:   ir/ir/iropt_dbg.h
4  * Purpose:     Debug makros used in iropt.
5  * Author:      Goetz Lindenmaier
6  * Modified by:
7  * Created:
8  * CVS-ID:      $Id$
9  * Copyright:   (c) 2001-2003 Universität Karlsruhe
10  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
11  */
12
13
14 /* This file contains makros that generate the calls to
15    update the debug information after a transformation. */
16
17 #define SIZ(x)    sizeof(x)/sizeof((x)[0])
18
19
20 /**
21  * Merge the debug info due to dead code elimination
22  */
23 #define DBG_OPT_DEAD(oldn, n)                                      \
24   do {                                                             \
25           ir_node *ons[2];                                         \
26           ons[0] = oldn;                                           \
27           ons[1] = get_Block_cfgpred(oldn, 0);                     \
28           stat_merge_nodes(&n, 1, ons, SIZ(ons), STAT_OPT_STG);    \
29           __dbg_info_merge_sets(&n, 1, ons, SIZ(ons), dbg_dead_code); \
30         } while(0)
31
32
33 /**
34  * Merge the debug info due to a straightening optimization
35  */
36 #define DBG_OPT_STG(oldn, n)                                       \
37   do {                                                             \
38           ir_node *ons[2];                                         \
39           ons[0] = oldn;                                           \
40           ons[1] = get_Block_cfgpred(oldn, 0);                     \
41           stat_merge_nodes(&n, 1, ons, SIZ(ons), STAT_OPT_STG);    \
42           __dbg_info_merge_sets(&n, 1, ons, SIZ(ons), dbg_straightening); \
43         } while(0)
44
45 /**
46  * Merge the debug info due to an if simplification
47  */
48 #define DBG_OPT_IFSIM(oldn, a, b, n)                                  \
49   do {                                                                \
50           ir_node *ons[4];                                            \
51           ons[0] = oldn;                                              \
52           ons[1] = a;                                                 \
53           ons[2] = b;                                                 \
54           ons[3] = get_Proj_pred(a);                                  \
55           stat_merge_nodes(&n, 1, ons, SIZ(ons), STAT_OPT_IFSIM);     \
56           __dbg_info_merge_sets(&n, 1, ons, SIZ(ons), dbg_if_simplification); \
57         } while(0)
58
59 /**
60  * Merge the debug info due to an algebraic_simplification
61  */
62 #define DBG_OPT_ALGSIM0(oldn, n)                                        \
63   do {                                                                  \
64           stat_merge_nodes(&n, 1, &oldn, 1, STAT_OPT_CONST_EVAL);       \
65           __dbg_info_merge_pair(n, oldn, dbg_const_eval);               \
66         } while(0)
67
68 #define DBG_OPT_ALGSIM1(oldn, a, b, n)                                \
69   do {                                                                \
70           ir_node *ons[3];                                            \
71           ons[0] = oldn;                                              \
72           ons[1] = a;                                                 \
73           ons[2] = b;                                                 \
74           stat_merge_nodes(&n, 1, ons, SIZ(ons), STAT_OPT_ALGSIM);    \
75           __dbg_info_merge_sets(&n, 1, ons, SIZ(ons), dbg_algebraic_simplification); \
76         } while(0)
77
78 #define DBG_OPT_ALGSIM2(oldn, pred, n)                                \
79   do {                                                                \
80           ir_node *ons[3];                                            \
81           ons[0] = oldn;                                              \
82           ons[1] = pred;                                              \
83           ons[2] = n;                                                 \
84           stat_merge_nodes(&n, 1, ons, SIZ(ons), STAT_OPT_ALGSIM);    \
85           __dbg_info_merge_sets(&n, 1, ons, SIZ(ons), dbg_algebraic_simplification); \
86         } while(0)
87
88 #define DBG_OPT_ALGSIM3(oldn, a, n)                                   \
89   do {                                                                \
90           ir_node *ons[2];                                            \
91           ons[0] = oldn;                                              \
92           ons[1] = a;                                                 \
93           stat_merge_nodes(&n, 1, ons, SIZ(ons), STAT_OPT_ALGSIM);    \
94           __dbg_info_merge_sets(&n, 1, ons, SIZ(ons), dbg_algebraic_simplification); \
95         } while(0)
96
97 #define DBG_OPT_PHI(oldn, first_val, n)                               \
98   do {                                                                \
99           ir_node *ons[2];                                            \
100           ons[0] = oldn;                                              \
101           ons[1] = first_val;                                         \
102           stat_merge_nodes(&n, 1, ons, SIZ(ons), STAT_OPT_PHI);       \
103           __dbg_info_merge_sets(&n, 1, ons, SIZ(ons), dbg_opt_ssa);   \
104         } while(0)
105
106
107 #define DBG_OPT_WAW(st1, st2)                                         \
108   do {                                                                \
109           ir_node *ons[2];                                            \
110           ons[0] = st1;                                               \
111           ons[1] = st2;                                               \
112           stat_merge_nodes(&st2, 1, ons, SIZ(ons), STAT_OPT_WAW);     \
113           __dbg_info_merge_sets(&st2, 1, ons, SIZ(ons), dbg_write_after_write); \
114         } while(0)
115
116 #define DBG_OPT_WAR(load, store)                                      \
117   do {                                                                \
118           ir_node *ons[2];                                            \
119           ons[0] = load;                                              \
120           ons[1] = store;                                             \
121           stat_merge_nodes(&load, 1, ons, SIZ(ons), STAT_OPT_WAR);    \
122           __dbg_info_merge_sets(&load, 1, ons, SIZ(ons), dbg_write_after_read); \
123         } while(0)
124
125 #define DBG_OPT_RAW(store, load)                                      \
126   do {                                                                \
127           ir_node *ons[2];                                            \
128           ons[0] = store;                                             \
129           ons[1] = load;                                              \
130           stat_merge_nodes(&store, 1, ons, SIZ(ons), STAT_OPT_RAW);   \
131           __dbg_info_merge_sets(&store, 1, ons, SIZ(ons), dbg_read_after_write); \
132         } while(0)
133
134 #define DBG_OPT_RAR(ld1, ld2)                                         \
135   do {                                                                \
136           ir_node *ons[2];                                            \
137           ons[0] = ld1;                                               \
138           ons[1] = ld2;                                               \
139           stat_merge_nodes(&ld1, 1, ons, SIZ(ons), STAT_OPT_RAR);     \
140           __dbg_info_merge_sets(&ld1, 1, ons, SIZ(ons), dbg_read_after_read); \
141         } while(0)
142
143 #define DBG_OPT_TUPLE(oldn, a, n)                                     \
144   do {                                                                \
145           ir_node *ons[3];                                            \
146           ons[0] = oldn;                                              \
147           ons[1] = a;                                                 \
148           ons[2] = n;                                                 \
149           stat_merge_nodes(&n, 1, ons, SIZ(ons), STAT_OPT_TUPLE);     \
150           __dbg_info_merge_sets(&n, 1, ons, SIZ(ons), dbg_opt_auxnode);      \
151         } while(0)
152
153 #define DBG_OPT_ID(oldn, n)                                           \
154   do {                                                                \
155           ir_node *ons[2];                                            \
156           ons[0] = oldn;                                              \
157           ons[1] = n;                                                 \
158           stat_merge_nodes(&n, 1, ons, SIZ(ons), STAT_OPT_ID);        \
159           __dbg_info_merge_sets(&n, 1, ons, SIZ(ons), dbg_opt_auxnode);      \
160         } while(0)