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