summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Elliott <selliott@lowrisc.org>2019-12-13 20:00:14 +0000
committerSam Elliott <selliott@lowrisc.org>2019-12-13 20:01:04 +0000
commita0f43b0043581b37b10d105a85f0653704d3657b (patch)
tree3a3361977839f1fd220ecd74fc38ae1a7a54e98e
parent19f73f0d1b8d4f4a7b7451fea33a35015fe0942d (diff)
downloadbcm5719-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.cpp1
-rw-r--r--llvm/test/MC/RISCV/compress-debug-info.s20
-rw-r--r--llvm/utils/TableGen/RISCVCompressInstEmitter.cpp1
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;
}
OpenPOWER on IntegriCloud