llvm-hs-pretty-0.4.0.0: tests/input/term.ll
; === [ Terminators ] ==========================================================
; ~~~ [ ret ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
define i32 @ret_1() {
; Plain terminator.
ret i32 42
}
define void @ret_2() {
; Void return
ret void
}
define i32 @ret_3() {
; Metadata.
ret i32 42, !foo !{!"bar"}, !baz !{!"qux"}
}
; ~~~ [ br ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
define void @br_1() {
; Unconditional branch terminator.
br label %foo
foo:
ret void
}
define void @br_2() {
; Metadata.
br label %foo, !foo !{!"bar"}, !baz !{!"qux"}
foo:
ret void
}
define void @br_3(i1 %cond) {
; Conditional branch terminator.
br i1 %cond, label %foo, label %bar
foo:
ret void
bar:
ret void
}
define void @br_4(i1 %cond) {
; Metadata.
br i1 %cond, label %foo, label %bar, !foo !{!"bar"}, !baz !{!"qux"}
foo:
ret void
bar:
ret void
}
; ~~~ [ switch ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
define void @switch_1() {
; Plain terminator.
switch i32 1, label %default [
]
default:
ret void
}
define void @switch_2() {
; Multiple cases.
switch i32 2, label %default [
i32 1, label %case1
i32 2, label %case2
i32 3, label %case3
]
default:
ret void
case1:
ret void
case2:
ret void
case3:
ret void
}
define void @switch_3() {
; Metadata.
switch i32 2, label %default [
i32 1, label %case1
i32 2, label %case2
i32 3, label %case3
], !foo !{!"bar"}, !baz !{!"qux"}
default:
ret void
case1:
ret void
case2:
ret void
case3:
ret void
}
; ~~~ [ indirectbr ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
define i32 @f() nounwind {
entry:
indirectbr i8* undef, []
exit:
indirectbr i8* undef, [label %exit]
}
; ~~~ [ invoke ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; TODO: add test cases for invoke terminator.
; ~~~ [ resume ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; TODO: add test cases for resume terminator.
; ~~~ [ catchswitch ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; TODO: add test cases for catchswitch terminator.
; ~~~ [ catchret ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; TODO: add test cases for catchret terminator.
; ~~~ [ cleanupret ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; TODO: add test cases for cleanupret terminator.
; ~~~ [ unreachable ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
define void @unreachable_1() {
; Plain terminator.
unreachable
}
define void @unreachable_2() {
; Metadata.
unreachable, !foo !{!"bar"}, !baz !{!"qux"}
}