define void @"julia_linalg_vector_addmul_sparsedense!_5564"({}* noundef nonnull align 16 dereferenceable(40) %0, {}* noundef nonnull align 16 dereferenceable(40) %1, {}* noundef nonnull align 16 dereferenceable(40) %2, { [1 x [4 x i64]], [1 x [4 x i64]], [1 x [4 x i64]], [1 x [4 x i8]], [1 x [4 x i8]] }* nocapture noundef nonnull readonly align 8 dereferenceable(104) %3) #0 {
top:
  %4 = bitcast {}* %1 to i32**
  %5 = load i32*, i32** %4, align 8
  %6 = load i32, i32* %5, align 4
  %7 = sext i32 %6 to i64
  %8 = add nsw i64 %7, -1
  %9 = bitcast {}* %0 to [1 x [4 x i64]]**
  %10 = load [1 x [4 x i64]]*, [1 x [4 x i64]]** %9, align 8
  %11 = bitcast {}* %1 to { i8*, i64, i16, i16, i32 }*
  %12 = getelementptr inbounds { i8*, i64, i16, i16, i32 }, { i8*, i64, i16, i16, i32 }* %11, i64 0, i32 1
  %13 = load i64, i64* %12, align 8
  %.not.not = icmp eq i64 %13, 0
  br i1 %.not.not, label %L105, label %L33.preheader

L33.preheader:                                    ; preds = %top
  %.sroa.329.0..sroa_idx30 = getelementptr inbounds [1 x [4 x i64]], [1 x [4 x i64]]* %10, i64 %8, i64 0, i64 2
  %14 = bitcast i64* %.sroa.329.0..sroa_idx30 to <2 x i64>*
  %15 = load <2 x i64>, <2 x i64>* %14, align 1
  %.sroa.026.0..sroa_idx = getelementptr inbounds [1 x [4 x i64]], [1 x [4 x i64]]* %10, i64 %8, i64 0, i64 0
  %16 = bitcast i64* %.sroa.026.0..sroa_idx to <2 x i64>*
  %17 = load <2 x i64>, <2 x i64>* %16, align 1
  %18 = bitcast {}* %2 to [1 x [4 x i32]]**
  %19 = load [1 x [4 x i32]]*, [1 x [4 x i32]]** %18, align 8
  %20 = shl <2 x i64> %17, <i64 32, i64 32>
  %21 = ashr exact <2 x i64> %20, <i64 32, i64 32>
  %22 = shl <2 x i64> %15, <i64 32, i64 32>
  %23 = ashr exact <2 x i64> %22, <i64 32, i64 32>
  %24 = getelementptr inbounds { [1 x [4 x i64]], [1 x [4 x i64]], [1 x [4 x i64]], [1 x [4 x i8]], [1 x [4 x i8]] }, { [1 x [4 x i64]], [1 x [4 x i64]], [1 x [4 x i64]], [1 x [4 x i8]], [1 x [4 x i8]] }* %3, i64 0, i32 1, i64 0, i64 0
  %25 = bitcast i64* %24 to <2 x i64>*
  %26 = load <2 x i64>, <2 x i64>* %25, align 8
  %27 = getelementptr inbounds { [1 x [4 x i64]], [1 x [4 x i64]], [1 x [4 x i64]], [1 x [4 x i8]], [1 x [4 x i8]] }, { [1 x [4 x i64]], [1 x [4 x i64]], [1 x [4 x i64]], [1 x [4 x i8]], [1 x [4 x i8]] }* %3, i64 0, i32 1, i64 0, i64 2
  %28 = bitcast i64* %27 to <2 x i64>*
  %29 = load <2 x i64>, <2 x i64>* %28, align 8
  br label %L33

L33:                                              ; preds = %L33.L33_crit_edge, %L33.preheader
  %30 = phi i32 [ %.pre, %L33.L33_crit_edge ], [ %6, %L33.preheader ]
  %value_phi4 = phi i64 [ %54, %L33.L33_crit_edge ], [ 1, %L33.preheader ]
  %31 = add nsw i64 %value_phi4, -1
  %32 = sext i32 %30 to i64
  %33 = add nsw i64 %32, -1
  %.sroa.019.0..sroa_idx = getelementptr inbounds [1 x [4 x i64]], [1 x [4 x i64]]* %10, i64 %33, i64 0, i64 0
  %34 = bitcast i64* %.sroa.019.0..sroa_idx to <2 x i64>*
  %35 = load <2 x i64>, <2 x i64>* %34, align 1
  %.sroa.322.0..sroa_idx23 = getelementptr inbounds [1 x [4 x i64]], [1 x [4 x i64]]* %10, i64 %33, i64 0, i64 2
  %36 = bitcast i64* %.sroa.322.0..sroa_idx23 to <2 x i64>*
  %37 = load <2 x i64>, <2 x i64>* %36, align 1
  %.sroa.012.0..sroa_idx = getelementptr inbounds [1 x [4 x i32]], [1 x [4 x i32]]* %19, i64 %31, i64 0, i64 0
  %38 = bitcast i32* %.sroa.012.0..sroa_idx to <2 x i32>*
  %39 = load <2 x i32>, <2 x i32>* %38, align 1
  %.sroa.315.0..sroa_idx16 = getelementptr inbounds [1 x [4 x i32]], [1 x [4 x i32]]* %19, i64 %31, i64 0, i64 2
  %40 = bitcast i32* %.sroa.315.0..sroa_idx16 to <2 x i32>*
  %41 = load <2 x i32>, <2 x i32>* %40, align 1
  %42 = sext <2 x i32> %39 to <2 x i64>
  %43 = mul nsw <2 x i64> %21, %42
  %44 = sub <2 x i64> %35, %43
  %45 = sext <2 x i32> %41 to <2 x i64>
  %46 = mul nsw <2 x i64> %23, %45
  %47 = sub <2 x i64> %37, %46
  %48 = icmp slt <2 x i64> %44, zeroinitializer
  %49 = select <2 x i1> %48, <2 x i64> %26, <2 x i64> zeroinitializer
  %50 = add <2 x i64> %49, %44
  %51 = icmp slt <2 x i64> %47, zeroinitializer
  %52 = select <2 x i1> %51, <2 x i64> %29, <2 x i64> zeroinitializer
  %53 = add <2 x i64> %52, %47
  store <2 x i64> %50, <2 x i64>* %34, align 8
  store <2 x i64> %53, <2 x i64>* %36, align 8
  %.not.not43 = icmp eq i64 %value_phi4, %13
  br i1 %.not.not43, label %L105, label %L33.L33_crit_edge

L33.L33_crit_edge:                                ; preds = %L33
  %54 = add nuw nsw i64 %value_phi4, 1
  %.phi.trans.insert = getelementptr inbounds i32, i32* %5, i64 %value_phi4
  %.pre = load i32, i32* %.phi.trans.insert, align 4
  br label %L33

L105:                                             ; preds = %L33, %top
  ret void
}
