[llvm] 0bd5bbb - [X86] Add test showing binary differences with -x86-pad-for-align.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 17 04:38:12 PDT 2021


Author: Florian Hahn
Date: 2021-06-17T12:27:17+01:00
New Revision: 0bd5bbb31e0345aed8d029d70a4197aed53a3cd5

URL: https://github.com/llvm/llvm-project/commit/0bd5bbb31e0345aed8d029d70a4197aed53a3cd5
DIFF: https://github.com/llvm/llvm-project/commit/0bd5bbb31e0345aed8d029d70a4197aed53a3cd5.diff

LOG: [X86] Add test showing binary differences with -x86-pad-for-align.

This patch adds a test case showing how a single extra .loc can cause
binary differences when using -x86-pad-for-align=true.

The issue has been discussed in D94542, PR42138, PR48742.

Added: 
    llvm/test/MC/X86/Inputs/pad-align-with-debug.s
    llvm/test/MC/X86/Inputs/pad-align-without-debug.s
    llvm/test/MC/X86/pad-for-align-debug.s

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/MC/X86/Inputs/pad-align-with-debug.s b/llvm/test/MC/X86/Inputs/pad-align-with-debug.s
new file mode 100644
index 0000000000000..56a0378010f8d
--- /dev/null
+++ b/llvm/test/MC/X86/Inputs/pad-align-with-debug.s
@@ -0,0 +1,45 @@
+# See PR48742.
+    .text
+    .p2align 4
+foo:
+    .file 1 "foo.c"
+    movq    %rdi, %rax
+    .p2align 4,,10
+    .p2align 3
+L1:
+    movzbl  (%rax), %edx
+    cmpb    $10, %dl
+    je  L4
+L2:
+    cmpb    $100, %dl
+    je  L5
+    cmpb    $200, %dl
+    je  L5
+    cmpb    $300, %dl
+    jne L5
+    .p2align 4,,10
+    .p2align 3
+L3:
+    movq    %rax, %rdx
+    incq    %rax
+    cmpb    $30, (%rax)
+    jne L3
+    leaq    2(%rdx), %rax
+    movzbl  (%rax), %edx
+    .loc 1 1234 5
+    cmpb    $90, %dl
+    jne L2
+    .p2align 4,,10
+    .p2align 3
+L4:
+    cmpb    $99, 4(%rax)
+    je L7
+L5:
+    incq    %rax
+    jmp L1
+    .p2align 4,,10
+    .p2align 3
+L6:
+    ret
+L7:
+    ret

diff  --git a/llvm/test/MC/X86/Inputs/pad-align-without-debug.s b/llvm/test/MC/X86/Inputs/pad-align-without-debug.s
new file mode 100644
index 0000000000000..74c27ed887fa4
--- /dev/null
+++ b/llvm/test/MC/X86/Inputs/pad-align-without-debug.s
@@ -0,0 +1,43 @@
+# See PR48742.
+    .text
+    .p2align 4
+foo:
+    movq    %rdi, %rax
+    .p2align 4,,10
+    .p2align 3
+L1:
+    movzbl  (%rax), %edx
+    cmpb    $10, %dl
+    je L4
+L2:
+    cmpb    $100, %dl
+    je  L5
+    cmpb    $200, %dl
+    je  L5
+    cmpb    $300, %dl
+    jne L5
+    .p2align 4,,10
+    .p2align 3
+L3:
+    movq    %rax, %rdx
+    incq    %rax
+    cmpb    $30, (%rax)
+    jne L3
+    leaq    2(%rdx), %rax
+    movzbl  (%rax), %edx
+    cmpb    $90, %dl
+    jne L2
+    .p2align 4,,10
+    .p2align 3
+L4:
+    cmpb    $99, 4(%rax)
+    je L7
+L5:
+    incq    %rax
+    jmp L1
+    .p2align 4,,10
+    .p2align 3
+L6:
+    ret
+L7:
+    ret

