packages feed

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"}
}