blob: da8cb965b49a0009d99f04546dcd9889c5b020e4 [file] [edit]
; RUN: llc -mtriple=amdgpu9.50-amd-amdhsa -amdgpu-enable-pipeliner -pass-remarks-analysis=pipeliner %s -filetype=null 2>&1 | FileCheck %s
; Reject a loop whose body lowers to more than one basic block: the runtime-masked
; load is scalarized into cond.load blocks, so the pipeliner bails (single-block only).
; CHECK: Not a single basic block
define amdgpu_kernel void @swp_amdgpu_pipeline_neg_multi_bb(ptr addrspace(1) %p, i32 inreg %n) {
entry:
br label %loop
loop: ; preds = %loop, %entry
%i = phi i32 [ 0, %entry ], [ %i.next, %loop ]
%acc = phi <8 x half> [ zeroinitializer, %entry ], [ %v, %loop ]
%m = icmp slt i32 %i, %n
%mv = insertelement <8 x i1> poison, i1 %m, i64 0
%mask = shufflevector <8 x i1> %mv, <8 x i1> poison, <8 x i32> zeroinitializer
%gep = getelementptr half, ptr addrspace(1) %p, i32 %i
%v = tail call <8 x half> @llvm.masked.load.v8f16.p1(ptr addrspace(1) %gep, i32 16, <8 x i1> %mask, <8 x half> %acc)
%i.next = add i32 %i, 1
%cmp = icmp slt i32 %i.next, %n
br i1 %cmp, label %loop, label %exit
exit: ; preds = %loop
store <8 x half> %v, ptr addrspace(1) %p
ret void
}