Home | History | Annotate | Download | only in AlignedBundling
      1 # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
      2 # RUN:   | llvm-objdump -disassemble - | FileCheck %s
      3 
      4 # Test that instructions inside bundle-locked groups are relaxed even if their
      5 # fixup is short enough not to warrant relaxation on its own.
      6 
      7   .text
      8 foo:
      9   .bundle_align_mode 4
     10   pushq   %rbp
     11 
     12   movl    %edi, %ebx
     13   callq   bar
     14   movl    %eax, %r14d
     15   imull   $17, %ebx, %ebp
     16   movl    %ebx, %edi
     17   callq   bar
     18   cmpl    %r14d, %ebp
     19   .bundle_lock
     20 
     21   jle     .L_ELSE
     22 # This group would've started at 0x18 and is too long, so a chunky NOP padding
     23 # is inserted to push it to 0x20.
     24 # CHECK: 18: {{[a-f0-9 ]+}} nopl
     25 
     26 # The long encoding for JLE should be used here even though its target is close
     27 # CHECK-NEXT: 20: 0f 8e
     28 
     29   addl    %ebp, %eax
     30 
     31   jmp     .L_RET
     32 # Same for the JMP
     33 # CHECK: 28: e9
     34 
     35   .bundle_unlock
     36 
     37 .L_ELSE:
     38   imull   %ebx, %eax
     39 .L_RET:
     40 
     41   popq    %rbx
     42 
     43