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

            Bug ID: 118648
           Summary: (sign_extend:di (ashiftrt:si reg CST)) is not turning
                    into (sign_extract:di (subreg (reg) CST' CST')
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
  Target Milestone: ---
            Target: aarch64

Take:
```
void g(long *a, int t)
{
  a[1] = t >> 11;
}
```

Currently this produces:
```
g:
        asr     w1, w1, 11
        sxtw    x1, w1
        str     x1, [x0, 8]
        ret
```

But GCC should be able to produce (like LLVM does):
```
g:
        sbfx    x1, x1, #11, #21
        str     x1, [x0, #8]
        ret
```

Noticed on accident while looking into PR 116398.

Reply via email to