[PATCH] D75346: [X86] Disable the NOP padding for branches when bundle is enabled
Kan Shengchen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 28 05:53:47 PST 2020
skan created this revision.
skan added reviewers: annita.zhang, reames, MaskRay, craig.topper, LuoYuanke, jyknight.
Herald added a project: LLVM.
When bundle is enabled, data fragment itself has a space to emit NOP to bundle-align instructions. The behaviour makes it impossible for us to determine whether the macro fusion really happen when emitting instructions. In addition, boundary-align fragment is also used to emit NOPs to align instructions, currently using them together sometimes makes code crazy.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D75346
Files:
llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
llvm/test/MC/X86/align-branch-64-7a.s
Index: llvm/test/MC/X86/align-branch-64-7a.s
===================================================================
--- /dev/null
+++ llvm/test/MC/X86/align-branch-64-7a.s
@@ -0,0 +1,23 @@
+# Check using option --x86-align-branch-boundary=16 --x86-align-branch=fused+jcc --mc-relax-all with bundle won't make code crazy
+# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=16 --x86-align-branch=fused+jcc --mc-relax-all %s | llvm-objdump -d - > %t1
+# RUN: FileCheck --input-file=%t1 %s
+
+# CHECK: 0000000000000000 foo:
+# CHECK-NEXT: 0: 55 pushq %rbp
+# CHECK-NEXT: 1: 48 f7 c2 02 00 00 00 testq $2, %rdx
+# CHECK-NEXT: 8: 0f 85 f2 ff ff ff jne {{.*}}
+# CHECK-NEXT: e: 90 nop
+# CHECK-NEXT: f: 90 nop
+# CHECK-NEXT: 10: 0f 8e ea ff ff ff jle {{.*}}
+
+ .text
+ .p2align 4
+foo:
+ push %rbp
+ # Will be bundle-aligning to 8 byte boundaries
+ .bundle_align_mode 3
+ test $2, %rdx
+ jne foo
+# This jle is 6 bytes long and should have started at 0xe, so two bytes
+# of nop padding are inserted instead and it starts at 0x10
+ jle foo
Index: llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
===================================================================
--- llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
+++ llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
@@ -364,10 +364,8 @@
return false;
assert(allowAutoPadding() && "incorrect initialization!");
- MCAssembler &Assembler = OS.getAssembler();
- MCSection *Sec = OS.getCurrentSectionOnly();
// To be Done: Currently don't deal with Bundle cases.
- if (Assembler.isBundlingEnabled() && Sec->isBundleLocked())
+ if (OS.getAssembler().isBundlingEnabled())
return false;
// Branches only need to be aligned in 32-bit or 64-bit mode.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D75346.247239.patch
Type: text/x-patch
Size: 1956 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200228/76e8a59e/attachment.bin>
More information about the llvm-commits
mailing list