https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96153
Iain Buclaw <ibuclaw at gdcproject dot org> changed: What |Removed |Added ---------------------------------------------------------------------------- Attachment #49006|0 |1 is obsolete| | --- Comment #5 from Iain Buclaw <ibuclaw at gdcproject dot org> --- Created attachment 49010 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49010&action=edit inline memset v2 Slight tweak to the patch to use indirect_ref instead (as mem_ref wasn't understood either). Generated code looks a lot more sensible now. x86_64 -O1: // 0..128 = 0 MEM[(uint128_t *)&D.4341] = 0; // 128..192 = 0 MEM[(ulong *)&D.4341 + 16B] = 0; // 0..32 = 12 D.4341.payload = 12; // 64..128 = 18446744073709551615 D.4341.hook.var1 = 18446744073709551615; // 128..160 = 4294967295 D.4341.hook.var2 = 4294967295; x86_64 -O2: // 0..64 = 12 MEM <unsigned long> [(void *)&D.4341] = 12; // 64..128 = 18446744073709551615 MEM <unsigned long> [(void *)&D.4341 + 8B] = 18446744073709551615; // 128..192 = 4294967295 MEM <unsigned long> [(void *)&D.4341 + 16B] = 4294967295; SPARC64 -O1: // 0..128 = 0 MEM[(uint128_t *)&D.1303] = 0; // 128..192 = 0 MEM[(ulong *)&D.1303 + 16B] = 0; // 0..32 = 12 D.1303.payload = 12; // 64..128 = 18446744073709551615 D.1303.hook.var1 = 18446744073709551615; // 128..160 = 4294967295 D.1303.hook.var2 = 4294967295; SPARC64 -O2: // 0..64 = 12, 64..128 = 18446744073709551615 MEM <uint128_t> [(void *)&D.1048] = 0xc00000000ffffffffffffffff; // 128..192 = 18446744069414584320 MEM <ulong> [(void *)&D.1048 + 16B] = 18446744069414584320;