Hi, consider the following code, struct x { int a; int b; int c; int d; int e[120];}; struct x *a, *b; void foo ( ) { *a = *b; }
Now for the stmt int the function foo a memcpy will be generated. However, this can be tail call optimized. My aim is to identify such opportunities in find_tail_calls in tree-tailcall.c. However, for the stmt *a.0_1 ={v} *b.1_2; var_can_have_subvars return zero for *a.0_1 . But a.0_1 is pointer to a structure and *a.0_1 is a structure and therefore can have subvars. The comment for var_can_have_subvars says /* Return true if V is a tree that we can have subvars for. Normally, this is any aggregate type. Also complex types which are not gimple registers can have subvars. */ IMHO, var_can_have_subvars for the above case should return true, but it doesnt because it fails the following test in var_can_have_subvars. /* Non decls or memory tags can never have subvars. */ if (!DECL_P (v) || MTAG_P (v)) return false; Am I missing something here ? TIA, Pranav