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

            Bug ID: 109436
           Summary: AArch64: suboptimal codegen in 128 bit constant stores
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sinan.lin at linux dot alibaba.com
  Target Milestone: ---

When splitting a 128-bit constant, there may be cases where the part that is
cut out is a constant 0. And we could use a zero register to avoid the "mov
reg, 0" instruction.

e.g.
```
__int128 Data;

void init() {
    Data = 0xfffff;
}
```

gcc
```
init:
        adrp    x0, .LANCHOR0
        add     x0, x0, :lo12:.LANCHOR0
        mov     x2, 1048575
        mov     x3, 0
        stp     x2, x3, [x0]
        ret
```


clang
```
init:
        mov     w8, #1048575
        adrp    x9, Data
        add     x9, x9, :lo12:Data
        stp     x8, xzr, [x9]
        ret
```
  • [Bug target/109436] New: A... sinan.lin at linux dot alibaba.com via Gcc-bugs

Reply via email to