| # RUN: llvm-mc -filetype=obj -triple x86_64 --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 |