[llvm] 0c47628 - Re-commit "[RISCV] Properly support RISCVISD::LLA in getTargetConstantFromLoad. (#145112)"
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 21 10:19:49 PDT 2025
Author: Craig Topper
Date: 2025-06-21T10:18:49-07:00
New Revision: 0c47628515dc80bd50599f936614da07943572a4
URL: https://github.com/llvm/llvm-project/commit/0c47628515dc80bd50599f936614da07943572a4
DIFF: https://github.com/llvm/llvm-project/commit/0c47628515dc80bd50599f936614da07943572a4.diff
LOG: Re-commit "[RISCV] Properly support RISCVISD::LLA in getTargetConstantFromLoad. (#145112)"
With proper co-author.
Original message:
We need to pass the operand of LLA to GetSupportedConstantPool.
This replaces #142292 with test from there added as a pre-commit
for both medlow and pic.
Co-authored-by: Carl Nettelblad carl.nettelblad at rapidity-space.com
Added:
llvm/test/CodeGen/RISCV/constpool-known-bits.ll
Modified:
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
index 0c54101a11568..9e568052079ce 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -21062,7 +21062,7 @@ RISCVTargetLowering::getTargetConstantFromLoad(LoadSDNode *Ld) const {
// Simple case, LLA.
if (Ptr.getOpcode() == RISCVISD::LLA) {
- auto *CNode = GetSupportedConstantPool(Ptr);
+ auto *CNode = GetSupportedConstantPool(Ptr.getOperand(0));
if (!CNode || CNode->getTargetFlags() != 0)
return nullptr;
diff --git a/llvm/test/CodeGen/RISCV/constpool-known-bits.ll b/llvm/test/CodeGen/RISCV/constpool-known-bits.ll
new file mode 100644
index 0000000000000..85a6de1095a03
--- /dev/null
+++ b/llvm/test/CodeGen/RISCV/constpool-known-bits.ll
@@ -0,0 +1,69 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc < %s -O0 -mtriple=riscv64 -mattr=+m | FileCheck %s --check-prefix=NOPIC
+; RUN: llc < %s -O0 -mtriple=riscv64 -mattr=+m -relocation-model=pic | FileCheck %s --check-prefix=PIC
+
+define i64 @test(i32 noundef signext %c, i32 noundef signext %d) {
+; NOPIC-LABEL: test:
+; NOPIC: # %bb.0: # %entry
+; NOPIC-NEXT: # kill: def $x11 killed $x10
+; NOPIC-NEXT: slli a0, a0, 32
+; NOPIC-NEXT: srli a1, a0, 32
+; NOPIC-NEXT: lui a0, %hi(.LCPI0_0)
+; NOPIC-NEXT: ld a0, %lo(.LCPI0_0)(a0)
+; NOPIC-NEXT: mul a0, a1, a0
+; NOPIC-NEXT: addi a0, a0, 127
+; NOPIC-NEXT: mul a0, a1, a0
+; NOPIC-NEXT: lui a2, %hi(.LCPI0_1)
+; NOPIC-NEXT: ld a2, %lo(.LCPI0_1)(a2)
+; NOPIC-NEXT: mul a0, a0, a2
+; NOPIC-NEXT: add a0, a0, a1
+; NOPIC-NEXT: lui a1, 1015920
+; NOPIC-NEXT: addi a1, a1, 1541
+; NOPIC-NEXT: slli a1, a1, 16
+; NOPIC-NEXT: addi a1, a1, 1027
+; NOPIC-NEXT: slli a1, a1, 20
+; NOPIC-NEXT: add a0, a0, a1
+; NOPIC-NEXT: ret
+;
+; PIC-LABEL: test:
+; PIC: # %bb.0: # %entry
+; PIC-NEXT: # kill: def $x11 killed $x10
+; PIC-NEXT: slli a0, a0, 32
+; PIC-NEXT: srli a1, a0, 32
+; PIC-NEXT: .Lpcrel_hi0:
+; PIC-NEXT: auipc a0, %pcrel_hi(.LCPI0_0)
+; PIC-NEXT: addi a0, a0, %pcrel_lo(.Lpcrel_hi0)
+; PIC-NEXT: ld a0, 0(a0)
+; PIC-NEXT: mul a0, a1, a0
+; PIC-NEXT: addi a0, a0, 127
+; PIC-NEXT: mul a0, a1, a0
+; PIC-NEXT: .Lpcrel_hi1:
+; PIC-NEXT: auipc a2, %pcrel_hi(.LCPI0_1)
+; PIC-NEXT: addi a2, a2, %pcrel_lo(.Lpcrel_hi1)
+; PIC-NEXT: ld a2, 0(a2)
+; PIC-NEXT: mul a0, a0, a2
+; PIC-NEXT: add a0, a0, a1
+; PIC-NEXT: lui a1, 1015920
+; PIC-NEXT: addi a1, a1, 1541
+; PIC-NEXT: slli a1, a1, 16
+; PIC-NEXT: addi a1, a1, 1027
+; PIC-NEXT: slli a1, a1, 20
+; PIC-NEXT: add a0, a0, a1
+; PIC-NEXT: ret
+entry:
+ %or1 = or i64 -9191740941672644608, 4096
+ %or2 = or i64 -9191740941672644608, 8192
+ %or3 = or i64 -9191740941672644608, 16384
+ %conv = zext i32 %c to i64
+ %donv = zext i32 %d to i64
+ %3 = mul i64 %or1, %conv
+ %4 = mul i64 %or2, %donv
+ %5 = mul i64 %or3, %conv
+ %6 = add i64 %3, %4
+ %7 = add i64 %6, %5
+ %8 = or i64 %5, 127
+ %9 = mul i64 %3, %8
+ %add = add i64 -9191740941672644608, %9
+ %add2 = add i64 %add, %conv
+ ret i64 %add2
+}
More information about the llvm-commits
mailing list