mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
d994c519b3
Fix PR48742: the D75203 assembler optimization locates MCRelaxableFragment's within two MCSymbol's and relaxes some MCRelaxableFragment's to reduce the size of a MCAlignFragment. A -g build has more MCSymbol's and therefore may have different assembler output (e.g. a MCRelaxableFragment (jmp) may have 5 bytes with -O1 while 2 bytes with -O1 -g). `.p2align 4, 0x90` is common due to loops. For a larger program, with a lot of temporary labels, the assembly output difference is somewhat destined. The cost seems to overweigh the benefits so we default to -x86-pad-for-align=false until the heuristic is improved. Reviewed By: skan Differential Revision: https://reviews.llvm.org/D94542
30 lines
837 B
ArmAsm
30 lines
837 B
ArmAsm
# RUN: llvm-mc -mcpu=skylake -filetype=obj -triple x86_64-pc-linux-gnu %s -x86-pad-max-prefix-size=5 -x86-pad-for-align=1 | llvm-objdump -d - | FileCheck %s
|
|
|
|
|
|
# The first test check the correctness cornercase - can't add prefixes on a
|
|
# instruction following by a prefix.
|
|
.globl labeled_prefix_test
|
|
labeled_prefix_test:
|
|
# CHECK: 0: 2e 2e 2e 2e 2e e9 06 00 00 00 jmp
|
|
# CHECK: a: 3e e9 00 00 00 00 jmp
|
|
jmp bar
|
|
DS
|
|
jmp bar
|
|
.p2align 4
|
|
bar:
|
|
ret
|
|
|
|
# The second test is similar to the second test - can't add prefixes on a
|
|
# instruction following by hardcode.
|
|
.p2align 5
|
|
.globl labeled_hardcode_test
|
|
labeled_hardcode_test:
|
|
# CHECK: 20: 2e 2e 2e 2e 2e e9 06 00 00 00 jmp
|
|
# CHECK: 2a: 3e e9 00 00 00 00 jmp
|
|
jmp baz
|
|
.byte 0x3e
|
|
jmp baz
|
|
.p2align 4
|
|
baz:
|
|
ret
|