https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107837
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2022-11-23 Summary|Missed optimization: Using |[10/11/12/13 Regression] |memcpy to load a struct |Missed optimization: Using |unnecessary uses stack |memcpy to load a struct |space |unnecessary uses stack | |space Keywords| |needs-bisection Known to work| |4.5.3, 4.7.3, 5.1.0, 7.5.0 Target Milestone|--- |10.5 Known to fail| |8.1.0 Ever confirmed|0 |1 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Confirmed, GCC 7 did the right thing ... Even on the gimple level: x$v$0_8 = MEM[(char * {ref-all})src_6(D)]; x$v$1_9 = MEM[(char * {ref-all})src_6(D) + 8B]; x$v$2_10 = MEM[(char * {ref-all})src_6(D) + 16B]; x$v$3_11 = MEM[(char * {ref-all})src_6(D) + 24B]; _1 = __builtin_bswap64 (x$v$3_11); _2 = __builtin_bswap64 (x$v$2_10); _3 = __builtin_bswap64 (x$v$1_9); _4 = __builtin_bswap64 (x$v$0_8); MEM[(struct uint256 *)o_7(D)] = _1; MEM[(struct uint256 *)o_7(D) + 8B] = _2; MEM[(struct uint256 *)o_7(D) + 16B] = _3; MEM[(struct uint256 *)o_7(D) + 24B] = _4;