[llvm] [RISCV] Expand multiplication by `(2/4/8 * 3/5/9 + 1) << N` with SHL_ADD (PR #166372)

Piotr Fusik via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 7 01:49:17 PST 2025


================
@@ -636,12 +663,26 @@ define i64 @addmul20(i64 %a, i64 %b) {
 }
 
 define i64 @addmul22(i64 %a, i64 %b) {
-; CHECK-LABEL: addmul22:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    li a2, 22
-; CHECK-NEXT:    mul a0, a0, a2
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    ret
+; RV64I-LABEL: addmul22:
+; RV64I:       # %bb.0:
+; RV64I-NEXT:    li a2, 22
+; RV64I-NEXT:    mul a0, a0, a2
+; RV64I-NEXT:    add a0, a0, a1
+; RV64I-NEXT:    ret
+;
+; RV64ZBA-LABEL: addmul22:
+; RV64ZBA:       # %bb.0:
+; RV64ZBA-NEXT:    sh2add a2, a0, a0
----------------
pfusik wrote:

Now I see these transforms are disabled when optimizing for size: https://github.com/llvm/llvm-project/blob/9a8203df3f7aecf1ffe5362866ea0cd6c44abbd8/llvm/lib/Target/RISCV/RISCVISelLowering.cpp#L16606

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


More information about the llvm-commits mailing list