diff options
author | Sam Elliott <selliott@lowrisc.org> | 2019-12-13 20:00:14 +0000 |
---|---|---|
committer | Sam Elliott <selliott@lowrisc.org> | 2019-12-13 20:01:04 +0000 |
commit | a0f43b0043581b37b10d105a85f0653704d3657b (patch) | |
tree | 3a3361977839f1fd220ecd74fc38ae1a7a54e98e | |
parent | 19f73f0d1b8d4f4a7b7451fea33a35015fe0942d (diff) | |
download | bcm5719-llvm-a0f43b0043581b37b10d105a85f0653704d3657b.tar.gz bcm5719-llvm-a0f43b0043581b37b10d105a85f0653704d3657b.zip |
[RISCV] Move DebugLoc Copy into CompressInstEmitter
Summary:
This copy ensures that debug location information is kept for
compressed instructions. There are places where both compressInstruction and
uncompressInstruction are called that were not doing this copy, discarding some
debug info.
This change merely moves the copy into the generated file, so you cannot forget
to copy the location over when compressing or uncompressing.
Reviewers: asb, luismarques
Reviewed By: luismarques
Subscribers: sameer.abuasal, aprantl, hiraditya, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, kito-cheng, shiva0217, jrtc27, MaskRay, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei, psnobl, benna, Jim, s.egerton, pzheng, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67493
-rw-r--r-- | llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp | 1 | ||||
-rw-r--r-- | llvm/test/MC/RISCV/compress-debug-info.s | 20 | ||||
-rw-r--r-- | llvm/utils/TableGen/RISCVCompressInstEmitter.cpp | 1 |
3 files changed, 21 insertions, 1 deletions
diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp index baf78f84a04..f7fb4870914 100644 --- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp +++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp @@ -1610,7 +1610,6 @@ bool RISCVAsmParser::parseDirectiveOption() { void RISCVAsmParser::emitToStreamer(MCStreamer &S, const MCInst &Inst) { MCInst CInst; bool Res = compressInst(CInst, Inst, getSTI(), S.getContext()); - CInst.setLoc(Inst.getLoc()); S.EmitInstruction((Res ? CInst : Inst), getSTI()); } diff --git a/llvm/test/MC/RISCV/compress-debug-info.s b/llvm/test/MC/RISCV/compress-debug-info.s new file mode 100644 index 00000000000..b7ad2ff3e2a --- /dev/null +++ b/llvm/test/MC/RISCV/compress-debug-info.s @@ -0,0 +1,20 @@ +# RUN: llvm-mc -triple riscv32 -mattr=+c %s -g -o - -riscv-no-aliases \ +# RUN: | FileCheck %s -check-prefixes=COMPRESS,BOTH +# RUN: llvm-mc -triple riscv32 %s -g -o - -riscv-no-aliases \ +# RUN: | FileCheck %s -check-prefixes=UNCOMPRESS,BOTH + + +# This file ensures that compressing an instruction preserves its debug info. + + +# BOTH-LABEL: .text + +# BOTH: .file 1 +# BOTH-SAME: "compress-debug-info.s" + +# BOTH: .loc 1 [[# @LINE + 3 ]] 0 +# UNCOMPRESS-NEXT: addi a0, a1, 0 +# COMPRESS-NEXT: c.mv a0, a1 +addi a0, a1, 0 + +# BOTH-LABEL: .debug_info diff --git a/llvm/utils/TableGen/RISCVCompressInstEmitter.cpp b/llvm/utils/TableGen/RISCVCompressInstEmitter.cpp index 2f1d3898f18..85ad38c333a 100644 --- a/llvm/utils/TableGen/RISCVCompressInstEmitter.cpp +++ b/llvm/utils/TableGen/RISCVCompressInstEmitter.cpp @@ -728,6 +728,7 @@ void RISCVCompressInstEmitter::emitCompressInstEmitter(raw_ostream &o, } ++OpNo; } + CodeStream.indent(6) << "OutInst.setLoc(MI.getLoc());\n"; CaseStream << mergeCondAndCode(CondStream, CodeStream); PrevOp = CurOp; } |