
In review of bbde6b, I had originally proposed that we support the legacy text format. As review evolved, it bacame clear this had been a bad idea (too much complexity), but in order to let that patch finally move forward, I approved the change with the variant. This change undoes the variant, and updates all the tests to just use the array form.
137 lines
3.3 KiB
YAML
137 lines
3.3 KiB
YAML
# Check if the alignment directive is put on the correct place when the basic block section option is used.
|
|
# RUN: llc -mtriple x86_64-unknown-linux-gnu -start-before=x86-asm-printer %s -o - | FileCheck %s -check-prefix=CHECK
|
|
|
|
# How to generate the input:
|
|
# foo.c
|
|
# int test(int a) {
|
|
# switch (a) {
|
|
# default:
|
|
# return 10;
|
|
# case 1:
|
|
# a += 1;
|
|
# case 2:
|
|
# a *= -1;
|
|
# case 8:
|
|
# break;
|
|
# }
|
|
# return a;
|
|
# }
|
|
#
|
|
# clang -O0 -S -emit-llvm test.c
|
|
# llc < test.ll -stop-after=bbsections-prepare -align-all-nofallthru-blocks=8 -basic-block-sections=all
|
|
|
|
|
|
--- |
|
|
define i32 @test(i32 noundef %a) {
|
|
entry:
|
|
switch i32 %a, label %return [
|
|
i32 1, label %sw.bb1
|
|
i32 2, label %sw.bb1
|
|
i32 8, label %sw.epilog
|
|
]
|
|
|
|
sw.bb1: ; preds = %entry, %entry
|
|
br label %sw.epilog
|
|
|
|
sw.epilog: ; preds = %sw.bb1, %entry
|
|
%a.addr.1 = phi i32 [ %a, %entry ], [ -2, %sw.bb1 ]
|
|
br label %return
|
|
|
|
return: ; preds = %sw.epilog, %entry
|
|
%retval.0 = phi i32 [ %a.addr.1, %sw.epilog ], [ 10, %entry ]
|
|
ret i32 %retval.0
|
|
}
|
|
|
|
|
|
...
|
|
---
|
|
name: test
|
|
alignment: 16
|
|
exposesReturnsTwice: false
|
|
legalized: false
|
|
regBankSelected: false
|
|
selected: false
|
|
failedISel: false
|
|
tracksRegLiveness: true
|
|
hasWinCFI: false
|
|
callsEHReturn: false
|
|
callsUnwindInit: false
|
|
hasEHContTarget: false
|
|
hasEHScopes: false
|
|
hasEHFunclets: false
|
|
failsVerification: false
|
|
tracksDebugUserValues: true
|
|
registers: []
|
|
liveins:
|
|
- { reg: '$edi', virtual-reg: '' }
|
|
frameInfo:
|
|
isFrameAddressTaken: false
|
|
isReturnAddressTaken: false
|
|
hasStackMap: false
|
|
hasPatchPoint: false
|
|
stackSize: 0
|
|
offsetAdjustment: 0
|
|
maxAlignment: 1
|
|
adjustsStack: false
|
|
hasCalls: false
|
|
stackProtector: ''
|
|
functionContext: ''
|
|
maxCallFrameSize: 0
|
|
cvBytesOfCalleeSavedRegisters: 0
|
|
hasOpaqueSPAdjustment: false
|
|
hasVAStart: false
|
|
hasMustTailInVarArgFunc: false
|
|
hasTailCall: false
|
|
localFrameSize: 0
|
|
savePoint: []
|
|
restorePoint: []
|
|
fixedStack: []
|
|
stack: []
|
|
callSites: []
|
|
debugValueSubstitutions: []
|
|
constants: []
|
|
machineFunctionInfo: {}
|
|
body: |
|
|
bb.0.entry:
|
|
successors: %bb.1(0x40000000), %bb.2(0x40000000)
|
|
liveins: $edi
|
|
|
|
renamable $edi = KILL $edi, implicit-def $rdi
|
|
renamable $eax = LEA64_32r renamable $rdi, 1, $noreg, -1, $noreg
|
|
CMP32ri8 killed renamable $eax, 2, implicit-def $eflags
|
|
JCC_1 %bb.2, 3, implicit $eflags
|
|
JMP_1 %bb.1
|
|
|
|
bb.1.sw.bb1 (bbsections 1):
|
|
successors: %bb.3(0x80000000)
|
|
|
|
renamable $edi = MOV32ri -2, implicit-def $rdi
|
|
JMP_1 %bb.3
|
|
|
|
bb.2.entry (align 256, bbsections 2):
|
|
successors: %bb.3(0x40000000), %bb.4(0x40000000)
|
|
liveins: $rdi
|
|
|
|
renamable $eax = MOV32ri 10
|
|
CMP32ri8 renamable $edi, 8, implicit-def $eflags
|
|
JCC_1 %bb.4, 5, implicit $eflags
|
|
JMP_1 %bb.3
|
|
|
|
bb.3.sw.epilog (bbsections 3):
|
|
successors: %bb.4(0x80000000)
|
|
liveins: $rdi
|
|
|
|
$eax = MOV32rr $edi, implicit killed $rdi
|
|
JMP_1 %bb.4
|
|
|
|
bb.4.return (bbsections 4):
|
|
liveins: $eax
|
|
|
|
RET64 $eax
|
|
|
|
...
|
|
|
|
# CHECK: .section .text.test,"ax",@progbits,unique,2
|
|
# CHECK-NEXT: .p2align 8
|
|
# CHECK-NEXT: test.__part.2: # %entry
|