define ptx_kernel void @main_graph_async_dispatch_7_elementwise_D_i64xf32(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) local_unnamed_addr #1 { %7 = tail call range(i32 0, 32) i32 @llvm.nvvm.read.ptx.sreg.tid.x() %8 = zext i32 %2 to i64 %9 = zext i32 %3 to i64 %10 = shl nuw i64 %9, 32 %11 = or disjoint i64 %10, %8 %12 = zext i32 %4 to i64 %13 = zext i32 %5 to i64 %14 = shl nuw i64 %13, 32 %15 = or disjoint i64 %14, %12 %16 = icmp samesign ult i64 %11, 2305843009213693697 %17 = and i64 %8, 255 %18 = icmp eq i64 %17, 0 tail call void @llvm.assume(i1 %16) tail call void @llvm.assume(i1 %18) %19 = icmp sgt i64 %14, -1 tail call void @llvm.assume(i1 %19) call void @llvm.assume(i1 true) [ "align"(ptr addrspace(1) %0, i64 64) ] %20 = getelementptr i8, ptr addrspace(1) %1, i64 %11 call void @llvm.assume(i1 true) [ "align"(ptr addrspace(1) %20, i64 64) ] %21 = icmp eq i64 %15, 0 %22 = tail call i64 @llvm.usub.sat.i64(i64 %15, i64 1) %23 = lshr i64 %22, 5 %24 = add nuw nsw i64 %23, 1 %25 = select i1 %21, i64 0, i64 %24 %26 = tail call range(i32 0, 2147483647) i32 @llvm.nvvm.read.ptx.sreg.ctaid.x() %27 = zext nneg i32 %26 to i64 %28 = tail call range(i32 1, -2147483648) i32 @llvm.nvvm.read.ptx.sreg.nctaid.x() %29 = zext nneg i32 %28 to i64 %30 = icmp samesign ugt i64 %25, %27 br i1 %30, label %.lr.ph3, label %._crit_edge4 .lr.ph3: ; preds = %6, %._crit_edge %31 = phi i64 [ %46, %._crit_edge ], [ %27, %6 ] %32 = shl i64 %31, 5 %33 = sub i64 %15, %32 %34 = tail call i64 @llvm.smin.i64(i64 %33, i64 32) %35 = trunc i64 %34 to i32 %36 = icmp slt i32 %7, %35 br i1 %36, label %.lr.ph, label %._crit_edge .lr.ph: ; preds = %.lr.ph3, %.lr.ph %37 = phi i32 [ %44, %.lr.ph ], [ %7, %.lr.ph3 ] %38 = zext i32 %37 to i64 %39 = add i64 %32, %38 %40 = getelementptr [8 x i8], ptr addrspace(1) %0, i64 %39 %41 = load <1 x i64>, ptr addrspace(1) %40, align 8 %42 = sitofp <1 x i64> %41 to <1 x float> %43 = getelementptr [4 x i8], ptr addrspace(1) %20, i64 %39 store <1 x float> %42, ptr addrspace(1) %43, align 4 %44 = add i32 %37, 32 %45 = icmp slt i32 %44, %35 br i1 %45, label %.lr.ph, label %._crit_edge ._crit_edge: ; preds = %.lr.ph, %.lr.ph3 %46 = add i64 %31, %29 %47 = icmp samesign ult i64 %46, %25 br i1 %47, label %.lr.ph3, label %._crit_edge4 ._crit_edge4: ; preds = %._crit_edge, %6 ret void }