| ; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s | |
| ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %} | |
| ;; Debug info: | |
| ; CHECK: OpName %[[#FOO:]] "foo" | |
| ;; Types: | |
| ; CHECK: %[[#VOID:]] = OpTypeVoid | |
| ; CHECK: %[[#FN:]] = OpTypeFunction %[[#VOID]] | |
| ;; Functions: | |
| ; CHECK: %[[#FOO]] = OpFunction %[[#VOID]] None %[[#FN]] | |
| ; CHECK-NOT: OpFunctionParameter | |
| ;; NOTE: In 2.4, it isn't explicitly written that a function always has a least | |
| ;; one block. In fact, 2.4.11 seems to imply that there are at least two | |
| ;; blocks in functions with a body, but that doesn't make much sense. | |
| ;; However, in order to distinguish between function declaration and | |
| ;; definition, a function needs at least one block, hence why this test | |
| ;; expects one OpLabel + OpReturn. | |
| ; CHECK: OpLabel | |
| ; CHECK: OpReturn | |
| ; CHECK-NOT: OpLabel | |
| ; CHECK: OpFunctionEnd | |
| define void @foo() { | |
| ret void | |
| } |