define ptx_kernel void @main_graph_async_dispatch_28_elementwise_broadcast_Dx7xD_f16(ptr addrspace(1) noalias noundef nonnull readonly align 16 captures(none) %0, ptr addrspace(1) noalias nofree noundef nonnull writeonly align 16 captures(none) %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9) local_unnamed_addr #1 { %11 = tail call range(i32 0, 32) i32 @llvm.nvvm.read.ptx.sreg.tid.x() %12 = zext i32 %2 to i64 %13 = zext i32 %3 to i64 %14 = zext i32 %4 to i64 %15 = zext i32 %5 to i64 %16 = zext i32 %6 to i64 %17 = zext i32 %7 to i64 %18 = shl nuw i64 %17, 32 %19 = or disjoint i64 %18, %16 %20 = zext i32 %8 to i64 %21 = zext i32 %9 to i64 %22 = shl nuw i64 %21, 32 %23 = or disjoint i64 %22, %20 %24 = and i64 %12, 1023 %25 = icmp eq i64 %24, 0 tail call void @llvm.assume(i1 %25) %26 = and i64 %14, 255 %27 = icmp eq i64 %26, 0 tail call void @llvm.assume(i1 %27) %28 = icmp samesign ult i64 %19, 36028797018963965 %29 = and i64 %16, 3 %30 = icmp eq i64 %29, 0 tail call void @llvm.assume(i1 %28) tail call void @llvm.assume(i1 %30) %31 = icmp ult i64 %23, 2305843009213693697 %32 = and i64 %20, 127 %33 = icmp eq i64 %32, 0 tail call void @llvm.assume(i1 %31) tail call void @llvm.assume(i1 %33) %34 = shl nuw i64 %13, 32 %35 = and i64 %34, 2305843004918726656 %36 = getelementptr i8, ptr addrspace(1) %0, i64 %35 %37 = getelementptr i8, ptr addrspace(1) %36, i64 %12 call void @llvm.assume(i1 true) [ "align"(ptr addrspace(1) %37, i64 64) ] %38 = mul nuw i64 %23, 7 %39 = shl nuw i64 %15, 32 %40 = and i64 %39, 2305843004918726656 %41 = getelementptr i8, ptr addrspace(1) %1, i64 %40 %42 = getelementptr i8, ptr addrspace(1) %41, i64 %14 call void @llvm.assume(i1 true) [ "align"(ptr addrspace(1) %42, i64 64) ] %43 = lshr exact i64 %23, 7 %44 = shl nuw nsw i32 %11, 2 %45 = zext nneg i32 %44 to i64 %46 = lshr exact i64 %19, 2 %47 = mul nuw nsw i64 %46, 28 %48 = mul i64 %47, %43 %49 = tail call range(i32 0, 2147483647) i32 @llvm.nvvm.read.ptx.sreg.ctaid.x() %50 = zext nneg i32 %49 to i64 %51 = tail call range(i32 1, -2147483648) i32 @llvm.nvvm.read.ptx.sreg.nctaid.x() %52 = zext nneg i32 %51 to i64 %53 = icmp sgt i64 %48, %50 br i1 %53, label %.lr.ph, label %._crit_edge .lr.ph: ; preds = %10 %54 = mul nuw nsw i64 %43, 7 br label %55 55: ; preds = %.lr.ph, %55 %56 = phi i64 [ %50, %.lr.ph ], [ %84, %55 ] %.frozen = freeze i64 %56 %57 = sdiv i64 %.frozen, %54 %58 = mul i64 %57, %54 %59 = icmp ne i64 %56, %58 %60 = icmp slt i64 %56, 0 %61 = and i1 %60, %59 %62 = sext i1 %61 to i64 %63 = add i64 %57, %62 %64 = mul i64 %57, %54 %.decomposed = sub i64 %.frozen, %64 %65 = icmp slt i64 %.decomposed, 0 %66 = select i1 %65, i64 %54, i64 0 %67 = add nsw i64 %66, %.decomposed %68 = sdiv i64 %67, %43 %69 = srem i64 %56, %43 %70 = icmp slt i64 %69, 0 %71 = select i1 %70, i64 %43, i64 0 %72 = add nsw i64 %71, %69 %73 = shl nsw i64 %72, 7 %74 = or disjoint i64 %73, %45 %75 = mul i64 %63, %23 %76 = getelementptr [2 x i8], ptr addrspace(1) %37, i64 %75 %77 = getelementptr [2 x i8], ptr addrspace(1) %76, i64 %74 %78 = load <4 x half>, ptr addrspace(1) %77, align 8 %79 = mul i64 %38, %63 %80 = mul i64 %68, %23 %81 = getelementptr [2 x i8], ptr addrspace(1) %42, i64 %79 %82 = getelementptr [2 x i8], ptr addrspace(1) %81, i64 %80 %83 = getelementptr [2 x i8], ptr addrspace(1) %82, i64 %74 store <4 x half> %78, ptr addrspace(1) %83, align 2 %84 = add i64 %56, %52 %85 = icmp slt i64 %84, %48 br i1 %85, label %55, label %._crit_edge ._crit_edge: ; preds = %55, %10 ret void }