diff  --git a/llvm/test/MC/X86/pad-for-align-debug.s b/llvm/test/MC/X86/pad-for-align-debug.s
new file mode 100644
index 0000000000000..2e3bed9683c8e
--- /dev/null
+++ b/llvm/test/MC/X86/pad-for-align-debug.s
@@ -0,0 +1,81 @@
+# RUN: llvm-mc -mcpu=skylake -filetype=obj -triple x86_64-apple-macos -x86-pad-for-align=true %S/Inputs/pad-align-with-debug.s | llvm-objdump -d - | FileCheck --check-prefix=CHECK --check-prefix=DEBUG %s
+# RUN: llvm-mc -mcpu=skylake -filetype=obj -triple x86_64-apple-macos -x86-pad-for-align=true %S/Inputs/pad-align-without-debug.s | llvm-objdump -d - | FileCheck --check-prefix=CHECK --check-prefix=NODEBUG %s
+# RUN: llvm-mc -mcpu=skylake -filetype=obj -triple x86_64-apple-macos -x86-pad-for-align=false %S/Inputs/pad-align-without-debug.s | llvm-objdump -d - | FileCheck --check-prefix=NOPAD %s
+# RUN: llvm-mc -mcpu=skylake -filetype=obj -triple x86_64-apple-macos -x86-pad-for-align=false %S/Inputs/pad-align-with-debug.s | llvm-objdump -d - | FileCheck --check-prefix=NOPAD %s
+
+; Test case to show that -x86-pad-for-align causes binary 
diff erences in the
+; presence of debug locations. Inputs/pad-align-with-debug.s and
+; Inputs/pad-align-without-debug.s are equivalent, modulo a single .loc, which
+; cause the 
diff erence in the binary below. This should be fixed, before
+; x86-pad-for-align=true becomes the default.
+
+; Also see PR48742.
+
+
+; CHECK-LABEL: 0000000000000000 <foo>:
+; CHECK:            0: 48 89 f8                         movq    %rdi, %rax
+; CHECK-NEXT:       3: 0f 1f 44 00 00                   nopl    (%rax,%rax)
+; CHECK-NEXT:       8: 0f b6 10                         movzbl  (%rax), %edx
+; CHECK-NEXT:       b: 80 fa 0a                         cmpb    $10, %dl
+; CHECK-NEXT:       e: 74 30                            je  0x40 <foo+0x40>
+; CHECK-NEXT:      10: 80 fa 64                         cmpb    $100, %dl
+; CHECK-NEXT:      13: 74 31                            je  0x46 <foo+0x46>
+; CHECK-NEXT:      15: 80 fa c8                         cmpb    $-56, %dl
+; CHECK-NEXT:      18: 74 2c                            je  0x46 <foo+0x46>
+; CHECK-NEXT:      1a: 80 fa 2c                         cmpb    $44, %dl
+; CHECK-NEXT:      1d: 75 27                            jne 0x46 <foo+0x46>
+; CHECK-NEXT:      1f: 90                               nop
+; CHECK-NEXT:      20: 48 89 c2                         movq    %rax, %rdx
+; CHECK-NEXT:      23: 48 ff c0                         incq    %rax
+; CHECK-NEXT:      26: 80 38 1e                         cmpb    $30, (%rax)
+
+; DEBUG-NEXT:      29: 75 f5                            jne 0x20 <foo+0x20>
+; DEBUG-NEXT:      2b: 48 8d 42 02                      leaq    2(%rdx), %rax
+; DEBUG-NEXT:      2f: 0f b6 10                         movzbl  (%rax), %edx
+; DEBUG-NEXT:      32: 80 fa 5a                         cmpb    $90, %dl
+; DEBUG-NEXT:      35: 0f 85 d5 ff ff ff                jne 0x10 <foo+0x10>
+; DEBUG-NEXT:      3b: 0f 1f 44 00 00                   nopl    (%rax,%rax)
+
+; NODEBUG-NEXT:      29: 0f 85 f1 ff ff ff              jne 0x20 <foo+0x20>
+; NODEBUG-NEXT:      2f: 48 8d 42 02                    leaq    2(%rdx), %rax
+; NODEBUG-NEXT:      33: 0f b6 10                       movzbl  (%rax), %edx
+; NODEBUG-NEXT:      36: 80 fa 5a                       cmpb    $90, %dl
+; NODEBUG-NEXT:      39: 0f 85 d1 ff ff ff              jne 0x10 <foo+0x10>
+; NODEBUG-NEXT:      3f: 90                             nop
+
+; CHECK-NEXT:      40: 80 78 04 63                      cmpb    $99, 4(%rax)
+; CHECK-NEXT:      44: 74 0b                            je  0x51 <foo+0x51>
+; CHECK-NEXT:      46: 48 ff c0                         incq    %rax
+; CHECK-NEXT:      49: e9 ba ff ff ff                   jmp 0x8 <foo+0x8>
+; CHECK-NEXT:      4e: 66 90                            nop
+; CHECK-NEXT:      50: c3                               retq
+; CHECK-NEXT:      51: c3                               retq
+
+; NOPAD:            0: 48 89 f8                         movq    %rdi, %rax
+; NOPAD-NEXT:       3: 0f 1f 44 00 00                   nopl    (%rax,%rax)
+; NOPAD-NEXT:       8: 0f b6 10                         movzbl  (%rax), %edx
+; NOPAD-NEXT:       b: 80 fa 0a                         cmpb    $10, %dl
+; NOPAD-NEXT:       e: 74 30                            je  0x40 <foo+0x40>
+; NOPAD-NEXT:      10: 80 fa 64                         cmpb    $100, %dl
+; NOPAD-NEXT:      13: 74 31                            je  0x46 <foo+0x46>
+; NOPAD-NEXT:      15: 80 fa c8                         cmpb    $-56, %dl
+; NOPAD-NEXT:      18: 74 2c                            je  0x46 <foo+0x46>
+; NOPAD-NEXT:      1a: 80 fa 2c                         cmpb    $44, %dl
+; NOPAD-NEXT:      1d: 75 27                            jne 0x46 <foo+0x46>
+; NOPAD-NEXT:      1f: 90                               nop
+; NOPAD-NEXT:      20: 48 89 c2                         movq    %rax, %rdx
+; NOPAD-NEXT:      23: 48 ff c0                         incq    %rax
+; NOPAD-NEXT:      26: 80 38 1e                         cmpb    $30, (%rax)
+; NOPAD-NEXT:      29: 75 f5                            jne 0x20 <foo+0x20>
+; NOPAD-NEXT:      2b: 48 8d 42 02                      leaq    2(%rdx), %rax
+; NOPAD-NEXT:      2f: 0f b6 10                         movzbl  (%rax), %edx
+; NOPAD-NEXT:      32: 80 fa 5a                         cmpb    $90, %dl
+; NOPAD-NEXT:      35: 75 d9                            jne 0x10 <foo+0x10>
+; NOPAD-NEXT:      37: 66 0f 1f 84 00 00 00 00 00       nopw    (%rax,%rax)
+; NOPAD-NEXT:      40: 80 78 04 63                      cmpb    $99, 4(%rax)
+; NOPAD-NEXT:      44: 74 0b                            je  0x51 <foo+0x51>
+; NOPAD-NEXT:      46: 48 ff c0                         incq    %rax
+; NOPAD-NEXT:      49: eb bd                            jmp 0x8 <foo+0x8>
+; NOPAD-NEXT:      4b: 0f 1f 44 00 00                   nopl    (%rax,%rax)
+; NOPAD-NEXT:      50: c3                               retq
+; NOPAD-NEXT:      51: c3                               retq


        


More information about the llvm-commits mailing list