[llvm] [LLVM][AArch64] Optimize sign bit tests with TST instruction for SIGN_EXTEND patterns (PR #158061)
guan jian via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 13 00:24:15 PDT 2025
================
@@ -11630,6 +11630,48 @@ SDValue AArch64TargetLowering::LowerSELECT_CC(
return DAG.getNode(ISD::AND, DL, VT, LHS, Shift);
}
+ // Check for sign bit test patterns that can use TST optimization.
+ // (SELECT_CC setlt, singn_extend_inreg, 0, tval, fval)
+ // -> TST %operand, sign_bit; CSEL
+ // (SELECT_CC setlt, singn_extend, 0, tval, fval)
+ // -> TST %operand, sign_bit; CSEL
----------------
rez5427 wrote:
I found a case would trigger this:
```
int test_sign_extend(short x) {
if (x < 0) {
return 42;
} else {
return 17;
}
}
ยทยทยท
clang generates this:
```
mov w8, #17 // =0x11
tst w0, #0x8000
mov w9, #42 // =0x2a
csel w0, w9, w8, ne
ret
```
original clang generates:
```
sxth w9, w0
mov w8, #17 // =0x11
cmp w9, #0
mov w9, #42 // =0x2a
csel w0, w9, w8, mi
ret
```
https://github.com/llvm/llvm-project/pull/158061
More information about the llvm-commits
mailing list