116996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \
216996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# RUN:   | llvm-objdump -disassemble -no-show-raw-insn - | FileCheck %s
316996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky
416996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# Test simple NOP insertion for single instructions.
516996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky
616996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  .text
716996c4940ad4248dc2a874d060b30e94e55b672Eli Benderskyfoo:
816996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  # Will be bundle-aligning to 16 byte boundaries
916996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  .bundle_align_mode 4
1016996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  pushq   %rbp
1116996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  pushq   %r14
1216996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  pushq   %rbx
1316996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky
1416996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  movl    %edi, %ebx
1516996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  callq   bar
1616996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  movl    %eax, %r14d
1716996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky
1816996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  imull   $17, %ebx, %ebp
1916996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# This imull is 3 bytes long and should have started at 0xe, so two bytes
2016996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# of nop padding are inserted instead and it starts at 0x10
2116996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# CHECK:          nop
2216996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# CHECK-NEXT:     10: imull
2316996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky
2416996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  movl    %ebx, %edi
2516996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  callq   bar
2616996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  cmpl    %r14d, %ebp
2716996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  jle     .L_ELSE
2816996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# Due to the padding that's inserted before the addl, the jump target
2916996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# becomes farther by one byte.
3016996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# CHECK:         jle 5
3116996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky
3216996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  addl    %ebp, %eax
3316996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# CHECK:          nop
3416996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# CHECK-NEXT:     20: addl
3516996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky
3616996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  jmp     .L_RET
3716996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky.L_ELSE:
3816996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  imull   %ebx, %eax
3916996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky.L_RET:
4016996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  ret
4116996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky
4216996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# Just sanity checking that data fills don't drive bundling crazy
4316996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  .data
4416996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  .byte 40
4516996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky  .byte 98
4616996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky
4716996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky
48