brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · a27d121 Raw
212 lines · plain
1; RUN: llc -mtriple=amdgcn -amdgpu-set-wave-priority=true -o - %s | \2; RUN:   FileCheck %s3 4; RUN: llc -mtriple=amdgcn -stop-after=si-late-branch-lowering -o - %s | \5; RUN:   llc -x mir -mtriple=amdgcn -passes=amdgpu-set-wave-priority -o - | \6; RUN:   llc -x mir -mtriple=amdgcn -start-after=si-late-branch-lowering -o - | \7; RUN:   FileCheck %s8 9; CHECK-LABEL: no_setprio:10; CHECK-NOT:       s_setprio11; CHECK:           ; return to shader part epilog12define amdgpu_ps <2 x float> @no_setprio(<2 x float> %a, <2 x float> %b) "amdgpu-wave-priority-threshold"="1" {13  %s = fadd <2 x float> %a, %b14  ret <2 x float> %s15}16 17; CHECK-LABEL: vmem_in_exit_block:18; CHECK:           s_setprio 319; CHECK:           buffer_load_dwordx220; CHECK-NEXT:      s_setprio 021; CHECK:           ; return to shader part epilog22define amdgpu_ps <2 x float> @vmem_in_exit_block(ptr addrspace(8) inreg %p, <2 x float> %x) "amdgpu-wave-priority-threshold"="2" {23  %v = call <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8) %p, i32 0, i32 0, i32 0, i32 0)24  %s = fadd <2 x float> %v, %x25  ret <2 x float> %s26}27 28; CHECK-LABEL: branch:29; CHECK:           s_setprio 330; CHECK:           s_cbranch_scc0 [[A:.*]]31; CHECK:       {{.*}}:  ; %b32; CHECK:           buffer_load_dwordx233; CHECK-NEXT:      s_setprio 034; CHECK:           s_branch [[EXIT:.*]]35; CHECK:       [[A]]:  ; %a36; CHECK-NEXT:      s_setprio 037; CHECK:           s_branch [[EXIT]]38; CHECK-NEXT:  [[EXIT]]:39define amdgpu_ps <2 x float> @branch(ptr addrspace(8) inreg %p, i32 inreg %i, <2 x float> %x) "amdgpu-wave-priority-threshold"="2" {40  %cond = icmp eq i32 %i, 041  br i1 %cond, label %a, label %b42 43a:44  ret <2 x float> <float 0.0, float 0.0>45 46b:47  %v = call <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8) %p, i32 0, i32 0, i32 0, i32 0)48  %s = fadd <2 x float> %v, %x49  ret <2 x float> %s50}51 52; CHECK-LABEL: setprio_follows_setprio:53; CHECK:           s_setprio 354; CHECK:           buffer_load_dwordx255; CHECK:           s_cbranch_scc1 [[C:.*]]56; CHECK:       {{.*}}:  ; %a57; CHECK:           buffer_load_dwordx258; CHECK-NEXT:      s_setprio 059; CHECK:           s_cbranch_vccnz [[C]]60; CHECK:       {{.*}}:  ; %b61; CHECK-NOT:       s_setprio62; CHECK:           s_branch [[EXIT:.*]]63; CHECK:       [[C]]:  ; %c64; CHECK-NEXT:      s_setprio 065; CHECK:           s_branch [[EXIT]]66; CHECK:       [[EXIT]]:67define amdgpu_ps <2 x float> @setprio_follows_setprio(ptr addrspace(8) inreg %p, i32 inreg %i) "amdgpu-wave-priority-threshold"="3" {68entry:69  %v1 = call <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8) %p, i32 0, i32 0, i32 0, i32 0)70  %cond1 = icmp ne i32 %i, 071  br i1 %cond1, label %a, label %c72 73a:74  %v2 = call <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8) %p, i32 0, i32 0, i32 1, i32 0)75  %v20 = extractelement <2 x float> %v2, i32 076  %v21 = extractelement <2 x float> %v2, i32 177  %cond2 = fcmp ult float %v20, %v2178  br i1 %cond2, label %b, label %c79 80b:81  ret <2 x float> %v282 83c:84  %v4 = fadd <2 x float> %v1, %v185  ret <2 x float> %v486}87 88; CHECK-LABEL: loop:89; CHECK:       {{.*}}:  ; %entry90; CHECK:           s_setprio 391; CHECK-NOT:       s_setprio92; CHECK:       [[LOOP:.*]]:  ; %loop93; CHECK-NOT:       s_setprio94; CHECK:           buffer_load_dwordx295; CHECK-NOT:       s_setprio96; CHECK:           s_cbranch_scc1 [[LOOP]]97; CHECK-NEXT:  {{.*}}:  ; %exit98; CHECK-NEXT:      s_setprio 099define amdgpu_ps <2 x float> @loop(ptr addrspace(8) inreg %p) "amdgpu-wave-priority-threshold"="2" {100entry:101  br label %loop102 103loop:104  %i = phi i32 [0, %entry], [%i2, %loop]105  %sum = phi <2 x float> [<float 0.0, float 0.0>, %entry], [%sum2, %loop]106 107  %i2 = add i32 %i, 1108 109  %v = call <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8) %p, i32 %i, i32 0, i32 0, i32 0)110  %sum2 = fadd <2 x float> %sum, %v111 112  %cond = icmp ult i32 %i2, 5113  br i1 %cond, label %loop, label %exit114 115exit:116  ret <2 x float> %sum2117}118 119; CHECK-LABEL: edge_split:120; CHECK:           s_setprio 3121; CHECK:           buffer_load_dwordx2122; CHECK-NOT:       s_setprio123; CHECK:           s_cbranch_scc1 [[ANOTHER_LOAD:.*]]124; CHECK:       {{.*}}:  ; %loop.preheader125; CHECK-NEXT:      s_setprio 0126; CHECK:       [[LOOP:.*]]:  ; %loop127; CHECK-NOT:       s_setprio128; CHECK:           s_cbranch_scc1 [[LOOP]]129; CHECK        {{.*}}:  ; %exit130; CHECK-NOT:       s_setprio131; CHECK:           s_branch [[RET:.*]]132; CHECK:       [[ANOTHER_LOAD]]:  ; %another_load133; CHECK:           buffer_load_dwordx2134; CHECK-NEXT:      s_setprio 0135; CHECK:           s_branch [[RET]]136; CHECK:       [[RET]]:137define amdgpu_ps <2 x float> @edge_split(ptr addrspace(8) inreg %p, i32 inreg %x) "amdgpu-wave-priority-threshold"="2" {138entry:139  %v = call <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8) %p, i32 0, i32 0, i32 0, i32 0)140  %cond = icmp ne i32 %x, 0141  br i1 %cond, label %loop, label %another_load142 143loop:144  %i = phi i32 [0, %entry], [%i2, %loop]145  %mul = phi <2 x float> [%v, %entry], [%mul2, %loop]146 147  %i2 = add i32 %i, 1148  %mul2 = fmul <2 x float> %mul, %v149 150  %cond2 = icmp ult i32 %i2, 5151  br i1 %cond2, label %loop, label %exit152 153exit:154  ret <2 x float> %mul2155 156another_load:157  %v2 = call <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8) %p, i32 0, i32 0, i32 1, i32 0)158  %sum = fadd <2 x float> %v, %v2159  ret <2 x float> %sum160}161 162; CHECK-LABEL: valu_insts_threshold:163; CHECK:           s_setprio 3164; CHECK:           buffer_load_dwordx2165; CHECK-NEXT:      s_setprio 0166; CHECK-COUNT-4:   v_add_f32_e32167; CHECK:           s_cbranch_scc0 [[A:.*]]168; CHECK:       {{.*}}:  ; %b169; CHECK-NEXT:      buffer_load_dwordx2170; CHECK:           s_branch [[END:.*]]171; CHECK:       [[A]]:  ; %a172; CHECK:           s_branch [[END]]173; CHECK:       [[END]]:174define amdgpu_ps <2 x float> @valu_insts_threshold(ptr addrspace(8) inreg %p, i32 inreg %i) "amdgpu-wave-priority-threshold"="4" {175  %v = call <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8) %p, i32 0, i32 0, i32 0, i32 0)176  %add = fadd <2 x float> %v, %v177  %add2 = fadd <2 x float> %add, %add178 179  %cond = icmp eq i32 %i, 0180  br i1 %cond, label %a, label %b181 182a:183  ret <2 x float> %add2184 185b:186  %v2 = call <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8) %p, i32 0, i32 1, i32 0, i32 0)187  %sub = fsub <2 x float> %add2, %v2188  ret <2 x float> %sub189}190 191; CHECK-LABEL: valu_insts_threshold2:192; CHECK-NOT: s_setprio193; CHECK: ; -- End function194define amdgpu_ps <2 x float> @valu_insts_threshold2(ptr addrspace(8) inreg %p, i32 inreg %i) "amdgpu-wave-priority-threshold"="5" {195  %v = call <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8) %p, i32 0, i32 0, i32 0, i32 0)196  %add = fadd <2 x float> %v, %v197  %add2 = fadd <2 x float> %add, %add198 199  %cond = icmp eq i32 %i, 0200  br i1 %cond, label %a, label %b201 202a:203  ret <2 x float> %add2204 205b:206  %v2 = call <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8) %p, i32 0, i32 1, i32 0, i32 0)207  %sub = fsub <2 x float> %add2, %v2208  ret <2 x float> %sub209}210 211declare <2 x float> @llvm.amdgcn.struct.ptr.buffer.load.v2f32(ptr addrspace(8), i32, i32, i32, i32) nounwind212