blob: 7ce93e96d964f8faedcfb0e2be0469af2bed5519 [file] [log] [blame]
; This tests that unreachable basic blocks are pruned from the CFG, so that
; liveness analysis doesn't detect inconsistencies.
; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 \
; RUN: -allow-externally-defined-symbols | FileCheck %s
; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 \
; RUN: -allow-externally-defined-symbols | FileCheck %s
declare void @abort()
define internal i32 @unreachable_block() {
entry:
; ret_val has no reaching uses and so its assignment may be
; dead-code eliminated.
%ret_val = add i32 undef, undef
call void @abort()
unreachable
label:
; ret_val has no reaching definitions, causing an inconsistency in
; liveness analysis.
ret i32 %ret_val
}
; CHECK-LABEL: unreachable_block