[llvm] 2e6bfa8 - [RISCV] Update pr58511.ll to not use mul by constant that can be converted to shift.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Sat May 20 19:08:27 PDT 2023


Author: Craig Topper
Date: 2023-05-20T19:08:05-07:00
New Revision: 2e6bfa8ed08c94e2edbe673379c90012efc95abb

URL: https://github.com/llvm/llvm-project/commit/2e6bfa8ed08c94e2edbe673379c90012efc95abb
DIFF: https://github.com/llvm/llvm-project/commit/2e6bfa8ed08c94e2edbe673379c90012efc95abb.diff

LOG: [RISCV] Update pr58511.ll to not use mul by constant that can be converted to shift.

Normally a mul by a power 2 will be converted to shift by InstCombine.
Hoping this will make D127115 not affect this test so much.

I've verified the change still fails with the original DAGCombiner
bug.

Added: 
    

Modified: 
    llvm/test/CodeGen/RISCV/pr58511.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/RISCV/pr58511.ll b/llvm/test/CodeGen/RISCV/pr58511.ll
index 8b67370abfe4..628090364f84 100644
--- a/llvm/test/CodeGen/RISCV/pr58511.ll
+++ b/llvm/test/CodeGen/RISCV/pr58511.ll
@@ -1,23 +1,21 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=riscv64 | FileCheck %s
+; RUN: llc < %s -mtriple=riscv64 -mattr=+m | FileCheck %s
 
 define i32 @f(i1 %0, i32 %1, ptr %2) {
 ; CHECK-LABEL: f:
 ; CHECK:       # %bb.0: # %BB
-; CHECK-NEXT:    slli a3, a1, 11
-; CHECK-NEXT:    slli a1, a1, 12
-; CHECK-NEXT:    subw a1, a1, a3
+; CHECK-NEXT:    lui a3, 4097
+; CHECK-NEXT:    addiw a3, a3, -2047
+; CHECK-NEXT:    mul a1, a1, a3
 ; CHECK-NEXT:    slli a0, a0, 63
 ; CHECK-NEXT:    srai a0, a0, 63
-; CHECK-NEXT:    li a3, 1
-; CHECK-NEXT:    slli a3, a3, 11
 ; CHECK-NEXT:    or a0, a0, a3
 ; CHECK-NEXT:    sw a1, 0(a2)
 ; CHECK-NEXT:    ret
 BB:
   %I = select i1 %0, i32 -1, i32 0
-  %I1 = mul i32 %1, 2048
-  %I2 = or i32 2048, %I
+  %I1 = mul i32 %1, 16779265
+  %I2 = or i32 16779265, %I
   store i32 %I1, ptr %2
   ret i32 %I2
 }
@@ -25,20 +23,18 @@ BB:
 define i32 @g(i1 %0, i32 %1, ptr %2) {
 ; CHECK-LABEL: g:
 ; CHECK:       # %bb.0: # %BB
-; CHECK-NEXT:    slli a3, a1, 11
-; CHECK-NEXT:    slli a1, a1, 12
-; CHECK-NEXT:    subw a1, a1, a3
+; CHECK-NEXT:    lui a3, 4097
+; CHECK-NEXT:    addiw a3, a3, -2047
+; CHECK-NEXT:    mul a1, a1, a3
 ; CHECK-NEXT:    andi a0, a0, 1
 ; CHECK-NEXT:    addi a0, a0, -1
-; CHECK-NEXT:    li a3, 1
-; CHECK-NEXT:    slli a3, a3, 11
 ; CHECK-NEXT:    or a0, a0, a3
 ; CHECK-NEXT:    sw a1, 0(a2)
 ; CHECK-NEXT:    ret
 BB:
   %I = select i1 %0, i32 0, i32 -1
-  %I1 = mul i32 %1, 2048
-  %I2 = or i32 2048, %I
+  %I1 = mul i32 %1, 16779265
+  %I2 = or i32 16779265, %I
   store i32 %I1, ptr %2
   ret i32 %I2
 }
@@ -46,17 +42,18 @@ BB:
 define i32 @h(i1 %0, i32 %1, ptr %2) {
 ; CHECK-LABEL: h:
 ; CHECK:       # %bb.0: # %BB
-; CHECK-NEXT:    slli a3, a1, 11
-; CHECK-NEXT:    slli a1, a1, 12
-; CHECK-NEXT:    subw a1, a1, a3
-; CHECK-NEXT:    andi a0, a0, 1
-; CHECK-NEXT:    slli a0, a0, 11
+; CHECK-NEXT:    lui a3, 4097
+; CHECK-NEXT:    addiw a3, a3, -2047
+; CHECK-NEXT:    mul a1, a1, a3
+; CHECK-NEXT:    slli a0, a0, 63
+; CHECK-NEXT:    srai a0, a0, 63
+; CHECK-NEXT:    and a0, a0, a3
 ; CHECK-NEXT:    sw a1, 0(a2)
 ; CHECK-NEXT:    ret
 BB:
   %I = select i1 %0, i32 -1, i32 0
-  %I1 = mul i32 %1, 2048
-  %I2 = and i32 2048, %I
+  %I1 = mul i32 %1, 16779265
+  %I2 = and i32 16779265, %I
   store i32 %I1, ptr %2
   ret i32 %I2
 }
@@ -65,19 +62,17 @@ define i32 @i(i1 %0, i32 %1, ptr %2) {
 ; CHECK-LABEL: i:
 ; CHECK:       # %bb.0: # %BB
 ; CHECK-NEXT:    andi a0, a0, 1
-; CHECK-NEXT:    slli a3, a1, 11
-; CHECK-NEXT:    slli a1, a1, 12
-; CHECK-NEXT:    subw a1, a1, a3
+; CHECK-NEXT:    lui a3, 4097
+; CHECK-NEXT:    addiw a3, a3, -2047
+; CHECK-NEXT:    mul a1, a1, a3
 ; CHECK-NEXT:    addi a0, a0, -1
-; CHECK-NEXT:    li a3, 1
-; CHECK-NEXT:    slli a3, a3, 11
 ; CHECK-NEXT:    and a0, a0, a3
 ; CHECK-NEXT:    sw a1, 0(a2)
 ; CHECK-NEXT:    ret
 BB:
   %I = select i1 %0, i32 0, i32 -1
-  %I1 = mul i32 %1, 2048
-  %I2 = and i32 2048, %I
+  %I1 = mul i32 %1, 16779265
+  %I2 = and i32 16779265, %I
   store i32 %I1, ptr %2
   ret i32 %I2
 }


        


More information about the llvm-commits mailing list