------- Comment #13 from irar at il dot ibm dot com 2010-01-18 12:17 ------- Does something like this make sense? (With this patch we will never use peeling for function parameters, unless the builtin returns OK to peel for packed types).
Index: tree-vect-data-refs.c =================================================================== --- tree-vect-data-refs.c (revision 155880) +++ tree-vect-data-refs.c (working copy) @@ -1010,10 +1010,29 @@ vector_alignment_reachable_p (struct dat tree type = (TREE_TYPE (DR_REF (dr))); tree ba = DR_BASE_OBJECT (dr); bool is_packed = false; + tree tmp = TREE_TYPE (DR_BASE_ADDRESS (dr)); if (ba) is_packed = contains_packed_reference (ba); + is_packed = is_packed || contains_packed_reference (DR_BASE_ADDRESS (dr)); + + if (!is_packed) + { + while (tmp) + { + is_packed = TYPE_PACKED (tmp); + if (is_packed) + break; + + tmp = TREE_TYPE (tmp); + } + } + + if (TREE_CODE (DR_BASE_ADDRESS (dr)) == SSA_NAME + && TREE_CODE (SSA_NAME_VAR (DR_BASE_ADDRESS (dr))) == PARM_DECL) + is_packed = true; + if (vect_print_dump_info (REPORT_DETAILS)) fprintf (vect_dump, "Unknown misalignment, is_packed = %d",is_packed); if (targetm.vectorize.vector_alignment_reachable (type, is_packed)) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42652