[llvm] d2b522f - [NFC][X86] Simplify test cases for branch align
Shengchen Kan via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 16 01:32:19 PDT 2020
Author: Shengchen Kan
Date: 2020-03-16T16:30:29+08:00
New Revision: d2b522f173cf77f49dede3c3789895f8de6e5747
URL: https://github.com/llvm/llvm-project/commit/d2b522f173cf77f49dede3c3789895f8de6e5747
DIFF: https://github.com/llvm/llvm-project/commit/d2b522f173cf77f49dede3c3789895f8de6e5747.diff
LOG: [NFC][X86] Simplify test cases for branch align
Added:
llvm/test/MC/X86/align-branch-32-work.s
llvm/test/MC/X86/align-branch-64-align.s
llvm/test/MC/X86/align-branch-64-basic.s
llvm/test/MC/X86/align-branch-64-bundle.s
llvm/test/MC/X86/align-branch-64-fused.s
llvm/test/MC/X86/align-branch-64-general.s
llvm/test/MC/X86/align-branch-64-mixed.s
llvm/test/MC/X86/align-branch-64-necessary.s
llvm/test/MC/X86/align-branch-64-relax-all.s
llvm/test/MC/X86/align-branch-64-section-size.s
llvm/test/MC/X86/align-branch-64-single.s
llvm/test/MC/X86/align-branch-boundary-default.s
llvm/test/MC/X86/align-branch-variant-symbol.s
Modified:
Removed:
llvm/test/CodeGen/X86/align-branch-boundary-default.s
llvm/test/MC/X86/Inputs/align-branch-64-1.s
llvm/test/MC/X86/Inputs/align-branch-64-2.s
llvm/test/MC/X86/align-branch-32-1a.s
llvm/test/MC/X86/align-branch-64-1a.s
llvm/test/MC/X86/align-branch-64-1b.s
llvm/test/MC/X86/align-branch-64-1c.s
llvm/test/MC/X86/align-branch-64-1d.s
llvm/test/MC/X86/align-branch-64-2a.s
llvm/test/MC/X86/align-branch-64-2b.s
llvm/test/MC/X86/align-branch-64-2c.s
llvm/test/MC/X86/align-branch-64-3a.s
llvm/test/MC/X86/align-branch-64-4a.s
llvm/test/MC/X86/align-branch-64-5a.s
llvm/test/MC/X86/align-branch-64-6a.s
llvm/test/MC/X86/align-branch-64-7a.s
llvm/test/MC/X86/align-branch-64.s
################################################################################
diff --git a/llvm/test/MC/X86/Inputs/align-branch-64-1.s b/llvm/test/MC/X86/Inputs/align-branch-64-1.s
deleted file mode 100644
index e5ca17621d03..000000000000
--- a/llvm/test/MC/X86/Inputs/align-branch-64-1.s
+++ /dev/null
@@ -1,43 +0,0 @@
- .text
- .globl foo
- .p2align 4
-foo:
- .rept 3
- movl %eax, %fs:0x1
- .endr
- cmp %rax, %rbp
- xorl %eax, %eax
- cmp %rax, %rbp
- je .L_2
- .rept 3
- movl %eax, %fs:0x1
- .endr
- xorl %eax, %eax
- je .L_2
- popq %rbp
- je .L_2
- .rept 3
- movl %eax, %fs:0x1
- .endr
- xorl %eax, %eax
- jmp .L_3
- jmp .L_3
- jmp .L_3
- .rept 2
- movl %eax, %fs:0x1
- .endr
- movl %eax, -4(%rbp)
- popq %rbp
- cmp %rax, %rbp
- je .L_2
- jmp .L_3
-.L_2:
- movl -12(%rbp), %eax
- movl %eax, -4(%rbp)
-.L_3:
- .rept 10
- movl %esi, -1200(%rbp)
- .endr
- jmp .L_3
- retq
-
diff --git a/llvm/test/MC/X86/Inputs/align-branch-64-2.s b/llvm/test/MC/X86/Inputs/align-branch-64-2.s
deleted file mode 100644
index 16b854da71e2..000000000000
--- a/llvm/test/MC/X86/Inputs/align-branch-64-2.s
+++ /dev/null
@@ -1,27 +0,0 @@
- .text
- .globl foo
- .p2align 4
-foo:
- .rept 3
- movl %eax, %fs:0x1
- .endr
- .rept 2
- movl %esi, -12(%rbp)
- .endr
- jmp *%rax
- .rept 3
- movl %eax, %fs:0x1
- .endr
- movl %esi, -12(%rbp)
- pushq %rbp
- call *%rax
- .rept 3
- movl %eax, %fs:0x1
- .endr
- pushq %rbp
- call foo
- .rept 4
- movl %eax, %fs:0x1
- .endr
- call *foo
-
diff --git a/llvm/test/MC/X86/align-branch-32-1a.s b/llvm/test/MC/X86/align-branch-32-1a.s
deleted file mode 100644
index ed11539d7d23..000000000000
--- a/llvm/test/MC/X86/align-branch-32-1a.s
+++ /dev/null
@@ -1,38 +0,0 @@
-# Check NOP padding is disabled before instruction that has variant symbol operand.
-# RUN: llvm-mc -filetype=obj -triple i386-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=call %s | llvm-objdump -d - | FileCheck %s
-
-# CHECK: 00000000 <foo>:
-# CHECK-COUNT-5: : 64 a3 01 00 00 00 movl %eax, %fs:1
-# CHECK: 1e: e8 fc ff ff ff calll {{.*}}
-# CHECK-COUNT-4: : 64 a3 01 00 00 00 movl %eax, %fs:1
-# CHECK: 3b: 55 pushl %ebp
-# CHECK-NEXT: 3c: ff 91 00 00 00 00 calll *(%ecx)
-# CHECK-COUNT-4: : 64 a3 01 00 00 00 movl %eax, %fs:1
-# CHECK: 5a: c1 e9 02 shrl $2, %ecx
-# CHECK-NEXT: 5d: 55 pushl %ebp
-# CHECK-NEXT: 5e: ff 10 calll *(%eax)
-# CHECK-COUNT-5: : 64 a3 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 7e: ff 20 jmpl *(%eax)
- .text
- .globl foo
- .p2align 4
-foo:
- .rept 5
- movl %eax, %fs:0x1
- .endr
- call ___tls_get_addr at PLT
- .rept 4
- movl %eax, %fs:0x1
- .endr
- pushl %ebp
- call *___tls_get_addr at GOT(%ecx)
- .rept 4
- movl %eax, %fs:0x1
- .endr
- shrl $2, %ecx
- pushl %ebp
- call *foo at tlscall(%eax)
- .rept 5
- movl %eax, %fs:0x1
- .endr
- jmp *foo at tlscall(%eax)
diff --git a/llvm/test/MC/X86/align-branch-32-work.s b/llvm/test/MC/X86/align-branch-32-work.s
new file mode 100644
index 000000000000..44c13ef9d271
--- /dev/null
+++ b/llvm/test/MC/X86/align-branch-32-work.s
@@ -0,0 +1,15 @@
+ # RUN: llvm-mc -filetype=obj -triple i386-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=jmp %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s
+
+ # Check the branch align mechanism can work in 32-bit mode.
+
+ .text
+ .rept 31
+ int3
+ .endr
+ # CHECK: 20: jmp
+ jmp bar
+
+
+ .type bar, at function
+bar:
+ ret
diff --git a/llvm/test/MC/X86/align-branch-64-1a.s b/llvm/test/MC/X86/align-branch-64-1a.s
deleted file mode 100644
index 02818b295439..000000000000
--- a/llvm/test/MC/X86/align-branch-64-1a.s
+++ /dev/null
@@ -1,43 +0,0 @@
-# Check only fused conditional jumps, conditional jumps and unconditional jumps are aligned with option --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc+jmp
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc+jmp %p/Inputs/align-branch-64-1.s -o %t1 && llvm-objdump -d %t1 | FileCheck %s
-
-# Check that -x86-branches-within-32B-boundaries matches the above command line
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-branches-within-32B-boundaries %p/Inputs/align-branch-64-1.s -o %t2
-# RUN: cmp %t1 %t2
-
-# Check no branches is aligned with option --x86-align-branch-boundary=0
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=0 --x86-align-branch=fused+jcc+jmp %p/Inputs/align-branch-64-1.s | llvm-objdump -d - > %t3
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %p/Inputs/align-branch-64-1.s | llvm-objdump -d - > %t4
-# RUN: cmp %t3 %t4
-
-# CHECK: 0000000000000000 <foo>:
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 18: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 1b: 31 c0 xorl %eax, %eax
-# CHECK-COUNT-3: : 90 nop
-# CHECK: 20: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 23: 74 5d je {{.*}}
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 3d: 31 c0 xorl %eax, %eax
-# CHECK-NEXT: 3f: 90 nop
-# CHECK-NEXT: 40: 74 40 je {{.*}}
-# CHECK-NEXT: 42: 5d popq %rbp
-# CHECK-NEXT: 43: 74 3d je {{.*}}
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 5d: 31 c0 xorl %eax, %eax
-# CHECK-NEXT: 5f: 90 nop
-# CHECK-NEXT: 60: eb 26 jmp {{.*}}
-# CHECK-NEXT: 62: eb 24 jmp {{.*}}
-# CHECK-NEXT: 64: eb 22 jmp {{.*}}
-# CHECK-COUNT-2: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 76: 89 45 fc movl %eax, -4(%rbp)
-# CHECK-NEXT: 79: 5d popq %rbp
-# CHECK-NEXT: 7a: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 7d: 74 03 je {{.*}}
-# CHECK-NEXT: 7f: 90 nop
-# CHECK-NEXT: 80: eb 06 jmp {{.*}}
-# CHECK-NEXT: 82: 8b 45 f4 movl -12(%rbp), %eax
-# CHECK-NEXT: 85: 89 45 fc movl %eax, -4(%rbp)
-# CHECK-COUNT-10: : 89 b5 50 fb ff ff movl %esi, -1200(%rbp)
-# CHECK: c4: eb c2 jmp {{.*}}
-# CHECK-NEXT: c6: c3 retq
diff --git a/llvm/test/MC/X86/align-branch-64-1b.s b/llvm/test/MC/X86/align-branch-64-1b.s
deleted file mode 100644
index 73864ba89a87..000000000000
--- a/llvm/test/MC/X86/align-branch-64-1b.s
+++ /dev/null
@@ -1,32 +0,0 @@
-# Check only fused conditional jumps and conditional jumps are aligned with option --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc %p/Inputs/align-branch-64-1.s | llvm-objdump -d - | FileCheck %s
-
-# CHECK: 0000000000000000 <foo>:
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 18: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 1b: 31 c0 xorl %eax, %eax
-# CHECK-COUNT-3: : 90 nop
-# CHECK-NEXT: 20: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 23: 74 5b je {{.*}}
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 3d: 31 c0 xorl %eax, %eax
-# CHECK-NEXT: 3f: 90 nop
-# CHECK-NEXT: 40: 74 3e je {{.*}}
-# CHECK-NEXT: 42: 5d popq %rbp
-# CHECK-NEXT: 43: 74 3b je {{.*}}
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 5d: 31 c0 xorl %eax, %eax
-# CHECK-NEXT: 5f: eb 25 jmp {{.*}}
-# CHECK-NEXT: 61: eb 23 jmp {{.*}}
-# CHECK-NEXT: 63: eb 21 jmp {{.*}}
-# CHECK-COUNT-2: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 75: 89 45 fc movl %eax, -4(%rbp)
-# CHECK: 78: 5d popq %rbp
-# CHECK-NEXT: 79: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 7c: 74 02 je {{.*}}
-# CHECK-NEXT: 7e: eb 06 jmp {{.*}}
-# CHECK-NEXT: 80: 8b 45 f4 movl -12(%rbp), %eax
-# CHECK-NEXT: 83: 89 45 fc movl %eax, -4(%rbp)
-# CHECK-COUNT-10: : 89 b5 50 fb ff ff movl %esi, -1200(%rbp)
-# CHECK: c2: eb c2 jmp {{.*}}
-# CHECK-NEXT: c4: c3 retq
diff --git a/llvm/test/MC/X86/align-branch-64-1c.s b/llvm/test/MC/X86/align-branch-64-1c.s
deleted file mode 100644
index 3207f540d208..000000000000
--- a/llvm/test/MC/X86/align-branch-64-1c.s
+++ /dev/null
@@ -1,31 +0,0 @@
-# Check only conditional jumps are aligned with option --x86-align-branch-boundary=32 --x86-align-branch=jcc
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=jcc %p/Inputs/align-branch-64-1.s | llvm-objdump -d - | FileCheck %s
-
-# CHECK: 0000000000000000 <foo>:
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 18: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 1b: 31 c0 xorl %eax, %eax
-# CHECK-NEXT: 1d: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 20: 74 5b je {{.*}}
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 3a: 31 c0 xorl %eax, %eax
-# CHECK-NEXT: 3c: 74 3f je {{.*}}
-# CHECK-NEXT: 3e: 5d popq %rbp
-# CHECK-NEXT: 3f: 90 nop
-# CHECK-NEXT: 40: 74 3b je {{.*}}
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 5a: 31 c0 xorl %eax, %eax
-# CHECK-NEXT: 5c: eb 25 jmp {{.*}}
-# CHECK-NEXT: 5e: eb 23 jmp {{.*}}
-# CHECK-NEXT: 60: eb 21 jmp {{.*}}
-# CHECK-COUNT-2: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 72: 89 45 fc movl %eax, -4(%rbp)
-# CHECK-NEXT: 75: 5d popq %rbp
-# CHECK-NEXT: 76: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 79: 74 02 je {{.*}}
-# CHECK-NEXT: 7b: eb 06 jmp {{.*}}
-# CHECK-NEXT: 7d: 8b 45 f4 movl -12(%rbp), %eax
-# CHECK-NEXT: 80: 89 45 fc movl %eax, -4(%rbp)
-# CHECK-COUNT-10: : 89 b5 50 fb ff ff movl %esi, -1200(%rbp)
-# CHECK: bf: eb c2 jmp {{.*}}
-# CHECK-NEXT: c1: c3 retq
diff --git a/llvm/test/MC/X86/align-branch-64-1d.s b/llvm/test/MC/X86/align-branch-64-1d.s
deleted file mode 100644
index 902bb69fec16..000000000000
--- a/llvm/test/MC/X86/align-branch-64-1d.s
+++ /dev/null
@@ -1,38 +0,0 @@
-# Check only conditional jumps and unconditional jumps are aligned with option --x86-align-branch-boundary=32 --x86-align-branch=jcc+jmp
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=jcc+jmp %p/Inputs/align-branch-64-1.s | llvm-objdump -d - > %t1
-# RUN: FileCheck --input-file=%t1 %s --check-prefixes=CHECK,SHORT-NOP
-
-# Check long NOP can be emitted to align branch if the target cpu support long nop.
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 -mcpu=x86-64 --x86-align-branch=jcc+jmp %p/Inputs/align-branch-64-1.s | llvm-objdump -d - >%t2
-# RUN: FileCheck --input-file=%t2 %s --check-prefixes=CHECK,LONG-NOP
-
-# CHECK: 0000000000000000 <foo>:
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 18: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 1b: 31 c0 xorl %eax, %eax
-# CHECK-NEXT: 1d: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 20: 74 5d je {{.*}}
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 3a: 31 c0 xorl %eax, %eax
-# CHECK-NEXT: 3c: 74 41 je {{.*}}
-# CHECK-NEXT: 3e: 5d popq %rbp
-# CHECK-NEXT: 3f: 90 nop
-# CHECK-NEXT: 40: 74 3d je {{.*}}
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 5a: 31 c0 xorl %eax, %eax
-# CHECK-NEXT: 5c: eb 27 jmp {{.*}}
-# SHORT-NOP-COUNT-2: : 90 nop
-# LONG-NOP: 5e: 66 90 nop
-# CHECK-NEXT: 60: eb 23 jmp {{.*}}
-# CHECK-NEXT: 62: eb 21 jmp {{.*}}
-# CHECK-COUNT-2: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 74: 89 45 fc movl %eax, -4(%rbp)
-# CHECK-NEXT: 77: 5d popq %rbp
-# CHECK-NEXT: 78: 48 39 c5 cmpq %rax, %rbp
-# CHECK-NEXT: 7b: 74 02 je {{.*}}
-# CHECK-NEXT: 7d: eb 06 jmp {{.*}}
-# CHECK-NEXT: 7f: 8b 45 f4 movl -12(%rbp), %eax
-# CHECK-NEXT: 82: 89 45 fc movl %eax, -4(%rbp)
-# CHECK-COUNT-10: : 89 b5 50 fb ff ff movl %esi, -1200(%rbp)
-# CHECK: c1: eb c2 jmp {{.*}}
-# CHECK-NEXT: c3: c3 retq
diff --git a/llvm/test/MC/X86/align-branch-64-2a.s b/llvm/test/MC/X86/align-branch-64-2a.s
deleted file mode 100644
index f7a61c3499f0..000000000000
--- a/llvm/test/MC/X86/align-branch-64-2a.s
+++ /dev/null
@@ -1,17 +0,0 @@
-# Check only indirect jumps are aligned with option --x86-align-branch-boundary=32 --x86-align-branch=indirect
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=indirect %p/Inputs/align-branch-64-2.s | llvm-objdump -d - | FileCheck %s
-
-# CHECK: 0000000000000000 <foo>:
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-COUNT-2: : 89 75 f4 movl %esi, -12(%rbp)
-# CHECK-COUNT-2: : 90 nop
-# CHECK: 20: ff e0 jmpq *%rax
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 3a: 89 75 f4 movl %esi, -12(%rbp)
-# CHECK-NEXT: 3d: 55 pushq %rbp
-# CHECK-NEXT: 3e: ff d0 callq *%rax
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 58: 55 pushq %rbp
-# CHECK-NEXT: 59: e8 00 00 00 00 callq {{.*}}
-# CHECK-COUNT-4: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 7e: ff 14 25 00 00 00 00 callq *0
diff --git a/llvm/test/MC/X86/align-branch-64-2b.s b/llvm/test/MC/X86/align-branch-64-2b.s
deleted file mode 100644
index d483cda99611..000000000000
--- a/llvm/test/MC/X86/align-branch-64-2b.s
+++ /dev/null
@@ -1,17 +0,0 @@
-# Check only calls are aligned with option --x86-align-branch-boundary=32 --x86-align-branch=call
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=call %p/Inputs/align-branch-64-2.s | llvm-objdump -d - | FileCheck %s
-
-# CHECK: 0000000000000000 <foo>:
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-COUNT-2: : 89 75 f4 movl %esi, -12(%rbp)
-# CHECK: 1e: ff e0 jmpq *%rax
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 38: 89 75 f4 movl %esi, -12(%rbp)
-# CHECK-NEXT: 3b: 55 pushq %rbp
-# CHECK-NEXT: 3c: ff d0 callq *%rax
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 56: 55 pushq %rbp
-# CHECK-NEXT: 57: e8 00 00 00 00 callq {{.*}}
-# CHECK-COUNT-4: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-COUNT-4: : 90 nop
-# CHECK: 80: ff 14 25 00 00 00 00 callq *0
diff --git a/llvm/test/MC/X86/align-branch-64-2c.s b/llvm/test/MC/X86/align-branch-64-2c.s
deleted file mode 100644
index 9c047f0f6a24..000000000000
--- a/llvm/test/MC/X86/align-branch-64-2c.s
+++ /dev/null
@@ -1,19 +0,0 @@
-# Check only indirect jumps and calls are aligned with option --x86-align-branch-boundary=32 --x86-align-branch=indirect+call
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=indirect+call %p/Inputs/align-branch-64-2.s | llvm-objdump -d - | FileCheck %s
-
-# CHECK: 0000000000000000 <foo>:
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-COUNT-2: : 89 75 f4 movl %esi, -12(%rbp)
-# CHECK-COUNT-2: : 90 nop
-# CHECK: 20: ff e0 jmpq *%rax
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 3a: 89 75 f4 movl %esi, -12(%rbp)
-# CHECK-NEXT: 3d: 55 pushq %rbp
-# CHECK-COUNT-2: : 90 nop
-# CHECK: 40: ff d0 callq *%rax
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 5a: 55 pushq %rbp
-# CHECK-COUNT-5: : 90 nop
-# CHECK: 60: e8 00 00 00 00 callq {{.*}}
-# CHECK-COUNT-4: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 85: ff 14 25 00 00 00 00 callq *0
diff --git a/llvm/test/MC/X86/align-branch-64-3a.s b/llvm/test/MC/X86/align-branch-64-3a.s
deleted file mode 100644
index 3df9347cad30..000000000000
--- a/llvm/test/MC/X86/align-branch-64-3a.s
+++ /dev/null
@@ -1,41 +0,0 @@
-# Check NOP padding is disabled before instruction that has variant symbol operand.
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=jmp+call %s | llvm-objdump -d - | FileCheck %s
-
-# CHECK: 0000000000000000 <foo>:
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-COUNT-2: : 48 89 e5 movq %rsp, %rbp
-# CHECK: 1e: e8 00 00 00 00 callq {{.*}}
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 3b: 55 pushq %rbp
-# CHECK-NEXT: 3c: 89 75 f4 movl %esi, -12(%rbp)
-# CHECK-NEXT: 3f: ff 15 00 00 00 00 callq *(%rip)
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 5d: ff 15 00 00 00 00 callq *(%rip)
-# CHECK-NEXT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 7b: ff 25 00 00 00 00 jmpq *(%rip)
-
- .text
- .globl foo
- .p2align 4
-foo:
- .rept 3
- movl %eax, %fs:0x1
- .endr
- .rept 2
- movq %rsp, %rbp
- .endr
- call __tls_get_addr at PLT
- .rept 3
- movl %eax, %fs:0x1
- .endr
- pushq %rbp
- movl %esi, -12(%rbp)
- call *__tls_get_addr at GOTPCREL(%rip)
- .rept 3
- movl %eax, %fs:0x1
- .endr
- call *foo at GOTPCREL(%rip)
- .rept 3
- movl %eax, %fs:0x1
- .endr
- jmp *foo at GOTPCREL(%rip)
diff --git a/llvm/test/MC/X86/align-branch-64-4a.s b/llvm/test/MC/X86/align-branch-64-4a.s
deleted file mode 100644
index e7b1e8c9d87b..000000000000
--- a/llvm/test/MC/X86/align-branch-64-4a.s
+++ /dev/null
@@ -1,33 +0,0 @@
-# Check only rets are aligned with option --x86-align-branch-boundary=32 --x86-align-branch=ret
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=ret %s | llvm-objdump -d - | FileCheck %s
-
-# CHECK: 0000000000000000 <foo>:
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-COUNT-2: : 48 89 e5 movq %rsp, %rbp
-# CHECK: 1e: 5a popq %rdx
-# CHECK-NEXT: 1f: 90 nop
-# CHECK-NEXT: 20: c3 retq
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 39: 89 75 f4 movl %esi, -12(%rbp)
-# CHECK-NEXT: 3c: 31 c0 xorl %eax, %eax
-# CHECK-COUNT-2: : 90 nop
-# CHECK: 40: c2 1e 00 retq $30
-
- .text
- .globl foo
- .p2align 4
-foo:
- .rept 3
- movl %eax, %fs:0x1
- .endr
- .rept 2
- movq %rsp, %rbp
- .endr
- popq %rdx
- ret
- .rept 3
- movl %eax, %fs:0x1
- .endr
- movl %esi, -12(%rbp)
- xorl %eax, %eax
- ret $30
diff --git a/llvm/test/MC/X86/align-branch-64-5a.s b/llvm/test/MC/X86/align-branch-64-5a.s
deleted file mode 100644
index b78b743b88da..000000000000
--- a/llvm/test/MC/X86/align-branch-64-5a.s
+++ /dev/null
@@ -1,43 +0,0 @@
-# Check no nop is inserted if no branch cross or is against the boundary
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc+jmp+indirect+call+ret %s | llvm-objdump -d - > %t1
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s | llvm-objdump -d - > %t2
-# RUN: cmp %t1 %t2
-# RUN: FileCheck --input-file=%t1 %s
-
-# CHECK: 0000000000000000 <foo>:
-# CHECK-COUNT-3: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 18: c1 e9 02 shrl $2, %ecx
-# CHECK-NEXT: 1b: 89 d1 movl %edx, %ecx
-# CHECK-NEXT: 1d: 75 fc jne {{.*}}
-# CHECK-NEXT: 1f: 55 pushq %rbp
-# CHECK-NEXT: 20: f6 c2 02 testb $2, %dl
-# CHECK-NEXT: 23: 75 fa jne {{.*}}
-# CHECK-COUNT-2: : 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK: 35: c1 e9 02 shrl $2, %ecx
-# CHECK-NEXT: 38: e8 c3 ff ff ff callq {{.*}}
-# CHECK-NEXT: 3d: ff e0 jmpq *%rax
-# CHECK-NEXT: 3f: 55 pushq %rbp
-# CHECK-NEXT: 40: c2 63 00 retq $99
-
- .text
- .p2align 4
-foo:
- .rept 3
- movl %eax, %fs:0x1
- .endr
- shrl $2, %ecx
-.L1:
- movl %edx, %ecx
- jne .L1
-.L2:
- push %rbp
- testb $2, %dl
- jne .L2
- .rept 2
- movl %eax, %fs:0x1
- .endr
- shrl $2, %ecx
- call foo
- jmp *%rax
- push %rbp
- ret $99
diff --git a/llvm/test/MC/X86/align-branch-64-6a.s b/llvm/test/MC/X86/align-branch-64-6a.s
deleted file mode 100644
index 0a78eb556fa7..000000000000
--- a/llvm/test/MC/X86/align-branch-64-6a.s
+++ /dev/null
@@ -1,50 +0,0 @@
-# Check option --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc+jmp+indirect+call+ret can cowork with option --mc-relax-all
-# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc+jmp+indirect+call+ret --mc-relax-all %s | llvm-objdump -d - > %t1
-# RUN: FileCheck --input-file=%t1 %s
-
-# CHECK: 0000000000000000 <foo>:
-# CHECK-NEXT: 0: 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 8: 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 10: 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 18: c1 e9 02 shrl $2, %ecx
-# CHECK-NEXT: 1b: 89 d1 movl %edx, %ecx
-# CHECK-NEXT: 1d: 90 nop
-# CHECK-NEXT: 1e: 90 nop
-# CHECK-NEXT: 1f: 90 nop
-# CHECK-NEXT: 20: 0f 85 f5 ff ff ff jne {{.*}}
-# CHECK-NEXT: 26: 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 2e: 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 36: f6 c2 02 testb $2, %dl
-# CHECK-NEXT: 39: 0f 85 e7 ff ff ff jne {{.*}}
-# CHECK-NEXT: 3f: 90 nop
-# CHECK-NEXT: 40: e9 d6 ff ff ff jmp {{.*}}
-# CHECK-NEXT: 45: 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 4d: 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 55: 64 89 04 25 01 00 00 00 movl %eax, %fs:1
-# CHECK-NEXT: 5d: 90 nop
-# CHECK-NEXT: 5e: 90 nop
-# CHECK-NEXT: 5f: 90 nop
-# CHECK-NEXT: 60: e8 9b ff ff ff callq {{.*}}
-# CHECK-NEXT: 65: e9 bc ff ff ff jmp {{.*}}
- .text
- .p2align 4
-foo:
- .rept 3
- movl %eax, %fs:0x1
- .endr
- shrl $2, %ecx
-.L1:
- movl %edx, %ecx
- jne .L1
-.L2:
- .rept 2
- movl %eax, %fs:0x1
- .endr
- testb $2, %dl
- jne .L2
- jmp .L1
- .rept 3
- movl %eax, %fs:0x1
- .endr
- call foo
- jmp .L2
diff --git a/llvm/test/MC/X86/align-branch-64-align.s b/llvm/test/MC/X86/align-branch-64-align.s
new file mode 100644
index 000000000000..d5bed5b4ab69
--- /dev/null
+++ b/llvm/test/MC/X86/align-branch-64-align.s
@@ -0,0 +1,26 @@
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc+call %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s
+
+ # Exercise some corner cases related to align directive.
+
+ .text
+ # Check the align directive between the macro fused pair
+ # does not make code crazy.
+ # CHECK: 0: cmpq %rax, %rbp
+ # CHECK: 3: nop
+ # CHECK: 4: jne
+ cmp %rax, %rbp
+ .p2align 1
+ jne bar
+
+ .rept 24
+ int3
+ .endr
+ .p2align 1
+ # Check we can ensure this call not cross or end at boundary when there
+ # is a align directive before it.
+ # CHECK: 20: callq *%rax
+ call *%rax
+
+ .type bar, at function
+bar:
+ retq
diff --git a/llvm/test/MC/X86/align-branch-64.s b/llvm/test/MC/X86/align-branch-64-basic.s
similarity index 100%
rename from llvm/test/MC/X86/align-branch-64.s
rename to llvm/test/MC/X86/align-branch-64-basic.s
diff --git a/llvm/test/MC/X86/align-branch-64-7a.s b/llvm/test/MC/X86/align-branch-64-bundle.s
similarity index 100%
rename from llvm/test/MC/X86/align-branch-64-7a.s
rename to llvm/test/MC/X86/align-branch-64-bundle.s
diff --git a/llvm/test/MC/X86/align-branch-64-fused.s b/llvm/test/MC/X86/align-branch-64-fused.s
new file mode 100644
index 000000000000..750afd713744
--- /dev/null
+++ b/llvm/test/MC/X86/align-branch-64-fused.s
@@ -0,0 +1,42 @@
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s
+
+ # Exercise cases where fused instructions need to be aligned.
+
+ .text
+ .globl foo
+foo:
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # 'cmp %rax, %rbp' is macro fused with 'jne foo',
+ # so we need to align the pair.
+ # CHECK: 20: cmpq %rax, %rbp
+ # CHECK: 23: jne
+ cmp %rax, %rbp
+ jne foo
+ int3
+
+ .p2align 5
+ .rept 28
+ int3
+ .endr
+ # 'cmp %rax, %rbp' is fusible but can not fused with `jo foo`,
+ # so we only need to align 'jo foo'.
+ # CHECK: 5c: cmpq %rax, %rbp
+ cmp %rax, %rbp
+ # CHECK: 60: jo
+ jo foo
+ int3
+
+ .p2align 5
+ .rept 26
+ int3
+ .endr
+ # The second 'cmp %rax, %rbp' is macro fused with 'jne foo'.
+ cmp %rax, %rbp
+ # CHECK: a0: cmpq %rax, %rbp
+ # CHECK: a3: jne
+ cmp %rax, %rbp
+ jne foo
+ int3
diff --git a/llvm/test/MC/X86/align-branch-64-general.s b/llvm/test/MC/X86/align-branch-64-general.s
new file mode 100644
index 000000000000..f354cc7c9720
--- /dev/null
+++ b/llvm/test/MC/X86/align-branch-64-general.s
@@ -0,0 +1,49 @@
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc+jmp %s -o %t1
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-branches-within-32B-boundaries %s -o %t2
+ # RUN: cmp %t1 %t2
+
+ # Check the general option --x86-branches-within-32B-boundaries is equivelent
+ # to the fined options --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc+jmp.
+
+ .text
+ .globl foo
+ .p2align 5
+foo:
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ js foo
+
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ jmp foo
+
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ jmp *%rcx
+
+
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ call foo
+
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ ret $0
+
+
+ .p2align 5
+ .rept 29
+ int3
+ .endr
+ cmp %rax, %rbp
+ je foo
diff --git a/llvm/test/MC/X86/align-branch-64-mixed.s b/llvm/test/MC/X86/align-branch-64-mixed.s
new file mode 100644
index 000000000000..2fa46fe71e9c
--- /dev/null
+++ b/llvm/test/MC/X86/align-branch-64-mixed.s
@@ -0,0 +1,51 @@
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=jcc+jmp+indirect+call+ret %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s
+
+ # Exercise cases where mixed kinds of branch are asked to be aligned.
+
+ .text
+ .globl labeled_mixed_test1
+labeled_mixed_test1:
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # This call should have started at 0x1e and ends at 0x23, so two bytes of
+ # padding are inserted before it.
+ # CHECK: 20: callq
+ call bar
+ .rept 28
+ int3
+ .endr
+ # If the previous call was not aligned, this jmp should have started at 0x3f
+ # and need two bytes of padding. After the two bytes of padding are inserted
+ # for the call, this jmp starts at 0xa1 and does not need padding.
+ # CHECK: 41: jmp
+ jmp *%rax
+
+ .globl labeled_mixed_test2
+labeled_mixed_test2:
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # This jne should have started at 0x7e, so two bytes of padding are inserted
+ # before it.
+ # CHECK: 80: jne
+ jne bar
+ .rept 28
+ int3
+ .endr
+ # If the previous jne was not aligned, this jmp should have started at 0x3c.
+ # After the two bytes of padding are inserted for the jne, this jmp should
+ # have started at 0x9e, so two bytes of padding are inserted and it starts at
+ # 0xa0.
+ # CHECK: a0: jmp
+ jmp bar
+
+ .globl labeled_mixed_test3
+labeled_mixed_test3:
+ .p2align 5
+ .type bar, at function
+bar:
+ # CHECK: c0: retq
+ retq
diff --git a/llvm/test/MC/X86/align-branch-64-necessary.s b/llvm/test/MC/X86/align-branch-64-necessary.s
new file mode 100644
index 000000000000..960bb92ed703
--- /dev/null
+++ b/llvm/test/MC/X86/align-branch-64-necessary.s
@@ -0,0 +1,54 @@
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=fused+jcc+indirect+call+ret %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s
+
+ # Check if no instruction crosses or is against the boundary,
+ # there will be no extra padding.
+
+ .text
+ .globl foo
+ .p2align 5
+foo:
+ .p2align 5
+ .rept 24
+ int3
+ .endr
+ # CHECK: 18: js
+ js foo
+
+ .p2align 5
+ .rept 24
+ int3
+ .endr
+ # CHECK: 38: jmp
+ jmp foo
+
+ .p2align 5
+ .rept 24
+ int3
+ .endr
+ # CHECK: 58: jmpq *%rcx
+ jmp *%rcx
+
+
+ .p2align 5
+ .rept 24
+ int3
+ .endr
+ # CHECK: 78: callq
+ call foo
+
+ .p2align 5
+ .rept 27
+ int3
+ .endr
+ # CHECK: 9b: retq $0
+ ret $0
+
+
+ .p2align 5
+ .rept 21
+ int3
+ .endr
+ # CHECK: b5: cmpq %rax, %rbp
+ # CHECK: b8: je
+ cmp %rax, %rbp
+ je foo
diff --git a/llvm/test/MC/X86/align-branch-64-relax-all.s b/llvm/test/MC/X86/align-branch-64-relax-all.s
new file mode 100644
index 000000000000..112629608f2d
--- /dev/null
+++ b/llvm/test/MC/X86/align-branch-64-relax-all.s
@@ -0,0 +1,42 @@
+ # 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
+
+ # Check instructions can be aligned correctly along with option --mc-relax-all
+
+ .text
+ .global foo
+foo:
+ .p2align 5
+ .rept 25
+ int3
+ .endr
+ # CHECK: 19: jne
+ # CHECK: 1f: int3
+ jne foo
+ int3
+
+ .p2align 5
+ .rept 27
+ int3
+ .endr
+ # CHECK: 40: jne
+ jne foo
+
+ .p2align 5
+ .rept 22
+ int3
+ .endr
+ # CHECK: 76: testb $2, %dl
+ # CHECK: 79: jne
+ # CHECK: 7f: int3
+ testb $2, %dl
+ jne foo
+ int3
+
+ .p2align 5
+ .rept 27
+ int3
+ .endr
+ # CHECK: a0: testb $2, %dl
+ # CHECK: a3: jne
+ testb $2, %dl
+ jne foo
diff --git a/llvm/test/MC/X86/align-branch-64-section-size.s b/llvm/test/MC/X86/align-branch-64-section-size.s
new file mode 100644
index 000000000000..e4c9fbf3f039
--- /dev/null
+++ b/llvm/test/MC/X86/align-branch-64-section-size.s
@@ -0,0 +1,20 @@
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=ret %s | llvm-readobj -S | FileCheck %s
+
+ # Check the aligment of section that contains instructions to be aligned
+ # is correctly set.
+
+ # CHECK: Name: text1
+ # CHECK: AddressAlignment: 32
+ .section text1
+foo:
+ ret
+
+ # CHECK: Name: text2
+ # CHECK: AddressAlignment: 1
+ .section text2
+ nop
+
+ # CHECK: Name: text3
+ # CHECK: AddressAlignment: 1
+ .section text3
+ jmp foo
diff --git a/llvm/test/MC/X86/align-branch-64-single.s b/llvm/test/MC/X86/align-branch-64-single.s
new file mode 100644
index 000000000000..54ac2e4ae573
--- /dev/null
+++ b/llvm/test/MC/X86/align-branch-64-single.s
@@ -0,0 +1,93 @@
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=jcc %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=JCC
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=jmp %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=JMP
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=indirect %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=IND
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=call %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=CAL
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=ret %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=RET
+
+ # Exercise cases where only one kind of instruction is asked to be aligned.
+ # Fused instruction cases are excluded.
+
+ .text
+ .globl foo
+ .p2align 5
+foo:
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # JCC: 20: jne
+ # JMP: 1e: jne
+ # IND: 1e: jne
+ # CAL: 1e: jne
+ # RET: 1e: jne
+ jne foo
+ int3
+
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # JCC: 5e: jmp
+ # JMP: 60: jmp
+ # IND: 5e: jmp
+ # CAL: 5e: jmp
+ # RET: 5e: jmp
+ jmp foo
+ int3
+
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # JCC: 9e: jmpq *%rax
+ # JMP: 9e: jmpq *%rax
+ # IND: a0: jmpq *%rax
+ # CAL: 9e: jmpq *%rax
+ # RET: 9e: jmpq *%rax
+ jmp *%rax
+ int3
+
+
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # JCC: de: callq *%rax
+ # JMP: de: callq *%rax
+ # IND: de: callq *%rax
+ # CAL: e0: callq *%rax
+ # RET: de: callq *%rax
+ call *%rax
+ int3
+
+
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # JCC: 11e: retq
+ # JMP: 11e: retq
+ # IND: 11e: retq
+ # CAL: 11e: retq
+ # RET: 120: retq
+ ret $0
+ int3
+
+
+ .p2align 5
+ .rept 29
+ int3
+ .endr
+ # JCC: 15d: cmpq %rax, %rbp
+ # JCC: 160: je
+ # JMP: 15d: cmpq %rax, %rbp
+ # JMP: 160: je
+ # IND: 15d: cmpq %rax, %rbp
+ # IND: 160: je
+ # CAL: 15d: cmpq %rax, %rbp
+ # CAL: 160: je
+ # RET: 15d: cmpq %rax, %rbp
+ # RET: 160: je
+ cmp %rax, %rbp
+ je foo
+ int3
diff --git a/llvm/test/CodeGen/X86/align-branch-boundary-default.s b/llvm/test/MC/X86/align-branch-boundary-default.s
similarity index 100%
rename from llvm/test/CodeGen/X86/align-branch-boundary-default.s
rename to llvm/test/MC/X86/align-branch-boundary-default.s
diff --git a/llvm/test/MC/X86/align-branch-variant-symbol.s b/llvm/test/MC/X86/align-branch-variant-symbol.s
new file mode 100644
index 000000000000..e1cb7b52edc2
--- /dev/null
+++ b/llvm/test/MC/X86/align-branch-variant-symbol.s
@@ -0,0 +1,57 @@
+ # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=call+indirect %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=64BIT,CHECK
+
+ # RUN: llvm-mc -filetype=obj -triple i386-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=call+indirect %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=32BIT,CHECK
+
+ # Exercise cases where the instruction to be aligned has a variant symbol
+ # operand, and we can't add before it since linker may rewrite it.
+
+ .text
+ .global foo
+
+foo:
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # CHECK: 1d: int3
+ # 64BIT: 1e: callq
+ # 32BIT: 1e: calll
+ # CHECK: 23: int3
+ call ___tls_get_addr at PLT
+ int3
+
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # CHECK: 5d: int3
+ # 64BIT: 5e: callq *(%ecx)
+ # 64BIT: 65: int3
+ # 32BIT: 5e: calll *(%ecx)
+ # 32BIT: 64: int3
+ call *___tls_get_addr at GOT(%ecx)
+ int3
+
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # CHECK: 9d: int3
+ # 64BIT: 9e: callq *(%eax)
+ # 64BIT: a1: int3
+ # 32BIT: 9e: calll *(%eax)
+ # 32BIT: a0: int3
+ call *foo at tlscall(%eax)
+ int3
+
+ .p2align 5
+ .rept 30
+ int3
+ .endr
+ # CHECK: dd: int3
+ # 64BIT: de: jmpq *(%eax)
+ # 64BIT: e1: int3
+ # 32BIT: de: jmpl *(%eax)
+ # 32BIT: e0: int3
+ jmp *foo at tlscall(%eax)
+ int3
More information about the llvm-commits
mailing list