brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 5b56251 Raw
80 lines · plain
1; RUN: opt -mtriple amdgcn-- -passes='print<uniformity>' -disable-output %s 2>&1 | FileCheck %s2;3; This is to test a divergent phi involving loops4; (https://github.com/llvm/llvm-project/issues/137277).5;6;        B0 (div.cond)7;      /   \8;  (L)B1   B49;     |    |10;     B2   B5 (L)11;     |    |12;     B3   /13;      \  /14;      B6 (phi: divergent)15;16 17;18; CHECK-LABEL: UniformityInfo for function 'test_loop_ctrl_divergence':19; CHECK-LABEL: BLOCK Entry20; CHECK: DIVERGENT:   %tid = call i32 @llvm.amdgcn.workitem.id.x()21; CHECK-LABEL: BLOCK B022; CHECK: DIVERGENT:   %div.cond = icmp eq i32 %tid, 023; CHECK-LABEL: BLOCK B324; CHECK: %uni_a = phi i32 [ %a1, %B2 ], [ %a, %Entry ]25; CHECK-LABEL: BLOCK B526; CHECK: %uni.a3 = phi i32 [ %a2, %B4 ], [ %uni_a3, %B5 ]27; CHECK-LABEL BLOCK B628; CHECK: DIVERGENT:   %div_a = phi i32 [ %uni_a, %B3 ], [ %uni_a3, %B5 ]29;30 31define amdgpu_kernel void @test_loop_ctrl_divergence(i32 %a, i32 %b, i32 %c, i32 %d) {32Entry:33  %tid = call i32 @llvm.amdgcn.workitem.id.x()34  %uni.cond0 = icmp eq i32 %d, 035  br i1 %uni.cond0, label %B3, label %B0 ; uniform branch36 37B0:38  %div.cond = icmp eq i32 %tid, 039  br i1 %div.cond, label %B4, label %B1 ; divergent branch40 41B1:42  %uni.a0 = phi i32 [%a, %B0], [%a0, %B1]43  %a0 = add i32 %uni.a0, 144  %uni.cond1 = icmp slt i32 %a0, %b45  br i1 %uni.cond1, label %B1, label %B246 47B2:48  %a1 = add i32 %a0, 1049  br label %B350 51B3:52  %uni_a = phi i32 [%a1, %B2], [%a,  %Entry]53  br label %B654 55B4:56  %a2 = add i32 %a, 2057  br label %B558 59B5:60  %uni.a3= phi i32 [%a2, %B4], [%uni_a3, %B5]61  %uni_a3 = add i32 %uni.a3, 162  %uni.cond2 = icmp slt i32 %uni_a3, %c63  br i1 %uni.cond2, label %B5, label %B664 65B6:66  %div_a = phi i32 [%uni_a, %B3], [%uni_a3, %B5] ;   divergent67  %div.cond2 = icmp eq i32 %tid, 268  br i1 %div.cond2, label %B7, label %B8 ; divergent branch69 70B7:71  %c0 = add i32 %div_a, 2 ; divergent72  br label %B873 74B8:75  %ret = phi i32 [%c0, %B7], [0, %B6] ; divergent76  ret void77}78 79declare i32 @llvm.amdgcn.workitem.id.x()80