From: Ahmed Bougacha Date: Tue, 7 Mar 2017 20:34:20 +0000 (+0000) Subject: [GlobalISel] Emit DBG_VALUE %noreg for non-int/fp constant values. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e8bbfecd516ec25ac0dd91c30ff1b660ae05c326;p=llvm [GlobalISel] Emit DBG_VALUE %noreg for non-int/fp constant values. When a dbg_value has a constant operand that isn't representable in MI, there isn't much we can do. Use %noreg (0) for those situations. This matches the SelectionDAG behavior. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297200 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp b/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp index 3614333037c..8630ef842b4 100644 --- a/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp +++ b/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp @@ -137,8 +137,13 @@ MachineInstrBuilder MachineIRBuilder::buildConstDbgValue(const Constant &C, MIB.addCImm(CI); else MIB.addImm(CI->getZExtValue()); - } else + } else if (auto *CFP = dyn_cast(&C)) { + assert(isa(C) && "Unexpected constant dbg value"); MIB.addFPImm(&cast(C)); + } else { + // Insert %noreg if we didn't find a usable constant and had to drop it. + MIB.addReg(0U); + } return MIB.addImm(Offset).addMetadata(Variable).addMetadata(Expr); } diff --git a/test/CodeGen/AArch64/GlobalISel/debug-insts.ll b/test/CodeGen/AArch64/GlobalISel/debug-insts.ll index ffd2c0c68b1..2c3def2e4a9 100644 --- a/test/CodeGen/AArch64/GlobalISel/debug-insts.ll +++ b/test/CodeGen/AArch64/GlobalISel/debug-insts.ll @@ -26,6 +26,8 @@ define void @debug_value(i32 %in) #0 !dbg !7 { call void @llvm.dbg.value(metadata i32 123, i64 0, metadata !11, metadata !12), !dbg !13 ; CHECK: DBG_VALUE float 1.000000e+00, 0, !11, !12, debug-location !13 call void @llvm.dbg.value(metadata float 1.000000e+00, i64 0, metadata !11, metadata !12), !dbg !13 +; CHECK: DBG_VALUE _, 0, !11, !12, debug-location !13 + call void @llvm.dbg.value(metadata i32* null, i64 0, metadata !11, metadata !12), !dbg !13 ret void }