Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/Transforms/HotColdSplit/noreturn.ll
Show First 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | ; <label>:4: ; preds = %2 | ||||
call void @sink() | call void @sink() | ||||
tail call void @longjmp(%struct.__jmp_buf_tag* %1, i32 0) | tail call void @longjmp(%struct.__jmp_buf_tag* %1, i32 0) | ||||
unreachable | unreachable | ||||
; <label>:5: ; preds = %2 | ; <label>:5: ; preds = %2 | ||||
ret void | ret void | ||||
} | } | ||||
; Outline noreturn calls which are explicitly marked noreturn unless they are longjmp. | |||||
; CHECK-LABEL: define {{.*}}@gap( | |||||
; CHECK: gap.cold.1 | |||||
define void @gap(i32, %struct.__jmp_buf_tag*) { | |||||
%3 = icmp eq i32 %0, 0 | |||||
tail call void @_Z10sideeffectv() | |||||
br i1 %3, label %5, label %4 | |||||
; <label>:4: ; preds = %2 | |||||
tail call void @_assert_noreturn(%struct.__jmp_buf_tag* %1, i32 0) | |||||
unreachable | |||||
; <label>:5: ; preds = %2 | |||||
ret void | |||||
} | |||||
; CHECK-LABEL: define {{.*}}@bar.cold.1( | ; CHECK-LABEL: define {{.*}}@bar.cold.1( | ||||
; CHECK: call {{.*}}@llvm.trap( | ; CHECK: call {{.*}}@llvm.trap( | ||||
declare void @sink() cold | declare void @sink() cold | ||||
declare void @llvm.trap() noreturn cold | declare void @llvm.trap() noreturn cold | ||||
declare void @_Z10sideeffectv() | declare void @_Z10sideeffectv() | ||||
declare void @longjmp(%struct.__jmp_buf_tag*, i32) noreturn nounwind | declare void @longjmp(%struct.__jmp_buf_tag*, i32) noreturn nounwind | ||||
declare void @_assert_noreturn(%struct.__jmp_buf_tag*, i32) noreturn nounwind |