137d00635SVyacheslav Levytskyy; The goal of the test is to check that internal intrinsic functions for PHI's 237d00635SVyacheslav Levytskyy; operand are inserted at the correct positions, and don't break rules of 337d00635SVyacheslav Levytskyy; instruction domination and PHI nodes grouping at top of basic block. 437d00635SVyacheslav Levytskyy 5*42633cf2SVyacheslav Levytskyy; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s 637d00635SVyacheslav Levytskyy; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %} 737d00635SVyacheslav Levytskyy 837d00635SVyacheslav Levytskyy; CHECK-DAG: OpName %[[#Foo:]] "foo" 937d00635SVyacheslav Levytskyy; CHECK-DAG: OpName %[[#Bar:]] "bar" 1037d00635SVyacheslav Levytskyy; CHECK: %[[#Foo]] = OpFunction 1137d00635SVyacheslav Levytskyy; CHECK: OpPhi 1237d00635SVyacheslav Levytskyy; CHECK-NEXT: OpPhi 1337d00635SVyacheslav Levytskyy; CHECK-NEXT: OpPhi 1437d00635SVyacheslav Levytskyy; CHECK-NEXT: OpPhi 1537d00635SVyacheslav Levytskyy; CHECK: %[[#Bar]] = OpFunction 1637d00635SVyacheslav Levytskyy; CHECK: OpPhi 1737d00635SVyacheslav Levytskyy; CHECK-NEXT: OpPhi 1837d00635SVyacheslav Levytskyy; CHECK-NEXT: OpPhi 1937d00635SVyacheslav Levytskyy; CHECK-NEXT: OpPhi 2037d00635SVyacheslav Levytskyy 2137d00635SVyacheslav Levytskyy%struct = type { i64, i64 } 2237d00635SVyacheslav Levytskyy 2337d00635SVyacheslav Levytskyydefine spir_kernel void @foo(i64 %arg_val, ptr addrspace(4) byval(%struct) %arg_ptr) { 2437d00635SVyacheslav Levytskyyentry: 2537d00635SVyacheslav Levytskyy %fl = icmp eq i64 %arg_val, 0 2637d00635SVyacheslav Levytskyy br i1 %fl, label %ok, label %err 2737d00635SVyacheslav Levytskyy 2837d00635SVyacheslav Levytskyyerr: 2937d00635SVyacheslav Levytskyy br label %ok 3037d00635SVyacheslav Levytskyy 3137d00635SVyacheslav Levytskyyok: 3237d00635SVyacheslav Levytskyy %r1 = phi i64 [ undef, %err ], [ %arg_val, %entry ] 3337d00635SVyacheslav Levytskyy %r2 = phi i64 [ undef, %err ], [ %arg_val, %entry ] 3437d00635SVyacheslav Levytskyy %r3 = phi ptr addrspace(4) [ undef, %err ], [ %arg_ptr, %entry ] 3537d00635SVyacheslav Levytskyy %r4 = phi ptr addrspace(4) [ undef, %err ], [ %arg_ptr, %entry ] 3637d00635SVyacheslav Levytskyy br label %exit 3737d00635SVyacheslav Levytskyy 3837d00635SVyacheslav Levytskyyexit: 3937d00635SVyacheslav Levytskyy ret void 4037d00635SVyacheslav Levytskyy} 4137d00635SVyacheslav Levytskyy 4237d00635SVyacheslav Levytskyydefine spir_kernel void @bar(i64 %arg_val, i64 %arg_val_def, ptr addrspace(4) byval(%struct) %arg_ptr, ptr addrspace(4) %arg_ptr_def) { 4337d00635SVyacheslav Levytskyyentry: 4437d00635SVyacheslav Levytskyy %fl = icmp eq i64 %arg_val, 0 4537d00635SVyacheslav Levytskyy br i1 %fl, label %ok, label %err 4637d00635SVyacheslav Levytskyy 4737d00635SVyacheslav Levytskyyerr: 4837d00635SVyacheslav Levytskyy br label %ok 4937d00635SVyacheslav Levytskyy 5037d00635SVyacheslav Levytskyyok: 5137d00635SVyacheslav Levytskyy %r1 = phi i64 [ %arg_val_def, %err ], [ %arg_val, %entry ] 5237d00635SVyacheslav Levytskyy %r2 = phi i64 [ %arg_val_def, %err ], [ %arg_val, %entry ] 5337d00635SVyacheslav Levytskyy %r3 = phi ptr addrspace(4) [ %arg_ptr_def, %err ], [ %arg_ptr, %entry ] 5437d00635SVyacheslav Levytskyy %r4 = phi ptr addrspace(4) [ %arg_ptr_def, %err ], [ %arg_ptr, %entry ] 5537d00635SVyacheslav Levytskyy br label %exit 5637d00635SVyacheslav Levytskyy 5737d00635SVyacheslav Levytskyyexit: 5837d00635SVyacheslav Levytskyy ret void 5937d00635SVyacheslav Levytskyy} 60