[llvm] 0c3a772 - [RISCV][test] Add tests for add.uw with a constant
Piotr Fusik via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 9 23:48:07 PDT 2025
Author: Piotr Fusik
Date: 2025-06-10T08:47:33+02:00
New Revision: 0c3a7725375ec583147429cc367320f0e8506847
URL: https://github.com/llvm/llvm-project/commit/0c3a7725375ec583147429cc367320f0e8506847
DIFF: https://github.com/llvm/llvm-project/commit/0c3a7725375ec583147429cc367320f0e8506847.diff
LOG: [RISCV][test] Add tests for add.uw with a constant
Added:
Modified:
llvm/test/CodeGen/RISCV/rv64zba.ll
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/RISCV/rv64zba.ll b/llvm/test/CodeGen/RISCV/rv64zba.ll
index e71117739b125..4d93619262be7 100644
--- a/llvm/test/CodeGen/RISCV/rv64zba.ll
+++ b/llvm/test/CodeGen/RISCV/rv64zba.ll
@@ -4411,3 +4411,135 @@ define ptr @udiv1280_gep(ptr %p, i16 zeroext %i) {
%add.ptr = getelementptr i64, ptr %p, i64 %idx.ext
ret ptr %add.ptr
}
+
+define i64 @adduw_m1(i64 %x) {
+; CHECK-LABEL: adduw_m1:
+; CHECK: # %bb.0:
+; CHECK-NEXT: li a1, -1
+; CHECK-NEXT: srli a1, a1, 32
+; CHECK-NEXT: add a0, a0, a1
+; CHECK-NEXT: ret
+ %a = add i64 %x, 4294967295
+ ret i64 %a
+}
+
+define i64 @adduw_m3(i64 %x) {
+; RV64I-LABEL: adduw_m3:
+; RV64I: # %bb.0:
+; RV64I-NEXT: li a1, 1
+; RV64I-NEXT: slli a1, a1, 32
+; RV64I-NEXT: addi a1, a1, -3
+; RV64I-NEXT: add a0, a0, a1
+; RV64I-NEXT: ret
+;
+; RV64ZBA-LABEL: adduw_m3:
+; RV64ZBA: # %bb.0:
+; RV64ZBA-NEXT: li a1, -3
+; RV64ZBA-NEXT: zext.w a1, a1
+; RV64ZBA-NEXT: add a0, a0, a1
+; RV64ZBA-NEXT: ret
+;
+; RV64XANDESPERF-LABEL: adduw_m3:
+; RV64XANDESPERF: # %bb.0:
+; RV64XANDESPERF-NEXT: li a1, 1
+; RV64XANDESPERF-NEXT: slli a1, a1, 32
+; RV64XANDESPERF-NEXT: addi a1, a1, -3
+; RV64XANDESPERF-NEXT: add a0, a0, a1
+; RV64XANDESPERF-NEXT: ret
+ %a = add i64 %x, 4294967293
+ ret i64 %a
+}
+
+define i64 @adduw_3shl30(i64 %x) {
+; CHECK-LABEL: adduw_3shl30:
+; CHECK: # %bb.0:
+; CHECK-NEXT: li a1, 3
+; CHECK-NEXT: slli a1, a1, 30
+; CHECK-NEXT: add a0, a0, a1
+; CHECK-NEXT: ret
+ %a = add i64 %x, 3221225472
+ ret i64 %a
+}
+
+define i64 @adduw_m3_multiuse(i64 %x, i64 %y) {
+; RV64I-LABEL: adduw_m3_multiuse:
+; RV64I: # %bb.0:
+; RV64I-NEXT: li a2, 1
+; RV64I-NEXT: slli a2, a2, 32
+; RV64I-NEXT: addi a2, a2, -3
+; RV64I-NEXT: add a0, a0, a2
+; RV64I-NEXT: add a1, a1, a2
+; RV64I-NEXT: or a0, a0, a1
+; RV64I-NEXT: ret
+;
+; RV64ZBA-LABEL: adduw_m3_multiuse:
+; RV64ZBA: # %bb.0:
+; RV64ZBA-NEXT: li a2, -3
+; RV64ZBA-NEXT: zext.w a2, a2
+; RV64ZBA-NEXT: add a0, a0, a2
+; RV64ZBA-NEXT: add a1, a1, a2
+; RV64ZBA-NEXT: or a0, a0, a1
+; RV64ZBA-NEXT: ret
+;
+; RV64XANDESPERF-LABEL: adduw_m3_multiuse:
+; RV64XANDESPERF: # %bb.0:
+; RV64XANDESPERF-NEXT: li a2, 1
+; RV64XANDESPERF-NEXT: slli a2, a2, 32
+; RV64XANDESPERF-NEXT: addi a2, a2, -3
+; RV64XANDESPERF-NEXT: add a0, a0, a2
+; RV64XANDESPERF-NEXT: add a1, a1, a2
+; RV64XANDESPERF-NEXT: or a0, a0, a1
+; RV64XANDESPERF-NEXT: ret
+ %a = add i64 %x, 4294967293
+ %b = add i64 %y, 4294967293
+ %c = or i64 %a, %b
+ ret i64 %c
+}
+
+define i64 @add_or_m3(i64 %x) {
+; RV64I-LABEL: add_or_m3:
+; RV64I: # %bb.0:
+; RV64I-NEXT: li a1, 1
+; RV64I-NEXT: slli a1, a1, 32
+; RV64I-NEXT: addi a1, a1, -3
+; RV64I-NEXT: or a2, a0, a1
+; RV64I-NEXT: add a0, a0, a1
+; RV64I-NEXT: add a0, a0, a2
+; RV64I-NEXT: ret
+;
+; RV64ZBA-LABEL: add_or_m3:
+; RV64ZBA: # %bb.0:
+; RV64ZBA-NEXT: li a1, -3
+; RV64ZBA-NEXT: zext.w a1, a1
+; RV64ZBA-NEXT: or a2, a0, a1
+; RV64ZBA-NEXT: add a0, a0, a1
+; RV64ZBA-NEXT: add a0, a0, a2
+; RV64ZBA-NEXT: ret
+;
+; RV64XANDESPERF-LABEL: add_or_m3:
+; RV64XANDESPERF: # %bb.0:
+; RV64XANDESPERF-NEXT: li a1, 1
+; RV64XANDESPERF-NEXT: slli a1, a1, 32
+; RV64XANDESPERF-NEXT: addi a1, a1, -3
+; RV64XANDESPERF-NEXT: or a2, a0, a1
+; RV64XANDESPERF-NEXT: add a0, a0, a1
+; RV64XANDESPERF-NEXT: add a0, a0, a2
+; RV64XANDESPERF-NEXT: ret
+ %a = add i64 %x, 4294967293
+ %o = or i64 %x, 4294967293
+ %c = add i64 %a, %o
+ ret i64 %c
+}
+
+define i64 @append_32ones(i64 %x) {
+; CHECK-LABEL: append_32ones:
+; CHECK: # %bb.0:
+; CHECK-NEXT: slli a0, a0, 32
+; CHECK-NEXT: li a1, -1
+; CHECK-NEXT: srli a1, a1, 32
+; CHECK-NEXT: or a0, a0, a1
+; CHECK-NEXT: ret
+ %s = shl i64 %x, 32
+ %o = or i64 %s, 4294967295
+ ret i64 %o
+}
More information about the llvm-commits
mailing list