Files
clang-p2996/llvm/test/CodeGen/SPIRV/phi-insert-point.ll
Vyacheslav Levytskyy 37d00635c4 [SPIR-V] Ensure that internal intrinsic functions for PHI's operand are inserted at the correct positions (#92316)
This PR is to ensure that internal intrinsic functions for PHI's operand
are inserted at the correct positions and don't break rules of
instruction domination and PHI nodes grouping at top of basic block.
2024-05-17 09:01:29 +02:00

60 lines
1.7 KiB
LLVM

; The goal of the test is to check that internal intrinsic functions for PHI's
; operand are inserted at the correct positions, and don't break rules of
; instruction domination and PHI nodes grouping at top of basic block.
; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
; CHECK-DAG: OpName %[[#Foo:]] "foo"
; CHECK-DAG: OpName %[[#Bar:]] "bar"
; CHECK: %[[#Foo]] = OpFunction
; CHECK: OpPhi
; CHECK-NEXT: OpPhi
; CHECK-NEXT: OpPhi
; CHECK-NEXT: OpPhi
; CHECK: %[[#Bar]] = OpFunction
; CHECK: OpPhi
; CHECK-NEXT: OpPhi
; CHECK-NEXT: OpPhi
; CHECK-NEXT: OpPhi
%struct = type { i64, i64 }
define spir_kernel void @foo(i64 %arg_val, ptr addrspace(4) byval(%struct) %arg_ptr) {
entry:
%fl = icmp eq i64 %arg_val, 0
br i1 %fl, label %ok, label %err
err:
br label %ok
ok:
%r1 = phi i64 [ undef, %err ], [ %arg_val, %entry ]
%r2 = phi i64 [ undef, %err ], [ %arg_val, %entry ]
%r3 = phi ptr addrspace(4) [ undef, %err ], [ %arg_ptr, %entry ]
%r4 = phi ptr addrspace(4) [ undef, %err ], [ %arg_ptr, %entry ]
br label %exit
exit:
ret void
}
define spir_kernel void @bar(i64 %arg_val, i64 %arg_val_def, ptr addrspace(4) byval(%struct) %arg_ptr, ptr addrspace(4) %arg_ptr_def) {
entry:
%fl = icmp eq i64 %arg_val, 0
br i1 %fl, label %ok, label %err
err:
br label %ok
ok:
%r1 = phi i64 [ %arg_val_def, %err ], [ %arg_val, %entry ]
%r2 = phi i64 [ %arg_val_def, %err ], [ %arg_val, %entry ]
%r3 = phi ptr addrspace(4) [ %arg_ptr_def, %err ], [ %arg_ptr, %entry ]
%r4 = phi ptr addrspace(4) [ %arg_ptr_def, %err ], [ %arg_ptr, %entry ]
br label %exit
exit:
ret void
}