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