[llvm] 5d73f79 - [X86][MC] Make -x86-pad-max-prefix-size compatible with --mc-relax-all
Shengchen Kan via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 10 20:30:36 PDT 2020
Author: Shengchen Kan
Date: 2020-04-11T11:30:15+08:00
New Revision: 5d73f79c54788bc07dabe9ed75c36f12bafe9d28
URL: https://github.com/llvm/llvm-project/commit/5d73f79c54788bc07dabe9ed75c36f12bafe9d28
DIFF: https://github.com/llvm/llvm-project/commit/5d73f79c54788bc07dabe9ed75c36f12bafe9d28.diff
LOG: [X86][MC] Make -x86-pad-max-prefix-size compatible with --mc-relax-all
Summary: We allow non-relaxable instructions emitted into relaxable Fragment when we prefix padding branch. So we need to check if the instruction need relaxation before relaxing it. Without this patch, it currently triggers a `report_fatal_error` in `llvm::MCAsmBackend::relaxInstruction` when we prefix padding branch along with `--mc-relax-all`.
Reviewers: LuoYuanke, reames, MaskRay
Reviewed By: MaskRay
Subscribers: MaskRay, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D77851
Added:
Modified:
llvm/lib/MC/MCObjectStreamer.cpp
llvm/test/MC/X86/align-branch-64-relax-all.s
Removed:
################################################################################
diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp
index 3cb3faae2c04..3549280b8e88 100644
--- a/llvm/lib/MC/MCObjectStreamer.cpp
+++ b/llvm/lib/MC/MCObjectStreamer.cpp
@@ -399,8 +399,7 @@ void MCObjectStreamer::emitInstructionImpl(const MCInst &Inst,
// fragment.
if (Assembler.getRelaxAll() ||
(Assembler.isBundlingEnabled() && Sec->isBundleLocked())) {
- MCInst Relaxed;
- getAssembler().getBackend().relaxInstruction(Inst, STI, Relaxed);
+ MCInst Relaxed = Inst;
while (getAssembler().getBackend().mayNeedRelaxation(Relaxed, STI))
getAssembler().getBackend().relaxInstruction(Relaxed, STI, Relaxed);
EmitInstToData(Relaxed, STI);
diff --git a/llvm/test/MC/X86/align-branch-64-relax-all.s b/llvm/test/MC/X86/align-branch-64-relax-all.s
index 112629608f2d..672a90a8df64 100644
--- a/llvm/test/MC/X86/align-branch-64-relax-all.s
+++ b/llvm/test/MC/X86/align-branch-64-relax-all.s
@@ -1,4 +1,5 @@
# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc --mc-relax-all %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc --x86-pad-max-prefix-size=5 --mc-relax-all %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s
# Check instructions can be aligned correctly along with option --mc-relax-all
More information about the llvm-commits
mailing list