1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV 2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %} 3 4; CHECK-SPIRV-DAG: %[[Long:.*]] = OpTypeInt 32 0 5; CHECK-SPIRV-DAG: %[[Void:.*]] = OpTypeVoid 6; CHECK-SPIRV-DAG: %[[Struct:.*]] = OpTypeStruct %[[Long]] 7; CHECK-SPIRV-DAG: %[[StructPtr:.*]] = OpTypePointer Generic %[[Struct]] 8; CHECK-SPIRV-DAG: %[[Function:.*]] = OpTypeFunction %[[Void]] %[[StructPtr]] 9; CHECK-SPIRV-DAG: %[[Const:.*]] = OpConstantNull %[[Struct]] 10; CHECK-SPIRV-DAG: %[[CrossStructPtr:.*]] = OpTypePointer CrossWorkgroup %[[Struct]] 11; CHECK-SPIRV-DAG: %[[Var:.*]] = OpVariable %[[CrossStructPtr]] CrossWorkgroup %[[Const]] 12; CHECK-SPIRV: %[[Foo:.*]] = OpFunction %[[Void]] None %[[Function]] 13; CHECK-SPIRV-NEXT: OpFunctionParameter %[[StructPtr]] 14; CHECK-SPIRV: %[[Casted:.*]] = OpPtrCastToGeneric %[[StructPtr]] %[[Var]] 15; CHECK-SPIRV-NEXT: OpFunctionCall %[[Void]] %[[Foo]] %[[Casted]] 16 17%struct.global_ctor_dtor = type { i32 } 18@g1 = addrspace(1) global %struct.global_ctor_dtor zeroinitializer 19 20define linkonce_odr spir_func void @foo(ptr addrspace(4) %this) { 21entry: 22 ret void 23} 24 25define internal spir_func void @bar() { 26entry: 27 call spir_func void @foo(ptr addrspace(4) addrspacecast (ptr addrspace(1) @g1 to ptr addrspace(4))) 28 ret void 29} 30