[llvm] [CodeGen][RISCV] Make default describeLoadedValue implementation call getConstValDefinedInReg (PR #77611)
Alex Bradbury via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 15 23:22:37 PST 2024
https://github.com/asb updated https://github.com/llvm/llvm-project/pull/77611
>From 94afedbfe425d3f2e804709b09769f75aa23759f Mon Sep 17 00:00:00 2001
From: Alex Bradbury <asb at igalia.com>
Date: Wed, 10 Jan 2024 14:10:23 +0000
Subject: [PATCH] [CodeGen][RISCV] Make default describeLoadedValue
implementation call getConstValDefinedInReg
This handles the same case that's supported in
MipsInstrInfo::describeLoadedValue - allowing a simplified dwarf
expression to be produced for when a register is set to a known constant
value.
---
llvm/lib/CodeGen/TargetInstrInfo.cpp | 6 ++++++
llvm/unittests/Target/RISCV/RISCVInstrInfoTest.cpp | 8 +++-----
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/llvm/lib/CodeGen/TargetInstrInfo.cpp b/llvm/lib/CodeGen/TargetInstrInfo.cpp
index 4783742a14ad7d..43edbc08e9039f 100644
--- a/llvm/lib/CodeGen/TargetInstrInfo.cpp
+++ b/llvm/lib/CodeGen/TargetInstrInfo.cpp
@@ -1499,6 +1499,12 @@ TargetInstrInfo::describeLoadedValue(const MachineInstr &MI,
assert(MF->getProperties().hasProperty(
MachineFunctionProperties::Property::NoVRegs));
+ int64_t ImmVal;
+ // A simplified DIExpression can be produced if the register is being set to
+ // a known constant value.
+ if (getConstValDefinedInReg(MI, Reg, ImmVal))
+ return ParamLoadedValue(MachineOperand::CreateImm(ImmVal), Expr);
+
if (auto DestSrc = isCopyInstr(MI)) {
Register DestReg = DestSrc->Destination->getReg();
diff --git a/llvm/unittests/Target/RISCV/RISCVInstrInfoTest.cpp b/llvm/unittests/Target/RISCV/RISCVInstrInfoTest.cpp
index 4b1754cd4fcdcf..ca9040f17bf043 100644
--- a/llvm/unittests/Target/RISCV/RISCVInstrInfoTest.cpp
+++ b/llvm/unittests/Target/RISCV/RISCVInstrInfoTest.cpp
@@ -257,11 +257,9 @@ TEST_P(RISCVInstrInfoTest, DescribeLoadedValue) {
std::optional<ParamLoadedValue> MI2Res =
TII->describeLoadedValue(*MI2, RISCV::X3);
ASSERT_TRUE(MI2Res.has_value());
- ASSERT_TRUE(MI2Res->first.isReg());
- EXPECT_EQ(MI2Res->first.getReg(), RISCV::X0);
- // TODO: Could be a DW_OP_constu if this is recognised as a immediate load
- // rather than just an addi.
- expectDIEPrintResult(MI2Res->second, "!DIExpression(DW_OP_plus_uconst, 111)");
+ ASSERT_TRUE(MI2Res->first.isImm());
+ EXPECT_EQ(MI2Res->first.getImm(), 111);
+ expectDIEPrintResult(MI2Res->second, "!DIExpression()");
// Add immediate.
auto *MI3 = BuildMI(*MBB, MBB->begin(), DL, TII->get(RISCV::ADDI), RISCV::X2)
More information about the llvm-commits
mailing list