[llvm] [RISCV] Lower i64 load/stores to ld/sd with Zilsd. (PR #139808)
Sam Elliott via llvm-commits
llvm-commits at lists.llvm.org
Wed May 14 10:09:31 PDT 2025
================
@@ -0,0 +1,95 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=riscv32 -mattr=+zilsd -verify-machineinstrs < %s \
+; RUN: | FileCheck -check-prefixes=CHECK,SLOW %s
+; RUN: llc -mtriple=riscv32 -mattr=+zilsd,+unaligned-scalar-mem -verify-machineinstrs < %s \
+; RUN: | FileCheck -check-prefixes=CHECK,FAST %s
+
+define i64 @load(ptr %a) nounwind {
+; CHECK-LABEL: load:
+; CHECK: # %bb.0:
+; CHECK-NEXT: ld a2, 80(a0)
+; CHECK-NEXT: ld a0, 0(a0)
+; CHECK-NEXT: mv a0, a2
+; CHECK-NEXT: mv a1, a3
+; CHECK-NEXT: ret
+ %1 = getelementptr i64, ptr %a, i32 10
+ %2 = load i64, ptr %1
+ %3 = load volatile i64, ptr %a
+ ret i64 %2
+}
+
+define void @store(ptr %a, i64 %b) nounwind {
+; CHECK-LABEL: store:
+; CHECK: # %bb.0:
+; CHECK-NEXT: mv a3, a2
+; CHECK-NEXT: mv a2, a1
+; CHECK-NEXT: sd a2, 0(a0)
+; CHECK-NEXT: sd a2, 88(a0)
+; CHECK-NEXT: ret
+ store i64 %b, ptr %a
+ %1 = getelementptr i64, ptr %a, i32 11
+ store i64 %b, ptr %1
+ ret void
+}
+
+define i64 @load_unaligned(ptr %p) {
+; SLOW-LABEL: load_unaligned:
+; SLOW: # %bb.0:
+; SLOW-NEXT: lbu a1, 1(a0)
+; SLOW-NEXT: lbu a2, 2(a0)
+; SLOW-NEXT: lbu a3, 3(a0)
+; SLOW-NEXT: lbu a4, 0(a0)
+; SLOW-NEXT: slli a1, a1, 8
+; SLOW-NEXT: slli a2, a2, 16
+; SLOW-NEXT: slli a3, a3, 24
+; SLOW-NEXT: or a1, a1, a4
+; SLOW-NEXT: lbu a4, 4(a0)
+; SLOW-NEXT: lbu a5, 5(a0)
+; SLOW-NEXT: or a2, a3, a2
+; SLOW-NEXT: lbu a3, 6(a0)
+; SLOW-NEXT: lbu a0, 7(a0)
+; SLOW-NEXT: slli a5, a5, 8
+; SLOW-NEXT: or a4, a5, a4
+; SLOW-NEXT: slli a3, a3, 16
+; SLOW-NEXT: slli a0, a0, 24
+; SLOW-NEXT: or a3, a0, a3
+; SLOW-NEXT: or a0, a2, a1
+; SLOW-NEXT: or a1, a3, a4
+; SLOW-NEXT: ret
----------------
lenary wrote:
Oh, I have the meanings of the lines the wrong way around. I thought that the SLOW lines were for zilsd not being enabled, but unaligned accesses still being enabled. Reading comprehension lessons for me I guess.
https://github.com/llvm/llvm-project/pull/139808
More information about the llvm-commits
mailing list