brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.3 KiB · fe02ba6 Raw
153 lines · plain
1; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s2 3; CHECK:     OpEntryPoint Kernel %[[#f1:]] "global_check" %[[#var0:]] %[[#var1:]] %[[#var2:]] %[[#var3:]]4; CHECK:     OpEntryPoint Kernel %[[#f2:]] "writer" %[[#var0:]] %[[#var1:]] %[[#var2:]] %[[#var3:]]5; CHECK:     OpEntryPoint Kernel %[[#f3:]] "reader" %[[#var0:]] %[[#var1:]] %[[#var2:]] %[[#var3:]]6; CHECK-DAG: OpName %[[#var0]]7; CHECK-DAG: OpName %[[#var1]]8; CHECK-DAG: OpName %[[#var2]]9; CHECK-DAG: OpName %[[#var3]]10@var = addrspace(1) global <2 x i8> zeroinitializer, align 211@g_var = addrspace(1) global <2 x i8> zeroinitializer, align 212@a_var = addrspace(1) global [2 x <2 x i8>] zeroinitializer, align 213@p_var = addrspace(1) global <2 x i8> addrspace(1)* null, align 814 15define spir_func <2 x i8> @from_buf(<2 x i8> %a) {16entry:17  ret <2 x i8> %a18}19 20define spir_func <2 x i8> @to_buf(<2 x i8> %a) {21entry:22  ret <2 x i8> %a23}24 25define spir_kernel void @global_check(i32 addrspace(1)* %out) {26entry:27  %0 = load <2 x i8>, <2 x i8> addrspace(1)* @var, align 228  %cmp = icmp eq <2 x i8> %0, zeroinitializer29  %sext = select <2 x i1> %cmp, <2 x i8> <i8 -1, i8 -1>, <2 x i8> zeroinitializer30  %cast = icmp slt <2 x i8> %sext, zeroinitializer31  %i1promo = zext <2 x i1> %cast to <2 x i8>32  %call1 = call spir_func i1 @OpAll_v2i8(<2 x i8> %i1promo)33  %call = select i1 %call1, i32 1, i32 034  %1 = and i8 1, 135  %tobool = icmp ne i8 %1, 036  %conv = select i1 %tobool, i32 1, i32 037  %and = and i32 %conv, %call38  %tobool1 = icmp ne i32 %and, 039  %frombool = select i1 %tobool1, i8 1, i8 040  %2 = load <2 x i8>, <2 x i8> addrspace(1)* @g_var, align 241  %cmp2 = icmp eq <2 x i8> %2, zeroinitializer42  %sext3 = select <2 x i1> %cmp2, <2 x i8> <i8 -1, i8 -1>, <2 x i8> zeroinitializer43  %cast2 = icmp slt <2 x i8> %sext3, zeroinitializer44  %i1promo1 = zext <2 x i1> %cast2 to <2 x i8>45  %call43 = call spir_func i1 @OpAll_v2i8(<2 x i8> %i1promo1)46  %call4 = select i1 %call43, i32 1, i32 047  %3 = and i8 %frombool, 148  %tobool5 = icmp ne i8 %3, 049  %conv6 = select i1 %tobool5, i32 1, i32 050  %and7 = and i32 %conv6, %call451  %tobool8 = icmp ne i32 %and7, 052  %frombool9 = select i1 %tobool8, i8 1, i8 053  %4 = getelementptr inbounds [2 x <2 x i8>], [2 x <2 x i8>] addrspace(1)* @a_var, i64 0, i64 054  %5 = load <2 x i8>, <2 x i8> addrspace(1)* %4, align 255  %cmp10 = icmp eq <2 x i8> %5, zeroinitializer56  %sext11 = select <2 x i1> %cmp10, <2 x i8> <i8 -1, i8 -1>, <2 x i8> zeroinitializer57  %cast4 = icmp slt <2 x i8> %sext11, zeroinitializer58  %i1promo2 = zext <2 x i1> %cast4 to <2 x i8>59  %call125 = call spir_func i1 @OpAll_v2i8(<2 x i8> %i1promo2)60  %call12 = select i1 %call125, i32 1, i32 061  %6 = and i8 %frombool9, 162  %tobool13 = icmp ne i8 %6, 063  %conv14 = select i1 %tobool13, i32 1, i32 064  %and15 = and i32 %conv14, %call1265  %tobool16 = icmp ne i32 %and15, 066  %frombool17 = select i1 %tobool16, i8 1, i8 067  %7 = getelementptr inbounds [2 x <2 x i8>], [2 x <2 x i8>] addrspace(1)* @a_var, i64 0, i64 168  %8 = load <2 x i8>, <2 x i8> addrspace(1)* %7, align 269  %cmp18 = icmp eq <2 x i8> %8, zeroinitializer70  %sext19 = select <2 x i1> %cmp18, <2 x i8> <i8 -1, i8 -1>, <2 x i8> zeroinitializer71  %cast6 = icmp slt <2 x i8> %sext19, zeroinitializer72  %i1promo3 = zext <2 x i1> %cast6 to <2 x i8>73  %call207 = call spir_func i1 @OpAll_v2i8(<2 x i8> %i1promo3)74  %call20 = select i1 %call207, i32 1, i32 075  %9 = and i8 %frombool17, 176  %tobool21 = icmp ne i8 %9, 077  %conv22 = select i1 %tobool21, i32 1, i32 078  %and23 = and i32 %conv22, %call2079  %tobool24 = icmp ne i32 %and23, 080  %frombool25 = select i1 %tobool24, i8 1, i8 081  %10 = load <2 x i8> addrspace(1)*, <2 x i8> addrspace(1)* addrspace(1)* @p_var, align 882  %11 = ptrtoint <2 x i8> addrspace(1)* %10 to i6483  %12 = ptrtoint <2 x i8> addrspace(1)* null to i6484  %cmp26 = icmp eq i64 %11, %1285  %conv27 = select i1 %cmp26, i32 1, i32 086  %13 = and i8 %frombool25, 187  %tobool28 = icmp ne i8 %13, 088  %conv29 = select i1 %tobool28, i32 1, i32 089  %and30 = and i32 %conv29, %conv2790  %tobool31 = icmp ne i32 %and30, 091  %frombool32 = select i1 %tobool31, i8 1, i8 092  %14 = and i8 %frombool32, 193  %tobool33 = icmp ne i8 %14, 094  %15 = select i1 %tobool33, i64 1, i64 095  %cond = select i1 %tobool33, i32 1, i32 096  store i32 %cond, i32 addrspace(1)* %out, align 497  ret void98}99 100declare spir_func i1 @OpAll_v2i8(<2 x i8>)101 102define spir_kernel void @writer(<2 x i8> addrspace(1)* %src, i32 %idx) {103entry:104  %arrayidx = getelementptr inbounds <2 x i8>, <2 x i8> addrspace(1)* %src, i64 0105  %0 = load <2 x i8>, <2 x i8> addrspace(1)* %arrayidx, align 2106  %call = call spir_func <2 x i8> @from_buf(<2 x i8> %0)107  store <2 x i8> %call, <2 x i8> addrspace(1)* @var, align 2108  %arrayidx1 = getelementptr inbounds <2 x i8>, <2 x i8> addrspace(1)* %src, i64 1109  %1 = load <2 x i8>, <2 x i8> addrspace(1)* %arrayidx1, align 2110  %call2 = call spir_func <2 x i8> @from_buf(<2 x i8> %1)111  store <2 x i8> %call2, <2 x i8> addrspace(1)* @g_var, align 2112  %arrayidx3 = getelementptr inbounds <2 x i8>, <2 x i8> addrspace(1)* %src, i64 2113  %2 = load <2 x i8>, <2 x i8> addrspace(1)* %arrayidx3, align 2114  %call4 = call spir_func <2 x i8> @from_buf(<2 x i8> %2)115  %3 = getelementptr inbounds [2 x <2 x i8>], [2 x <2 x i8>] addrspace(1)* @a_var, i64 0, i64 0116  store <2 x i8> %call4, <2 x i8> addrspace(1)* %3, align 2117  %arrayidx5 = getelementptr inbounds <2 x i8>, <2 x i8> addrspace(1)* %src, i64 3118  %4 = load <2 x i8>, <2 x i8> addrspace(1)* %arrayidx5, align 2119  %call6 = call spir_func <2 x i8> @from_buf(<2 x i8> %4)120  %5 = getelementptr inbounds [2 x <2 x i8>], [2 x <2 x i8>] addrspace(1)* @a_var, i64 0, i64 1121  store <2 x i8> %call6, <2 x i8> addrspace(1)* %5, align 2122  %idx.ext = zext i32 %idx to i64123  %add.ptr = getelementptr inbounds <2 x i8>, <2 x i8> addrspace(1)* %3, i64 %idx.ext124  store <2 x i8> addrspace(1)* %add.ptr, <2 x i8> addrspace(1)* addrspace(1)* @p_var, align 8125  ret void126}127 128define spir_kernel void @reader(<2 x i8> addrspace(1)* %dest, <2 x i8> %ptr_write_val) {129entry:130  %call = call spir_func <2 x i8> @from_buf(<2 x i8> %ptr_write_val)131  %0 = load <2 x i8> addrspace(1)*, <2 x i8> addrspace(1)* addrspace(1)* @p_var, align 8132  store <2 x i8> %call, <2 x i8> addrspace(1)* %0, align 2133  %1 = load <2 x i8>, <2 x i8> addrspace(1)* @var, align 2134  %call1 = call spir_func <2 x i8> @to_buf(<2 x i8> %1)135  %arrayidx = getelementptr inbounds <2 x i8>, <2 x i8> addrspace(1)* %dest, i64 0136  store <2 x i8> %call1, <2 x i8> addrspace(1)* %arrayidx, align 2137  %2 = load <2 x i8>, <2 x i8> addrspace(1)* @g_var, align 2138  %call2 = call spir_func <2 x i8> @to_buf(<2 x i8> %2)139  %arrayidx3 = getelementptr inbounds <2 x i8>, <2 x i8> addrspace(1)* %dest, i64 1140  store <2 x i8> %call2, <2 x i8> addrspace(1)* %arrayidx3, align 2141  %3 = getelementptr inbounds [2 x <2 x i8>], [2 x <2 x i8>] addrspace(1)* @a_var, i64 0, i64 0142  %4 = load <2 x i8>, <2 x i8> addrspace(1)* %3, align 2143  %call4 = call spir_func <2 x i8> @to_buf(<2 x i8> %4)144  %arrayidx5 = getelementptr inbounds <2 x i8>, <2 x i8> addrspace(1)* %dest, i64 2145  store <2 x i8> %call4, <2 x i8> addrspace(1)* %arrayidx5, align 2146  %5 = getelementptr inbounds [2 x <2 x i8>], [2 x <2 x i8>] addrspace(1)* @a_var, i64 0, i64 1147  %6 = load <2 x i8>, <2 x i8> addrspace(1)* %5, align 2148  %call6 = call spir_func <2 x i8> @to_buf(<2 x i8> %6)149  %arrayidx7 = getelementptr inbounds <2 x i8>, <2 x i8> addrspace(1)* %dest, i64 3150  store <2 x i8> %call6, <2 x i8> addrspace(1)* %arrayidx7, align 2151  ret void152}153