; 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 | FileCheck %s | |
; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 | FileCheck %s | |
declare void @abort() | |
define 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 |