https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116398

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Part of the reason why late_combine1 fails to do anything here is:
```
      // Avoid increasing the complexity of instructions that
      // reference allocatable hard registers.
      if (!REG_P (SET_SRC (set))
          && !reload_completed
          && (accesses_include_nonfixed_hard_registers (use_insn->uses ())
              || accesses_include_nonfixed_hard_registers (use_insn->defs ())))
        return false;
```

The `accesses_include_nonfixed_hard_registers (use_insn->defs ())` part
specifically. Though I am no sure if that is too conserative.

Anyways there is some missing recog here too.


Also note the code generation is worse if you have:
```
void shift_53_i_(int data, __int128_t *a) {
    *a = (__int128_t)data << 53;
}

```

(GCC 15 is only slightly worse than GCC 14 for the above).

Reply via email to