define ptx_kernel void @main_graph_async_dispatch_2_elementwise_broadcast_D_i64(ptr addrspace(1) noalias nofree noundef nonnull writeonly align 16 captures(none) %0, i32 noundef %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, i32 noundef %10) local_unnamed_addr #2 { %12 = tail call range(i32 0, 32) i32 @llvm.nvvm.read.ptx.sreg.tid.x() %13 = zext i32 %1 to i64 %14 = zext i32 %2 to i64 %15 = shl nuw i64 %14, 32 %16 = or disjoint i64 %15, %13 %17 = zext i32 %3 to i64 %18 = zext i32 %4 to i64 %19 = shl nuw i64 %18, 32 %20 = or disjoint i64 %19, %17 %21 = zext i32 %5 to i64 %22 = zext i32 %6 to i64 %23 = shl nuw i64 %22, 32 %24 = or disjoint i64 %23, %21 %25 = zext i32 %7 to i64 %26 = zext i32 %8 to i64 %27 = shl nuw i64 %26, 32 %28 = or disjoint i64 %27, %25 %29 = zext i32 %9 to i64 %30 = zext i32 %10 to i64 %31 = shl nuw i64 %30, 32 %32 = or disjoint i64 %31, %29 %33 = icmp ult i64 %16, -9223372036854775807 %34 = and i64 %13, 63 %35 = icmp eq i64 %34, 0 tail call void @llvm.assume(i1 %33) tail call void @llvm.assume(i1 %35) %36 = icmp sgt i64 %19, -1 tail call void @llvm.assume(i1 %36) %37 = icmp ult i64 %24, 18014398509481983 tail call void @llvm.assume(i1 %37) %38 = icmp ult i32 %8, 2097152 tail call void @llvm.assume(i1 %38) %39 = icmp sgt i64 %31, -1 tail call void @llvm.assume(i1 %39) %40 = lshr exact i64 %16, 3 %41 = and i64 %40, 288230376151711736 %42 = getelementptr [8 x i8], ptr addrspace(1) %0, i64 %41 call void @llvm.assume(i1 true) [ "align"(ptr addrspace(1) %42, i64 64) ] %43 = icmp eq i64 %20, 0 %44 = tail call i64 @llvm.usub.sat.i64(i64 %20, i64 1) %45 = lshr i64 %44, 5 %46 = add nuw nsw i64 %45, 1 %47 = select i1 %43, i64 0, i64 %46 %48 = tail call range(i32 0, 2147483647) i32 @llvm.nvvm.read.ptx.sreg.ctaid.x() %49 = zext nneg i32 %48 to i64 %50 = tail call range(i32 1, -2147483648) i32 @llvm.nvvm.read.ptx.sreg.nctaid.x() %51 = zext nneg i32 %50 to i64 %52 = icmp samesign ugt i64 %47, %49 br i1 %52, label %.lr.ph3, label %._crit_edge4 .lr.ph3: ; preds = %11, %._crit_edge %53 = phi i64 [ %73, %._crit_edge ], [ %49, %11 ] %54 = shl i64 %53, 5 %55 = sub i64 %20, %54 %56 = tail call i64 @llvm.smin.i64(i64 %55, i64 32) %57 = trunc i64 %56 to i32 %58 = icmp slt i32 %12, %57 br i1 %58, label %.lr.ph, label %._crit_edge .lr.ph: ; preds = %.lr.ph3, %.lr.ph %59 = phi i32 [ %71, %.lr.ph ], [ %12, %.lr.ph3 ] %60 = zext i32 %59 to i64 %61 = add i64 %54, %60 %.frozen = freeze i64 %61 %62 = sdiv i64 %.frozen, %24 %63 = mul i64 %62, %24 %.decomposed = sub i64 %.frozen, %63 %64 = mul i64 %62, %28 %65 = add i64 %64, %.decomposed %66 = icmp slt i64 %65, 0 %67 = select i1 %66, i64 %32, i64 0 %68 = add i64 %67, %65 %69 = insertelement <1 x i64> poison, i64 %68, i64 0 %70 = getelementptr [8 x i8], ptr addrspace(1) %42, i64 %61 store <1 x i64> %69, ptr addrspace(1) %70, align 8 %71 = add i32 %59, 32 %72 = icmp slt i32 %71, %57 br i1 %72, label %.lr.ph, label %._crit_edge ._crit_edge: ; preds = %.lr.ph, %.lr.ph3 %73 = add i64 %53, %51 %74 = icmp samesign ult i64 %73, %47 br i1 %74, label %.lr.ph3, label %._crit_edge4 ._crit_edge4: ; preds = %._crit_edge, %11 ret void }