[llvm] 0cd3fd4 - [RISCV][test] Add (add x, C) -> (sub x, -C) tests

Piotr Fusik via llvm-commits llvm-commits at lists.llvm.org
Sun Apr 27 23:35:22 PDT 2025


Author: Piotr Fusik
Date: 2025-04-28T08:34:56+02:00
New Revision: 0cd3fd4c5c636311f044c395ccd7f02b8039fca8

URL: https://github.com/llvm/llvm-project/commit/0cd3fd4c5c636311f044c395ccd7f02b8039fca8
DIFF: https://github.com/llvm/llvm-project/commit/0cd3fd4c5c636311f044c395ccd7f02b8039fca8.diff

LOG: [RISCV][test] Add (add x, C) -> (sub x, -C) tests

Added: 
    llvm/test/CodeGen/RISCV/add-imm64-to-sub.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/RISCV/add-imm64-to-sub.ll b/llvm/test/CodeGen/RISCV/add-imm64-to-sub.ll
new file mode 100644
index 0000000000000..4f6555393eb03
--- /dev/null
+++ b/llvm/test/CodeGen/RISCV/add-imm64-to-sub.ll
@@ -0,0 +1,57 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=riscv64 < %s | FileCheck %s --check-prefixes=CHECK,NOZBS
+; RUN: llc -mtriple=riscv64 -mattr=+zbs < %s | FileCheck %s --check-prefixes=CHECK,ZBS
+
+define i64 @add_b31(i64 %x) {
+; NOZBS-LABEL: add_b31:
+; NOZBS:       # %bb.0:
+; NOZBS-NEXT:    li a1, 1
+; NOZBS-NEXT:    slli a1, a1, 31
+; NOZBS-NEXT:    add a0, a0, a1
+; NOZBS-NEXT:    ret
+;
+; ZBS-LABEL: add_b31:
+; ZBS:       # %bb.0:
+; ZBS-NEXT:    bseti a1, zero, 31
+; ZBS-NEXT:    add a0, a0, a1
+; ZBS-NEXT:    ret
+  %add = add i64 %x, 2147483648
+  ret i64 %add
+}
+
+define i64 @add_b32(i64 %x) {
+; CHECK-LABEL: add_b32:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    li a1, -1
+; CHECK-NEXT:    slli a1, a1, 32
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    ret
+  %add = add i64 %x, -4294967296
+  ret i64 %add
+}
+
+define i64 @sub_0xffffffffff(i64 %x) {
+; CHECK-LABEL: sub_0xffffffffff:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    li a1, -1
+; CHECK-NEXT:    slli a1, a1, 40
+; CHECK-NEXT:    addi a1, a1, 1
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    ret
+  %sub = sub i64 %x, 1099511627775
+  ret i64 %sub
+}
+
+define i64 @add_multiuse(i64 %x) {
+; CHECK-LABEL: add_multiuse:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    li a1, -1
+; CHECK-NEXT:    slli a1, a1, 40
+; CHECK-NEXT:    addi a1, a1, 1
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    and a0, a0, a1
+; CHECK-NEXT:    ret
+  %add = add i64 %x, -1099511627775
+  %xor = and i64 %add, -1099511627775
+  ret i64 %xor
+}


        


More information about the llvm-commits mailing list