define ptx_kernel void @main_graph_async_dispatch_0_elementwise_broadcast_Dx3584_i64xf16(ptr addrspace(1) noalias noundef nonnull readonly align 16 %0, ptr addrspace(1) noalias noundef nonnull readonly align 16 captures(none) %1, ptr addrspace(1) noalias nofree noundef nonnull writeonly align 16 captures(none) %2, i32 noundef %3, i32 noundef %4) local_unnamed_addr #0 { %6 = tail call range(i32 0, 32) i32 @llvm.nvvm.read.ptx.sreg.tid.x() %7 = zext i32 %3 to i64 %8 = zext i32 %4 to i64 %9 = shl nuw i64 %8, 32 %10 = or disjoint i64 %9, %7 %11 = icmp sgt i64 %9, -1 tail call void @llvm.assume(i1 %11) call void @llvm.assume(i1 true) [ "align"(ptr addrspace(1) %0, i64 64) ] call void @llvm.assume(i1 true) [ "align"(ptr addrspace(1) %1, i64 64) ] call void @llvm.assume(i1 true) [ "align"(ptr addrspace(1) %2, i64 64) ] %12 = shl nuw nsw i32 %6, 3 %13 = mul nuw nsw i64 %10, 14 %14 = tail call range(i32 0, 2147483647) i32 @llvm.nvvm.read.ptx.sreg.ctaid.x() %15 = zext nneg i32 %14 to i64 %16 = tail call range(i32 1, -2147483648) i32 @llvm.nvvm.read.ptx.sreg.nctaid.x() %17 = zext nneg i32 %16 to i64 %18 = icmp samesign ugt i64 %13, %15 br i1 %18, label %.lr.ph, label %._crit_edge .lr.ph: ; preds = %5 %19 = tail call <8 x i64> @llvm.stepvector.v8i64() %20 = trunc <8 x i64> %19 to <8 x i32> br label %21 21: ; preds = %.lr.ph, %21 %22 = phi i64 [ %15, %.lr.ph ], [ %47, %21 ] %.frozen = freeze i64 %22 %23 = udiv i64 %.frozen, 14 %24 = mul i64 %23, 14 %.decomposed = sub i64 %.frozen, %24 %25 = getelementptr [8 x i8], ptr addrspace(1) %1, i64 %23 %26 = load <1 x i64>, ptr addrspace(1) %25, align 8 %27 = trunc nuw nsw i64 %.decomposed to i32 %28 = shl nuw nsw i32 %27, 8 %29 = or disjoint i32 %28, %12 %30 = insertelement <8 x i32> poison, i32 %29, i64 0 %31 = shufflevector <8 x i32> %30, <8 x i32> poison, <8 x i32> zeroinitializer %32 = add <8 x i32> %31, %20 %33 = zext <8 x i32> %32 to <8 x i64> %34 = add <1 x i64> %26, splat (i64 152064) %35 = icmp slt <1 x i64> %26, zeroinitializer %36 = select <1 x i1> %35, <1 x i64> %34, <1 x i64> %26 %37 = extractelement <1 x i64> %36, i64 0 %38 = mul i64 %37, 3584 %39 = insertelement <8 x i64> poison, i64 %38, i64 0 %40 = shufflevector <8 x i64> %39, <8 x i64> poison, <8 x i32> zeroinitializer %41 = add <8 x i64> %40, %33 %42 = getelementptr [2 x i8], ptr addrspace(1) %0, <8 x i64> %41 %43 = tail call <8 x half> @llvm.masked.gather.v8f16.v8p1(<8 x ptr addrspace(1)> align 2 %42, <8 x i1> splat (i1 true), <8 x half> poison) %44 = zext nneg i32 %29 to i64 %.idx = mul i64 %23, 7168 %45 = getelementptr i8, ptr addrspace(1) %2, i64 %.idx %46 = getelementptr [2 x i8], ptr addrspace(1) %45, i64 %44 store <8 x half> %43, ptr addrspace(1) %46, align 16 %47 = add i64 %22, %17 %48 = icmp slt i64 %47, %13 br i1 %48, label %21, label %._crit_edge ._crit_edge: ; preds = %21, %5 ret void }