1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s 2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %} 3 4; CHECK-DAG: %[[#Char:]] = OpTypeInt 8 0 5; CHECK-DAG: %[[#PtrChar:]] = OpTypePointer Function %[[#Char]] 6; CHECK-DAG: %[[#Int:]] = OpTypeInt 32 0 7; CHECK-DAG: %[[#PtrInt:]] = OpTypePointer Function %[[#Int]] 8; CHECK: %[[#R1:]] = OpFunctionCall %[[#PtrChar]] %[[#]] 9; CHECK: %[[#R2:]] = OpFunctionCall %[[#PtrInt]] %[[#]] 10; CHECK: %[[#Casted:]] = OpBitcast %[[#PtrChar]] %[[#R2]] 11; CHECK: OpPhi %[[#PtrChar]] %[[#R1]] %[[#]] %[[#Casted]] %[[#]] 12 13define ptr @foo(i1 %arg) { 14entry: 15 %r1 = tail call ptr @f1() 16 %r2 = tail call ptr @f2() 17 br i1 %arg, label %l1, label %l2 18 19l1: 20 br label %exit 21 22l2: 23 br label %exit 24 25exit: 26 %ret = phi ptr [ %r1, %l1 ], [ %r2, %l2 ] 27 %ret2 = phi ptr [ %r1, %l1 ], [ %r2, %l2 ] 28 tail call void @f0(ptr %ret) 29 ret ptr %ret2 30} 31 32define void @f0(ptr %arg) { 33entry: 34 ret void 35} 36 37define ptr @f1() { 38entry: 39 %p = alloca i8 40 store i8 8, ptr %p 41 ret ptr %p 42} 43 44define ptr @f2() { 45entry: 46 %p = alloca i32 47 store i32 32, ptr %p 48 ret ptr %p 49} 50