@@ -141,16 +141,15 @@ static struct location NO_LOCATION = {-1, -1, -1, -1};
141
141
142
142
typedef struct jump_target_label_ {
143
143
int id ;
144
- struct basicblock_ * block ;
145
144
} jump_target_label ;
146
145
147
- static struct jump_target_label_ NO_LABEL = {-1 , NULL };
146
+ static struct jump_target_label_ NO_LABEL = {-1 };
148
147
149
148
#define SAME_LABEL (L1 , L2 ) ((L1).id == (L2).id)
150
149
#define IS_LABEL (L ) (!SAME_LABEL((L), (NO_LABEL)))
151
150
152
151
#define NEW_JUMP_TARGET_LABEL (C , NAME ) \
153
- jump_target_label NAME = {cfg_new_label_id(CFG_BUILDER(C)), cfg_builder_new_block(CFG_BUILDER(C)) }; \
152
+ jump_target_label NAME = {cfg_new_label_id(CFG_BUILDER(C))}; \
154
153
if (!IS_LABEL(NAME)) { \
155
154
return 0; \
156
155
}
@@ -1322,18 +1321,12 @@ static int
1322
1321
cfg_builder_maybe_start_new_block (cfg_builder * g )
1323
1322
{
1324
1323
if (cfg_builder_current_block_is_terminated (g )) {
1325
- basicblock * b ;
1326
- if (IS_LABEL (g -> g_current_label )) {
1327
- b = g -> g_current_label .block ;
1328
- b -> b_label = g -> g_current_label .id ;
1329
- g -> g_current_label = NO_LABEL ;
1330
- }
1331
- else {
1332
- b = cfg_builder_new_block (g );
1333
- }
1324
+ basicblock * b = cfg_builder_new_block (g );
1334
1325
if (b == NULL ) {
1335
1326
return -1 ;
1336
1327
}
1328
+ b -> b_label = g -> g_current_label .id ;
1329
+ g -> g_current_label = NO_LABEL ;
1337
1330
cfg_builder_use_next_block (g , b );
1338
1331
}
1339
1332
return 0 ;
@@ -7410,16 +7403,15 @@ push_cold_blocks_to_end(cfg_builder *g, int code_flags) {
7410
7403
if (explicit_jump == NULL ) {
7411
7404
return -1 ;
7412
7405
}
7413
- jump_target_label next_label = {b -> b_next -> b_label , b -> b_next };
7406
+ jump_target_label next_label = {b -> b_next -> b_label };
7414
7407
basicblock_addop (explicit_jump , JUMP , 0 , next_label , NO_LOCATION );
7415
7408
explicit_jump -> b_cold = 1 ;
7416
7409
explicit_jump -> b_next = b -> b_next ;
7417
7410
b -> b_next = explicit_jump ;
7418
7411
7419
- /* calculate target from target_label */
7420
- /* TODO: formalize an API for adding jumps in the backend */
7412
+ /* set target */
7421
7413
struct instr * last = basicblock_last_instr (explicit_jump );
7422
- last -> i_target = last -> i_target_label . block ;
7414
+ last -> i_target = b -> b_next ;
7423
7415
last -> i_target_label = NO_LABEL ;
7424
7416
}
7425
7417
}
0 commit comments