[PATCH] D151330: [SelectionDAGBuilder] Handle entry_value dbg.value intrinsics
Felipe de Azevedo Piovezan via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 24 06:17:37 PDT 2023
fdeazeve created this revision.
fdeazeve added a reviewer: aprantl.
Herald added a subscriber: hiraditya.
Herald added a project: All.
fdeazeve requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
DbgValue intrinsics whose expression is an entry_value and whose address is
described an llvm::Argument must be lowered to the corresponding livein physical
register for that Argument.
Depends on D151329 <https://reviews.llvm.org/D151329>
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D151330
Files:
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/test/CodeGen/AArch64/dbg-value-swift-async.ll
Index: llvm/test/CodeGen/AArch64/dbg-value-swift-async.ll
===================================================================
--- llvm/test/CodeGen/AArch64/dbg-value-swift-async.ll
+++ llvm/test/CodeGen/AArch64/dbg-value-swift-async.ll
@@ -1,4 +1,5 @@
; RUN: llc -O0 -global-isel -stop-after=irtranslator -verify-machineinstrs %s -o - | FileCheck %s
+; RUN: llc -O0 -fast-isel=false -global-isel=false -stop-after=finalize-isel %s -o - | FileCheck %s
; CHECK-NOT: DBG_VALUE
; CHECK: DBG_VALUE $x22, $noreg, !{{.*}}, !DIExpression(DW_OP_LLVM_entry_value, 1)
Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -5804,6 +5804,26 @@
if (!Op)
return false;
+ // If the expression refers to the entry value of an Argument, use the
+ // corresponding livein physical register. As per the Verifier, this is only
+ // allowed for swiftasync Arguments.
+ if (Op->isReg() && Expr->isEntryValue()) {
+ assert(Arg->hasAttribute(Attribute::AttrKind::SwiftAsync));
+ auto OpReg = Op->getReg();
+ for (auto [PhysReg, VirtReg] : FuncInfo.RegInfo->liveins())
+ if (OpReg == VirtReg || OpReg == PhysReg) {
+ SDDbgValue *SDV = DAG.getVRegDbgValue(
+ Variable, Expr, PhysReg,
+ Kind != FuncArgumentDbgValueKind::Value /*is indirect*/, DL,
+ SDNodeOrder);
+ DAG.AddDbgValue(SDV, false /*treat as dbg.declare byval parameter*/);
+ return true;
+ }
+ LLVM_DEBUG(dbgs() << "Dropping dbg.value: expression is entry_value but "
+ "couldn't find a physical register\n");
+ return true;
+ }
+
assert(Variable->isValidLocationForIntrinsic(DL) &&
"Expected inlined-at fields to agree");
MachineInstr *NewMI = nullptr;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D151330.525142.patch
Type: text/x-patch
Size: 1928 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230524/7007ae44/attachment.bin>
More information about the llvm-commits
mailing list