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 11 foo: 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 29 bar: 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 45 baz: 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 61 quux: 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