diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 08444fc680df6..a5a84eaf81be6 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -614,11 +614,6 @@ static void finishCallSiteParams(ValT Val, const DIExpression *Expr, for (auto Param : DescribedParams) { bool ShouldCombineExpressions = Expr && Param.Expr->getNumElements() > 0; - // TODO: Entry value operations can currently not be combined with any - // other expressions, so we can't emit call site entries in those cases. - if (ShouldCombineExpressions && Expr->isEntryValue()) - continue; - // If a parameter's call site value is produced by a chain of // instructions we may have already created an expression for the // parameter when walking through the instructions. Append that to the diff --git a/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-expr-entry-value.mir b/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-expr-entry-value.mir index d7740e0e59db1..7cff4486cf30f 100644 --- a/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-expr-entry-value.mir +++ b/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-expr-entry-value.mir @@ -81,12 +81,15 @@ body: | ... -# Verify that a call site parameter is emitted for the third parameter. There -# should also be entries for the first and second parameter, but -# DW_OP_LLVM_entry_value operations can currently not be emitted together with -# any other expressions. Verify that nothing is emitted rather than an assert -# being triggered, or broken expressions being emitted. +# Verify that call site parameters are emitted for the three parameters. +# FIXME: The parameters are ordered incorrectly (#43998). +# CHECK: DW_TAG_GNU_call_site_parameter +# CHECK-NEXT: DW_AT_location (DW_OP_reg0 W0) +# CHECK-NEXT: DW_AT_GNU_call_site_value (DW_OP_GNU_entry_value(DW_OP_reg0 W0), DW_OP_plus_uconst 0xde) # CHECK: DW_TAG_GNU_call_site_parameter # CHECK-NEXT: DW_AT_location (DW_OP_reg2 W2) # CHECK-NEXT: DW_AT_GNU_call_site_value (DW_OP_GNU_entry_value(DW_OP_reg0 W0)) +# CHECK: DW_TAG_GNU_call_site_parameter +# CHECK-NEXT: DW_AT_location (DW_OP_reg1 W1) +# CHECK-NEXT: DW_AT_GNU_call_site_value (DW_OP_GNU_entry_value(DW_OP_reg0 W0), DW_OP_constu 0x1bc, DW_OP_minus) diff --git a/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-interpretation.mir b/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-interpretation.mir index 9df0044d39711..c4a1280865cec 100644 --- a/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-interpretation.mir +++ b/llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-interpretation.mir @@ -20,6 +20,10 @@ # CHECK-NEXT: DW_TAG_GNU_call_site_parameter # CHECK-NEXT: DW_AT_location (DW_OP_reg1 W1) # CHECK-NEXT: DW_AT_GNU_call_site_value (DW_OP_breg19 W19-4) +# CHECK-EMPTY: +# CHECK-NEXT: DW_TAG_GNU_call_site_parameter +# CHECK-NEXT: DW_AT_location (DW_OP_reg0 W0) +# CHECK-NEXT: DW_AT_GNU_call_site_value (DW_OP_GNU_entry_value(DW_OP_reg0 W0), DW_OP_plus_uconst 0x2) # CHECK: DW_TAG_GNU_call_site # CHECK-NEXT: DW_AT_abstract_origin {{.*}} "func2") # CHECK-NEXT: DW_AT_low_pc diff --git a/llvm/test/DebugInfo/MIR/ARM/dbgcall-site-interpretation.mir b/llvm/test/DebugInfo/MIR/ARM/dbgcall-site-interpretation.mir index ce9fc094fa297..c3da8c82ac6db 100644 --- a/llvm/test/DebugInfo/MIR/ARM/dbgcall-site-interpretation.mir +++ b/llvm/test/DebugInfo/MIR/ARM/dbgcall-site-interpretation.mir @@ -20,6 +20,10 @@ # CHECK-NEXT: DW_TAG_GNU_call_site_parameter # CHECK-NEXT: DW_AT_location (DW_OP_reg1 R1) # CHECK-NEXT: DW_AT_GNU_call_site_value (DW_OP_breg4 R4-4) +# CHECK-EMPTY: +# CHECK-NEXT: DW_TAG_GNU_call_site_parameter +# CHECK-NEXT: DW_AT_location (DW_OP_reg0 R0) +# CHECK-NEXT: DW_AT_GNU_call_site_value (DW_OP_GNU_entry_value(DW_OP_reg0 R0), DW_OP_plus_uconst 0x2) # CHECK: DW_TAG_GNU_call_site # CHECK-NEXT: DW_AT_abstract_origin {{.*}}"func2") # CHECK-NEXT: DW_AT_low_pc