https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88450
--- Comment #19 from Jakub Jelinek <jakub at gcc dot gnu.org> --- And, finally found the reason why r266345 causes the wrong-code. The problem is that the align_dynamic_address instructions are emitted at whatever spot in the function asked for the temporary slot, those instructions initialize some pseudo register and that pseudo register is used in the MEM slot returned from assign_stack_local_1. But one of the assign_stack_local_1 callers, assign_stack_temp_for_type, is able to reuse such temporary slots, and e.g. on the gimplify.ii test it does this, first (mem/c:BLK (reg/f:DI 1536) [0 A256]) is created for BLKmode, 24, gimple_stmt_iterator type and then in the same compiled function returned again in two other spots. The problem is that the reg/f:DI 1536 initialization code doesn't dominate the other two spots, so those use uninitialized pointer there.