[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