Files
clang-p2996/llvm/test/CodeGen/X86/basic-block-sections-unreachable.ll
Rahman Lavaee 0b2f4cdf2b Explicitly check for entry basic block, rather than relying on MachineBasicBlock::pred_empty.
Sometimes in unoptimized code, we have dangling unreachable basic blocks with no predecessors. Basic block sections should be emitted for those as well. Without this patch, the included test fails with a fatal error in `AsmPrinter::emitBasicBlockEnd`.

Reviewed By: tmsriram

Differential Revision: https://reviews.llvm.org/D89423
2020-10-26 16:15:56 -07:00

19 lines
774 B
LLVM

; Check that basic block section is emitted when a non-entry block has no predecessors.
; RUN: llc < %s -mtriple=x86_64 -O0 -basic-block-sections=all | FileCheck %s --check-prefix=CHECK-SECTIONS
; RUN: llc < %s -mtriple=x86_64 -O0 | FileCheck %s --check-prefix=CHECK-NOSECTIONS
define void @foo(i32* %bar) {
%v = load i32, i32* %bar
switch i32 %v, label %default [
i32 0, label %target
]
target:
ret void
;; This is the block which will not have any predecessors. If the block is not garbage collected, it must
;; be placed in a basic block section with a corresponding symbol.
default:
unreachable
; CHECK-NOSECTIONS: # %bb.2: # %default
; CHECK-SECTIONS: .section .text,"ax",@progbits,unique,2
; CHECK-SECTIONS-NEXT: foo.2: # %default
}