1# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \ 2# RUN: | llvm-objdump -disassemble -no-show-raw-insn - | FileCheck %s 3# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu -mc-relax-all %s -o - \ 4# RUN: | llvm-objdump -disassemble -no-show-raw-insn - | FileCheck %s 5 6# Will be bundle-aligning to 16 byte boundaries 7 .bundle_align_mode 4 8 .text 9# CHECK-LABEL: foo: 10.type foo,@function 11foo: 12# Test that bundle alignment mode can be set more than once. 13 .bundle_align_mode 4 14# Each of these callq instructions is 5 bytes long 15 callq bar 16 callq bar 17 .bundle_lock 18 .bundle_lock 19 callq bar 20 callq bar 21 .bundle_unlock 22 .bundle_unlock 23# CHECK: 10: callq {{.*}} <bar> 24# CHECK-NEXT: 15: callq {{.*}} <bar> 25 26 .p2align 4 27# CHECK-LABEL: bar: 28.type bar,@function 29bar: 30 callq foo 31 callq foo 32# Check that the callqs get bundled together, and that the whole group is 33# align_to_end 34 .bundle_lock 35 callq bar 36 .bundle_lock align_to_end 37 callq bar 38 .bundle_unlock 39 .bundle_unlock 40# CHECK: 36: callq {{.*}} <bar> 41# CHECK-NEXT: 3b: callq {{.*}} <bar> 42 43# CHECK-LABEL: baz: 44.type baz,@function 45baz: 46 callq foo 47 callq foo 48# Check that the callqs get bundled together, and that the whole group is 49# align_to_end (with the outer directive marked align_to_end) 50 .bundle_lock align_to_end 51 callq bar 52 .bundle_lock 53 callq bar 54 .bundle_unlock 55 .bundle_unlock 56# CHECK: 56: callq {{.*}} <bar> 57# CHECK-NEXT: 5b: callq {{.*}} <bar> 58 59# CHECK-LABEL: quux 60.type quux,@function 61quux: 62 callq bar 63 callq bar 64 .bundle_lock 65 .bundle_lock 66 callq bar 67 .bundle_unlock 68 callq bar 69 .bundle_unlock 70# Check that the calls are bundled together when the second one is after the 71# inner nest is closed. 72# CHECK: 70: callq {{.*}} <bar> 73# CHECK-NEXT: 75: callq {{.*}} <bar> 74