159d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
259d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# RUN:   | llvm-objdump -disassemble -no-show-raw-insn - | FileCheck %s
32c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu -mc-relax-all %s -o - \
42c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar# RUN:   | llvm-objdump -disassemble -no-show-raw-insn - | FileCheck %s
559d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky
659d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# Test some variations of padding to the end of a bundle.
759d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky
859d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  .text
959d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Benderskyfoo:
1059d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  .bundle_align_mode 4
1159d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky
1259d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# Each of these callq instructions is 5 bytes long
1359d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  callq   bar
1459d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  callq   bar
1559d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  .bundle_lock align_to_end
1659d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  callq   bar
1759d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  .bundle_unlock
1859d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# To align this group to a bundle end, we need a 1-byte NOP.
1959d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# CHECK:        a:  nop
2059d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# CHECK-NEXT:   b: callq
2159d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky
2259d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  callq   bar
2359d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  callq   bar
2459d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  .bundle_lock align_to_end
2559d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  callq   bar
2659d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  callq   bar
2759d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky  .bundle_unlock
2859d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# Here we have to pad until the end of the *next* boundary because
2959d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# otherwise the group crosses a boundary.
3059d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# CHECK:      1a: nop
31b11917c1aa7348a67d80149fa9613f09a8d56f14Derek Schuff# The nop sequence may be implemented as one instruction or many, but if
32b11917c1aa7348a67d80149fa9613f09a8d56f14Derek Schuff# it's one instruction, that instruction cannot itself cross the boundary.
33b11917c1aa7348a67d80149fa9613f09a8d56f14Derek Schuff# CHECK:      20: nop
3459d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# CHECK-NEXT: 26: callq
3559d152197d741ab930dfc99ced3cac1b8bc8bef9Eli Bendersky# CHECK-NEXT: 2b: callq
36