Hello, > > Hm, the testcase looks like it should actually pass even for strict- > align > targets. Martin? > > Richard. >
I debugged the GCC and observed the below situation. Here is the code snippet of this case: static int __attribute__((noinline)) ox (struct bovid *cow) { cow->red = cow->red + cow->green + cow->green; return 0; } int main() { struct bovid cow; ..... ox (&cow); .... } In GCC the function access_precludes_ipa_sra_p will call function tree_non_model_aligned_mem_p to check the align status of the access->expr. For the case, the access->expr is a gimple expr in function ox: cow_1(D)->red$3 = void. The mode for this expr is SFmode. Because STRICT_ALIGNMENT is defined to 1, so the function get_object_alignment is called and return the alignment for this expr is 8 bit. While the required alignment for SFmode is 32 bit. So this expr is regarded as unaligned. The SRA is stopped. Hope this investigation is helpful. BR, Terry