Hi, I am trying to walk through the body of the current_function_decl in TARGET_FUNCTION_OK_FOR_SIBCALL for a specific arch in gcc 4.3.4. I am using DECL_SAVED_TREE but it's not working as I expect. For the c file: extern unsigned int source_size(void *s); extern void source_drop_no_checks(void *s, unsigned int amount);
void source_drop(void *s, unsigned int amount) { if(s && amount <= source_size(s)) { source_drop_no_checks(s, amount); } } I have in my TARGET_FUNCTION_OK_FOR_SIBCALL the following: fprintf(stderr,"INFO_SIBCALL %s[%s,%...@%d]\n", IDENTIFIER_POINTER(DECL_NAME(current_function_decl)), DECL_SOURCE_FILE(current_function_decl), DECL_SOURCE_LINE(current_function_decl), getpid()); print_c_tree(stderr, DECL_SAVED_TREE(current_function_decl)); which prints: INFO_SIBCALL source_drop[codegen.c,5...@11875] if (s != 0B) so when I walk the tree with tree_walk I only go through the nodes of 'if(...)', 's' and '0B'. But the function is more than that. A simple tree dump results in codegen.c.026t.einline2: ;; Function source_drop (source_drop) source_drop (sD.1177, amountD.1178) { unsigned intD.3 D.1181; # BLOCK 2 # PRED: ENTRY (fallthru) if (sD.1177_1(D) != 0B) goto <bb 3>; else goto <bb 5>; # SUCC: 3 (true) 5 (false) # BLOCK 3 # PRED: 2 (true) D.1181_2 = source_size (sD.1177_1(D)); if (amountD.1178_3(D) <= D.1181_2) goto <bb 4>; else goto <bb 5>; # SUCC: 4 (true) 5 (false) # BLOCK 4 # PRED: 3 (true) source_drop_no_checks (sD.1177_1(D), amountD.1178_3(D)); # SUCC: 5 (fallthru) # BLOCK 5 # PRED: 2 (false) 3 (false) 4 (fallthru) return; # SUCC: EXIT } So it seems I am only getting back the first part of basic block 2... but I want to go through all of them. How can I do this? Cheers, -- Paulo Jorge Matos - pocmatos at gmail.com http://www.pmatos.net