# 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
