Files
clang-p2996/llvm/test/CodeGen/X86/postalloc-coalescing.ll
Jeremy Morse e6bf48d110 [X86] Don't request 0x90 nop filling in p2align directives (#110134)
As of rev ea222be0d, LLVMs assembler will actually try to honour the
"fill value" part of p2align directives. X86 printed these as 0x90, which
isn't actually what it wanted: we want multi-byte nops for .text
padding. Compiling via a textual assembly file produces single-byte
nop padding since ea222be0d but the built-in assembler will produce
multi-byte nops. This divergent behaviour is undesirable.

To fix: don't set the byte padding field for x86, which allows the
assembler to pick multi-byte nops. Test that we get the same multi-byte
padding when compiled via textual assembly or directly to object file.
Added same-align-bytes-with-llasm-llobj.ll to that effect, updated
numerous other tests to not contain check-lines for the explicit padding.
2024-10-02 11:14:05 +01:00

52 lines
1.5 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=i686-- | FileCheck %s
define fastcc i32 @_Z18yy_get_next_bufferv() nounwind {
; CHECK-LABEL: _Z18yy_get_next_bufferv:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: movl $42, %eax
; CHECK-NEXT: cmpl $-1, %eax
; CHECK-NEXT: je .LBB0_3
; CHECK-NEXT: .p2align 4
; CHECK-NEXT: .LBB0_1: # %bb116
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
; CHECK-NEXT: movb %al, 0
; CHECK-NEXT: cmpl $-1, %eax
; CHECK-NEXT: jne .LBB0_1
; CHECK-NEXT: .LBB0_3: # %bb158
; CHECK-NEXT: movb %al, 0
; CHECK-NEXT: xorl %eax, %eax
; CHECK-NEXT: retl
entry:
br label %bb131
bb116: ; preds = %bb131
%tmp125126 = trunc i32 %c.1 to i8 ; <i8> [#uses=1]
store i8 %tmp125126, ptr null, align 1
br label %bb131
bb131: ; preds = %bb116, %entry
%c.2 = phi i32 [ %c.1, %bb116 ], [ 42, %entry ] ; <i32> [#uses=1]
%c.1 = select i1 false, i32 0, i32 %c.2 ; <i32> [#uses=4]
%tmp181 = icmp eq i32 %c.1, -1 ; <i1> [#uses=1]
br i1 %tmp181, label %bb158, label %bb116
bb158: ; preds = %bb131
br i1 true, label %cond_true163, label %cond_next178
cond_true163: ; preds = %bb158
%tmp172173 = trunc i32 %c.1 to i8 ; <i8> [#uses=1]
store i8 %tmp172173, ptr null, align 1
br label %cond_next178
cond_next178: ; preds = %cond_true163, %bb158
%tmp180 = icmp eq i32 %c.1, -1 ; <i1> [#uses=1]
br i1 %tmp180, label %cond_next184, label %cond_next199
cond_next184: ; preds = %cond_next178
ret i32 0
cond_next199: ; preds = %cond_next178
ret i32 0
}