From: Vedant Kumar Date: Wed, 21 Oct 2020 16:22:13 +0000 (-0700) Subject: [DebugInfo] Shorten legacy [s|z]ext dwarf expressions X-Git-Tag: llvmorg-13-init~7843 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2ce36ebca544dd71075a7818ff4070da5667603b;p=platform%2Fupstream%2Fllvm.git [DebugInfo] Shorten legacy [s|z]ext dwarf expressions Take advantage of the emitConstu helper to emit slightly shorter dwarf expressions to implement legacy [s|z]ext operations. --- diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp index 2803c8e..6533cbe 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp @@ -638,14 +638,12 @@ void DwarfExpression::addFragmentOffset(const DIExpression *Expr) { void DwarfExpression::emitLegacySExt(unsigned FromBits) { // (((X >> (FromBits - 1)) * (~0)) << FromBits) | X emitOp(dwarf::DW_OP_dup); - emitOp(dwarf::DW_OP_constu); - emitUnsigned(FromBits - 1); + emitConstu(FromBits - 1); emitOp(dwarf::DW_OP_shr); emitOp(dwarf::DW_OP_lit0); emitOp(dwarf::DW_OP_not); emitOp(dwarf::DW_OP_mul); - emitOp(dwarf::DW_OP_constu); - emitUnsigned(FromBits); + emitConstu(FromBits); emitOp(dwarf::DW_OP_shl); emitOp(dwarf::DW_OP_or); } @@ -653,8 +651,7 @@ void DwarfExpression::emitLegacySExt(unsigned FromBits) { void DwarfExpression::emitLegacyZExt(unsigned FromBits, unsigned ToBits) { if (FromBits < 64) { // X & ((1 << FromBits) - 1) - emitOp(dwarf::DW_OP_constu); - emitUnsigned((1ULL << FromBits) - 1); + emitConstu((1ULL << FromBits) - 1); emitOp(dwarf::DW_OP_and); } else { addOpPiece(FromBits, 0); diff --git a/llvm/test/DebugInfo/X86/convert-debugloc.ll b/llvm/test/DebugInfo/X86/convert-debugloc.ll index a61127a..f000795 100644 --- a/llvm/test/DebugInfo/X86/convert-debugloc.ll +++ b/llvm/test/DebugInfo/X86/convert-debugloc.ll @@ -62,7 +62,7 @@ ; NOCONV: DW_TAG_formal_parameter ; NOCONV: DW_TAG_variable ; NOCONV: DW_AT_location ( -; NOCONV: {{.*}}, DW_OP_dup, DW_OP_constu 0x7, DW_OP_shr, DW_OP_lit0, DW_OP_not, DW_OP_mul, DW_OP_constu 0x8, DW_OP_shl, DW_OP_or, DW_OP_stack_value) +; NOCONV: {{.*}}, DW_OP_dup, DW_OP_lit7, DW_OP_shr, DW_OP_lit0, DW_OP_not, DW_OP_mul, DW_OP_lit8, DW_OP_shl, DW_OP_or, DW_OP_stack_value) ; NOCONV: DW_AT_name ("y") ; NOCONV: NULL ; NOCONV: DW_TAG_base_type diff --git a/llvm/test/DebugInfo/X86/convert-inlined.ll b/llvm/test/DebugInfo/X86/convert-inlined.ll index 5e28a72..56379b2 100644 --- a/llvm/test/DebugInfo/X86/convert-inlined.ll +++ b/llvm/test/DebugInfo/X86/convert-inlined.ll @@ -26,7 +26,7 @@ ; DW4: DW_TAG_compile_unit ; DW4: DW_TAG_variable ; DW4: DW_AT_name ("global") -; DW4: DW_AT_location (DW_OP_addr 0x0, DW_OP_deref, DW_OP_dup, DW_OP_constu 0x7, DW_OP_shr, DW_OP_lit0, DW_OP_not, DW_OP_mul, DW_OP_constu 0x8, DW_OP_shl, DW_OP_or, DW_OP_stack_value) +; DW4: DW_AT_location (DW_OP_addr 0x0, DW_OP_deref, DW_OP_dup, DW_OP_lit7, DW_OP_shr, DW_OP_lit0, DW_OP_not, DW_OP_mul, DW_OP_lit8, DW_OP_shl, DW_OP_or, DW_OP_stack_value) ; DW4: DW_TAG_base_type ; DW4: DW_AT_name ("int") ; DW4: NULL