1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00

[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
This commit is contained in:
Sam Elliott 2019-12-13 20:00:14 +00:00
parent 16e0e6d447
commit ab5c772c29
3 changed files with 21 additions and 1 deletions

View File

@ -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());
}

View File

@ -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

View File

@ -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;
}