From 4b7ecd71d9ddffccafed4d148daf5008f676607b Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Fri, 20 Jun 2025 15:24:26 -0700 Subject: [PATCH 1/2] Pre-commit test --- .../CodeGen/RISCV/constpool-known-bits.ll | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 llvm/test/CodeGen/RISCV/constpool-known-bits.ll 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..ec63ade913010 --- /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: ori 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 +} From 43c6c9aab2ecd1e489f744cbe6231d89df9dc83e Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Fri, 20 Jun 2025 15:26:14 -0700 Subject: [PATCH 2/2] [RISCV] Properly support RISCVISD::LLA in getTargetConstantFromLoad. 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. --- llvm/lib/Target/RISCV/RISCVISelLowering.cpp | 2 +- llvm/test/CodeGen/RISCV/constpool-known-bits.ll | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp index 139fa7ba35625..3d46e68e06950 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 index ec63ade913010..85a6de1095a03 100644 --- a/llvm/test/CodeGen/RISCV/constpool-known-bits.ll +++ b/llvm/test/CodeGen/RISCV/constpool-known-bits.ll @@ -35,7 +35,7 @@ define i64 @test(i32 noundef signext %c, i32 noundef signext %d) { ; PIC-NEXT: addi a0, a0, %pcrel_lo(.Lpcrel_hi0) ; PIC-NEXT: ld a0, 0(a0) ; PIC-NEXT: mul a0, a1, a0 -; PIC-NEXT: ori a0, a0, 127 +; PIC-NEXT: addi a0, a0, 127 ; PIC-NEXT: mul a0, a1, a0 ; PIC-NEXT: .Lpcrel_hi1: ; PIC-NEXT: auipc a2, %pcrel_hi(.LCPI0_1)