Hi all, I have received no reply regarding this issue so I am still wondering if anyone has any idea about this since I am still struggling to understand if the tree of current_function_decl gets partially destroyed during the expand pass where TARGET_FUNCTION_OK_FOR_SIBCALL gets called.
If anybody has a faint idea on how this works, please let me know. Thanks, Paulo Matos On Thu, Jan 14, 2010 at 5:00 PM, Paulo J. Matos <pocma...@gmail.com> wrote: > 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 > -- Paulo Jorge Matos - pocmatos at gmail.com http://www.pmatos.net