[llvm] [AArch64] Add CodeGen support for FEAT_CPA (PR #79569)

David Green via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 26 02:38:29 PST 2024


https://github.com/davemgreen commented:

I don't think the patterns will work for SDAG, it doesn't know the difference between a i64 and a ptr. Please add a test like this and make sure it doesn't miscompile:
```
define i64 @subi64(i64 %ptr, i32 %index) {
; CHECK-CPA-O0-LABEL: subi64:
; CHECK-CPA-O0:       // %bb.0: // %entry
; CHECK-CPA-O0-NEXT:    mov x8, #-1 // =0xffffffffffffffff
; CHECK-CPA-O0-NEXT:    addpt x0, x0, x8
; CHECK-CPA-O0-NEXT:    ret
;
; CHECK-CPA-O3-LABEL: subi64:
; CHECK-CPA-O3:       // %bb.0: // %entry
; CHECK-CPA-O3-NEXT:    mov x8, #-1 // =0xffffffffffffffff
; CHECK-CPA-O3-NEXT:    addpt x0, x0, x8
; CHECK-CPA-O3-NEXT:    ret
;
; CHECK-NOCPA-O0-LABEL: subi64:
; CHECK-NOCPA-O0:       // %bb.0: // %entry
; CHECK-NOCPA-O0-NEXT:    subs x0, x0, #1
; CHECK-NOCPA-O0-NEXT:    ret
;
; CHECK-NOCPA-O3-LABEL: subi64:
; CHECK-NOCPA-O3:       // %bb.0: // %entry
; CHECK-NOCPA-O3-NEXT:    sub x0, x0, #1
; CHECK-NOCPA-O3-NEXT:    ret
entry:
  %incdec.ptr.i.i.i = add i64 %ptr, -1
  ret i64 %incdec.ptr.i.i.i
}
```

It might be better too to have a GlobalISel patch and a SelectionDAG version.

https://github.com/llvm/llvm-project/pull/79569


More information about the llvm-commits mailing list