after simplification : ; Function Attrs: mustprogress willreturn define double @preprocess_julia_loss_1448_inner.1({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1) local_unnamed_addr #25 !dbg !1030 { entry: %newstruct16.i = alloca [2 x [1 x i64]], align 8 %2 = alloca { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, align 8 %3 = alloca [1 x {} addrspace(10)*], align 8 %newstruct126.i = alloca [2 x [1 x i64]], align 8 %4 = alloca { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, align 8, !dbg !1031, !enzyme_type !294 %5 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !1031 %.fca.0.extract3 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 0, !dbg !1031 %.fca.0.gep4 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 0, !dbg !1031 store {} addrspace(10)* %.fca.0.extract3, {} addrspace(10)** %.fca.0.gep4, align 8, !dbg !1031, !noalias !1032 %.fca.1.0.0.extract5 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 0, 0, !dbg !1031 %.fca.1.0.0.gep6 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 0, i64 0, !dbg !1031 store i64 %.fca.1.0.0.extract5, i64* %.fca.1.0.0.gep6, align 8, !dbg !1031, !noalias !1032 %.fca.1.0.1.extract7 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 0, 1, !dbg !1031 %.fca.1.0.1.gep8 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 0, i64 1, !dbg !1031 store i64 %.fca.1.0.1.extract7, i64* %.fca.1.0.1.gep8, align 8, !dbg !1031, !noalias !1032 %.fca.1.1.0.extract = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 1, 0, !dbg !1031 %.fca.1.1.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 1, i64 0, !dbg !1031 store i64 %.fca.1.1.0.extract, i64* %.fca.1.1.0.gep, align 8, !dbg !1031, !noalias !1032 %.fca.1.1.1.extract = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 1, 1, !dbg !1031 %.fca.1.1.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 1, i64 1, !dbg !1031 store i64 %.fca.1.1.1.extract, i64* %.fca.1.1.1.gep, align 8, !dbg !1031, !noalias !1032 %.fca.2.extract9 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 2, !dbg !1031 %.fca.2.gep10 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 2, !dbg !1031 store i64 %.fca.2.extract9, i64* %.fca.2.gep10, align 8, !dbg !1031, !noalias !1032 %.fca.3.extract11 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 3, !dbg !1031 %.fca.3.gep12 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 3, !dbg !1031 store i64 %.fca.3.extract11, i64* %.fca.3.gep12, align 8, !dbg !1031, !noalias !1032 %6 = alloca { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, align 8, !dbg !1031, !enzyme_type !300 %7 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !1031 %.fca.0.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 0, !dbg !1031 %.fca.0.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 0, !dbg !1031 store {} addrspace(10)* %.fca.0.extract, {} addrspace(10)** %.fca.0.gep, align 8, !dbg !1031, !noalias !1032 %.fca.1.0.0.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 1, 0, 0, !dbg !1031 %.fca.1.0.0.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 1, i64 0, i64 0, !dbg !1031 store i64 %.fca.1.0.0.extract, i64* %.fca.1.0.0.gep, align 8, !dbg !1031, !noalias !1032 %.fca.1.0.1.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 1, 0, 1, !dbg !1031 %.fca.1.0.1.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 1, i64 0, i64 1, !dbg !1031 store i64 %.fca.1.0.1.extract, i64* %.fca.1.0.1.gep, align 8, !dbg !1031, !noalias !1032 %.fca.2.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 2, !dbg !1031 %.fca.2.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 2, !dbg !1031 store i64 %.fca.2.extract, i64* %.fca.2.gep, align 8, !dbg !1031, !noalias !1032 %.fca.3.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 3, !dbg !1031 %.fca.3.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 3, !dbg !1031 store i64 %.fca.3.extract, i64* %.fca.3.gep, align 8, !dbg !1031, !noalias !1032 %8 = bitcast [2 x [1 x i64]]* %newstruct16.i to i8* %9 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2 to i8* call void @llvm.lifetime.start.p0i8(i64 noundef 56, i8* noundef nonnull align 8 dereferenceable(56) %9) #26 %10 = bitcast [1 x {} addrspace(10)*]* %3 to i8* call void @llvm.lifetime.start.p0i8(i64 noundef 8, i8* noundef nonnull align 8 dereferenceable(8) %10) #26 %11 = bitcast [2 x [1 x i64]]* %newstruct126.i to i8* %12 = call {}*** @julia.get_pgcstack() #26 %ptls_field.i49 = getelementptr inbounds {}**, {}*** %12, i64 2 %13 = bitcast {}*** %ptls_field.i49 to i64*** %ptls_load.i5051 = load i64**, i64*** %13, align 8, !tbaa !24 %14 = getelementptr inbounds i64*, i64** %ptls_load.i5051, i64 2 %safepoint.i = load i64*, i64** %14, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint.i) #26, !dbg !1035 fence syncscope("singlethread") seq_cst %unbox.i = load i64, i64* %.fca.1.0.1.gep8, align 8, !dbg !1037, !alias.scope !42, !noalias !45 %unbox2.i = load i64, i64* %.fca.1.0.0.gep6, align 8, !dbg !1037, !alias.scope !42, !noalias !45 %15 = add i64 %unbox.i, 1, !dbg !1037 %16 = sub i64 %15, %unbox2.i, !dbg !1046 %17 = call i64 @llvm.smax.i64(i64 %16, i64 noundef 0) #26, !dbg !1047 %unbox3.i = load i64, i64* %.fca.1.1.1.gep, align 8, !dbg !1052, !alias.scope !42, !noalias !45 %unbox4.i = load i64, i64* %.fca.1.1.0.gep, align 8, !dbg !1052, !alias.scope !42, !noalias !45 %18 = sub i64 %unbox3.i, %unbox4.i, !dbg !1052 %19 = add i64 %18, 1, !dbg !1056 %20 = call i64 @llvm.smax.i64(i64 %19, i64 noundef 0) #26, !dbg !1057 %unbox7.i = load i64, i64* %.fca.1.0.1.gep, align 8, !dbg !1037, !alias.scope !42, !noalias !45 %unbox8.i = load i64, i64* %.fca.1.0.0.gep, align 8, !dbg !1037, !alias.scope !42, !noalias !45 %21 = sub i64 %unbox7.i, %unbox8.i, !dbg !1037 %22 = add i64 %21, 1, !dbg !1046 %23 = call i64 @llvm.smax.i64(i64 %22, i64 noundef 0) #26, !dbg !1047 %24 = icmp eq i64 %23, %17, !dbg !1062 %25 = icmp eq i64 %17, 1, !dbg !1068 %value_phi.i = or i1 %25, %24, !dbg !1068 br i1 %value_phi.i, label %L47.i, label %L35.i, !dbg !1069 L35.i: ; preds = %entry %.not64 = icmp eq i64 %23, 1, !dbg !1068 br i1 %.not64, label %L47.i, label %L43.i, !dbg !1069 L43.i: ; preds = %L35.i %current_task1.i48 = getelementptr inbounds {}**, {}*** %12, i64 -14 %current_task1.i = bitcast {}*** %current_task1.i48 to {}** %26 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_box_int64(i64 signext %17) #27, !dbg !1069 %27 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_box_int64(i64 signext %23) #27, !dbg !1069 %28 = call nonnull {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151445231360 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151423430080 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151520884224 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %26, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151520884192 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %27) #28, !dbg !1069 %box.i = call noalias nonnull dereferenceable(8) "enzyme_inactive" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1.i, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151463803568 to {}*) to {} addrspace(10)*)) #29, !dbg !1069 %29 = bitcast {} addrspace(10)* %box.i to [1 x {} addrspace(10)*] addrspace(10)*, !dbg !1069 %30 = getelementptr [1 x {} addrspace(10)*], [1 x {} addrspace(10)*] addrspace(10)* %29, i64 0, i64 0, !dbg !1069 store {} addrspace(10)* %28, {} addrspace(10)* addrspace(10)* %30, align 8, !dbg !1069, !tbaa !106, !alias.scope !70, !noalias !1070 %31 = addrspacecast {} addrspace(10)* %box.i to {} addrspace(12)*, !dbg !1069 call void @ijl_throw({} addrspace(12)* %31) #30, !dbg !1069 unreachable, !dbg !1069 L47.i: ; preds = %L35.i, %entry %.sroa.042.0 = phi i64 [ %23, %entry ], [ %17, %L35.i ] %memcpy_refined_dst.i = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct16.i, i64 0, i64 0, i64 0, !dbg !1071 store i64 %.sroa.042.0, i64* %memcpy_refined_dst.i, align 8, !dbg !1071, !tbaa !357, !alias.scope !359, !noalias !1072 %memcpy_refined_dst18.i = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct16.i, i64 0, i64 1, i64 0, !dbg !1071 store i64 %20, i64* %memcpy_refined_dst18.i, align 8, !dbg !1071, !tbaa !357, !alias.scope !359, !noalias !1072 %32 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151617005072 to {}*) to {} addrspace(10)*), i64 %.sroa.042.0, i64 %20) #27, !dbg !1073 %33 = addrspacecast {} addrspace(10)* %32 to {} addrspace(10)* addrspace(11)*, !dbg !1081 %arraysize_ptr.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %33, i64 3, !dbg !1081 %34 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr.i to i64 addrspace(11)*, !dbg !1081 %arraysize.i = load i64, i64 addrspace(11)* %34, align 8, !dbg !1081, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !42, !noalias !45 %arraysize_ptr23.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %33, i64 4, !dbg !1081 %35 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr23.i to i64 addrspace(11)*, !dbg !1081 %arraysize24.i = load i64, i64 addrspace(11)* %35, align 8, !dbg !1081, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !42, !noalias !45 %.not = icmp ne i64 %arraysize.i, %.sroa.042.0, !dbg !1085 %36 = icmp ne i64 %arraysize24.i, %20 %spec.select = select i1 %.not, i1 true, i1 %36, !dbg !1089 br i1 %spec.select, label %L395.i, label %L102.i, !dbg !1090 L102.i: ; preds = %L47.i %37 = addrspacecast {} addrspace(10)* %32 to {} addrspace(11)*, !dbg !1081 %38 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* %37) #31, !dbg !1091 %39 = bitcast {}* %38 to i8**, !dbg !1091 %arrayptr.i = load i8*, i8** %39, align 8, !dbg !1091, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45, !nonnull !23 %getfield28.i = load atomic {} addrspace(10)*, {} addrspace(10)** %.fca.0.gep4 unordered, align 8, !dbg !1101, !alias.scope !42, !noalias !45, !nonnull !23, !dereferenceable !129, !align !130 %40 = addrspacecast {} addrspace(10)* %getfield28.i to {} addrspace(11)*, !dbg !1103 %41 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %40) #31, !dbg !1103 %42 = bitcast {}* %41 to i8**, !dbg !1103 %arrayptr30.i = load i8*, i8** %42, align 8, !dbg !1103, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45, !nonnull !23 %.not52 = icmp eq i8* %arrayptr.i, %arrayptr30.i, !dbg !1106 br i1 %.not52, label %L111.i, label %L114.i, !dbg !1109 L111.i: ; preds = %L102.i call fastcc void @julia_unaliascopy_1490({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }) align 8 dereferenceable(56) %2, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzymejl_returnRoots" %3, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) %5) #26, !dbg !1109 %unbox148.i.fca.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 0, !dbg !1110 %unbox148.i.fca.0.load = load {} addrspace(10)*, {} addrspace(10)** %unbox148.i.fca.0.gep, align 8, !dbg !1110, !tbaa !357, !alias.scope !359, !noalias !432 %unbox148.i.fca.1.0.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 0, i64 0, !dbg !1110 %unbox148.i.fca.1.0.0.load = load i64, i64* %unbox148.i.fca.1.0.0.gep, align 8, !dbg !1110, !tbaa !357, !alias.scope !359, !noalias !432 %unbox148.i.fca.1.0.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 0, i64 1, !dbg !1110 %unbox148.i.fca.1.0.1.load = load i64, i64* %unbox148.i.fca.1.0.1.gep, align 8, !dbg !1110, !tbaa !357, !alias.scope !359, !noalias !432 %unbox148.i.fca.1.1.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 1, i64 0, !dbg !1110 %unbox148.i.fca.1.1.0.load = load i64, i64* %unbox148.i.fca.1.1.0.gep, align 8, !dbg !1110, !tbaa !357, !alias.scope !359, !noalias !432 %unbox148.i.fca.1.1.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 1, i64 1, !dbg !1110 %unbox148.i.fca.1.1.1.load = load i64, i64* %unbox148.i.fca.1.1.1.gep, align 8, !dbg !1110, !tbaa !357, !alias.scope !359, !noalias !432 br label %L114.i, !dbg !1110 L114.i: ; preds = %L111.i, %L102.i %unbox148.i.fca.0.load.pn = phi {} addrspace(10)* [ %unbox148.i.fca.0.load, %L111.i ], [ %getfield28.i, %L102.i ] %unbox148.i.fca.1.0.0.load.pn = phi i64 [ %unbox148.i.fca.1.0.0.load, %L111.i ], [ %unbox2.i, %L102.i ] %unbox148.i.fca.1.0.1.load.pn = phi i64 [ %unbox148.i.fca.1.0.1.load, %L111.i ], [ %unbox.i, %L102.i ] %unbox148.i.fca.1.1.0.load.pn = phi i64 [ %unbox148.i.fca.1.1.0.load, %L111.i ], [ %unbox4.i, %L102.i ] %unbox148.i.fca.1.1.1.load.pn = phi i64 [ %unbox148.i.fca.1.1.1.load, %L111.i ], [ %unbox3.i, %L102.i ] %43 = sub i64 1, %unbox148.i.fca.1.0.0.load.pn, !dbg !1117 %44 = add i64 %43, %unbox148.i.fca.1.0.1.load.pn, !dbg !1124 %45 = call i64 @llvm.smax.i64(i64 %44, i64 noundef 0) #26, !dbg !1125 %46 = sub i64 1, %unbox148.i.fca.1.1.0.load.pn, !dbg !1130 %47 = add i64 %46, %unbox148.i.fca.1.1.1.load.pn, !dbg !1134 %48 = call i64 @llvm.smax.i64(i64 %47, i64 noundef 0) #26, !dbg !1135 %49 = icmp eq i64 %48, 1, !dbg !1140 %50 = icmp eq i64 %45, 1, !dbg !1145 %getfield43.i = load atomic {} addrspace(10)*, {} addrspace(10)** %.fca.0.gep unordered, align 8, !dbg !1148, !alias.scope !42, !noalias !45, !nonnull !23, !dereferenceable !129, !align !130 %51 = addrspacecast {} addrspace(10)* %getfield43.i to {} addrspace(11)*, !dbg !1155 %52 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %51) #31, !dbg !1155 %53 = bitcast {}* %52 to i8**, !dbg !1155 %arrayptr45.i = load i8*, i8** %53, align 8, !dbg !1155, !tbaa !273, !alias.scope !276, !noalias !277, !nonnull !23 %.not53 = icmp eq i8* %arrayptr.i, %arrayptr45.i, !dbg !1158 br i1 %.not53, label %L147.i, label %L179.i, !dbg !1161 L147.i: ; preds = %L114.i %54 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_1d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151416616992 to {}*) to {} addrspace(10)*), i64 %22) #27, !dbg !1162 call fastcc void @julia_copyto__1477({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %54, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %7) #26, !dbg !1166 %.not54 = icmp ugt i64 %21, 9223372036854775806, !dbg !1167 %.1 = select i1 %.not54, i64 0, i64 %23, !dbg !1110 %55 = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } zeroinitializer, {} addrspace(10)* %54, 0, !dbg !1177 %unbox55.i.fca.0.1.insert = insertvalue [1 x [2 x i64]] [[2 x i64] [i64 1, i64 poison]], i64 %.1, 0, 1, !dbg !1177 %56 = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %55, [1 x [2 x i64]] %unbox55.i.fca.0.1.insert, 1, !dbg !1177 br label %L180.i, !dbg !1110 L179.i: ; preds = %L114.i %unbox162.i.fca.0.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } poison, {} addrspace(10)* %getfield43.i, 0, !dbg !1110 %unbox162.i.fca.1.0.0.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %unbox162.i.fca.0.insert, i64 %unbox8.i, 1, 0, 0, !dbg !1110 %unbox162.i.fca.1.0.1.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %unbox162.i.fca.1.0.0.insert, i64 %unbox7.i, 1, 0, 1, !dbg !1110 %unbox162.i.fca.2.load = load i64, i64* %.fca.2.gep, align 8, !dbg !1110, !alias.scope !42, !noalias !45 %phi.bo = add i64 %unbox162.i.fca.2.load, -1, !dbg !1110 br label %L180.i, !dbg !1110 L180.i: ; preds = %L179.i, %L147.i %.pn56 = phi { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } [ %56, %L147.i ], [ %unbox162.i.fca.1.0.1.insert, %L179.i ] %.pn57 = phi i64 [ -1, %L147.i ], [ %phi.bo, %L179.i ] %57 = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %.pn56, 1, !dbg !1178 %.fca.0.0.extract19 = extractvalue [1 x [2 x i64]] %57, 0, 0, !dbg !1178 %.fca.0.1.extract20 = extractvalue [1 x [2 x i64]] %57, 0, 1, !dbg !1178 %58 = sub i64 1, %.fca.0.0.extract19, !dbg !1182 %59 = add i64 %58, %.fca.0.1.extract20, !dbg !1186 %60 = call i64 @llvm.smax.i64(i64 %59, i64 noundef 0) #26, !dbg !1187 %61 = icmp eq i64 %60, 1, !dbg !1192 %.not58 = icmp ugt i64 %18, 9223372036854775806, !dbg !1196 br i1 %.not58, label %julia_loss_1448_inner.exit, label %L212.i.preheader, !dbg !1202 L212.i.preheader: ; preds = %L180.i %.not59 = icmp eq i64 %.sroa.042.0, 0 %62 = addrspacecast {} addrspace(10)* %unbox148.i.fca.0.load.pn to {} addrspace(10)* addrspace(11)* %arraysize_ptr90.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %62, i64 3 %63 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr90.i to i64 addrspace(11)* %64 = add i64 %unbox148.i.fca.1.1.0.load.pn, -1 %65 = add i64 %unbox148.i.fca.1.0.0.load.pn, -1 %66 = addrspacecast {} addrspace(10)* %unbox148.i.fca.0.load.pn to double addrspace(13)* addrspace(11)* %67 = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %.pn56, 0 %68 = addrspacecast {} addrspace(10)* %67 to double addrspace(13)* addrspace(11)* %69 = addrspacecast {} addrspace(10)* %32 to double addrspace(13)* addrspace(11)* %70 = add nsw i64 %.sroa.042.0, -1, !dbg !1203 %xtraiter = and i64 %.sroa.042.0, 3 %71 = icmp ult i64 %70, 3 %unroll_iter = and i64 %.sroa.042.0, 9223372036854775804 %lcmp.mod.not = icmp eq i64 %xtraiter, 0 br label %L212.i, !dbg !1203 L212.i: ; preds = %L373.i, %L212.i.preheader %iv = phi i64 [ %iv.next, %L373.i ], [ 0, %L212.i.preheader ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !1203 br i1 %.not59, label %L373.i, label %L221.i.lr.ph, !dbg !1203 L221.i.lr.ph: ; preds = %L212.i %value_phi67.i.op = add nsw i64 %iv.next, -1 %72 = select i1 %49, i64 0, i64 %value_phi67.i.op %arraysize91.i = load i64, i64 addrspace(11)* %63, align 8, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !42, !noalias !45 %73 = add i64 %64, %72 %74 = mul i64 %arraysize91.i, %73 %arrayptr93.i61 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %66, align 8, !tbaa !28, !invariant.load !23, !alias.scope !1204, !noalias !45, !nonnull !23 %arrayptr100.i62 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %68, align 8, !tbaa !273, !alias.scope !1205, !noalias !277, !nonnull !23 %75 = mul i64 %value_phi67.i.op, %.sroa.042.0 %arrayptr106.i63 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %69, align 8, !tbaa !28, !invariant.load !23, !alias.scope !1204, !noalias !45, !nonnull !23 br i1 %71, label %L218.i.L373.i.loopexit_crit_edge.unr-lcssa, label %L221.i.lr.ph.new, !dbg !1206 L221.i.lr.ph.new: ; preds = %L221.i.lr.ph %76 = add i64 %74, %65 br label %L221.i, !dbg !1206 L221.i: ; preds = %L221.i, %L221.i.lr.ph.new %iv1 = phi i64 [ %iv.next2, %L221.i ], [ 0, %L221.i.lr.ph.new ] %77 = shl nuw nsw i64 %iv1, 2, !dbg !1207 %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !1207 %78 = or i64 %77, 1, !dbg !1207 %79 = select i1 %50, i64 0, i64 %77, !dbg !1210 %80 = add i64 %76, %79, !dbg !1222 %81 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %80, !dbg !1222 %arrayref.i = load double, double addrspace(13)* %81, align 8, !dbg !1222, !tbaa !67, !alias.scope !70, !noalias !71 %82 = select i1 %61, i64 1, i64 %78, !dbg !1223 %83 = add i64 %82, %.pn57, !dbg !1228 %84 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %83, !dbg !1228 %arrayref101.i = load double, double addrspace(13)* %84, align 8, !dbg !1228, !tbaa !67, !alias.scope !70, !noalias !71 %85 = fadd double %arrayref.i, %arrayref101.i, !dbg !1232 %86 = add i64 %77, %75, !dbg !1235 %87 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %86, !dbg !1235 store double %85, double addrspace(13)* %87, align 8, !dbg !1235, !tbaa !67, !alias.scope !70, !noalias !1070 %88 = or i64 %77, 2, !dbg !1207 %89 = select i1 %50, i64 0, i64 %78, !dbg !1210 %90 = add i64 %76, %89, !dbg !1222 %91 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %90, !dbg !1222 %arrayref.i.1 = load double, double addrspace(13)* %91, align 8, !dbg !1222, !tbaa !67, !alias.scope !70, !noalias !71 %92 = select i1 %61, i64 1, i64 %88, !dbg !1223 %93 = add i64 %92, %.pn57, !dbg !1228 %94 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %93, !dbg !1228 %arrayref101.i.1 = load double, double addrspace(13)* %94, align 8, !dbg !1228, !tbaa !67, !alias.scope !70, !noalias !71 %95 = fadd double %arrayref.i.1, %arrayref101.i.1, !dbg !1232 %96 = add i64 %78, %75, !dbg !1235 %97 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %96, !dbg !1235 store double %95, double addrspace(13)* %97, align 8, !dbg !1235, !tbaa !67, !alias.scope !70, !noalias !1070 %98 = or i64 %77, 3, !dbg !1207 %99 = select i1 %50, i64 0, i64 %88, !dbg !1210 %100 = add i64 %76, %99, !dbg !1222 %101 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %100, !dbg !1222 %arrayref.i.2 = load double, double addrspace(13)* %101, align 8, !dbg !1222, !tbaa !67, !alias.scope !70, !noalias !71 %102 = select i1 %61, i64 1, i64 %98, !dbg !1223 %103 = add i64 %102, %.pn57, !dbg !1228 %104 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %103, !dbg !1228 %arrayref101.i.2 = load double, double addrspace(13)* %104, align 8, !dbg !1228, !tbaa !67, !alias.scope !70, !noalias !71 %105 = fadd double %arrayref.i.2, %arrayref101.i.2, !dbg !1232 %106 = add i64 %88, %75, !dbg !1235 %107 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %106, !dbg !1235 store double %105, double addrspace(13)* %107, align 8, !dbg !1235, !tbaa !67, !alias.scope !70, !noalias !1070 %108 = add nuw nsw i64 %77, 4, !dbg !1207 %109 = select i1 %50, i64 0, i64 %98, !dbg !1210 %110 = add i64 %76, %109, !dbg !1222 %111 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %110, !dbg !1222 %arrayref.i.3 = load double, double addrspace(13)* %111, align 8, !dbg !1222, !tbaa !67, !alias.scope !70, !noalias !71 %112 = select i1 %61, i64 1, i64 %108, !dbg !1223 %113 = add i64 %112, %.pn57, !dbg !1228 %114 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %113, !dbg !1228 %arrayref101.i.3 = load double, double addrspace(13)* %114, align 8, !dbg !1228, !tbaa !67, !alias.scope !70, !noalias !71 %115 = fadd double %arrayref.i.3, %arrayref101.i.3, !dbg !1232 %116 = add i64 %98, %75, !dbg !1235 %117 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %116, !dbg !1235 store double %115, double addrspace(13)* %117, align 8, !dbg !1235, !tbaa !67, !alias.scope !70, !noalias !1070 %niter.ncmp.3.not = icmp eq i64 %108, %unroll_iter, !dbg !1206 br i1 %niter.ncmp.3.not, label %L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit, label %L221.i, !dbg !1206, !llvm.loop !1237 L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %L221.i br label %L218.i.L373.i.loopexit_crit_edge.unr-lcssa, !dbg !1206 L218.i.L373.i.loopexit_crit_edge.unr-lcssa: ; preds = %L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit, %L221.i.lr.ph %value_phi70.i67.unr = phi i64 [ 0, %L221.i.lr.ph ], [ %unroll_iter, %L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit ] br i1 %lcmp.mod.not, label %L373.i, label %L221.i.epil.preheader, !dbg !1206 L221.i.epil.preheader: ; preds = %L218.i.L373.i.loopexit_crit_edge.unr-lcssa %118 = add i64 %74, %65 br label %L221.i.epil, !dbg !1206 L221.i.epil: ; preds = %L221.i.epil, %L221.i.epil.preheader %iv3 = phi i64 [ %iv.next4, %L221.i.epil ], [ 0, %L221.i.epil.preheader ] %119 = add nuw nsw i64 %value_phi70.i67.unr, %iv3, !dbg !1207 %iv.next4 = add nuw nsw i64 %iv3, 1, !dbg !1207 %120 = add nuw nsw i64 %119, 1, !dbg !1207 %121 = select i1 %50, i64 0, i64 %119, !dbg !1210 %122 = add i64 %118, %121, !dbg !1222 %123 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %122, !dbg !1222 %arrayref.i.epil = load double, double addrspace(13)* %123, align 8, !dbg !1222, !tbaa !67, !alias.scope !70, !noalias !71 %124 = select i1 %61, i64 1, i64 %120, !dbg !1223 %125 = add i64 %124, %.pn57, !dbg !1228 %126 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %125, !dbg !1228 %arrayref101.i.epil = load double, double addrspace(13)* %126, align 8, !dbg !1228, !tbaa !67, !alias.scope !70, !noalias !71 %127 = fadd double %arrayref.i.epil, %arrayref101.i.epil, !dbg !1232 %128 = add i64 %119, %75, !dbg !1235 %129 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %128, !dbg !1235 store double %127, double addrspace(13)* %129, align 8, !dbg !1235, !tbaa !67, !alias.scope !70, !noalias !1070 %epil.iter.cmp.not = icmp eq i64 %iv.next4, %xtraiter, !dbg !1206 br i1 %epil.iter.cmp.not, label %L373.i.loopexit, label %L221.i.epil, !dbg !1206, !llvm.loop !1238 L373.i.loopexit: ; preds = %L221.i.epil br label %L373.i, !dbg !1239 L373.i: ; preds = %L373.i.loopexit, %L218.i.L373.i.loopexit_crit_edge.unr-lcssa, %L212.i %130 = add nuw i64 %iv.next, 1, !dbg !1239 %131 = icmp ult i64 %iv.next, 9223372036854775807, !dbg !1243 %132 = icmp sle i64 %130, %20, !dbg !1243 %133 = icmp ne i64 %iv.next, %20, !dbg !1247 %not. = and i1 %131, %132, !dbg !1247 %narrow = and i1 %133, %not., !dbg !1247 br i1 %narrow, label %L212.i, label %julia_loss_1448_inner.exit.loopexit, !dbg !1248 L395.i: ; preds = %L47.i %134 = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct126.i, i64 0, i64 0, i64 0, !dbg !1249 store i64 %arraysize.i, i64* %134, align 8, !dbg !1249, !tbaa !357, !alias.scope !359, !noalias !1072 %135 = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct126.i, i64 0, i64 1, i64 0, !dbg !1249 store i64 %arraysize24.i, i64* %135, align 8, !dbg !1249, !tbaa !357, !alias.scope !359, !noalias !1072 %136 = addrspacecast [2 x [1 x i64]]* %newstruct126.i to [2 x [1 x i64]] addrspace(11)*, !dbg !1090 %137 = addrspacecast [2 x [1 x i64]]* %newstruct16.i to [2 x [1 x i64]] addrspace(11)*, !dbg !1090 call fastcc void @julia_throwdm_1459([2 x [1 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %136, [2 x [1 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %137) #30, !dbg !1090 unreachable, !dbg !1090 julia_loss_1448_inner.exit.loopexit: ; preds = %L373.i br label %julia_loss_1448_inner.exit, !dbg !1253 julia_loss_1448_inner.exit: ; preds = %julia_loss_1448_inner.exit.loopexit, %L180.i %138 = call fastcc double @julia__mapreduce_1461({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) %32) #26, !dbg !1253 call void @llvm.lifetime.end.p0i8(i64 noundef 16, i8* noundef nonnull %8) #26, !dbg !1253 call void @llvm.lifetime.end.p0i8(i64 noundef 56, i8* noundef nonnull %9) #26, !dbg !1253 call void @llvm.lifetime.end.p0i8(i64 noundef 8, i8* noundef nonnull %10) #26, !dbg !1253 call void @llvm.lifetime.end.p0i8(i64 noundef 16, i8* noundef nonnull %11) #26, !dbg !1253 ret double %138, !dbg !1031 } after simplification : ; Function Attrs: mustprogress willreturn define internal fastcc void @preprocess_julia_unaliascopy_1490({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }) align 8 dereferenceable(56) %0, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %2) unnamed_addr #26 !dbg !1540 { top: %3 = call {}*** @julia.get_pgcstack() #27 %ptls_field18 = getelementptr inbounds {}**, {}*** %3, i64 2 %4 = bitcast {}*** %ptls_field18 to i64*** %ptls_load1920 = load i64**, i64*** %4, align 8, !tbaa !24 %5 = getelementptr inbounds i64*, i64** %ptls_load1920, i64 2 %safepoint = load i64*, i64** %5, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #27, !dbg !1541 fence syncscope("singlethread") seq_cst %6 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 0, !dbg !1542 %7 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 1, !dbg !1547 %unbox = load i64, i64 addrspace(11)* %7, align 8, !dbg !1549, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %unbox2 = load i64, i64 addrspace(11)* %6, align 8, !dbg !1549, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %8 = sub i64 %unbox, %unbox2, !dbg !1549 %9 = add i64 %8, 1, !dbg !1551 %10 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 1, i64 0, !dbg !1552 %11 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 1, i64 1, !dbg !1556 %unbox3 = load i64, i64 addrspace(11)* %11, align 8, !dbg !1558, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %unbox4 = load i64, i64 addrspace(11)* %10, align 8, !dbg !1558, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %12 = sub i64 %unbox3, %unbox4, !dbg !1558 %13 = add i64 %12, 1, !dbg !1560 %14 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151617005072 to {}*) to {} addrspace(10)*), i64 %9, i64 %13) #28, !dbg !1561 call fastcc void @julia_copyto__1493({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %14, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) %2) #27, !dbg !1564 %15 = call i64 @llvm.smax.i64(i64 %9, i64 noundef 0) #27, !dbg !1565 %.not = icmp ugt i64 %8, 9223372036854775806, !dbg !1573 %. = select i1 %.not, i64 0, i64 %15, !dbg !1580 %16 = call i64 @llvm.smax.i64(i64 %13, i64 noundef 0) #27, !dbg !1565 %.not21 = icmp ugt i64 %12, 9223372036854775806, !dbg !1573 %value_phi10 = select i1 %.not21, i64 0, i64 %16, !dbg !1575 %17 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !1581 store {} addrspace(10)* %14, {} addrspace(10)** %17, align 8, !dbg !1581, !noalias !1582 %.repack = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 0, !dbg !1581 store {} addrspace(10)* %14, {} addrspace(10)** %.repack, align 8, !dbg !1581, !noalias !1582 %.repack22.repack.repack = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 0, i64 0, !dbg !1581 store i64 1, i64* %.repack22.repack.repack, align 8, !dbg !1581, !noalias !1582 %.repack22.repack.repack30 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 0, i64 1, !dbg !1581 store i64 %., i64* %.repack22.repack.repack30, align 8, !dbg !1581, !noalias !1582 %.repack22.repack28.repack = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 1, i64 0, !dbg !1581 store i64 1, i64* %.repack22.repack28.repack, align 8, !dbg !1581, !noalias !1582 %.repack22.repack28.repack32 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 1, i64 1, !dbg !1581 store i64 %value_phi10, i64* %.repack22.repack28.repack32, align 8, !dbg !1581, !noalias !1582 %.repack24 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 2, !dbg !1581 %18 = bitcast i64* %.repack24 to i8*, !dbg !1581 call void @llvm.memset.p0i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(16) %18, i8 noundef 0, i64 noundef 16, i1 noundef false) #27, !dbg !1581 ret void, !dbg !1581 } after simplification : ; Function Attrs: mustprogress willreturn define internal fastcc void @preprocess_julia_copyto__1493({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %1) unnamed_addr #27 !dbg !1637 { top: %2 = call {}*** @julia.get_pgcstack() %3 = call {}*** @julia.get_pgcstack() %4 = bitcast {}*** %3 to {}** %5 = getelementptr inbounds {}*, {}** %4, i64 -14 %6 = getelementptr inbounds {}*, {}** %5, i64 16 %7 = bitcast {}** %6 to i8** %8 = load i8*, i8** %7, align 8 %9 = call noalias nonnull dereferenceable(56) dereferenceable_or_null(56) {} addrspace(10)* @julia.gc_alloc_obj({}** %5, i64 56, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146543628176 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1638 call void @zeroType({} addrspace(10)* %9, i8 0, i64 56), !enzyme_zerostack !23 %10 = bitcast {} addrspace(10)* %9 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %11 = bitcast {}*** %2 to {}** %12 = getelementptr inbounds {}*, {}** %11, i64 -14 %13 = getelementptr inbounds {}*, {}** %12, i64 16 %14 = bitcast {}** %13 to i8** %15 = load i8*, i8** %14, align 8 %16 = call noalias nonnull dereferenceable(8) dereferenceable_or_null(8) {} addrspace(10)* @julia.gc_alloc_obj({}** %12, i64 8, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146547762384 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1638 call void @zeroType.7({} addrspace(10)* %16, i8 0, i64 8), !enzyme_zerostack !23 %17 = bitcast {} addrspace(10)* %16 to [1 x {} addrspace(10)*] addrspace(10)*, !enzyme_caststack !23 %18 = call {}*** @julia.get_pgcstack() #29 %ptls_field9 = getelementptr inbounds {}**, {}*** %18, i64 2 %19 = bitcast {}*** %ptls_field9 to i64*** %ptls_load1011 = load i64**, i64*** %19, align 8, !tbaa !24 %20 = getelementptr inbounds i64*, i64** %ptls_load1011, i64 2 %safepoint = load i64*, i64** %20, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #29, !dbg !1639 fence syncscope("singlethread") seq_cst %21 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !1640 %22 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !1650 %unbox = load i64, i64 addrspace(11)* %22, align 8, !dbg !1652, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %unbox2 = load i64, i64 addrspace(11)* %21, align 8, !dbg !1652, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %23 = add i64 %unbox, 1, !dbg !1652 %24 = sub i64 %23, %unbox2, !dbg !1654 %25 = call i64 @llvm.smax.i64(i64 %24, i64 noundef 0) #29, !dbg !1655 %26 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 0, !dbg !1660 %27 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 1, !dbg !1665 %unbox3 = load i64, i64 addrspace(11)* %27, align 8, !dbg !1667, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %unbox4 = load i64, i64 addrspace(11)* %26, align 8, !dbg !1667, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %28 = add i64 %unbox3, 1, !dbg !1667 %29 = sub i64 %28, %unbox4, !dbg !1669 %30 = call i64 @llvm.smax.i64(i64 %29, i64 noundef 0) #29, !dbg !1670 %31 = mul i64 %30, %25, !dbg !1675 %.not = icmp eq i64 %31, 0, !dbg !1677 br i1 %.not, label %common.ret, label %L20, !dbg !1649 common.ret: ; preds = %L20, %top ret void, !dbg !1678 L20: ; preds = %top %32 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %10 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !1679 %33 = addrspacecast [1 x {} addrspace(10)*] addrspace(10)* %17 to [1 x {} addrspace(10)*]*, !dbg !1679 call fastcc void @julia_unalias_1501({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }) align 8 dereferenceable(56) %32, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzymejl_returnRoots" %33, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %0, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) %1) #29, !dbg !1679 %34 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %10 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !1680 call fastcc void @julia_copyto_unaliased__1497({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %0, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) %34) #29, !dbg !1680 br label %common.ret } after simplification : ; Function Attrs: mustprogress willreturn define internal fastcc void @preprocess_julia_copyto_unaliased__1497({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %1) unnamed_addr #29 !dbg !1739 { top: %2 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !enzyme_fromstack !1638 %newstruct66 = bitcast i8* %2 to [2 x i64]*, !enzyme_caststack !23 %3 = call {}*** @julia.get_pgcstack() #30 %ptls_field231 = getelementptr inbounds {}**, {}*** %3, i64 2 %4 = bitcast {}*** %ptls_field231 to i64*** %ptls_load232233 = load i64**, i64*** %4, align 8, !tbaa !24 %5 = getelementptr inbounds i64*, i64** %ptls_load232233, i64 2 %safepoint = load i64*, i64** %5, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #30, !dbg !1740 fence syncscope("singlethread") seq_cst %6 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !1741 %7 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !1751 %unbox = load i64, i64 addrspace(11)* %7, align 8, !dbg !1753, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %unbox2 = load i64, i64 addrspace(11)* %6, align 8, !dbg !1753, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %8 = sub i64 %unbox, %unbox2, !dbg !1753 %9 = add i64 %8, 1, !dbg !1755 %10 = call i64 @llvm.smax.i64(i64 %9, i64 noundef 0) #30, !dbg !1756 %11 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 0, !dbg !1761 %12 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 1, !dbg !1766 %unbox3 = load i64, i64 addrspace(11)* %12, align 8, !dbg !1768, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %unbox4 = load i64, i64 addrspace(11)* %11, align 8, !dbg !1768, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %13 = sub i64 %unbox3, %unbox4, !dbg !1768 %14 = add i64 %13, 1, !dbg !1770 %15 = call i64 @llvm.smax.i64(i64 %14, i64 noundef 0) #30, !dbg !1771 %16 = mul i64 %15, %10, !dbg !1776 %.not = icmp eq i64 %16, 0, !dbg !1778 br i1 %.not, label %common.ret, label %L20, !dbg !1750 common.ret.loopexit: ; preds = %L232 store i64 %value_phi51287295312, i64* %57, align 8, !dbg !1779, !tbaa !357, !alias.scope !359, !noalias !1785 store i64 %value_phi52289294314, i64* %58, align 8, !dbg !1779, !tbaa !357, !alias.scope !359, !noalias !1785 br label %common.ret, !dbg !1788 common.ret: ; preds = %L61, %common.ret.loopexit, %top ret void, !dbg !1788 L20: ; preds = %top %17 = addrspacecast {} addrspace(10)* %0 to {} addrspace(10)* addrspace(11)*, !dbg !1789 %arraysize_ptr = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %17, i64 3, !dbg !1789 %18 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr to i64 addrspace(11)*, !dbg !1789 %arraysize = load i64, i64 addrspace(11)* %18, align 8, !dbg !1789, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !42, !noalias !45 %arraysize_ptr6 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %17, i64 4, !dbg !1789 %19 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr6 to i64 addrspace(11)*, !dbg !1789 %arraysize7 = load i64, i64 addrspace(11)* %19, align 16, !dbg !1789, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !42, !noalias !45 %20 = mul i64 %arraysize7, %arraysize, !dbg !1793 %21 = call i64 @llvm.smax.i64(i64 %20, i64 noundef 0) #30, !dbg !1799 %22 = icmp slt i64 %20, 1, !dbg !1804 %23 = add i64 %16, -1, !dbg !1806 %24 = icmp uge i64 %23, %21, !dbg !1804 %25 = or i1 %22, %24, !dbg !1798 br i1 %25, label %L343, label %L61, !dbg !1798 L61: ; preds = %L20 %26 = icmp ult i64 %8, 9223372036854775807, !dbg !1807 %27 = icmp ult i64 %13, 9223372036854775807, !dbg !1807 %28 = and i1 %26, %27, !dbg !1814 br i1 %28, label %guard_pass128, label %common.ret, !dbg !1814 L194: ; preds = %guard_pass133, %guard_pass128 %iv = phi i64 [ %iv.next, %guard_pass133 ], [ 0, %guard_pass128 ] %value_phi52289294314 = phi i64 [ %.promoted313, %guard_pass128 ], [ %value_phi52289294, %guard_pass133 ] %value_phi51287295312 = phi i64 [ %.promoted, %guard_pass128 ], [ %value_phi51287295, %guard_pass133 ] %.pn = phi i64 [ %54, %guard_pass128 ], [ %68, %guard_pass133 ] %value_phi43 = phi i64 [ 1, %guard_pass128 ], [ %value_phi51287295, %guard_pass133 ] %value_phi45 = phi i64 [ 1, %guard_pass128 ], [ %value_phi52289294, %guard_pass133 ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !1788 %value_phi42.in = getelementptr inbounds double, double addrspace(13)* %arrayptr111236, i64 %.pn, !dbg !1788 %value_phi42 = load double, double addrspace(13)* %value_phi42.in, align 8, !dbg !1788, !tbaa !67, !alias.scope !70, !noalias !71 %29 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre234, i64 %iv, !dbg !1815 store double %value_phi42, double addrspace(13)* %29, align 8, !dbg !1815, !tbaa !67, !alias.scope !70, !noalias !1817 %30 = add i64 %value_phi43, 1, !dbg !1818 %31 = icmp ugt i64 %value_phi43, 9223372036854775806, !dbg !1822 %32 = icmp sgt i64 %30, %10, !dbg !1822 %33 = or i1 %31, %32, !dbg !1825 %34 = icmp eq i64 %value_phi43, %10 %or.cond = or i1 %34, %33, !dbg !1825 br i1 %or.cond, label %L232, label %L248, !dbg !1825 L232: ; preds = %L194 %35 = icmp ult i64 %value_phi45, 9223372036854775807, !dbg !1826 %36 = add i64 %value_phi45, 1, !dbg !1831 %37 = icmp sle i64 %36, %15, !dbg !1826 %38 = and i1 %35, %37, !dbg !1833 %39 = icmp ne i64 %value_phi45, %15, !dbg !1829 %value_phi89 = and i1 %39, %38, !dbg !1829 %cond.fr = freeze i1 %value_phi89 br i1 %cond.fr, label %L248, label %common.ret.loopexit, !dbg !1834 L248: ; preds = %L232, %L194 %value_phi51287295 = phi i64 [ 1, %L232 ], [ %30, %L194 ] %value_phi52289294 = phi i64 [ %36, %L232 ], [ %value_phi45, %L194 ] %40 = add nsw i64 %value_phi51287295, -1, !dbg !1835 %41 = icmp uge i64 %40, %61, !dbg !1840 %42 = add i64 %value_phi52289294, -1, !dbg !1841 %43 = icmp uge i64 %42, %64, !dbg !1844 %44 = or i1 %41, %43, !dbg !1839 br i1 %44, label %L276, label %guard_pass133, !dbg !1839 L276: ; preds = %L248 store i64 %value_phi51287295, i64* %57, align 8, !dbg !1779, !tbaa !357, !alias.scope !359, !noalias !1785 store i64 %value_phi52289294, i64* %58, align 8, !dbg !1779, !tbaa !357, !alias.scope !359, !noalias !1785 %45 = addrspacecast [2 x i64]* %newstruct66 to [2 x i64] addrspace(11)*, !dbg !1839 call fastcc void @julia_throw_boundserror_1473({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) %1, [2 x i64] addrspace(11)* nocapture noundef nonnull readonly align 8 dereferenceable(16) %45) #31, !dbg !1839 unreachable, !dbg !1839 L343: ; preds = %L20 %current_task1230 = getelementptr inbounds {}**, {}*** %3, i64 -14 %current_task1 = bitcast {}*** %current_task1230 to {}** %box = call noalias nonnull dereferenceable(16) "enzyme_inactive" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 16, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151623086544 to {}*) to {} addrspace(10)*)) #32, !dbg !1798 %46 = bitcast {} addrspace(10)* %box to i8 addrspace(10)*, !dbg !1798 %newstruct.sroa.0.0..sroa_cast = bitcast {} addrspace(10)* %box to i64 addrspace(10)*, !dbg !1798 store i64 %10, i64 addrspace(10)* %newstruct.sroa.0.0..sroa_cast, align 8, !dbg !1798, !tbaa !103, !alias.scope !939, !noalias !1845 %newstruct.sroa.2.0..sroa_idx = getelementptr inbounds i8, i8 addrspace(10)* %46, i64 8, !dbg !1798 %newstruct.sroa.2.0..sroa_cast = bitcast i8 addrspace(10)* %newstruct.sroa.2.0..sroa_idx to i64 addrspace(10)*, !dbg !1798 store i64 %15, i64 addrspace(10)* %newstruct.sroa.2.0..sroa_cast, align 8, !dbg !1798, !tbaa !103, !alias.scope !939, !noalias !1845 %47 = call nonnull {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151620860624 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151487465984 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %0, {} addrspace(10)* nofree nonnull %box) #33, !dbg !1798 %48 = addrspacecast {} addrspace(10)* %47 to {} addrspace(12)*, !dbg !1798 call void @ijl_throw({} addrspace(12)* %48) #31, !dbg !1798 unreachable, !dbg !1798 guard_pass128: ; preds = %L61 %getfield_addr105 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 0, !dbg !1846 %getfield106 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr105 unordered, align 8, !dbg !1846, !nonnull !23 %49 = add i64 %unbox2, -1, !dbg !1851 %50 = addrspacecast {} addrspace(10)* %getfield106 to {} addrspace(10)* addrspace(11)*, !dbg !1851 %arraysize_ptr107 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %50, i64 3, !dbg !1851 %51 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr107 to i64 addrspace(11)*, !dbg !1851 %arraysize108 = load i64, i64 addrspace(11)* %51, align 8, !dbg !1851, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !42, !noalias !45 %52 = add i64 %unbox4, -1, !dbg !1851 %53 = mul i64 %arraysize108, %52, !dbg !1851 %54 = add i64 %53, %49, !dbg !1851 %55 = addrspacecast {} addrspace(10)* %getfield106 to double addrspace(13)* addrspace(11)*, !dbg !1851 %arrayptr111236 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %55, align 8, !dbg !1851, !tbaa !28, !invariant.load !23, !alias.scope !1852, !noalias !45, !nonnull !23 %56 = addrspacecast {} addrspace(10)* %0 to double addrspace(13)* addrspace(11)*, !dbg !1815 %arrayptr.pre234 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %56, align 16, !dbg !1815, !tbaa !28, !invariant.load !23, !alias.scope !1852, !noalias !45 %57 = getelementptr inbounds [2 x i64], [2 x i64]* %newstruct66, i64 0, i64 0 %58 = getelementptr inbounds [2 x i64], [2 x i64]* %newstruct66, i64 0, i64 1 %59 = add i64 %unbox, 1 %60 = sub i64 %59, %unbox2 %61 = call i64 @llvm.smax.i64(i64 %60, i64 noundef 0) #30, !dbg !1788 %62 = add i64 %unbox3, 1 %63 = sub i64 %62, %unbox4 %64 = call i64 @llvm.smax.i64(i64 %63, i64 noundef 0) #30, !dbg !1788 %.promoted = load i64, i64* %57, align 8, !tbaa !357, !alias.scope !359, !noalias !1785 %.promoted313 = load i64, i64* %58, align 8, !tbaa !357, !alias.scope !359, !noalias !1785 br label %L194, !dbg !1853 guard_pass133: ; preds = %L248 %65 = add i64 %42, %52, !dbg !1854 %66 = mul i64 %65, %arraysize108, !dbg !1854 %67 = add i64 %40, %49, !dbg !1854 %68 = add i64 %67, %66, !dbg !1854 br label %L194, !dbg !1853 } ; Function Attrs: mustprogress willreturn define internal fastcc { {} addrspace(10)*, i64*, i64*, i64 } @augmented_julia_copyto_unaliased__1497({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'1") unnamed_addr #29 !dbg !1856 { top: %2 = alloca { {} addrspace(10)*, i64*, i64*, i64 }, align 8 %3 = getelementptr { {} addrspace(10)*, i64*, i64*, i64 }, { {} addrspace(10)*, i64*, i64*, i64 }* %2, i64 0, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %3, align 8 %"iv'ac" = alloca i64, align 8 %loopLimit_cache = alloca i64, align 8 %newstruct66 = alloca [2 x i64], i64 1, align 8 %4 = bitcast [2 x i64]* %newstruct66 to i8* %value_phi43_cache = alloca i64*, align 8 %value_phi45_cache = alloca i64*, align 8 %5 = bitcast i8* %4 to [2 x i64]*, !enzyme_caststack !23 %6 = call {}*** @julia.get_pgcstack() #31 %ptls_field231 = getelementptr inbounds {}**, {}*** %6, i64 2 %7 = bitcast {}*** %ptls_field231 to i64*** %ptls_load232233 = load i64**, i64*** %7, align 8, !tbaa !24, !alias.scope !1857, !noalias !1860 %8 = getelementptr inbounds i64*, i64** %ptls_load232233, i64 2 %safepoint = load i64*, i64** %8, align 8, !tbaa !28, !invariant.load !23, !alias.scope !1862, !noalias !1865 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #31, !dbg !1867 fence syncscope("singlethread") seq_cst %9 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !1868 %10 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !1878 %unbox = load i64, i64 addrspace(11)* %10, align 8, !dbg !1880, !tbaa !28, !invariant.load !23, !alias.scope !1882, !noalias !1885 %unbox2 = load i64, i64 addrspace(11)* %9, align 8, !dbg !1880, !tbaa !28, !invariant.load !23, !alias.scope !1882, !noalias !1885 %11 = sub i64 %unbox, %unbox2, !dbg !1880 %12 = add i64 %11, 1, !dbg !1887 %13 = call i64 @llvm.smax.i64(i64 %12, i64 noundef 0) #31, !dbg !1888 %14 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 0, !dbg !1893 %15 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 1, !dbg !1898 %unbox3 = load i64, i64 addrspace(11)* %15, align 8, !dbg !1900, !tbaa !28, !invariant.load !23, !alias.scope !1882, !noalias !1885 %unbox4 = load i64, i64 addrspace(11)* %14, align 8, !dbg !1900, !tbaa !28, !invariant.load !23, !alias.scope !1882, !noalias !1885 %16 = sub i64 %unbox3, %unbox4, !dbg !1900 %17 = add i64 %16, 1, !dbg !1902 %18 = call i64 @llvm.smax.i64(i64 %17, i64 noundef 0) #31, !dbg !1903 %19 = mul i64 %18, %13, !dbg !1908 %.not = icmp eq i64 %19, 0, !dbg !1910 br i1 %.not, label %common.ret, label %L20, !dbg !1877 common.ret.loopexit: ; preds = %L232 %20 = phi i64 [ %iv, %L232 ], !dbg !1911 store i64 %value_phi51287295312, i64* %106, align 8, !dbg !1911, !tbaa !357, !alias.scope !359, !noalias !1917 store i64 %value_phi52289294314, i64* %107, align 8, !dbg !1911, !tbaa !357, !alias.scope !359, !noalias !1917 store i64 %20, i64* %loopLimit_cache, align 8, !dbg !1920, !invariant.group !1921 br label %common.ret, !dbg !1920 common.ret: ; preds = %L61, %common.ret.loopexit, %top %21 = load { {} addrspace(10)*, i64*, i64*, i64 }, { {} addrspace(10)*, i64*, i64*, i64 }* %2, align 8, !dbg !1920 ret { {} addrspace(10)*, i64*, i64*, i64 } %21, !dbg !1920 L20: ; preds = %top %22 = addrspacecast {} addrspace(10)* %0 to {} addrspace(10)* addrspace(11)*, !dbg !1922 %arraysize_ptr = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %22, i64 3, !dbg !1922 %23 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr to i64 addrspace(11)*, !dbg !1922 %arraysize = load i64, i64 addrspace(11)* %23, align 8, !dbg !1922, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !1926, !noalias !1929 %arraysize_ptr6 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %22, i64 4, !dbg !1922 %24 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr6 to i64 addrspace(11)*, !dbg !1922 %arraysize7 = load i64, i64 addrspace(11)* %24, align 16, !dbg !1922, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !1926, !noalias !1929 %25 = mul i64 %arraysize7, %arraysize, !dbg !1931 %26 = call i64 @llvm.smax.i64(i64 %25, i64 noundef 0) #31, !dbg !1937 %27 = icmp slt i64 %25, 1, !dbg !1942 %28 = add i64 %19, -1, !dbg !1944 %29 = icmp uge i64 %28, %26, !dbg !1942 %30 = or i1 %27, %29, !dbg !1936 br i1 %30, label %L343, label %L61, !dbg !1936 L61: ; preds = %L20 %31 = icmp ult i64 %11, 9223372036854775807, !dbg !1945 %32 = icmp ult i64 %16, 9223372036854775807, !dbg !1945 %33 = and i1 %31, %32, !dbg !1952 br i1 %33, label %guard_pass128, label %common.ret, !dbg !1952 L194: ; preds = %guard_pass133, %guard_pass128 %iv = phi i64 [ %iv.next, %guard_pass133 ], [ 0, %guard_pass128 ] %value_phi52289294314 = phi i64 [ %.promoted313, %guard_pass128 ], [ %value_phi52289294, %guard_pass133 ] %value_phi51287295312 = phi i64 [ %.promoted, %guard_pass128 ], [ %value_phi51287295, %guard_pass133 ] %.pn = phi i64 [ %103, %guard_pass128 ], [ %117, %guard_pass133 ] %value_phi43 = phi i64 [ 1, %guard_pass128 ], [ %value_phi51287295, %guard_pass133 ] %value_phi45 = phi i64 [ 1, %guard_pass128 ], [ %value_phi52289294, %guard_pass133 ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !1920 %34 = load i64*, i64** %value_phi45_cache, align 8, !dbg !1920 %35 = bitcast i64* %34 to i8*, !dbg !1920 %36 = and i64 %iv.next, 1, !dbg !1920 %37 = icmp ne i64 %36, 0, !dbg !1920 %38 = call i64 @llvm.ctpop.i64(i64 %iv.next), !dbg !1920 %39 = icmp ult i64 %38, 3, !dbg !1920 %40 = and i1 %39, %37, !dbg !1920 br i1 %40, label %grow.i, label %__enzyme_exponentialallocationzero.exit, !dbg !1920 grow.i: ; preds = %L194 %41 = call i64 @llvm.ctlz.i64(i64 %iv.next, i1 true), !dbg !1920 %42 = sub nuw nsw i64 64, %41, !dbg !1920 %43 = shl i64 8, %42, !dbg !1920 %44 = lshr i64 %43, 1, !dbg !1920 %45 = icmp eq i64 %iv.next, 1, !dbg !1920 %46 = select i1 %45, i64 0, i64 %44, !dbg !1920 %47 = call i8* @realloc(i8* %35, i64 %43) #32, !dbg !1920 %48 = sub i64 %43, %46, !dbg !1920 %49 = getelementptr inbounds i8, i8* %47, i64 %46, !dbg !1920 call void @llvm.memset.p0i8.i64(i8* %49, i8 0, i64 %48, i1 false), !dbg !1920 br label %__enzyme_exponentialallocationzero.exit, !dbg !1920 __enzyme_exponentialallocationzero.exit: ; preds = %L194, %grow.i %50 = phi i8* [ %47, %grow.i ], [ %35, %L194 ], !dbg !1920 %51 = bitcast i8* %50 to i64*, !dbg !1920 %52 = getelementptr inbounds { {} addrspace(10)*, i64*, i64*, i64 }, { {} addrspace(10)*, i64*, i64*, i64 }* %2, i32 0, i32 2, !dbg !1920 store i64* %51, i64** %52, align 8, !dbg !1920 store i64* %51, i64** %value_phi45_cache, align 8, !dbg !1920 %53 = load i64*, i64** %value_phi45_cache, align 8, !dbg !1920, !dereferenceable !1638, !invariant.group !1953 %54 = getelementptr inbounds i64, i64* %53, i64 %iv, !dbg !1920 store i64 %value_phi45, i64* %54, align 8, !dbg !1920, !invariant.group !1954 %55 = load i64*, i64** %value_phi43_cache, align 8, !dbg !1920 %56 = bitcast i64* %55 to i8*, !dbg !1920 %57 = and i64 %iv.next, 1, !dbg !1920 %58 = icmp ne i64 %57, 0, !dbg !1920 %59 = call i64 @llvm.ctpop.i64(i64 %iv.next), !dbg !1920 %60 = icmp ult i64 %59, 3, !dbg !1920 %61 = and i1 %60, %58, !dbg !1920 br i1 %61, label %grow.i1, label %__enzyme_exponentialallocationzero.exit2, !dbg !1920 grow.i1: ; preds = %__enzyme_exponentialallocationzero.exit %62 = call i64 @llvm.ctlz.i64(i64 %iv.next, i1 true), !dbg !1920 %63 = sub nuw nsw i64 64, %62, !dbg !1920 %64 = shl i64 8, %63, !dbg !1920 %65 = lshr i64 %64, 1, !dbg !1920 %66 = icmp eq i64 %iv.next, 1, !dbg !1920 %67 = select i1 %66, i64 0, i64 %65, !dbg !1920 %68 = call i8* @realloc(i8* %56, i64 %64) #32, !dbg !1920 %69 = sub i64 %64, %67, !dbg !1920 %70 = getelementptr inbounds i8, i8* %68, i64 %67, !dbg !1920 call void @llvm.memset.p0i8.i64(i8* %70, i8 0, i64 %69, i1 false), !dbg !1920 br label %__enzyme_exponentialallocationzero.exit2, !dbg !1920 __enzyme_exponentialallocationzero.exit2: ; preds = %__enzyme_exponentialallocationzero.exit, %grow.i1 %71 = phi i8* [ %68, %grow.i1 ], [ %56, %__enzyme_exponentialallocationzero.exit ], !dbg !1920 %72 = bitcast i8* %71 to i64*, !dbg !1920 %73 = getelementptr inbounds { {} addrspace(10)*, i64*, i64*, i64 }, { {} addrspace(10)*, i64*, i64*, i64 }* %2, i32 0, i32 1, !dbg !1920 store i64* %72, i64** %73, align 8, !dbg !1920 store i64* %72, i64** %value_phi43_cache, align 8, !dbg !1920 %74 = load i64*, i64** %value_phi43_cache, align 8, !dbg !1920, !dereferenceable !1638, !invariant.group !1955 %75 = getelementptr inbounds i64, i64* %74, i64 %iv, !dbg !1920 store i64 %value_phi43, i64* %75, align 8, !dbg !1920, !invariant.group !1956 %value_phi42.in = getelementptr inbounds double, double addrspace(13)* %arrayptr111236, i64 %.pn, !dbg !1920 %value_phi42 = load double, double addrspace(13)* %value_phi42.in, align 8, !dbg !1920, !tbaa !67, !alias.scope !1957, !noalias !1960 %76 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre234, i64 %iv, !dbg !1962 store double %value_phi42, double addrspace(13)* %76, align 8, !dbg !1962, !tbaa !67, !alias.scope !1964, !noalias !1967 %77 = add i64 %value_phi43, 1, !dbg !1971 %78 = icmp ugt i64 %value_phi43, 9223372036854775806, !dbg !1975 %79 = icmp sgt i64 %77, %13, !dbg !1975 %80 = or i1 %78, %79, !dbg !1978 %81 = icmp eq i64 %value_phi43, %13 %or.cond = or i1 %81, %80, !dbg !1978 br i1 %or.cond, label %L232, label %L248, !dbg !1978 L232: ; preds = %__enzyme_exponentialallocationzero.exit2 %82 = icmp ult i64 %value_phi45, 9223372036854775807, !dbg !1979 %83 = add i64 %value_phi45, 1, !dbg !1984 %84 = icmp sle i64 %83, %18, !dbg !1979 %85 = and i1 %82, %84, !dbg !1986 %86 = icmp ne i64 %value_phi45, %18, !dbg !1982 %value_phi89 = and i1 %86, %85, !dbg !1982 %cond.fr = freeze i1 %value_phi89 br i1 %cond.fr, label %L248, label %common.ret.loopexit, !dbg !1987 L248: ; preds = %L232, %__enzyme_exponentialallocationzero.exit2 %value_phi51287295 = phi i64 [ 1, %L232 ], [ %77, %__enzyme_exponentialallocationzero.exit2 ] %value_phi52289294 = phi i64 [ %83, %L232 ], [ %value_phi45, %__enzyme_exponentialallocationzero.exit2 ] %87 = add nsw i64 %value_phi51287295, -1, !dbg !1988 %88 = icmp uge i64 %87, %110, !dbg !1993 %89 = add i64 %value_phi52289294, -1, !dbg !1994 %90 = icmp uge i64 %89, %113, !dbg !1997 %91 = or i1 %88, %90, !dbg !1992 br i1 %91, label %L276, label %guard_pass133, !dbg !1992 L276: ; preds = %L248 store i64 %value_phi51287295, i64* %106, align 8, !dbg !1911, !tbaa !357, !alias.scope !359, !noalias !1917 store i64 %value_phi52289294, i64* %107, align 8, !dbg !1911, !tbaa !357, !alias.scope !359, !noalias !1917 %92 = addrspacecast [2 x i64]* %5 to [2 x i64] addrspace(11)*, !dbg !1992 call fastcc void @julia_throw_boundserror_1473({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) %1, [2 x i64] addrspace(11)* nocapture noundef nonnull readonly align 8 dereferenceable(16) %92) #33, !dbg !1992 unreachable, !dbg !1992 L343: ; preds = %L20 %current_task1230 = getelementptr inbounds {}**, {}*** %6, i64 -14 %current_task1 = bitcast {}*** %current_task1230 to {}** %box = call noalias nonnull dereferenceable(16) "enzyme_inactive" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 16, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151623086544 to {}*) to {} addrspace(10)*)) #34, !dbg !1936 %93 = bitcast {} addrspace(10)* %box to i8 addrspace(10)*, !dbg !1936 %newstruct.sroa.0.0..sroa_cast = bitcast {} addrspace(10)* %box to i64 addrspace(10)*, !dbg !1936 store i64 %13, i64 addrspace(10)* %newstruct.sroa.0.0..sroa_cast, align 8, !dbg !1936, !tbaa !103, !alias.scope !939, !noalias !1998 %newstruct.sroa.2.0..sroa_idx = getelementptr inbounds i8, i8 addrspace(10)* %93, i64 8, !dbg !1936 %newstruct.sroa.2.0..sroa_cast = bitcast i8 addrspace(10)* %newstruct.sroa.2.0..sroa_idx to i64 addrspace(10)*, !dbg !1936 store i64 %18, i64 addrspace(10)* %newstruct.sroa.2.0..sroa_cast, align 8, !dbg !1936, !tbaa !103, !alias.scope !939, !noalias !1998 %94 = call nonnull {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151620860624 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151487465984 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %0, {} addrspace(10)* nofree nonnull %box) #35, !dbg !1936 %95 = addrspacecast {} addrspace(10)* %94 to {} addrspace(12)*, !dbg !1936 call void @ijl_throw({} addrspace(12)* %95) #33, !dbg !1936 unreachable, !dbg !1936 guard_pass128: ; preds = %L61 %"getfield_addr105'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %"'1", i64 0, i32 0, !dbg !1999 %getfield_addr105 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 0, !dbg !1999 %"getfield106'ipl" = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %"getfield_addr105'ipg" unordered, align 8, !dbg !1999, !alias.scope !2004, !noalias !2005, !nonnull !23 %96 = getelementptr inbounds { {} addrspace(10)*, i64*, i64*, i64 }, { {} addrspace(10)*, i64*, i64*, i64 }* %2, i32 0, i32 0, !dbg !1999 store {} addrspace(10)* %"getfield106'ipl", {} addrspace(10)** %96, align 8, !dbg !1999 %getfield106 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr105 unordered, align 8, !dbg !1999, !alias.scope !2005, !noalias !2004, !nonnull !23 %97 = add i64 %unbox2, -1, !dbg !2006 %98 = addrspacecast {} addrspace(10)* %getfield106 to {} addrspace(10)* addrspace(11)*, !dbg !2006 %arraysize_ptr107 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %98, i64 3, !dbg !2006 %99 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr107 to i64 addrspace(11)*, !dbg !2006 %arraysize108 = load i64, i64 addrspace(11)* %99, align 8, !dbg !2006, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !2007, !noalias !2010 %100 = getelementptr inbounds { {} addrspace(10)*, i64*, i64*, i64 }, { {} addrspace(10)*, i64*, i64*, i64 }* %2, i32 0, i32 3, !dbg !2006 store i64 %arraysize108, i64* %100, align 8, !dbg !2006 %101 = add i64 %unbox4, -1, !dbg !2006 %102 = mul i64 %arraysize108, %101, !dbg !2006 %103 = add i64 %102, %97, !dbg !2006 %"'ipc2" = addrspacecast {} addrspace(10)* %"getfield106'ipl" to double addrspace(13)* addrspace(11)*, !dbg !2006 %104 = addrspacecast {} addrspace(10)* %getfield106 to double addrspace(13)* addrspace(11)*, !dbg !2006 %"arrayptr111236'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc2", align 8, !dbg !2006, !tbaa !28, !alias.scope !2012, !noalias !2013, !nonnull !23 %arrayptr111236 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %104, align 8, !dbg !2006, !tbaa !28, !invariant.load !23, !alias.scope !2014, !noalias !2010, !nonnull !23 %"'ipc" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !1962 %105 = addrspacecast {} addrspace(10)* %0 to double addrspace(13)* addrspace(11)*, !dbg !1962 %"arrayptr.pre234'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc", align 16, !dbg !1962, !tbaa !28, !alias.scope !2015, !noalias !2016 %arrayptr.pre234 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %105, align 16, !dbg !1962, !tbaa !28, !invariant.load !23, !alias.scope !2017, !noalias !1929 %106 = getelementptr inbounds [2 x i64], [2 x i64]* %5, i64 0, i64 0 %107 = getelementptr inbounds [2 x i64], [2 x i64]* %5, i64 0, i64 1 %108 = add i64 %unbox, 1 %109 = sub i64 %108, %unbox2 %110 = call i64 @llvm.smax.i64(i64 %109, i64 noundef 0) #31, !dbg !1920 %111 = add i64 %unbox3, 1 %112 = sub i64 %111, %unbox4 %113 = call i64 @llvm.smax.i64(i64 %112, i64 noundef 0) #31, !dbg !1920 %.promoted = load i64, i64* %106, align 8, !tbaa !357, !alias.scope !2018, !noalias !2021 %.promoted313 = load i64, i64* %107, align 8, !tbaa !357, !alias.scope !2018, !noalias !2021 store i64* null, i64** %value_phi43_cache, align 8, !dbg !2023 store i64* null, i64** %value_phi45_cache, align 8, !dbg !2023 br label %L194, !dbg !2023 guard_pass133: ; preds = %L248 %114 = add i64 %89, %101, !dbg !2024 %115 = mul i64 %114, %arraysize108, !dbg !2024 %116 = add i64 %87, %97, !dbg !2024 %117 = add i64 %116, %115, !dbg !2024 br label %L194, !dbg !2023 } after simplification : ; Function Attrs: mustprogress willreturn define internal fastcc void @preprocess_julia_unalias_1501({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }) align 8 dereferenceable(56) %0, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %2, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %3) unnamed_addr #31 !dbg !2026 { top: %4 = call {}*** @julia.get_pgcstack() %5 = call {}*** @julia.get_pgcstack() %6 = bitcast {}*** %5 to {}** %7 = getelementptr inbounds {}*, {}** %6, i64 -14 %8 = getelementptr inbounds {}*, {}** %7, i64 16 %9 = bitcast {}** %8 to i8** %10 = load i8*, i8** %9, align 8 %11 = call noalias nonnull dereferenceable(56) dereferenceable_or_null(56) {} addrspace(10)* @julia.gc_alloc_obj({}** %7, i64 56, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146543628176 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1638 call void @zeroType.8({} addrspace(10)* %11, i8 0, i64 56), !enzyme_zerostack !23 %12 = bitcast {} addrspace(10)* %11 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %13 = bitcast {}*** %4 to {}** %14 = getelementptr inbounds {}*, {}** %13, i64 -14 %15 = getelementptr inbounds {}*, {}** %14, i64 16 %16 = bitcast {}** %15 to i8** %17 = load i8*, i8** %16, align 8 %18 = call noalias nonnull dereferenceable(8) dereferenceable_or_null(8) {} addrspace(10)* @julia.gc_alloc_obj({}** %14, i64 8, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146547762384 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1638 call void @zeroType.9({} addrspace(10)* %18, i8 0, i64 8), !enzyme_zerostack !23 %19 = bitcast {} addrspace(10)* %18 to [1 x {} addrspace(10)*] addrspace(10)*, !enzyme_caststack !23 %20 = call {}*** @julia.get_pgcstack() #33 %ptls_field5 = getelementptr inbounds {}**, {}*** %20, i64 2 %21 = bitcast {}*** %ptls_field5 to i64*** %ptls_load67 = load i64**, i64*** %21, align 8, !tbaa !24 %22 = getelementptr inbounds i64*, i64** %ptls_load67, i64 2 %safepoint = load i64*, i64** %22, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #33, !dbg !2027 fence syncscope("singlethread") seq_cst %23 = addrspacecast {} addrspace(10)* %2 to {} addrspace(11)*, !dbg !2028 %24 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %23) #34, !dbg !2028 %25 = bitcast {}* %24 to i8**, !dbg !2028 %arrayptr = load i8*, i8** %25, align 8, !dbg !2028, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45, !nonnull !23 %getfield_addr = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %3, i64 0, i32 0, !dbg !2032 %getfield = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr unordered, align 8, !dbg !2032, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45, !nonnull !23, !dereferenceable !129, !align !130 %26 = addrspacecast {} addrspace(10)* %getfield to {} addrspace(11)*, !dbg !2034 %27 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %26) #34, !dbg !2034 %28 = bitcast {}* %27 to i8**, !dbg !2034 %arrayptr3 = load i8*, i8** %28, align 8, !dbg !2034, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45, !nonnull !23 %.not = icmp eq i8* %arrayptr, %arrayptr3, !dbg !2037 br i1 %.not, label %L10, label %L12, !dbg !2027 common.ret: ; preds = %L12, %L10 ret void, !dbg !2027 L10: ; preds = %top %29 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %12 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2027 %30 = addrspacecast [1 x {} addrspace(10)*] addrspace(10)* %19 to [1 x {} addrspace(10)*]*, !dbg !2027 call fastcc void @julia_unaliascopy_1490({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }) align 8 dereferenceable(56) %29, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzymejl_returnRoots" %30, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) %3) #33, !dbg !2027 %31 = getelementptr { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %12, i64 0, i32 0, !dbg !2027 %32 = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %31, align 8, !dbg !2027 %33 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2027 store {} addrspace(10)* %32, {} addrspace(10)** %33, align 8, !dbg !2027, !noalias !2040 %34 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0 to i8*, !dbg !2027 %35 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %12 to i8 addrspace(10)*, !dbg !2027 call void @llvm.memcpy.p0i8.p10i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(56) %34, i8 addrspace(10)* noundef nonnull align 8 dereferenceable(56) %35, i64 noundef 56, i1 noundef false) #33, !dbg !2027, !noalias !2040 br label %common.ret L12: ; preds = %top %36 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2027 store {} addrspace(10)* %getfield, {} addrspace(10)** %36, align 8, !dbg !2027, !noalias !2040 %37 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0 to i8*, !dbg !2027 %38 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %3 to i8 addrspace(11)*, !dbg !2027 call void @llvm.memcpy.p0i8.p11i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(56) %37, i8 addrspace(11)* nofree noundef nonnull align 8 dereferenceable(56) %38, i64 noundef 56, i1 noundef false) #33, !dbg !2027, !noalias !2040 br label %common.ret } ; Function Attrs: mustprogress willreturn define internal fastcc { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } @augmented_julia_copyto__1493({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'1") unnamed_addr #27 !dbg !2142 { top: %2 = alloca { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, align 8 %3 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }* %2, i64 0, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %3, align 8 %4 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }* %2, i64 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %4, align 8 %5 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }* %2, i64 0, i32 3 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %5, align 8 %6 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }* %2, i64 0, i32 2, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %6, align 8 %7 = alloca [1 x {} addrspace(10)*], i64 1, align 8 %8 = bitcast [1 x {} addrspace(10)*]* %7 to {}* %9 = bitcast [1 x {} addrspace(10)*]* %7 to {}* %10 = call {}*** @julia.get_pgcstack() %11 = call {}*** @julia.get_pgcstack() %12 = bitcast {}*** %11 to {}** %13 = getelementptr inbounds {}*, {}** %12, i64 -14 %"'mi" = call noalias nonnull dereferenceable(56) dereferenceable_or_null(56) {} addrspace(10)* @julia.gc_alloc_obj({}** %13, i64 56, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146543628176 to {}*) to {} addrspace(10)*)) %14 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }* %2, i32 0, i32 0 store {} addrspace(10)* %"'mi", {} addrspace(10)** %14, align 8 %15 = bitcast {} addrspace(10)* %"'mi" to i8 addrspace(10)* call void @llvm.memset.p10i8.i64(i8 addrspace(10)* nonnull dereferenceable(56) dereferenceable_or_null(56) %15, i8 0, i64 56, i1 false) %16 = call noalias nonnull dereferenceable(56) dereferenceable_or_null(56) {} addrspace(10)* @julia.gc_alloc_obj({}** %13, i64 56, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146543628176 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1638 %17 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }* %2, i32 0, i32 1 store {} addrspace(10)* %16, {} addrspace(10)** %17, align 8 %18 = bitcast {} addrspace(10)* %16 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* br label %loop.i loop.i: ; preds = %loop.i, %top %19 = phi i64 [ 0, %top ], [ %20, %loop.i ] %20 = add i64 %19, 1 %21 = getelementptr { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %18, i64 %19, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %21, align 8 %22 = icmp eq i64 %20, 1 br i1 %22, label %zeroType.exit, label %loop.i zeroType.exit: ; preds = %loop.i %23 = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* br label %loop.i1 loop.i1: ; preds = %loop.i1, %zeroType.exit %24 = phi i64 [ 0, %zeroType.exit ], [ %25, %loop.i1 ] %25 = add i64 %24, 1 %26 = getelementptr { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %23, i64 %24, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %26, align 8 %27 = icmp eq i64 %25, 1 br i1 %27, label %zeroType.exit2, label %loop.i1 zeroType.exit2: ; preds = %loop.i1 %"'ipc" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %28 = bitcast {} addrspace(10)* %16 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %29 = bitcast {}*** %10 to {}** %30 = getelementptr inbounds {}*, {}** %29, i64 -14 %31 = addrspacecast {}* %8 to {} addrspace(10)* %32 = bitcast {}* %8 to [1 x {} addrspace(10)*]* %33 = call {}*** @julia.get_pgcstack() #33 %ptls_field9 = getelementptr inbounds {}**, {}*** %33, i64 2 %34 = bitcast {}*** %ptls_field9 to i64*** %ptls_load1011 = load i64**, i64*** %34, align 8, !tbaa !24, !alias.scope !2143, !noalias !2146 %35 = getelementptr inbounds i64*, i64** %ptls_load1011, i64 2 %safepoint = load i64*, i64** %35, align 8, !tbaa !28, !invariant.load !23, !alias.scope !2148, !noalias !2151 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #33, !dbg !2153 fence syncscope("singlethread") seq_cst %36 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !2154 %37 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !2164 %unbox = load i64, i64 addrspace(11)* %37, align 8, !dbg !2166, !tbaa !28, !invariant.load !23, !alias.scope !2168, !noalias !2171 %unbox2 = load i64, i64 addrspace(11)* %36, align 8, !dbg !2166, !tbaa !28, !invariant.load !23, !alias.scope !2168, !noalias !2171 %38 = add i64 %unbox, 1, !dbg !2166 %39 = sub i64 %38, %unbox2, !dbg !2173 %40 = call i64 @llvm.smax.i64(i64 %39, i64 noundef 0) #33, !dbg !2174 %41 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 0, !dbg !2179 %42 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 1, !dbg !2184 %unbox3 = load i64, i64 addrspace(11)* %42, align 8, !dbg !2186, !tbaa !28, !invariant.load !23, !alias.scope !2168, !noalias !2171 %unbox4 = load i64, i64 addrspace(11)* %41, align 8, !dbg !2186, !tbaa !28, !invariant.load !23, !alias.scope !2168, !noalias !2171 %43 = add i64 %unbox3, 1, !dbg !2186 %44 = sub i64 %43, %unbox4, !dbg !2188 %45 = call i64 @llvm.smax.i64(i64 %44, i64 noundef 0) #33, !dbg !2189 %46 = mul i64 %45, %40, !dbg !2194 %.not = icmp eq i64 %46, 0, !dbg !2196 %47 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }* %2, i32 0, i32 4, !dbg !2163 store i1 %.not, i1* %47, align 1, !dbg !2163 br i1 %.not, label %common.ret, label %L20, !dbg !2163 common.ret: ; preds = %L20, %zeroType.exit2 %48 = load { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }* %2, align 8, !dbg !2197 ret { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %48, !dbg !2197 L20: ; preds = %zeroType.exit2 %"'ipc9" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2198 %49 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %28 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2198 %_augmented10 = call fastcc { {} addrspace(10)* } @fakeaugmented_julia_unalias_1501({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" %49, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc9", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" %32, {} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1"), !dbg !2198 %subcache = extractvalue { {} addrspace(10)* } %_augmented10, 0, !dbg !2198 %50 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }* %2, i32 0, i32 3, !dbg !2199 store {} addrspace(10)* %subcache, {} addrspace(10)** %50, align 8, !dbg !2199 %"'ipc8" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2199 %51 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %28 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2199 %_augmented = call fastcc { {} addrspace(10)*, i64*, i64*, i64 } @augmented_julia_copyto_unaliased__1497({} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %51, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc8"), !dbg !2199 %52 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }* %2, i32 0, i32 2 store { {} addrspace(10)*, i64*, i64*, i64 } %_augmented, { {} addrspace(10)*, i64*, i64*, i64 }* %52, align 8 br label %common.ret } ; Function Attrs: mustprogress willreturn define internal fastcc { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } @augmented_julia_unaliascopy_1490({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(56) "enzyme_sret" %0, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'", [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %2, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'1") unnamed_addr #26 !dbg !2148 { top: %3 = alloca { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, align 8 %4 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, i64 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %4, align 8 %5 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, i64 0, i32 2 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %5, align 8 %6 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, i64 0, i32 0, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %6, align 8 %7 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, i64 0, i32 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %7, align 8 %8 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, i64 0, i32 0, i32 3 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %8, align 8 %9 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, i64 0, i32 0, i32 2, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %9, align 8 %10 = call {}*** @julia.get_pgcstack() #33 %ptls_field18 = getelementptr inbounds {}**, {}*** %10, i64 2 %11 = bitcast {}*** %ptls_field18 to i64*** %ptls_load1920 = load i64**, i64*** %11, align 8, !tbaa !24, !alias.scope !2149, !noalias !2152 %12 = getelementptr inbounds i64*, i64** %ptls_load1920, i64 2 %safepoint = load i64*, i64** %12, align 8, !tbaa !28, !invariant.load !23, !alias.scope !2154, !noalias !2157 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #33, !dbg !2159 fence syncscope("singlethread") seq_cst %13 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 0, !dbg !2160 %14 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 1, !dbg !2165 %unbox = load i64, i64 addrspace(11)* %14, align 8, !dbg !2167, !tbaa !28, !invariant.load !23, !alias.scope !2169, !noalias !2172 %unbox2 = load i64, i64 addrspace(11)* %13, align 8, !dbg !2167, !tbaa !28, !invariant.load !23, !alias.scope !2169, !noalias !2172 %15 = sub i64 %unbox, %unbox2, !dbg !2167 %16 = add i64 %15, 1, !dbg !2174 %17 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, i32 0, i32 3, !dbg !2175 store i64 %16, i64* %17, align 8, !dbg !2175 %18 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 1, i64 0, !dbg !2175 %19 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 1, i64 1, !dbg !2179 %unbox3 = load i64, i64 addrspace(11)* %19, align 8, !dbg !2181, !tbaa !28, !invariant.load !23, !alias.scope !2169, !noalias !2172 %unbox4 = load i64, i64 addrspace(11)* %18, align 8, !dbg !2181, !tbaa !28, !invariant.load !23, !alias.scope !2169, !noalias !2172 %20 = sub i64 %unbox3, %unbox4, !dbg !2181 %21 = add i64 %20, 1, !dbg !2183 %22 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, i32 0, i32 4, !dbg !2184 store i64 %21, i64* %22, align 8, !dbg !2184 %23 = call {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151617005072 to {}*) to {} addrspace(10)*), i64 %16, i64 %21), !dbg !2184 %24 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, i32 0, i32 1, !dbg !2184 store {} addrspace(10)* %23, {} addrspace(10)** %24, align 8, !dbg !2184 %25 = bitcast {} addrspace(10)* %23 to <{ i8 addrspace(13)*, i64, i16, i16, i32, i64 }> addrspace(10)*, !dbg !2184 %26 = getelementptr inbounds <{ i8 addrspace(13)*, i64, i16, i16, i32, i64 }>, <{ i8 addrspace(13)*, i64, i16, i16, i32, i64 }> addrspace(10)* %25, i32 0, i32 1, !dbg !2184 %27 = load i64, i64 addrspace(10)* %26, align 8, !dbg !2184 %28 = mul i64 %27, 8, !dbg !2184 %29 = bitcast {} addrspace(10)* %23 to i8 addrspace(13)* addrspace(10)*, !dbg !2184 %30 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(10)* %29, align 8, !dbg !2184 call void @llvm.memset.p13i8.i64(i8 addrspace(13)* align 8 %30, i8 0, i64 %28, i1 false), !dbg !2184 %31 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151617005072 to {}*) to {} addrspace(10)*), i64 %16, i64 %21) #34, !dbg !2184 %32 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, i32 0, i32 2, !dbg !2187 store {} addrspace(10)* %31, {} addrspace(10)** %32, align 8, !dbg !2187 %_augmented = call fastcc { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } @augmented_julia_copyto__1493({} addrspace(10)* align 16 %31, {} addrspace(10)* align 16 %23, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %2, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1"), !dbg !2187 %33 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, i32 0, i32 0, !dbg !2188 store { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %_augmented, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }* %33, align 8, !dbg !2188 %34 = call i64 @llvm.smax.i64(i64 %16, i64 noundef 0) #33, !dbg !2188 %.not = icmp ugt i64 %15, 9223372036854775806, !dbg !2196 %. = select i1 %.not, i64 0, i64 %34, !dbg !2203 %35 = call i64 @llvm.smax.i64(i64 %21, i64 noundef 0) #33, !dbg !2188 %.not21 = icmp ugt i64 %20, 9223372036854775806, !dbg !2196 %value_phi10 = select i1 %.not21, i64 0, i64 %35, !dbg !2198 %36 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2204 store {} addrspace(10)* %31, {} addrspace(10)** %36, align 8, !dbg !2204, !noalias !2205 %".repack'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 0, !dbg !2204 %.repack = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 0, !dbg !2204 store {} addrspace(10)* %23, {} addrspace(10)** %".repack'ipg", align 8, !dbg !2204, !alias.scope !2208, !noalias !2211 store {} addrspace(10)* %31, {} addrspace(10)** %.repack, align 8, !dbg !2204, !alias.scope !2215, !noalias !2216 %".repack22.repack.repack'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 1, i64 0, i64 0, !dbg !2204 %.repack22.repack.repack = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 0, i64 0, !dbg !2204 store i64 1, i64* %".repack22.repack.repack'ipg", align 8, !dbg !2204, !alias.scope !2208, !noalias !2211 store i64 1, i64* %.repack22.repack.repack, align 8, !dbg !2204, !alias.scope !2215, !noalias !2216 %".repack22.repack.repack30'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 1, i64 0, i64 1, !dbg !2204 %.repack22.repack.repack30 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 0, i64 1, !dbg !2204 store i64 %., i64* %".repack22.repack.repack30'ipg", align 8, !dbg !2204, !alias.scope !2208, !noalias !2211 store i64 %., i64* %.repack22.repack.repack30, align 8, !dbg !2204, !alias.scope !2215, !noalias !2216 %".repack22.repack28.repack'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 1, i64 1, i64 0, !dbg !2204 %.repack22.repack28.repack = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 1, i64 0, !dbg !2204 store i64 1, i64* %".repack22.repack28.repack'ipg", align 8, !dbg !2204, !alias.scope !2208, !noalias !2211 store i64 1, i64* %.repack22.repack28.repack, align 8, !dbg !2204, !alias.scope !2215, !noalias !2216 %".repack22.repack28.repack32'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 1, i64 1, i64 1, !dbg !2204 %.repack22.repack28.repack32 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 1, i64 1, !dbg !2204 store i64 %value_phi10, i64* %".repack22.repack28.repack32'ipg", align 8, !dbg !2204, !alias.scope !2208, !noalias !2211 store i64 %value_phi10, i64* %.repack22.repack28.repack32, align 8, !dbg !2204, !alias.scope !2215, !noalias !2216 %".repack24'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 2, !dbg !2204 %.repack24 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 2, !dbg !2204 %"'ipc" = bitcast i64* %".repack24'ipg" to i8*, !dbg !2204 %37 = bitcast i64* %.repack24 to i8*, !dbg !2204 call void @llvm.memset.p0i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(16) %37, i8 noundef 0, i64 noundef 16, i1 noundef false) #33, !dbg !2204 call void @llvm.memset.p0i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(16) %"'ipc", i8 noundef 0, i64 noundef 16, i1 noundef false) #33, !dbg !2204 %38 = load { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }* %3, align 8, !dbg !2204 ret { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %38, !dbg !2204 } ; Function Attrs: mustprogress willreturn define internal fastcc {} addrspace(10)* @augmented_julia_unalias_1501({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(56) "enzyme_sret" %0, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'", [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %2, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'1", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %3, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'2") unnamed_addr #31 !dbg !2170 { top: %4 = call {}*** @julia.get_pgcstack() %5 = alloca {} addrspace(10)*, align 8 %6 = bitcast {}*** %4 to {}** %7 = getelementptr inbounds {}*, {}** %6, i64 -14 %8 = getelementptr inbounds {}*, {}** %7, i64 16 %9 = bitcast {}** %8 to i8** %10 = load i8*, i8** %9, align 8 %11 = call noalias nonnull dereferenceable(112) dereferenceable_or_null(112) {} addrspace(10)* @julia.gc_alloc_obj({}** %7, i64 112, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146497335504 to {}*) to {} addrspace(10)*)) %12 = bitcast {} addrspace(10)* %11 to { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* br label %loop.i loop.i: ; preds = %loop.i, %top %13 = phi i64 [ 0, %top ], [ %14, %loop.i ] %14 = add i64 %13, 1 %15 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %15, align 8 %16 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 1, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %16, align 8 %17 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 1, i32 2 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %17, align 8 %18 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 1, i32 0, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %18, align 8 %19 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 1, i32 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %19, align 8 %20 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 1, i32 0, i32 3 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %20, align 8 %21 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 1, i32 0, i32 2, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %21, align 8 %22 = icmp eq i64 %14, 1 br i1 %22, label %zeroType.12.exit, label %loop.i zeroType.12.exit: ; preds = %loop.i %tapemem = bitcast {} addrspace(10)* %11 to { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* store {} addrspace(10)* %11, {} addrspace(10)** %5, align 8 %23 = alloca [1 x {} addrspace(10)*], i64 1, align 8 %24 = bitcast [1 x {} addrspace(10)*]* %23 to {}* %25 = bitcast [1 x {} addrspace(10)*]* %23 to {}* %26 = alloca { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, i64 1, align 8 %27 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %26 to {}* %28 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %26 to {}* %29 = call {}*** @julia.get_pgcstack() %30 = call {}*** @julia.get_pgcstack() %31 = bitcast {}*** %30 to {}** %32 = getelementptr inbounds {}*, {}** %31, i64 -14 %"'mi" = call noalias nonnull dereferenceable(56) dereferenceable_or_null(56) {} addrspace(10)* @julia.gc_alloc_obj({}** %32, i64 56, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146543628176 to {}*) to {} addrspace(10)*)) %33 = getelementptr inbounds { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %tapemem, i32 0, i32 0 store {} addrspace(10)* %"'mi", {} addrspace(10)* addrspace(10)* %33, align 8 call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %11, {} addrspace(10)* %"'mi") %34 = bitcast {} addrspace(10)* %"'mi" to i8 addrspace(10)* call void @llvm.memset.p10i8.i64(i8 addrspace(10)* nonnull dereferenceable(56) dereferenceable_or_null(56) %34, i8 0, i64 56, i1 false) %35 = addrspacecast {}* %27 to {} addrspace(10)* %36 = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* br label %loop.i1 loop.i1: ; preds = %loop.i1, %zeroType.12.exit %37 = phi i64 [ 0, %zeroType.12.exit ], [ %38, %loop.i1 ] %38 = add i64 %37, 1 %39 = getelementptr { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %36, i64 %37, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %39, align 8 %40 = icmp eq i64 %38, 1 br i1 %40, label %zeroType.8.exit, label %loop.i1 zeroType.8.exit: ; preds = %loop.i1 %"'ipc11" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %41 = bitcast {}* %27 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %42 = bitcast {}*** %29 to {}** %43 = getelementptr inbounds {}*, {}** %42, i64 -14 %44 = addrspacecast {}* %24 to {} addrspace(10)* %45 = bitcast {}* %24 to [1 x {} addrspace(10)*]* %46 = call {}*** @julia.get_pgcstack() #33 %ptls_field5 = getelementptr inbounds {}**, {}*** %46, i64 2 %47 = bitcast {}*** %ptls_field5 to i64*** %ptls_load67 = load i64**, i64*** %47, align 8, !tbaa !24, !alias.scope !2171, !noalias !2174 %48 = getelementptr inbounds i64*, i64** %ptls_load67, i64 2 %safepoint = load i64*, i64** %48, align 8, !tbaa !28, !invariant.load !23, !alias.scope !2176, !noalias !2179 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #33, !dbg !2181 fence syncscope("singlethread") seq_cst %49 = addrspacecast {} addrspace(10)* %2 to {} addrspace(11)*, !dbg !2182 %50 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %49) #34, !dbg !2182 %51 = bitcast {}* %50 to i8**, !dbg !2182 %arrayptr = load i8*, i8** %51, align 8, !dbg !2182, !tbaa !28, !invariant.load !23, !alias.scope !2186, !noalias !2189, !nonnull !23 %getfield_addr = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %3, i64 0, i32 0, !dbg !2191 %getfield = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr unordered, align 8, !dbg !2191, !tbaa !28, !invariant.load !23, !alias.scope !2193, !noalias !2196, !nonnull !23, !dereferenceable !129, !align !130 %52 = addrspacecast {} addrspace(10)* %getfield to {} addrspace(11)*, !dbg !2198 %53 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %52) #34, !dbg !2198 %54 = bitcast {}* %53 to i8**, !dbg !2198 %arrayptr3 = load i8*, i8** %54, align 8, !dbg !2198, !tbaa !28, !invariant.load !23, !alias.scope !2201, !noalias !2204, !nonnull !23 %.not = icmp eq i8* %arrayptr, %arrayptr3, !dbg !2206 %55 = getelementptr inbounds { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %tapemem, i32 0, i32 2, !dbg !2181 store i1 %.not, i1 addrspace(10)* %55, align 1, !dbg !2181 br i1 %.not, label %L10, label %L12, !dbg !2181 common.ret: ; preds = %L12, %L10 %56 = load {} addrspace(10)*, {} addrspace(10)** %5, align 8, !dbg !2181 ret {} addrspace(10)* %56, !dbg !2181 L10: ; preds = %zeroType.8.exit %"'ipc13" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc11" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2181 %_augmented = call fastcc { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } @augmented_julia_unaliascopy_1490({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" %41, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc13", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" %45, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %3, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'2"), !dbg !2181 %57 = getelementptr inbounds { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %tapemem, i32 0, i32 1, !dbg !2181 store { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %_augmented, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } addrspace(10)* %57, align 8, !dbg !2181 %58 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %_augmented, 0, !dbg !2181 %59 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %_augmented, 1, !dbg !2181 %60 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %_augmented, 2, !dbg !2181 %61 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %58, 0, !dbg !2181 %62 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %58, 1, !dbg !2181 %63 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %58, 2, !dbg !2181 %64 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %58, 3, !dbg !2181 %65 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %63, 0, !dbg !2181 call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %11, {} addrspace(10)* %59, {} addrspace(10)* %60, {} addrspace(10)* %61, {} addrspace(10)* %62, {} addrspace(10)* %64, {} addrspace(10)* %65), !dbg !2181 %66 = getelementptr { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %41, i64 0, i32 0, !dbg !2181 %67 = load {} addrspace(10)*, {} addrspace(10)** %66, align 8, !dbg !2181, !alias.scope !2209, !noalias !2212 %68 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2181 store {} addrspace(10)* %67, {} addrspace(10)** %68, align 8, !dbg !2181, !noalias !2214 %"'ipc" = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'" to i8*, !dbg !2181 %69 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0 to i8*, !dbg !2181 %"'ipc12" = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc11" to i8 addrspace(10)*, !dbg !2181 %70 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %41 to i8*, !dbg !2181 call void @llvm.memcpy.p0i8.p10i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(56) %"'ipc", i8 addrspace(10)* noundef nonnull align 8 dereferenceable(56) %"'ipc12", i64 noundef 56, i1 noundef false) #33, !dbg !2181 call void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(56) %69, i8* noundef nonnull align 8 dereferenceable(56) %70, i64 noundef 56, i1 noundef false) #33, !dbg !2181, !noalias !2214 br label %common.ret L12: ; preds = %zeroType.8.exit %71 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2181 store {} addrspace(10)* %getfield, {} addrspace(10)** %71, align 8, !dbg !2181, !noalias !2214 %"'ipc14" = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'" to i8*, !dbg !2181 %72 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0 to i8*, !dbg !2181 %"'ipc15" = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %"'2" to i8 addrspace(11)*, !dbg !2181 %73 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %3 to i8 addrspace(11)*, !dbg !2181 call void @llvm.memcpy.p0i8.p11i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(56) %"'ipc14", i8 addrspace(11)* nofree noundef nonnull align 8 dereferenceable(56) %"'ipc15", i64 noundef 56, i1 noundef false) #33, !dbg !2181 call void @llvm.memcpy.p0i8.p11i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(56) %72, i8 addrspace(11)* nofree noundef nonnull align 8 dereferenceable(56) %73, i64 noundef 56, i1 noundef false) #33, !dbg !2181, !noalias !2214 br label %common.ret } ; Function Attrs: mustprogress willreturn define internal fastcc { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } @augmented_julia_copyto__1493.13({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'1") unnamed_addr #27 !dbg !2159 { top: %2 = alloca { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, align 8 %3 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }* %2, i64 0, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %3, align 8 %4 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }* %2, i64 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %4, align 8 %5 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }* %2, i64 0, i32 3 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %5, align 8 %6 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }* %2, i64 0, i32 2, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %6, align 8 %7 = alloca [1 x {} addrspace(10)*], i64 1, align 8 %8 = bitcast [1 x {} addrspace(10)*]* %7 to {}* %9 = bitcast [1 x {} addrspace(10)*]* %7 to {}* %10 = call {}*** @julia.get_pgcstack() %11 = call {}*** @julia.get_pgcstack() %12 = bitcast {}*** %11 to {}** %13 = getelementptr inbounds {}*, {}** %12, i64 -14 %"'mi" = call noalias nonnull dereferenceable(56) dereferenceable_or_null(56) {} addrspace(10)* @julia.gc_alloc_obj({}** %13, i64 56, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146543628176 to {}*) to {} addrspace(10)*)) %14 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }* %2, i32 0, i32 0 store {} addrspace(10)* %"'mi", {} addrspace(10)** %14, align 8 %15 = bitcast {} addrspace(10)* %"'mi" to i8 addrspace(10)* call void @llvm.memset.p10i8.i64(i8 addrspace(10)* nonnull dereferenceable(56) dereferenceable_or_null(56) %15, i8 0, i64 56, i1 false) %16 = call noalias nonnull dereferenceable(56) dereferenceable_or_null(56) {} addrspace(10)* @julia.gc_alloc_obj({}** %13, i64 56, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146543628176 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1638 %17 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }* %2, i32 0, i32 1 store {} addrspace(10)* %16, {} addrspace(10)** %17, align 8 %18 = bitcast {} addrspace(10)* %16 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* br label %loop.i loop.i: ; preds = %loop.i, %top %19 = phi i64 [ 0, %top ], [ %20, %loop.i ] %20 = add i64 %19, 1 %21 = getelementptr { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %18, i64 %19, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %21, align 8 %22 = icmp eq i64 %20, 1 br i1 %22, label %zeroType.exit, label %loop.i zeroType.exit: ; preds = %loop.i %23 = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* br label %loop.i1 loop.i1: ; preds = %loop.i1, %zeroType.exit %24 = phi i64 [ 0, %zeroType.exit ], [ %25, %loop.i1 ] %25 = add i64 %24, 1 %26 = getelementptr { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %23, i64 %24, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %26, align 8 %27 = icmp eq i64 %25, 1 br i1 %27, label %zeroType.exit2, label %loop.i1 zeroType.exit2: ; preds = %loop.i1 %"'ipc" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %28 = bitcast {} addrspace(10)* %16 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %29 = bitcast {}*** %10 to {}** %30 = getelementptr inbounds {}*, {}** %29, i64 -14 %31 = addrspacecast {}* %8 to {} addrspace(10)* %32 = bitcast {}* %8 to [1 x {} addrspace(10)*]* %33 = call {}*** @julia.get_pgcstack() #33 %ptls_field9 = getelementptr inbounds {}**, {}*** %33, i64 2 %34 = bitcast {}*** %ptls_field9 to i64*** %ptls_load1011 = load i64**, i64*** %34, align 8, !tbaa !24, !alias.scope !2160, !noalias !2163 %35 = getelementptr inbounds i64*, i64** %ptls_load1011, i64 2 %safepoint = load i64*, i64** %35, align 8, !tbaa !28, !invariant.load !23, !alias.scope !2165, !noalias !2168 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #33, !dbg !2170 fence syncscope("singlethread") seq_cst %36 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !2171 %37 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !2181 %unbox = load i64, i64 addrspace(11)* %37, align 8, !dbg !2183, !tbaa !28, !invariant.load !23, !alias.scope !2185, !noalias !2188 %unbox2 = load i64, i64 addrspace(11)* %36, align 8, !dbg !2183, !tbaa !28, !invariant.load !23, !alias.scope !2185, !noalias !2188 %38 = add i64 %unbox, 1, !dbg !2183 %39 = sub i64 %38, %unbox2, !dbg !2190 %40 = call i64 @llvm.smax.i64(i64 %39, i64 noundef 0) #33, !dbg !2191 %41 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 0, !dbg !2196 %42 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 1, !dbg !2201 %unbox3 = load i64, i64 addrspace(11)* %42, align 8, !dbg !2203, !tbaa !28, !invariant.load !23, !alias.scope !2185, !noalias !2188 %unbox4 = load i64, i64 addrspace(11)* %41, align 8, !dbg !2203, !tbaa !28, !invariant.load !23, !alias.scope !2185, !noalias !2188 %43 = add i64 %unbox3, 1, !dbg !2203 %44 = sub i64 %43, %unbox4, !dbg !2205 %45 = call i64 @llvm.smax.i64(i64 %44, i64 noundef 0) #33, !dbg !2206 %46 = mul i64 %45, %40, !dbg !2211 %.not = icmp eq i64 %46, 0, !dbg !2213 br i1 %.not, label %common.ret, label %L20, !dbg !2180 common.ret: ; preds = %L20, %zeroType.exit2 %47 = load { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }* %2, align 8, !dbg !2214 ret { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } %47, !dbg !2214 L20: ; preds = %zeroType.exit2 %"'ipc9" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2215 %48 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %28 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2215 %_augmented10 = call fastcc {} addrspace(10)* @augmented_julia_unalias_1501({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" %48, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc9", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" %32, {} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1"), !dbg !2215 %49 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }* %2, i32 0, i32 3, !dbg !2216 store {} addrspace(10)* %_augmented10, {} addrspace(10)** %49, align 8, !dbg !2216 %"'ipc8" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2216 %50 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %28 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2216 %_augmented = call fastcc { {} addrspace(10)*, i64*, i64*, i64 } @augmented_julia_copyto_unaliased__1497({} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %50, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc8"), !dbg !2216 %51 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }* %2, i32 0, i32 2 store { {} addrspace(10)*, i64*, i64*, i64 } %_augmented, { {} addrspace(10)*, i64*, i64*, i64 }* %51, align 8 br label %common.ret } ; Function Attrs: mustprogress willreturn define internal fastcc { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* } @augmented_julia_unaliascopy_1490.14({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(56) "enzyme_sret" %0, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'", [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %2, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'1") unnamed_addr #26 !dbg !2165 { top: %3 = alloca { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, align 8 %4 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %3, i64 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %4, align 8 %5 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %3, i64 0, i32 2 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %5, align 8 %6 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %3, i64 0, i32 0, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %6, align 8 %7 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %3, i64 0, i32 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %7, align 8 %8 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %3, i64 0, i32 0, i32 3 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %8, align 8 %9 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %3, i64 0, i32 0, i32 2, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %9, align 8 %10 = call {}*** @julia.get_pgcstack() #33 %ptls_field18 = getelementptr inbounds {}**, {}*** %10, i64 2 %11 = bitcast {}*** %ptls_field18 to i64*** %ptls_load1920 = load i64**, i64*** %11, align 8, !tbaa !24, !alias.scope !2166, !noalias !2169 %12 = getelementptr inbounds i64*, i64** %ptls_load1920, i64 2 %safepoint = load i64*, i64** %12, align 8, !tbaa !28, !invariant.load !23, !alias.scope !2171, !noalias !2174 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #33, !dbg !2176 fence syncscope("singlethread") seq_cst %13 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 0, !dbg !2177 %14 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 1, !dbg !2182 %unbox = load i64, i64 addrspace(11)* %14, align 8, !dbg !2184, !tbaa !28, !invariant.load !23, !alias.scope !2186, !noalias !2189 %unbox2 = load i64, i64 addrspace(11)* %13, align 8, !dbg !2184, !tbaa !28, !invariant.load !23, !alias.scope !2186, !noalias !2189 %15 = sub i64 %unbox, %unbox2, !dbg !2184 %16 = add i64 %15, 1, !dbg !2191 %17 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 1, i64 0, !dbg !2192 %18 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 1, i64 1, !dbg !2196 %unbox3 = load i64, i64 addrspace(11)* %18, align 8, !dbg !2198, !tbaa !28, !invariant.load !23, !alias.scope !2186, !noalias !2189 %unbox4 = load i64, i64 addrspace(11)* %17, align 8, !dbg !2198, !tbaa !28, !invariant.load !23, !alias.scope !2186, !noalias !2189 %19 = sub i64 %unbox3, %unbox4, !dbg !2198 %20 = add i64 %19, 1, !dbg !2200 %21 = call {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151617005072 to {}*) to {} addrspace(10)*), i64 %16, i64 %20), !dbg !2201 %22 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %3, i32 0, i32 1, !dbg !2201 store {} addrspace(10)* %21, {} addrspace(10)** %22, align 8, !dbg !2201 %23 = bitcast {} addrspace(10)* %21 to <{ i8 addrspace(13)*, i64, i16, i16, i32, i64 }> addrspace(10)*, !dbg !2201 %24 = getelementptr inbounds <{ i8 addrspace(13)*, i64, i16, i16, i32, i64 }>, <{ i8 addrspace(13)*, i64, i16, i16, i32, i64 }> addrspace(10)* %23, i32 0, i32 1, !dbg !2201 %25 = load i64, i64 addrspace(10)* %24, align 8, !dbg !2201 %26 = mul i64 %25, 8, !dbg !2201 %27 = bitcast {} addrspace(10)* %21 to i8 addrspace(13)* addrspace(10)*, !dbg !2201 %28 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(10)* %27, align 8, !dbg !2201 call void @llvm.memset.p13i8.i64(i8 addrspace(13)* align 8 %28, i8 0, i64 %26, i1 false), !dbg !2201 %29 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151617005072 to {}*) to {} addrspace(10)*), i64 %16, i64 %20) #34, !dbg !2201 %30 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %3, i32 0, i32 2, !dbg !2204 store {} addrspace(10)* %29, {} addrspace(10)** %30, align 8, !dbg !2204 %_augmented = call fastcc { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } @augmented_julia_copyto__1493.13({} addrspace(10)* align 16 %29, {} addrspace(10)* align 16 %21, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %2, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1"), !dbg !2204 %31 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %3, i32 0, i32 0, !dbg !2205 store { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } %_augmented, { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }* %31, align 8, !dbg !2205 %32 = call i64 @llvm.smax.i64(i64 %16, i64 noundef 0) #33, !dbg !2205 %.not = icmp ugt i64 %15, 9223372036854775806, !dbg !2213 %. = select i1 %.not, i64 0, i64 %32, !dbg !2220 %33 = call i64 @llvm.smax.i64(i64 %20, i64 noundef 0) #33, !dbg !2205 %.not21 = icmp ugt i64 %19, 9223372036854775806, !dbg !2213 %value_phi10 = select i1 %.not21, i64 0, i64 %33, !dbg !2215 %34 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2221 store {} addrspace(10)* %29, {} addrspace(10)** %34, align 8, !dbg !2221, !noalias !2222 %".repack'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 0, !dbg !2221 %.repack = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 0, !dbg !2221 store {} addrspace(10)* %21, {} addrspace(10)** %".repack'ipg", align 8, !dbg !2221, !alias.scope !2225, !noalias !2228 store {} addrspace(10)* %29, {} addrspace(10)** %.repack, align 8, !dbg !2221, !alias.scope !2232, !noalias !2233 %".repack22.repack.repack'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 1, i64 0, i64 0, !dbg !2221 %.repack22.repack.repack = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 0, i64 0, !dbg !2221 store i64 1, i64* %".repack22.repack.repack'ipg", align 8, !dbg !2221, !alias.scope !2225, !noalias !2228 store i64 1, i64* %.repack22.repack.repack, align 8, !dbg !2221, !alias.scope !2232, !noalias !2233 %".repack22.repack.repack30'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 1, i64 0, i64 1, !dbg !2221 %.repack22.repack.repack30 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 0, i64 1, !dbg !2221 store i64 %., i64* %".repack22.repack.repack30'ipg", align 8, !dbg !2221, !alias.scope !2225, !noalias !2228 store i64 %., i64* %.repack22.repack.repack30, align 8, !dbg !2221, !alias.scope !2232, !noalias !2233 %".repack22.repack28.repack'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 1, i64 1, i64 0, !dbg !2221 %.repack22.repack28.repack = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 1, i64 0, !dbg !2221 store i64 1, i64* %".repack22.repack28.repack'ipg", align 8, !dbg !2221, !alias.scope !2225, !noalias !2228 store i64 1, i64* %.repack22.repack28.repack, align 8, !dbg !2221, !alias.scope !2232, !noalias !2233 %".repack22.repack28.repack32'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 1, i64 1, i64 1, !dbg !2221 %.repack22.repack28.repack32 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 1, i64 1, !dbg !2221 store i64 %value_phi10, i64* %".repack22.repack28.repack32'ipg", align 8, !dbg !2221, !alias.scope !2225, !noalias !2228 store i64 %value_phi10, i64* %.repack22.repack28.repack32, align 8, !dbg !2221, !alias.scope !2232, !noalias !2233 %".repack24'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 2, !dbg !2221 %.repack24 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %0, i64 0, i32 2, !dbg !2221 %"'ipc" = bitcast i64* %".repack24'ipg" to i8*, !dbg !2221 %35 = bitcast i64* %.repack24 to i8*, !dbg !2221 call void @llvm.memset.p0i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(16) %35, i8 noundef 0, i64 noundef 16, i1 noundef false) #33, !dbg !2221 call void @llvm.memset.p0i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(16) %"'ipc", i8 noundef 0, i64 noundef 16, i1 noundef false) #33, !dbg !2221 %36 = load { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %3, align 8, !dbg !2221 ret { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* } %36, !dbg !2221 } ; Function Attrs: mustprogress willreturn define internal fastcc void @diffejulia_copyto_unaliased__1497({} addrspace(10)* align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'1", { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg) unnamed_addr #29 !dbg !2323 { top: %"iv'ac" = alloca i64, align 8 %loopLimit_cache = alloca i64, align 8 %"value_phi42'de" = alloca double, align 8 %2 = getelementptr double, double* %"value_phi42'de", i64 0 store double 0.000000e+00, double* %2, align 8 %value_phi43_cache = alloca i64*, align 8 %value_phi45_cache = alloca i64*, align 8 %3 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 1 %mdyncache_fromtape_cache = alloca i64*, align 8 store i64* %3, i64** %mdyncache_fromtape_cache, align 8 %4 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 2 %mdyncache_fromtape_cache66 = alloca i64*, align 8 store i64* %4, i64** %mdyncache_fromtape_cache66, align 8 %5 = call {}*** @julia.get_pgcstack() #33 %6 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !2324 %7 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !2334 %unbox = load i64, i64 addrspace(11)* %7, align 8, !dbg !2336, !tbaa !28, !invariant.load !23, !alias.scope !2338, !noalias !2341 %unbox2 = load i64, i64 addrspace(11)* %6, align 8, !dbg !2336, !tbaa !28, !invariant.load !23, !alias.scope !2338, !noalias !2341 %8 = sub i64 %unbox, %unbox2, !dbg !2336 %9 = add i64 %8, 1, !dbg !2343 %10 = call i64 @llvm.smax.i64(i64 %9, i64 noundef 0) #33, !dbg !2344 %11 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 0, !dbg !2349 %12 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 1, !dbg !2354 %unbox3 = load i64, i64 addrspace(11)* %12, align 8, !dbg !2356, !tbaa !28, !invariant.load !23, !alias.scope !2338, !noalias !2341 %unbox4 = load i64, i64 addrspace(11)* %11, align 8, !dbg !2356, !tbaa !28, !invariant.load !23, !alias.scope !2338, !noalias !2341 %13 = sub i64 %unbox3, %unbox4, !dbg !2356 %14 = add i64 %13, 1, !dbg !2358 %15 = call i64 @llvm.smax.i64(i64 %14, i64 noundef 0) #33, !dbg !2359 %16 = mul i64 %15, %10, !dbg !2364 %.not = icmp eq i64 %16, 0, !dbg !2366 br i1 %.not, label %common.ret, label %L20, !dbg !2333 common.ret.loopexit: ; preds = %L232 %17 = phi i64 [ %iv, %L232 ], !dbg !2367 store i64 %17, i64* %loopLimit_cache, align 8, !dbg !2373, !invariant.group !2374 br label %common.ret, !dbg !2373 common.ret: ; preds = %L61, %common.ret.loopexit, %top br label %invertcommon.ret, !dbg !2373 L20: ; preds = %top br i1 false, label %L343, label %L61, !dbg !2375 L61: ; preds = %L20 %18 = icmp ult i64 %8, 9223372036854775807, !dbg !2376 %19 = icmp ult i64 %13, 9223372036854775807, !dbg !2376 %20 = and i1 %18, %19, !dbg !2383 br i1 %20, label %guard_pass128, label %common.ret, !dbg !2383 L194: ; preds = %guard_pass133, %guard_pass128 %iv = phi i64 [ %iv.next, %guard_pass133 ], [ 0, %guard_pass128 ] %.pn = phi i64 [ %42, %guard_pass128 ], [ %46, %guard_pass133 ] %21 = load i64*, i64** %mdyncache_fromtape_cache66, align 8, !dbg !2373, !dereferenceable !1586, !invariant.group !2384 %22 = getelementptr inbounds i64, i64* %21, i64 %iv, !dbg !2373 %value_phi45 = load i64, i64* %22, align 8, !dbg !2373, !invariant.group !2385 %23 = load i64*, i64** %mdyncache_fromtape_cache, align 8, !dbg !2373, !dereferenceable !1586, !invariant.group !2386 %24 = getelementptr inbounds i64, i64* %23, i64 %iv, !dbg !2373 %value_phi43 = load i64, i64* %24, align 8, !dbg !2373, !invariant.group !2387 %iv.next = add nuw nsw i64 %iv, 1, !dbg !2373 %25 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 2, !dbg !2373 %26 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 1, !dbg !2373 %"value_phi42.in'ipg" = getelementptr inbounds double, double addrspace(13)* %"arrayptr111236'ipl", i64 %.pn, !dbg !2373 %"'ipg" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre234'ipl", i64 %iv, !dbg !2388 %27 = add i64 %value_phi43, 1, !dbg !2390 %28 = icmp ugt i64 %value_phi43, 9223372036854775806, !dbg !2394 %29 = icmp sgt i64 %27, %10, !dbg !2394 %30 = or i1 %28, %29, !dbg !2397 %31 = icmp eq i64 %value_phi43, %10 %or.cond = or i1 %31, %30, !dbg !2397 br i1 %or.cond, label %L232, label %L248, !dbg !2397 L232: ; preds = %L194 %32 = icmp ult i64 %value_phi45, 9223372036854775807, !dbg !2398 %33 = add i64 %value_phi45, 1, !dbg !2403 %34 = icmp sle i64 %33, %15, !dbg !2398 %35 = and i1 %32, %34, !dbg !2405 %36 = icmp ne i64 %value_phi45, %15, !dbg !2401 %value_phi89 = and i1 %36, %35, !dbg !2401 %cond.fr = freeze i1 %value_phi89 br i1 %cond.fr, label %L248, label %common.ret.loopexit, !dbg !2406 L248: ; preds = %L232, %L194 %value_phi51287295 = phi i64 [ 1, %L232 ], [ %27, %L194 ] %value_phi52289294 = phi i64 [ %33, %L232 ], [ %value_phi45, %L194 ] %37 = add nsw i64 %value_phi51287295, -1, !dbg !2407 %38 = add i64 %value_phi52289294, -1, !dbg !2412 br i1 false, label %L276, label %guard_pass133, !dbg !2411 L276: ; preds = %L248 unreachable L343: ; preds = %L20 unreachable guard_pass128: ; preds = %L61 %"getfield106'il_phi" = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 0, !dbg !2415 %39 = add i64 %unbox2, -1, !dbg !2420 %arraysize108 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 3, !dbg !2420 %40 = add i64 %unbox4, -1, !dbg !2420 %41 = mul i64 %arraysize108, %40, !dbg !2420 %42 = add i64 %41, %39, !dbg !2420 %"'ipc16" = addrspacecast {} addrspace(10)* %"getfield106'il_phi" to double addrspace(13)* addrspace(11)*, !dbg !2420 %"arrayptr111236'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc16", align 8, !dbg !2420, !tbaa !28, !alias.scope !2421, !noalias !2424, !nonnull !23 %"'ipc" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !2388 %"arrayptr.pre234'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc", align 16, !dbg !2388, !tbaa !28, !alias.scope !2426, !noalias !2429 br label %L194, !dbg !2431 guard_pass133: ; preds = %L248 %43 = add i64 %38, %40, !dbg !2432 %44 = mul i64 %43, %arraysize108, !dbg !2432 %45 = add i64 %37, %39, !dbg !2432 %46 = add i64 %45, %44, !dbg !2432 br label %L194, !dbg !2431 inverttop: ; preds = %invertL20, %invertcommon.ret fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertcommon.ret.loopexit: ; preds = %staging %47 = load i64, i64* %loopLimit_cache, align 8, !invariant.group !2374 br label %mergeinvertL194_common.ret.loopexit mergeinvertL194_common.ret.loopexit: ; preds = %invertcommon.ret.loopexit store i64 %47, i64* %"iv'ac", align 8 br label %invertL232 invertcommon.ret: ; preds = %common.ret %_unwrap = icmp ult i64 %8, 9223372036854775807 %_unwrap4 = icmp ult i64 %13, 9223372036854775807 %_unwrap5 = and i1 %_unwrap, %_unwrap4 br i1 %.not, label %inverttop, label %staging invertL20: ; preds = %invertL61 br label %inverttop invertL61: ; preds = %invertguard_pass128, %staging br label %invertL20 invertL194: ; preds = %invertL248, %invertL232 %48 = load i64, i64* %"iv'ac", align 8, !dbg !2388 %"'ipc_unwrap" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !2388 %"arrayptr.pre234'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap", align 16, !dbg !2388, !tbaa !28, !alias.scope !2426, !noalias !2429 %"'ipg_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre234'il_phi_unwrap", i64 %48, !dbg !2388 %49 = load double, double addrspace(13)* %"'ipg_unwrap", align 8, !dbg !2388, !tbaa !67, !alias.scope !2434, !noalias !2437 store double 0.000000e+00, double addrspace(13)* %"'ipg_unwrap", align 8, !dbg !2388, !tbaa !67, !alias.scope !2434, !noalias !2437 %50 = load double, double* %"value_phi42'de", align 8, !dbg !2388 %51 = fadd fast double %50, %49, !dbg !2388 store double %51, double* %"value_phi42'de", align 8, !dbg !2388 %52 = load double, double* %"value_phi42'de", align 8, !dbg !2373 store double 0.000000e+00, double* %"value_phi42'de", align 8, !dbg !2373 %53 = load i64, i64* %"iv'ac", align 8, !dbg !2373 %54 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 0, !dbg !2373 %"'ipc16_unwrap" = addrspacecast {} addrspace(10)* %54 to double addrspace(13)* addrspace(11)*, !dbg !2373 %"arrayptr111236'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc16_unwrap", align 8, !dbg !2420, !tbaa !28, !alias.scope !2421, !noalias !2424, !nonnull !23 %arraysize108_unwrap = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 3, !dbg !2420 %_unwrap35 = add i64 %unbox4, -1, !dbg !2373 %_unwrap36 = mul i64 %arraysize108_unwrap, %_unwrap35, !dbg !2373 %_unwrap37 = add i64 %unbox2, -1, !dbg !2373 %_unwrap38 = add i64 %_unwrap36, %_unwrap37, !dbg !2373 %55 = icmp ne i64 %53, 0, !dbg !2373 br i1 %55, label %invertL194_phirc, label %invertL194_phirc34, !dbg !2373 invertL194_phirc: ; preds = %invertL194 %56 = sub nuw i64 %53, 1 %57 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 1 %58 = getelementptr inbounds i64, i64* %57, i64 %56 %59 = load i64, i64* %58, align 8, !invariant.group !2439 %_unwrap17 = icmp eq i64 %59, %10 %_unwrap18 = icmp ugt i64 %59, 9223372036854775806 %_unwrap19 = add i64 %59, 1 %_unwrap20 = icmp sgt i64 %_unwrap19, %10 %_unwrap21 = or i1 %_unwrap18, %_unwrap20 %or.cond_unwrap = or i1 %_unwrap17, %_unwrap21 %value_phi51287295_unwrap = select i1 %or.cond_unwrap, i64 1, i64 %_unwrap19 %_unwrap23 = add nsw i64 %value_phi51287295_unwrap, -1 %_unwrap24 = add i64 %unbox2, -1 %_unwrap25 = add i64 %_unwrap23, %_unwrap24 %60 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 2 %61 = getelementptr inbounds i64, i64* %60, i64 %56 %62 = load i64, i64* %61, align 8, !invariant.group !2440 br i1 %or.cond_unwrap, label %invertL194_phirc_phirc, label %invertL194_phirc_phirc28 invertL194_phirc34: ; preds = %invertL194 br label %invertL194_phimerge invertL194_phimerge: ; preds = %invertL194_phirc34, %invertL194_phirc_phimerge %63 = phi i64 [ %_unwrap33, %invertL194_phirc_phimerge ], [ %_unwrap38, %invertL194_phirc34 ], !dbg !2373 %"value_phi42.in'ipg_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr111236'il_phi_unwrap", i64 %63, !dbg !2373 %64 = atomicrmw fadd double addrspace(13)* %"value_phi42.in'ipg_unwrap", double %52 monotonic, align 8, !dbg !2373 %65 = load i64, i64* %"iv'ac", align 8 %66 = icmp eq i64 %65, 0 %67 = xor i1 %66, true br i1 %66, label %invertguard_pass128, label %incinvertL194 incinvertL194: ; preds = %invertL194_phimerge %68 = load i64, i64* %"iv'ac", align 8 %69 = add nsw i64 %68, -1 store i64 %69, i64* %"iv'ac", align 8 br label %invertguard_pass133 invertL194_phirc_phirc: ; preds = %invertL194_phirc %70 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 2 %71 = getelementptr inbounds i64, i64* %70, i64 %56 %72 = load i64, i64* %71, align 8, !invariant.group !2440 %_unwrap27 = add i64 %72, 1 br label %invertL194_phirc_phimerge invertL194_phirc_phirc28: ; preds = %invertL194_phirc br label %invertL194_phirc_phimerge invertL194_phirc_phimerge: ; preds = %invertL194_phirc_phirc28, %invertL194_phirc_phirc %73 = phi i64 [ %_unwrap27, %invertL194_phirc_phirc ], [ %62, %invertL194_phirc_phirc28 ] %_unwrap29 = add i64 %73, -1 %_unwrap30 = add i64 %unbox4, -1 %_unwrap31 = add i64 %_unwrap29, %_unwrap30 %arraysize108_unwrap67 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 3, !dbg !2420 %_unwrap32 = mul i64 %_unwrap31, %arraysize108_unwrap67 %_unwrap33 = add i64 %_unwrap25, %_unwrap32 br label %invertL194_phimerge invertL232: ; preds = %invertL248, %mergeinvertL194_common.ret.loopexit br label %invertL194 invertL248: ; preds = %invertguard_pass133 %74 = load i64, i64* %"iv'ac", align 8 %75 = extractvalue { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg, 1 %76 = getelementptr inbounds i64, i64* %75, i64 %74 %77 = load i64, i64* %76, align 8, !invariant.group !2439 %_unwrap42 = icmp eq i64 %77, %10 %_unwrap43 = icmp ugt i64 %77, 9223372036854775806 %_unwrap44 = add i64 %77, 1 %_unwrap45 = icmp sgt i64 %_unwrap44, %10 %_unwrap46 = or i1 %_unwrap43, %_unwrap45 %or.cond_unwrap47 = or i1 %_unwrap42, %_unwrap46 br i1 %or.cond_unwrap47, label %invertL232, label %invertL194 invertguard_pass128: ; preds = %invertL194_phimerge %78 = load i64, i64* %"iv'ac", align 8 %79 = load i64, i64* %"iv'ac", align 8 %80 = load i64, i64* %"iv'ac", align 8 %forfree64 = load i64*, i64** %mdyncache_fromtape_cache, align 8, !dereferenceable !1586, !invariant.group !2386 %81 = bitcast i64* %forfree64 to i8* call void @free(i8* nonnull %81), !dbg !2373 %82 = load i64, i64* %"iv'ac", align 8 %forfree = load i64*, i64** %mdyncache_fromtape_cache66, align 8, !dereferenceable !1586, !invariant.group !2384 %83 = bitcast i64* %forfree to i8* call void @free(i8* nonnull %83), !dbg !2373 br label %invertL61 invertguard_pass133: ; preds = %incinvertL194 br label %invertL248 staging: ; preds = %invertcommon.ret br i1 %_unwrap5, label %invertcommon.ret.loopexit, label %invertL61 } ; Function Attrs: mustprogress willreturn define internal fastcc void @diffejulia_copyto__1493.16({} addrspace(10)* align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'1", { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %tapeArg) unnamed_addr #27 !dbg !2500 { top: %tapeld_cache = alloca { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, align 8 store { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), { {} addrspace(10)*, i64*, i64*, i64 } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i64* undef, i64* undef, i64 undef }, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i1 undef }, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i64 undef, i64 undef }, i1 undef }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }* %tapeld_cache, align 8 %2 = call {}*** @julia.get_pgcstack() %3 = call {}*** @julia.get_pgcstack() %4 = bitcast {}*** %3 to {}** %5 = getelementptr inbounds {}*, {}** %4, i64 -14 %"'mi" = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %tapeArg, 0 %6 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %tapeArg, 1 %"'ipc" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %7 = bitcast {} addrspace(10)* %6 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %8 = call {}*** @julia.get_pgcstack() #33 %.not = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %tapeArg, 4, !dbg !2501 br i1 %.not, label %common.ret, label %L20, !dbg !2501 common.ret: ; preds = %L20, %top br label %invertcommon.ret, !dbg !2502 L20: ; preds = %top %"'ipc27" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2503 %tapeArg28 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %tapeArg, 3, !dbg !2503 %9 = bitcast {} addrspace(10)* %tapeArg28 to { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)*, !dbg !2504 %tapeld = load { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %9, align 8, !dbg !2504, !enzyme_mustcache !23 store { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } %tapeld, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }* %tapeld_cache, align 8, !dbg !2504, !invariant.group !2505 %"'ipc25" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2504 %10 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %7 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2504 %tapeArg26 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %tapeArg, 2, !dbg !2504 br label %common.ret inverttop: ; preds = %invertL20, %invertcommon.ret fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertcommon.ret: ; preds = %common.ret br i1 %.not, label %inverttop, label %invertL20 invertL20: ; preds = %invertcommon.ret %_unwrap = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %7 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2504 %"'ipc25_unwrap" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2504 %tapeArg26_unwrap = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %tapeArg, 2, !dbg !2504 call fastcc void @diffejulia_copyto_unaliased__1497({} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %_unwrap, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc25_unwrap", { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg26_unwrap), !dbg !2504 %"'ipc27_unwrap" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2503 %11 = load { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }* %tapeld_cache, align 8, !dbg !2504, !invariant.group !2505 call fastcc void @diffejulia_unalias_1501({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" undef, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc27_unwrap", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" undef, {} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1", { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } %11), !dbg !2503 br label %inverttop } ; Function Attrs: mustprogress willreturn define internal fastcc void @diffejulia_unaliascopy_1490.15({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree writeonly align 8 dereferenceable(56) "enzyme_sret" %0, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'", [1 x {} addrspace(10)*]* noalias nocapture nofree writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %2, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'1", { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %tapeArg) unnamed_addr #26 !dbg !2458 { top: %3 = call {}*** @julia.get_pgcstack() #33 %4 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %tapeArg, 3, !dbg !2459 %5 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %tapeArg, 4, !dbg !2465 %6 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %tapeArg, 1, !dbg !2465 %7 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %tapeArg, 2, !dbg !2465 %tapeArg5 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %tapeArg, 0, !dbg !2468 %".repack24'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 2, !dbg !2469 %"'ipc" = bitcast i64* %".repack24'ipg" to i8*, !dbg !2469 br label %inverttop, !dbg !2469 inverttop: ; preds = %top call fastcc void @diffejulia_copyto__1493.16({} addrspace(10)* align 16 %7, {} addrspace(10)* align 16 %6, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %2, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1", { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } %tapeArg5), !dbg !2468 fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void } ; Function Attrs: mustprogress willreturn define internal fastcc void @diffejulia_unalias_1501({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree writeonly align 8 dereferenceable(56) "enzyme_sret" %0, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'", [1 x {} addrspace(10)*]* noalias nocapture nofree writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, {} addrspace(10)* align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %2, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'1", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %3, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'2", { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } %tapeArg) unnamed_addr #31 !dbg !2441 { top: %4 = call {}*** @julia.get_pgcstack() %5 = call {}*** @julia.get_pgcstack() %6 = bitcast {}*** %5 to {}** %7 = getelementptr inbounds {}*, {}** %6, i64 -14 %"'mi" = extractvalue { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } %tapeArg, 0 %"'ipc25" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %8 = call {}*** @julia.get_pgcstack() #33 %.not = extractvalue { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } %tapeArg, 2, !dbg !2442 br i1 %.not, label %L10, label %L12, !dbg !2442 common.ret: ; preds = %L12, %L10 br label %invertcommon.ret, !dbg !2442 L10: ; preds = %top %"'ipc32" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc25" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2442 %tapeArg33 = extractvalue { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } %tapeArg, 1, !dbg !2442 %"'ipc" = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'" to i8*, !dbg !2442 %"'ipc26" = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc25" to i8 addrspace(10)*, !dbg !2442 br label %common.ret L12: ; preds = %top %"'ipc36" = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'" to i8*, !dbg !2442 %"'ipc37" = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %"'2" to i8 addrspace(11)*, !dbg !2442 br label %common.ret inverttop: ; preds = %invertL12, %invertL10 fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertcommon.ret: ; preds = %common.ret br i1 %.not, label %invertL10, label %invertL12 invertL10: ; preds = %invertcommon.ret %"'ipc32_unwrap" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc25" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2442 %tapeArg33_unwrap = extractvalue { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } %tapeArg, 1, !dbg !2442 call fastcc void @diffejulia_unaliascopy_1490.15({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" undef, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc32_unwrap", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" undef, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %3, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'2", { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } %tapeArg33_unwrap), !dbg !2442 br label %inverttop invertL12: ; preds = %invertcommon.ret br label %inverttop } ; Function Attrs: mustprogress willreturn define internal fastcc void @diffejulia_copyto__1493({} addrspace(10)* align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'1", { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } %tapeArg) unnamed_addr #27 !dbg !2276 { top: %tapeld_cache = alloca { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, align 8 store { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 } { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), { {} addrspace(10)*, i64*, i64*, i64 } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i64* undef, i64* undef, i64 undef }, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i1 undef }, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i64 undef, i64 undef }, i1 undef }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }* %tapeld_cache, align 8 %2 = call {}*** @julia.get_pgcstack() %3 = call {}*** @julia.get_pgcstack() %4 = bitcast {}*** %3 to {}** %5 = getelementptr inbounds {}*, {}** %4, i64 -14 %"'mi" = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } %tapeArg, 0 %6 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } %tapeArg, 1 %"'ipc" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %7 = bitcast {} addrspace(10)* %6 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %8 = call {}*** @julia.get_pgcstack() #33 %9 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !2277 %10 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !2287 %unbox = load i64, i64 addrspace(11)* %10, align 8, !dbg !2289, !tbaa !28, !invariant.load !23, !alias.scope !2291, !noalias !2294 %unbox2 = load i64, i64 addrspace(11)* %9, align 8, !dbg !2289, !tbaa !28, !invariant.load !23, !alias.scope !2291, !noalias !2294 %11 = add i64 %unbox, 1, !dbg !2289 %12 = sub i64 %11, %unbox2, !dbg !2296 %13 = call i64 @llvm.smax.i64(i64 %12, i64 noundef 0) #33, !dbg !2297 %14 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 0, !dbg !2302 %15 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 1, i64 1, !dbg !2307 %unbox3 = load i64, i64 addrspace(11)* %15, align 8, !dbg !2309, !tbaa !28, !invariant.load !23, !alias.scope !2291, !noalias !2294 %unbox4 = load i64, i64 addrspace(11)* %14, align 8, !dbg !2309, !tbaa !28, !invariant.load !23, !alias.scope !2291, !noalias !2294 %16 = add i64 %unbox3, 1, !dbg !2309 %17 = sub i64 %16, %unbox4, !dbg !2311 %18 = call i64 @llvm.smax.i64(i64 %17, i64 noundef 0) #33, !dbg !2312 %19 = mul i64 %18, %13, !dbg !2317 %.not = icmp eq i64 %19, 0, !dbg !2319 br i1 %.not, label %common.ret, label %L20, !dbg !2286 common.ret: ; preds = %L20, %top br label %invertcommon.ret, !dbg !2320 L20: ; preds = %top %"'ipc16" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2321 %tapeArg17 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } %tapeArg, 3, !dbg !2321 %20 = bitcast {} addrspace(10)* %tapeArg17 to { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)*, !dbg !2322 %tapeld = load { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } addrspace(10)* %20, align 8, !dbg !2322, !enzyme_mustcache !23 store { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } %tapeld, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }* %tapeld_cache, align 8, !dbg !2322, !invariant.group !2323 %"'ipc14" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2322 %21 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %7 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2322 %tapeArg15 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } %tapeArg, 2, !dbg !2322 br label %common.ret inverttop: ; preds = %invertL20, %invertcommon.ret fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertcommon.ret: ; preds = %common.ret br i1 %.not, label %inverttop, label %invertL20 invertL20: ; preds = %invertcommon.ret %_unwrap = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %7 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2322 %"'ipc14_unwrap" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2322 %tapeArg15_unwrap = extractvalue { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } %tapeArg, 2, !dbg !2322 call fastcc void @diffejulia_copyto_unaliased__1497({} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %_unwrap, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc14_unwrap", { {} addrspace(10)*, i64*, i64*, i64 } %tapeArg15_unwrap), !dbg !2322 %"'ipc16_unwrap" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }*, !dbg !2321 %22 = load { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 }* %tapeld_cache, align 8, !dbg !2322, !invariant.group !2323 call fastcc void @diffejulia_unalias_1501({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" undef, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc16_unwrap", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" undef, {} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1", { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64, i64 }, i1 } %22), !dbg !2321 br label %inverttop } ; Function Attrs: mustprogress willreturn define internal fastcc void @diffejulia_unaliascopy_1490({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree writeonly align 8 dereferenceable(56) "enzyme_sret" %0, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'", [1 x {} addrspace(10)*]* noalias nocapture nofree writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 dereferenceable(56) "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %2, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151603794512" "enzymejl_parmtype_ref"="1" %"'1", { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* } %tapeArg) unnamed_addr #26 !dbg !2234 { top: %3 = call {}*** @julia.get_pgcstack() #33 %4 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 0, !dbg !2235 %5 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 1, !dbg !2240 %unbox = load i64, i64 addrspace(11)* %5, align 8, !dbg !2242, !tbaa !28, !invariant.load !23, !alias.scope !2244, !noalias !2247 %unbox2 = load i64, i64 addrspace(11)* %4, align 8, !dbg !2242, !tbaa !28, !invariant.load !23, !alias.scope !2244, !noalias !2247 %6 = sub i64 %unbox, %unbox2, !dbg !2242 %7 = add i64 %6, 1, !dbg !2249 %8 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 1, i64 0, !dbg !2250 %9 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 1, i64 1, !dbg !2254 %unbox3 = load i64, i64 addrspace(11)* %9, align 8, !dbg !2256, !tbaa !28, !invariant.load !23, !alias.scope !2244, !noalias !2247 %unbox4 = load i64, i64 addrspace(11)* %8, align 8, !dbg !2256, !tbaa !28, !invariant.load !23, !alias.scope !2244, !noalias !2247 %10 = sub i64 %unbox3, %unbox4, !dbg !2256 %11 = add i64 %10, 1, !dbg !2258 %12 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* } %tapeArg, 1, !dbg !2259 %13 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* } %tapeArg, 2, !dbg !2259 %tapeArg5 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* } %tapeArg, 0, !dbg !2262 %".repack24'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 2, !dbg !2263 %"'ipc" = bitcast i64* %".repack24'ipg" to i8*, !dbg !2263 br label %inverttop, !dbg !2263 inverttop: ; preds = %top call fastcc void @diffejulia_copyto__1493({} addrspace(10)* align 16 %13, {} addrspace(10)* align 16 %12, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %2, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1", { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } %tapeArg5), !dbg !2262 fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void } after simplification : ; Function Attrs: mustprogress willreturn define internal fastcc void @preprocess_julia_copyto__1477({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %0, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %1) unnamed_addr #33 !dbg !2462 { top: %2 = call {}*** @julia.get_pgcstack() %3 = call {}*** @julia.get_pgcstack() %4 = bitcast {}*** %3 to {}** %5 = getelementptr inbounds {}*, {}** %4, i64 -14 %6 = getelementptr inbounds {}*, {}** %5, i64 16 %7 = bitcast {}** %6 to i8** %8 = load i8*, i8** %7, align 8 %9 = call noalias nonnull dereferenceable(40) dereferenceable_or_null(40) {} addrspace(10)* @julia.gc_alloc_obj({}** %5, i64 40, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146539529808 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1596 call void @zeroType.17({} addrspace(10)* %9, i8 0, i64 40), !enzyme_zerostack !23 %10 = bitcast {} addrspace(10)* %9 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %11 = bitcast {}*** %2 to {}** %12 = getelementptr inbounds {}*, {}** %11, i64 -14 %13 = getelementptr inbounds {}*, {}** %12, i64 16 %14 = bitcast {}** %13 to i8** %15 = load i8*, i8** %14, align 8 %16 = call noalias nonnull dereferenceable(8) dereferenceable_or_null(8) {} addrspace(10)* @julia.gc_alloc_obj({}** %12, i64 8, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146547762384 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1596 call void @zeroType.18({} addrspace(10)* %16, i8 0, i64 8), !enzyme_zerostack !23 %17 = bitcast {} addrspace(10)* %16 to [1 x {} addrspace(10)*] addrspace(10)*, !enzyme_caststack !23 %18 = call {}*** @julia.get_pgcstack() #34 %ptls_field6 = getelementptr inbounds {}**, {}*** %18, i64 2 %19 = bitcast {}*** %ptls_field6 to i64*** %ptls_load78 = load i64**, i64*** %19, align 8, !tbaa !24 %20 = getelementptr inbounds i64*, i64** %ptls_load78, i64 2 %safepoint = load i64*, i64** %20, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #34, !dbg !2463 fence syncscope("singlethread") seq_cst %21 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !2464 %22 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !2474 %unbox = load i64, i64 addrspace(11)* %22, align 8, !dbg !2476, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %unbox2 = load i64, i64 addrspace(11)* %21, align 8, !dbg !2476, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %23 = sub i64 %unbox, %unbox2, !dbg !2476 %24 = icmp ult i64 %23, 9223372036854775807, !dbg !2478 br i1 %24, label %L12, label %common.ret, !dbg !2473 common.ret: ; preds = %L12, %top ret void, !dbg !2479 L12: ; preds = %top %25 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %10 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2480 %26 = addrspacecast [1 x {} addrspace(10)*] addrspace(10)* %17 to [1 x {} addrspace(10)*]*, !dbg !2480 call fastcc void @julia_unalias_1484({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }) align 8 dereferenceable(40) %25, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzymejl_returnRoots" %26, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %0, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %1) #34, !dbg !2480 %27 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %10 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2481 call fastcc void @julia_copyto_unaliased__1481({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %0, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %27) #34, !dbg !2481 br label %common.ret } after simplification : ; Function Attrs: mustprogress willreturn define internal fastcc void @preprocess_julia_copyto_unaliased__1481({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %0, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %1) unnamed_addr #34 !dbg !2517 { top: %2 = call {}*** @julia.get_pgcstack() #35 %ptls_field37 = getelementptr inbounds {}**, {}*** %2, i64 2 %3 = bitcast {}*** %ptls_field37 to i64*** %ptls_load3839 = load i64**, i64*** %3, align 8, !tbaa !24 %4 = getelementptr inbounds i64*, i64** %ptls_load3839, i64 2 %safepoint = load i64*, i64** %4, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #35, !dbg !2518 fence syncscope("singlethread") seq_cst %5 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !2519 %6 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !2529 %unbox = load i64, i64 addrspace(11)* %6, align 8, !dbg !2531, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %unbox2 = load i64, i64 addrspace(11)* %5, align 8, !dbg !2531, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %7 = sub i64 %unbox, %unbox2, !dbg !2531 %8 = add i64 %7, 1, !dbg !2533 %9 = call i64 @llvm.smax.i64(i64 %8, i64 noundef 0) #35, !dbg !2534 %10 = icmp ult i64 %7, 9223372036854775807, !dbg !2539 br i1 %10, label %L12, label %common.ret, !dbg !2528 common.ret.loopexit.unr-lcssa.loopexit: ; preds = %L54 br label %common.ret.loopexit.unr-lcssa, !dbg !2540 common.ret.loopexit.unr-lcssa: ; preds = %common.ret.loopexit.unr-lcssa.loopexit, %L41.L54_crit_edge %value_phi14.unr = phi i64 [ 1, %L41.L54_crit_edge ], [ %56, %common.ret.loopexit.unr-lcssa.loopexit ] %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !2540 br i1 %lcmp.mod.not, label %common.ret, label %L54.epil.preheader, !dbg !2540 L54.epil.preheader: ; preds = %common.ret.loopexit.unr-lcssa br label %L54.epil, !dbg !2540 L54.epil: ; preds = %L54.epil.preheader, %L54.epil %iv1 = phi i64 [ 0, %L54.epil.preheader ], [ %iv.next2, %L54.epil ] %11 = add i64 %value_phi14.unr, %iv1, !dbg !2541 %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !2541 %12 = add i64 %11, -1, !dbg !2541 %13 = add i64 %12, %unbox20.pre, !dbg !2544 %14 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %13, !dbg !2544 %arrayref.epil = load double, double addrspace(13)* %14, align 8, !dbg !2544, !tbaa !67, !alias.scope !70, !noalias !71 %15 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %12, !dbg !2545 store double %arrayref.epil, double addrspace(13)* %15, align 8, !dbg !2545, !tbaa !67, !alias.scope !70, !noalias !2546 %16 = add i64 %11, 1, !dbg !2549 %epil.iter.cmp.not = icmp eq i64 %iv.next2, %xtraiter, !dbg !2540 br i1 %epil.iter.cmp.not, label %common.ret.loopexit, label %L54.epil, !dbg !2540, !llvm.loop !2551 common.ret.loopexit: ; preds = %L54.epil br label %common.ret, !dbg !2552 common.ret: ; preds = %common.ret.loopexit, %common.ret.loopexit.unr-lcssa, %top ret void, !dbg !2552 L12: ; preds = %top %17 = addrspacecast {} addrspace(10)* %0 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !2553 %arraylen_ptr = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %17, i64 0, i32 1, !dbg !2553 %arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !2553, !tbaa !1017, !range !41, !alias.scope !276, !noalias !277 %18 = add nsw i64 %9, -1, !dbg !2557 %.not = icmp ult i64 %18, %arraylen, !dbg !2561 br i1 %.not, label %L41.L54_crit_edge, label %L99, !dbg !2560 L41.L54_crit_edge: ; preds = %L12 %getfield_addr.phi.trans.insert = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 0 %getfield.pre = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr.phi.trans.insert unordered, align 8, !dbg !2562, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %.phi.trans.insert = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 2 %unbox20.pre = load i64, i64 addrspace(11)* %.phi.trans.insert, align 8, !dbg !2541, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %19 = addrspacecast {} addrspace(10)* %getfield.pre to double addrspace(13)* addrspace(11)*, !dbg !2544 %arrayptr.pre40 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %19, align 8, !dbg !2544, !tbaa !273, !alias.scope !2563, !noalias !277 %20 = addrspacecast {} addrspace(10)* %0 to double addrspace(13)* addrspace(11)*, !dbg !2545 %arrayptr22.pre41 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %20, align 16, !dbg !2545, !tbaa !273, !alias.scope !2563, !noalias !277 %xtraiter = and i64 %9, 7, !dbg !2564 %21 = icmp ult i64 %18, 7, !dbg !2564 br i1 %21, label %common.ret.loopexit.unr-lcssa, label %L41.L54_crit_edge.new, !dbg !2564 L41.L54_crit_edge.new: ; preds = %L41.L54_crit_edge %unroll_iter = and i64 %9, 9223372036854775800, !dbg !2564 br label %L54, !dbg !2564 L54: ; preds = %L54, %L41.L54_crit_edge.new %iv = phi i64 [ %iv.next, %L54 ], [ 0, %L41.L54_crit_edge.new ] %22 = shl i64 %iv, 3, !dbg !2541 %iv.next = add nuw nsw i64 %iv, 1, !dbg !2541 %23 = shl i64 %iv, 3, !dbg !2541 %24 = add i64 %23, 1, !dbg !2541 %25 = add nsw i64 %24, -1, !dbg !2541 %26 = add i64 %25, %unbox20.pre, !dbg !2544 %27 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %26, !dbg !2544 %arrayref = load double, double addrspace(13)* %27, align 8, !dbg !2544, !tbaa !67, !alias.scope !70, !noalias !71 %28 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %25, !dbg !2545 store double %arrayref, double addrspace(13)* %28, align 8, !dbg !2545, !tbaa !67, !alias.scope !70, !noalias !2546 %29 = add nuw nsw i64 %24, 1, !dbg !2549 %30 = add i64 %24, %unbox20.pre, !dbg !2544 %31 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %30, !dbg !2544 %arrayref.1 = load double, double addrspace(13)* %31, align 8, !dbg !2544, !tbaa !67, !alias.scope !70, !noalias !71 %32 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %24, !dbg !2545 store double %arrayref.1, double addrspace(13)* %32, align 8, !dbg !2545, !tbaa !67, !alias.scope !70, !noalias !2546 %33 = add nuw nsw i64 %24, 2, !dbg !2549 %34 = add i64 %29, %unbox20.pre, !dbg !2544 %35 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %34, !dbg !2544 %arrayref.2 = load double, double addrspace(13)* %35, align 8, !dbg !2544, !tbaa !67, !alias.scope !70, !noalias !71 %36 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %29, !dbg !2545 store double %arrayref.2, double addrspace(13)* %36, align 8, !dbg !2545, !tbaa !67, !alias.scope !70, !noalias !2546 %37 = add nuw nsw i64 %24, 3, !dbg !2549 %38 = add i64 %33, %unbox20.pre, !dbg !2544 %39 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %38, !dbg !2544 %arrayref.3 = load double, double addrspace(13)* %39, align 8, !dbg !2544, !tbaa !67, !alias.scope !70, !noalias !71 %40 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %33, !dbg !2545 store double %arrayref.3, double addrspace(13)* %40, align 8, !dbg !2545, !tbaa !67, !alias.scope !70, !noalias !2546 %41 = add nuw nsw i64 %24, 4, !dbg !2549 %42 = add i64 %37, %unbox20.pre, !dbg !2544 %43 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %42, !dbg !2544 %arrayref.4 = load double, double addrspace(13)* %43, align 8, !dbg !2544, !tbaa !67, !alias.scope !70, !noalias !71 %44 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %37, !dbg !2545 store double %arrayref.4, double addrspace(13)* %44, align 8, !dbg !2545, !tbaa !67, !alias.scope !70, !noalias !2546 %45 = add nuw nsw i64 %24, 5, !dbg !2549 %46 = add i64 %41, %unbox20.pre, !dbg !2544 %47 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %46, !dbg !2544 %arrayref.5 = load double, double addrspace(13)* %47, align 8, !dbg !2544, !tbaa !67, !alias.scope !70, !noalias !71 %48 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %41, !dbg !2545 store double %arrayref.5, double addrspace(13)* %48, align 8, !dbg !2545, !tbaa !67, !alias.scope !70, !noalias !2546 %49 = add nuw nsw i64 %24, 6, !dbg !2549 %50 = add i64 %45, %unbox20.pre, !dbg !2544 %51 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %50, !dbg !2544 %arrayref.6 = load double, double addrspace(13)* %51, align 8, !dbg !2544, !tbaa !67, !alias.scope !70, !noalias !71 %52 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %45, !dbg !2545 store double %arrayref.6, double addrspace(13)* %52, align 8, !dbg !2545, !tbaa !67, !alias.scope !70, !noalias !2546 %53 = add i64 %49, %unbox20.pre, !dbg !2544 %54 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %53, !dbg !2544 %arrayref.7 = load double, double addrspace(13)* %54, align 8, !dbg !2544, !tbaa !67, !alias.scope !70, !noalias !71 %55 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %49, !dbg !2545 store double %arrayref.7, double addrspace(13)* %55, align 8, !dbg !2545, !tbaa !67, !alias.scope !70, !noalias !2546 %56 = add i64 %24, 8, !dbg !2549 %niter.next.7 = add i64 %22, 8, !dbg !2540 %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter, !dbg !2540 br i1 %niter.ncmp.7, label %common.ret.loopexit.unr-lcssa.loopexit, label %L54, !dbg !2540 L99: ; preds = %L12 %current_task136 = getelementptr inbounds {}**, {}*** %2, i64 -14 %current_task1 = bitcast {}*** %current_task136 to {}** %box = call noalias nonnull dereferenceable(8) "enzyme_inactive" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151454372384 to {}*) to {} addrspace(10)*)) #36, !dbg !2560 %memcpy_refined_dst = bitcast {} addrspace(10)* %box to i64 addrspace(10)*, !dbg !2560 store i64 %9, i64 addrspace(10)* %memcpy_refined_dst, align 8, !dbg !2560, !tbaa !106, !alias.scope !70, !noalias !2546 %57 = call nonnull {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151447831152 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151487465984 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %0, {} addrspace(10)* nofree nonnull %box) #37, !dbg !2560 %58 = addrspacecast {} addrspace(10)* %57 to {} addrspace(12)*, !dbg !2560 call void @ijl_throw({} addrspace(12)* %58) #38, !dbg !2560 unreachable, !dbg !2560 } ; Function Attrs: mustprogress willreturn define internal fastcc i64 @augmented_julia_copyto_unaliased__1481({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %"'1") unnamed_addr #34 !dbg !2565 { top: %2 = alloca i64, align 8 %"iv1'ac" = alloca i64, align 8 %"iv'ac" = alloca i64, align 8 %3 = call {}*** @julia.get_pgcstack() #35 %ptls_field37 = getelementptr inbounds {}**, {}*** %3, i64 2 %4 = bitcast {}*** %ptls_field37 to i64*** %ptls_load3839 = load i64**, i64*** %4, align 8, !tbaa !24, !alias.scope !2566, !noalias !2569 %5 = getelementptr inbounds i64*, i64** %ptls_load3839, i64 2 %safepoint = load i64*, i64** %5, align 8, !tbaa !28, !invariant.load !23, !alias.scope !2571, !noalias !2574 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #35, !dbg !2576 fence syncscope("singlethread") seq_cst %6 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !2577 %7 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !2587 %unbox = load i64, i64 addrspace(11)* %7, align 8, !dbg !2589, !tbaa !28, !invariant.load !23, !alias.scope !2591, !noalias !2594 %unbox2 = load i64, i64 addrspace(11)* %6, align 8, !dbg !2589, !tbaa !28, !invariant.load !23, !alias.scope !2591, !noalias !2594 %8 = sub i64 %unbox, %unbox2, !dbg !2589 %9 = add i64 %8, 1, !dbg !2596 %10 = call i64 @llvm.smax.i64(i64 %9, i64 noundef 0) #35, !dbg !2597 %11 = icmp ult i64 %8, 9223372036854775807, !dbg !2602 br i1 %11, label %L12, label %common.ret, !dbg !2586 common.ret.loopexit.unr-lcssa.loopexit: ; preds = %L54 br label %common.ret.loopexit.unr-lcssa, !dbg !2603 common.ret.loopexit.unr-lcssa: ; preds = %L41.L54_crit_edge, %common.ret.loopexit.unr-lcssa.loopexit %value_phi14.unr = phi i64 [ 1, %L41.L54_crit_edge ], [ %60, %common.ret.loopexit.unr-lcssa.loopexit ] store i64 %value_phi14.unr, i64* %2, align 8, !dbg !2603 %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !2603 br i1 %lcmp.mod.not, label %common.ret, label %L54.epil.preheader, !dbg !2603 L54.epil.preheader: ; preds = %common.ret.loopexit.unr-lcssa %12 = add nsw i64 %xtraiter, -1, !dbg !2603 br label %L54.epil, !dbg !2603 L54.epil: ; preds = %L54.epil, %L54.epil.preheader %iv1 = phi i64 [ 0, %L54.epil.preheader ], [ %iv.next2, %L54.epil ] %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !2604 %13 = add i64 %value_phi14.unr, %iv1, !dbg !2604 %14 = add i64 %13, -1, !dbg !2604 %15 = add i64 %14, %unbox20.pre, !dbg !2607 %16 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %15, !dbg !2607 %arrayref.epil = load double, double addrspace(13)* %16, align 8, !dbg !2607, !tbaa !67, !alias.scope !2608, !noalias !2611 %17 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %14, !dbg !2613 store double %arrayref.epil, double addrspace(13)* %17, align 8, !dbg !2613, !tbaa !67, !alias.scope !2614, !noalias !2617 %epil.iter.cmp.not = icmp eq i64 %iv.next2, %xtraiter, !dbg !2603 br i1 %epil.iter.cmp.not, label %common.ret.loopexit, label %L54.epil, !dbg !2603, !llvm.loop !2621 common.ret.loopexit: ; preds = %L54.epil br label %common.ret, !dbg !2622 common.ret: ; preds = %common.ret.loopexit, %common.ret.loopexit.unr-lcssa, %top %18 = load i64, i64* %2, align 8, !dbg !2622 ret i64 %18, !dbg !2622 L12: ; preds = %top %19 = addrspacecast {} addrspace(10)* %0 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !2623 %arraylen_ptr = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %19, i64 0, i32 1, !dbg !2623 %arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !2623, !tbaa !1017, !range !41, !alias.scope !2627, !noalias !2630 %20 = add nsw i64 %10, -1, !dbg !2632 %.not = icmp ult i64 %20, %arraylen, !dbg !2636 br i1 %.not, label %L41.L54_crit_edge, label %L99, !dbg !2635 L41.L54_crit_edge: ; preds = %L12 %"getfield_addr.phi.trans.insert'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %"'1", i64 0, i32 0 %getfield_addr.phi.trans.insert = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 0 %"getfield.pre'ipl" = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %"getfield_addr.phi.trans.insert'ipg" unordered, align 8, !dbg !2637, !tbaa !28, !alias.scope !2638, !noalias !2639 %getfield.pre = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr.phi.trans.insert unordered, align 8, !dbg !2637, !tbaa !28, !invariant.load !23, !alias.scope !2591, !noalias !2594 %.phi.trans.insert = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 2 %unbox20.pre = load i64, i64 addrspace(11)* %.phi.trans.insert, align 8, !dbg !2604, !tbaa !28, !invariant.load !23, !alias.scope !2591, !noalias !2594 %"'ipc2" = addrspacecast {} addrspace(10)* %"getfield.pre'ipl" to double addrspace(13)* addrspace(11)*, !dbg !2607 %21 = addrspacecast {} addrspace(10)* %getfield.pre to double addrspace(13)* addrspace(11)*, !dbg !2607 %"arrayptr.pre40'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc2", align 8, !dbg !2607, !tbaa !273, !alias.scope !2640, !noalias !2643 %arrayptr.pre40 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %21, align 8, !dbg !2607, !tbaa !273, !alias.scope !2645, !noalias !2646 %"'ipc" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !2613 %22 = addrspacecast {} addrspace(10)* %0 to double addrspace(13)* addrspace(11)*, !dbg !2613 %"arrayptr22.pre41'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc", align 16, !dbg !2613, !tbaa !273, !alias.scope !2647, !noalias !2648 %arrayptr22.pre41 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %22, align 16, !dbg !2613, !tbaa !273, !alias.scope !2649, !noalias !2630 %xtraiter = and i64 %10, 7, !dbg !2650 %23 = icmp ult i64 %20, 7, !dbg !2650 br i1 %23, label %common.ret.loopexit.unr-lcssa, label %L41.L54_crit_edge.new, !dbg !2650 L41.L54_crit_edge.new: ; preds = %L41.L54_crit_edge %unroll_iter = and i64 %10, 9223372036854775800, !dbg !2650 %24 = add nsw i64 %unroll_iter, -8, !dbg !2650 %25 = lshr i64 %24, 3, !dbg !2650 br label %L54, !dbg !2650 L54: ; preds = %L54, %L41.L54_crit_edge.new %iv = phi i64 [ %iv.next, %L54 ], [ 0, %L41.L54_crit_edge.new ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !2604 %26 = shl i64 %iv, 3, !dbg !2604 %27 = shl i64 %iv, 3, !dbg !2604 %28 = add i64 %27, 1, !dbg !2604 %29 = add nsw i64 %28, -1, !dbg !2604 %30 = add i64 %29, %unbox20.pre, !dbg !2607 %31 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %30, !dbg !2607 %arrayref = load double, double addrspace(13)* %31, align 8, !dbg !2607, !tbaa !67, !alias.scope !2608, !noalias !2611 %32 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %29, !dbg !2613 store double %arrayref, double addrspace(13)* %32, align 8, !dbg !2613, !tbaa !67, !alias.scope !2614, !noalias !2617 %33 = add nuw nsw i64 %28, 1, !dbg !2651 %34 = add i64 %28, %unbox20.pre, !dbg !2607 %35 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %34, !dbg !2607 %arrayref.1 = load double, double addrspace(13)* %35, align 8, !dbg !2607, !tbaa !67, !alias.scope !2608, !noalias !2611 %36 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %28, !dbg !2613 store double %arrayref.1, double addrspace(13)* %36, align 8, !dbg !2613, !tbaa !67, !alias.scope !2614, !noalias !2617 %37 = add nuw nsw i64 %28, 2, !dbg !2651 %38 = add i64 %33, %unbox20.pre, !dbg !2607 %39 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %38, !dbg !2607 %arrayref.2 = load double, double addrspace(13)* %39, align 8, !dbg !2607, !tbaa !67, !alias.scope !2608, !noalias !2611 %40 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %33, !dbg !2613 store double %arrayref.2, double addrspace(13)* %40, align 8, !dbg !2613, !tbaa !67, !alias.scope !2614, !noalias !2617 %41 = add nuw nsw i64 %28, 3, !dbg !2651 %42 = add i64 %37, %unbox20.pre, !dbg !2607 %43 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %42, !dbg !2607 %arrayref.3 = load double, double addrspace(13)* %43, align 8, !dbg !2607, !tbaa !67, !alias.scope !2608, !noalias !2611 %44 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %37, !dbg !2613 store double %arrayref.3, double addrspace(13)* %44, align 8, !dbg !2613, !tbaa !67, !alias.scope !2614, !noalias !2617 %45 = add nuw nsw i64 %28, 4, !dbg !2651 %46 = add i64 %41, %unbox20.pre, !dbg !2607 %47 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %46, !dbg !2607 %arrayref.4 = load double, double addrspace(13)* %47, align 8, !dbg !2607, !tbaa !67, !alias.scope !2608, !noalias !2611 %48 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %41, !dbg !2613 store double %arrayref.4, double addrspace(13)* %48, align 8, !dbg !2613, !tbaa !67, !alias.scope !2614, !noalias !2617 %49 = add nuw nsw i64 %28, 5, !dbg !2651 %50 = add i64 %45, %unbox20.pre, !dbg !2607 %51 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %50, !dbg !2607 %arrayref.5 = load double, double addrspace(13)* %51, align 8, !dbg !2607, !tbaa !67, !alias.scope !2608, !noalias !2611 %52 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %45, !dbg !2613 store double %arrayref.5, double addrspace(13)* %52, align 8, !dbg !2613, !tbaa !67, !alias.scope !2614, !noalias !2617 %53 = add nuw nsw i64 %28, 6, !dbg !2651 %54 = add i64 %49, %unbox20.pre, !dbg !2607 %55 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %54, !dbg !2607 %arrayref.6 = load double, double addrspace(13)* %55, align 8, !dbg !2607, !tbaa !67, !alias.scope !2608, !noalias !2611 %56 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %49, !dbg !2613 store double %arrayref.6, double addrspace(13)* %56, align 8, !dbg !2613, !tbaa !67, !alias.scope !2614, !noalias !2617 %57 = add i64 %53, %unbox20.pre, !dbg !2607 %58 = getelementptr inbounds double, double addrspace(13)* %arrayptr.pre40, i64 %57, !dbg !2607 %arrayref.7 = load double, double addrspace(13)* %58, align 8, !dbg !2607, !tbaa !67, !alias.scope !2608, !noalias !2611 %59 = getelementptr inbounds double, double addrspace(13)* %arrayptr22.pre41, i64 %53, !dbg !2613 store double %arrayref.7, double addrspace(13)* %59, align 8, !dbg !2613, !tbaa !67, !alias.scope !2614, !noalias !2617 %60 = add i64 %28, 8, !dbg !2651 %niter.next.7 = add i64 %26, 8, !dbg !2603 %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter, !dbg !2603 br i1 %niter.ncmp.7, label %common.ret.loopexit.unr-lcssa.loopexit, label %L54, !dbg !2603 L99: ; preds = %L12 %current_task136 = getelementptr inbounds {}**, {}*** %3, i64 -14 %current_task1 = bitcast {}*** %current_task136 to {}** %box = call noalias nonnull dereferenceable(8) "enzyme_inactive" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151454372384 to {}*) to {} addrspace(10)*)) #36, !dbg !2635 %memcpy_refined_dst = bitcast {} addrspace(10)* %box to i64 addrspace(10)*, !dbg !2635 store i64 %10, i64 addrspace(10)* %memcpy_refined_dst, align 8, !dbg !2635, !tbaa !106, !alias.scope !70, !noalias !2653 %61 = call nonnull {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151447831152 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151487465984 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %0, {} addrspace(10)* nofree nonnull %box) #37, !dbg !2635 %62 = addrspacecast {} addrspace(10)* %61 to {} addrspace(12)*, !dbg !2635 call void @ijl_throw({} addrspace(12)* %62) #38, !dbg !2635 unreachable, !dbg !2635 } after simplification : ; Function Attrs: mustprogress willreturn define internal fastcc void @preprocess_julia_unalias_1484({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }) align 8 dereferenceable(40) %0, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %2, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %3) unnamed_addr #35 !dbg !2656 { top: %4 = call {}*** @julia.get_pgcstack() %5 = call {}*** @julia.get_pgcstack() %6 = bitcast {}*** %5 to {}** %7 = getelementptr inbounds {}*, {}** %6, i64 -14 %8 = getelementptr inbounds {}*, {}** %7, i64 16 %9 = bitcast {}** %8 to i8** %10 = load i8*, i8** %9, align 8 %11 = call noalias nonnull dereferenceable(40) dereferenceable_or_null(40) {} addrspace(10)* @julia.gc_alloc_obj({}** %7, i64 40, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146539529808 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1596 call void @zeroType.19({} addrspace(10)* %11, i8 0, i64 40), !enzyme_zerostack !23 %12 = bitcast {} addrspace(10)* %11 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %13 = bitcast {}*** %4 to {}** %14 = getelementptr inbounds {}*, {}** %13, i64 -14 %15 = getelementptr inbounds {}*, {}** %14, i64 16 %16 = bitcast {}** %15 to i8** %17 = load i8*, i8** %16, align 8 %18 = call noalias nonnull dereferenceable(8) dereferenceable_or_null(8) {} addrspace(10)* @julia.gc_alloc_obj({}** %14, i64 8, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146547762384 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1596 call void @zeroType.20({} addrspace(10)* %18, i8 0, i64 8), !enzyme_zerostack !23 %19 = bitcast {} addrspace(10)* %18 to [1 x {} addrspace(10)*] addrspace(10)*, !enzyme_caststack !23 %20 = call {}*** @julia.get_pgcstack() #36 %ptls_field5 = getelementptr inbounds {}**, {}*** %20, i64 2 %21 = bitcast {}*** %ptls_field5 to i64*** %ptls_load67 = load i64**, i64*** %21, align 8, !tbaa !24 %22 = getelementptr inbounds i64*, i64** %ptls_load67, i64 2 %safepoint = load i64*, i64** %22, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #36, !dbg !2657 fence syncscope("singlethread") seq_cst %23 = addrspacecast {} addrspace(10)* %2 to {} addrspace(11)*, !dbg !2658 %24 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %23) #37, !dbg !2658 %25 = bitcast {}* %24 to i8**, !dbg !2658 %arrayptr = load i8*, i8** %25, align 8, !dbg !2658, !tbaa !273, !alias.scope !276, !noalias !277, !nonnull !23 %getfield_addr = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %3, i64 0, i32 0, !dbg !2662 %getfield = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr unordered, align 8, !dbg !2662, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45, !nonnull !23, !dereferenceable !129, !align !130 %26 = addrspacecast {} addrspace(10)* %getfield to {} addrspace(11)*, !dbg !2664 %27 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %26) #37, !dbg !2664 %28 = bitcast {}* %27 to i8**, !dbg !2664 %arrayptr3 = load i8*, i8** %28, align 8, !dbg !2664, !tbaa !273, !alias.scope !276, !noalias !277, !nonnull !23 %.not = icmp eq i8* %arrayptr, %arrayptr3, !dbg !2667 br i1 %.not, label %L10, label %L12, !dbg !2657 common.ret: ; preds = %L12, %L10 ret void, !dbg !2657 L10: ; preds = %top %29 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %12 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2657 %30 = addrspacecast [1 x {} addrspace(10)*] addrspace(10)* %19 to [1 x {} addrspace(10)*]*, !dbg !2657 call fastcc void @julia_unaliascopy_1487({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }) align 8 dereferenceable(40) %29, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzymejl_returnRoots" %30, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %3) #36, !dbg !2657 %31 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %12, i64 0, i32 0, !dbg !2657 %32 = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %31, align 8, !dbg !2657 %33 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2657 store {} addrspace(10)* %32, {} addrspace(10)** %33, align 8, !dbg !2657, !noalias !2670 %34 = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0 to i8*, !dbg !2657 %35 = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %12 to i8 addrspace(10)*, !dbg !2657 call void @llvm.memcpy.p0i8.p10i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(40) %34, i8 addrspace(10)* noundef nonnull align 8 dereferenceable(40) %35, i64 noundef 40, i1 noundef false) #36, !dbg !2657, !noalias !2670 br label %common.ret L12: ; preds = %top %36 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2657 store {} addrspace(10)* %getfield, {} addrspace(10)** %36, align 8, !dbg !2657, !noalias !2670 %37 = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0 to i8*, !dbg !2657 %38 = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %3 to i8 addrspace(11)*, !dbg !2657 call void @llvm.memcpy.p0i8.p11i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(40) %37, i8 addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %38, i64 noundef 40, i1 noundef false) #36, !dbg !2657, !noalias !2670 br label %common.ret } after simplification : ; Function Attrs: mustprogress willreturn define internal fastcc void @preprocess_julia_unaliascopy_1487({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }) align 8 dereferenceable(40) %0, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %2) unnamed_addr #36 !dbg !2720 { top: %3 = call {}*** @julia.get_pgcstack() #37 %ptls_field9 = getelementptr inbounds {}**, {}*** %3, i64 2 %4 = bitcast {}*** %ptls_field9 to i64*** %ptls_load1011 = load i64**, i64*** %4, align 8, !tbaa !24 %5 = getelementptr inbounds i64*, i64** %ptls_load1011, i64 2 %safepoint = load i64*, i64** %5, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #37, !dbg !2721 fence syncscope("singlethread") seq_cst %6 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 0, !dbg !2722 %7 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 1, !dbg !2727 %unbox = load i64, i64 addrspace(11)* %7, align 8, !dbg !2729, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %unbox2 = load i64, i64 addrspace(11)* %6, align 8, !dbg !2729, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45 %8 = sub i64 %unbox, %unbox2, !dbg !2729 %9 = add i64 %8, 1, !dbg !2731 %10 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_1d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151416616992 to {}*) to {} addrspace(10)*), i64 %9) #38, !dbg !2732 call fastcc void @julia_copyto__1477({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %10, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %2) #37, !dbg !2735 %11 = call i64 @llvm.smax.i64(i64 %9, i64 noundef 0) #37, !dbg !2736 %.not = icmp ugt i64 %8, 9223372036854775806, !dbg !2744 %. = select i1 %.not, i64 0, i64 %11, !dbg !2751 %12 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2752 store {} addrspace(10)* %10, {} addrspace(10)** %12, align 8, !dbg !2752, !noalias !2753 %.repack = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0, i64 0, i32 0, !dbg !2752 store {} addrspace(10)* %10, {} addrspace(10)** %.repack, align 8, !dbg !2752, !noalias !2753 %.repack18 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 0, i64 0, !dbg !2752 store i64 1, i64* %.repack18, align 8, !dbg !2752, !noalias !2753 %.repack19 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 0, i64 1, !dbg !2752 store i64 %., i64* %.repack19, align 8, !dbg !2752, !noalias !2753 %.repack14 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0, i64 0, i32 2, !dbg !2752 store i64 0, i64* %.repack14, align 8, !dbg !2752, !noalias !2753 %.repack16 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0, i64 0, i32 3, !dbg !2752 store i64 1, i64* %.repack16, align 8, !dbg !2752, !noalias !2753 ret void, !dbg !2752 } ; Function Attrs: mustprogress willreturn define internal fastcc { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } @augmented_julia_copyto__1477({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %"'1") unnamed_addr #33 !dbg !2799 { top: %2 = alloca { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, align 8 %3 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }* %2, i64 0, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %3, align 8 %4 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }* %2, i64 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %4, align 8 %5 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }* %2, i64 0, i32 3 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %5, align 8 %6 = alloca [1 x {} addrspace(10)*], i64 1, align 8 %7 = bitcast [1 x {} addrspace(10)*]* %6 to {}* %8 = bitcast [1 x {} addrspace(10)*]* %6 to {}* %9 = call {}*** @julia.get_pgcstack() %10 = call {}*** @julia.get_pgcstack() %11 = bitcast {}*** %10 to {}** %12 = getelementptr inbounds {}*, {}** %11, i64 -14 %"'mi" = call noalias nonnull dereferenceable(40) dereferenceable_or_null(40) {} addrspace(10)* @julia.gc_alloc_obj({}** %12, i64 40, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146539529808 to {}*) to {} addrspace(10)*)) %13 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }* %2, i32 0, i32 0 store {} addrspace(10)* %"'mi", {} addrspace(10)** %13, align 8 %14 = bitcast {} addrspace(10)* %"'mi" to i8 addrspace(10)* call void @llvm.memset.p10i8.i64(i8 addrspace(10)* nonnull dereferenceable(40) dereferenceable_or_null(40) %14, i8 0, i64 40, i1 false) %15 = call noalias nonnull dereferenceable(40) dereferenceable_or_null(40) {} addrspace(10)* @julia.gc_alloc_obj({}** %12, i64 40, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146539529808 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1596 %16 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }* %2, i32 0, i32 1 store {} addrspace(10)* %15, {} addrspace(10)** %16, align 8 %17 = bitcast {} addrspace(10)* %15 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* br label %loop.i loop.i: ; preds = %loop.i, %top %18 = phi i64 [ 0, %top ], [ %19, %loop.i ] %19 = add i64 %18, 1 %20 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %17, i64 %18, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %20, align 8 %21 = icmp eq i64 %19, 1 br i1 %21, label %zeroType.17.exit, label %loop.i zeroType.17.exit: ; preds = %loop.i %22 = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* br label %loop.i1 loop.i1: ; preds = %loop.i1, %zeroType.17.exit %23 = phi i64 [ 0, %zeroType.17.exit ], [ %24, %loop.i1 ] %24 = add i64 %23, 1 %25 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %22, i64 %23, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %25, align 8 %26 = icmp eq i64 %24, 1 br i1 %26, label %zeroType.17.exit2, label %loop.i1 zeroType.17.exit2: ; preds = %loop.i1 %"'ipc" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %27 = bitcast {} addrspace(10)* %15 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %28 = bitcast {}*** %9 to {}** %29 = getelementptr inbounds {}*, {}** %28, i64 -14 %30 = addrspacecast {}* %7 to {} addrspace(10)* %31 = bitcast {}* %7 to [1 x {} addrspace(10)*]* %32 = call {}*** @julia.get_pgcstack() #37 %ptls_field6 = getelementptr inbounds {}**, {}*** %32, i64 2 %33 = bitcast {}*** %ptls_field6 to i64*** %ptls_load78 = load i64**, i64*** %33, align 8, !tbaa !24, !alias.scope !2800, !noalias !2803 %34 = getelementptr inbounds i64*, i64** %ptls_load78, i64 2 %safepoint = load i64*, i64** %34, align 8, !tbaa !28, !invariant.load !23, !alias.scope !2805, !noalias !2808 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #37, !dbg !2810 fence syncscope("singlethread") seq_cst %35 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !2811 %36 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !2821 %unbox = load i64, i64 addrspace(11)* %36, align 8, !dbg !2823, !tbaa !28, !invariant.load !23, !alias.scope !2825, !noalias !2828 %unbox2 = load i64, i64 addrspace(11)* %35, align 8, !dbg !2823, !tbaa !28, !invariant.load !23, !alias.scope !2825, !noalias !2828 %37 = sub i64 %unbox, %unbox2, !dbg !2823 %38 = icmp ult i64 %37, 9223372036854775807, !dbg !2830 %39 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }* %2, i32 0, i32 4, !dbg !2820 store i1 %38, i1* %39, align 1, !dbg !2820 br i1 %38, label %L12, label %common.ret, !dbg !2820 common.ret: ; preds = %L12, %zeroType.17.exit2 %40 = load { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }* %2, align 8, !dbg !2831 ret { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %40, !dbg !2831 L12: ; preds = %zeroType.17.exit2 %"'ipc9" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2832 %41 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %27 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2832 %_augmented10 = call fastcc { {} addrspace(10)* } @fakeaugmented_julia_unalias_1484({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" %41, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc9", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" %31, {} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1"), !dbg !2832 %subcache = extractvalue { {} addrspace(10)* } %_augmented10, 0, !dbg !2832 %42 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }* %2, i32 0, i32 3, !dbg !2833 store {} addrspace(10)* %subcache, {} addrspace(10)** %42, align 8, !dbg !2833 %"'ipc8" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2833 %43 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %27 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2833 %_augmented = call fastcc i64 @augmented_julia_copyto_unaliased__1481({} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %43, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc8"), !dbg !2833 %44 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }* %2, i32 0, i32 2 store i64 %_augmented, i64* %44, align 8 br label %common.ret } ; Function Attrs: mustprogress willreturn define internal fastcc { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } @augmented_julia_unaliascopy_1487({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(40) "enzyme_sret" %0, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'", [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %2, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %"'1") unnamed_addr #36 !dbg !2791 { top: %3 = alloca { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, align 8 %4 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }* %3, i64 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %4, align 8 %5 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }* %3, i64 0, i32 2 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %5, align 8 %6 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }* %3, i64 0, i32 0, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %6, align 8 %7 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }* %3, i64 0, i32 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %7, align 8 %8 = getelementptr { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }* %3, i64 0, i32 0, i32 3 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %8, align 8 %9 = call {}*** @julia.get_pgcstack() #37 %ptls_field9 = getelementptr inbounds {}**, {}*** %9, i64 2 %10 = bitcast {}*** %ptls_field9 to i64*** %ptls_load1011 = load i64**, i64*** %10, align 8, !tbaa !24, !alias.scope !2792, !noalias !2795 %11 = getelementptr inbounds i64*, i64** %ptls_load1011, i64 2 %safepoint = load i64*, i64** %11, align 8, !tbaa !28, !invariant.load !23, !alias.scope !2797, !noalias !2800 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #37, !dbg !2802 fence syncscope("singlethread") seq_cst %12 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 0, !dbg !2803 %13 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %2, i64 0, i32 1, i64 0, i64 1, !dbg !2808 %unbox = load i64, i64 addrspace(11)* %13, align 8, !dbg !2810, !tbaa !28, !invariant.load !23, !alias.scope !2812, !noalias !2815 %unbox2 = load i64, i64 addrspace(11)* %12, align 8, !dbg !2810, !tbaa !28, !invariant.load !23, !alias.scope !2812, !noalias !2815 %14 = sub i64 %unbox, %unbox2, !dbg !2810 %15 = add i64 %14, 1, !dbg !2817 %16 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }* %3, i32 0, i32 3, !dbg !2818 store i64 %15, i64* %16, align 8, !dbg !2818 %17 = call {} addrspace(10)* @ijl_alloc_array_1d({} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151416616992 to {}*) to {} addrspace(10)*), i64 %15), !dbg !2818 %18 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }* %3, i32 0, i32 1, !dbg !2818 store {} addrspace(10)* %17, {} addrspace(10)** %18, align 8, !dbg !2818 %19 = mul i64 %15, 8, !dbg !2818 %20 = bitcast {} addrspace(10)* %17 to i8 addrspace(13)* addrspace(10)*, !dbg !2818 %21 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(10)* %20, align 8, !dbg !2818 call void @llvm.memset.p13i8.i64(i8 addrspace(13)* align 8 %21, i8 0, i64 %19, i1 false), !dbg !2818 %22 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_1d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151416616992 to {}*) to {} addrspace(10)*), i64 %15) #38, !dbg !2818 %23 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }* %3, i32 0, i32 2, !dbg !2821 store {} addrspace(10)* %22, {} addrspace(10)** %23, align 8, !dbg !2821 %_augmented = call fastcc { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } @augmented_julia_copyto__1477({} addrspace(10)* align 16 %22, {} addrspace(10)* align 16 %17, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %2, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1"), !dbg !2821 %24 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }* %3, i32 0, i32 0, !dbg !2822 store { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %_augmented, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }* %24, align 8, !dbg !2822 %25 = call i64 @llvm.smax.i64(i64 %15, i64 noundef 0) #37, !dbg !2822 %.not = icmp ugt i64 %14, 9223372036854775806, !dbg !2830 %. = select i1 %.not, i64 0, i64 %25, !dbg !2837 %26 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2838 store {} addrspace(10)* %22, {} addrspace(10)** %26, align 8, !dbg !2838, !noalias !2839 %".repack'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 0, !dbg !2838 %.repack = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0, i64 0, i32 0, !dbg !2838 store {} addrspace(10)* %17, {} addrspace(10)** %".repack'ipg", align 8, !dbg !2838, !alias.scope !2842, !noalias !2845 store {} addrspace(10)* %22, {} addrspace(10)** %.repack, align 8, !dbg !2838, !alias.scope !2849, !noalias !2850 %".repack18'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 1, i64 0, i64 0, !dbg !2838 %.repack18 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 0, i64 0, !dbg !2838 store i64 1, i64* %".repack18'ipg", align 8, !dbg !2838, !alias.scope !2842, !noalias !2845 store i64 1, i64* %.repack18, align 8, !dbg !2838, !alias.scope !2849, !noalias !2850 %".repack19'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 1, i64 0, i64 1, !dbg !2838 %.repack19 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0, i64 0, i32 1, i64 0, i64 1, !dbg !2838 store i64 %., i64* %".repack19'ipg", align 8, !dbg !2838, !alias.scope !2842, !noalias !2845 store i64 %., i64* %.repack19, align 8, !dbg !2838, !alias.scope !2849, !noalias !2850 %".repack14'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 2, !dbg !2838 %.repack14 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0, i64 0, i32 2, !dbg !2838 store i64 0, i64* %".repack14'ipg", align 8, !dbg !2838, !alias.scope !2842, !noalias !2845 store i64 0, i64* %.repack14, align 8, !dbg !2838, !alias.scope !2849, !noalias !2850 %".repack16'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'", i64 0, i32 3, !dbg !2838 %.repack16 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0, i64 0, i32 3, !dbg !2838 store i64 1, i64* %".repack16'ipg", align 8, !dbg !2838, !alias.scope !2842, !noalias !2845 store i64 1, i64* %.repack16, align 8, !dbg !2838, !alias.scope !2849, !noalias !2850 %27 = load { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }* %3, align 8, !dbg !2838 ret { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } %27, !dbg !2838 } ; Function Attrs: mustprogress willreturn define internal fastcc {} addrspace(10)* @augmented_julia_unalias_1484({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(40) "enzyme_sret" %0, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'", [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %2, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %"'1", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %3, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %"'2") unnamed_addr #35 !dbg !2804 { top: %4 = call {}*** @julia.get_pgcstack() %5 = alloca {} addrspace(10)*, align 8 %6 = bitcast {}*** %4 to {}** %7 = getelementptr inbounds {}*, {}** %6, i64 -14 %8 = getelementptr inbounds {}*, {}** %7, i64 16 %9 = bitcast {}** %8 to i8** %10 = load i8*, i8** %9, align 8 %11 = call noalias nonnull dereferenceable(80) dereferenceable_or_null(80) {} addrspace(10)* @julia.gc_alloc_obj({}** %7, i64 80, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146562286160 to {}*) to {} addrspace(10)*)) %12 = bitcast {} addrspace(10)* %11 to { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* br label %loop.i loop.i: ; preds = %loop.i, %top %13 = phi i64 [ 0, %top ], [ %14, %loop.i ] %14 = add i64 %13, 1 %15 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %15, align 8 %16 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 1, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %16, align 8 %17 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 1, i32 2 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %17, align 8 %18 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 1, i32 0, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %18, align 8 %19 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 1, i32 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %19, align 8 %20 = getelementptr { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %12, i64 %13, i32 1, i32 0, i32 3 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %20, align 8 %21 = icmp eq i64 %14, 1 br i1 %21, label %zeroType.22.exit, label %loop.i zeroType.22.exit: ; preds = %loop.i %tapemem = bitcast {} addrspace(10)* %11 to { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* store {} addrspace(10)* %11, {} addrspace(10)** %5, align 8 %22 = alloca [1 x {} addrspace(10)*], i64 1, align 8 %23 = bitcast [1 x {} addrspace(10)*]* %22 to {}* %24 = bitcast [1 x {} addrspace(10)*]* %22 to {}* %25 = alloca { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, i64 1, align 8 %26 = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %25 to {}* %27 = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %25 to {}* %28 = call {}*** @julia.get_pgcstack() %29 = call {}*** @julia.get_pgcstack() %30 = bitcast {}*** %29 to {}** %31 = getelementptr inbounds {}*, {}** %30, i64 -14 %"'mi" = call noalias nonnull dereferenceable(40) dereferenceable_or_null(40) {} addrspace(10)* @julia.gc_alloc_obj({}** %31, i64 40, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146539529808 to {}*) to {} addrspace(10)*)) %32 = getelementptr inbounds { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %tapemem, i32 0, i32 0 store {} addrspace(10)* %"'mi", {} addrspace(10)* addrspace(10)* %32, align 8 call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %11, {} addrspace(10)* %"'mi") %33 = bitcast {} addrspace(10)* %"'mi" to i8 addrspace(10)* call void @llvm.memset.p10i8.i64(i8 addrspace(10)* nonnull dereferenceable(40) dereferenceable_or_null(40) %33, i8 0, i64 40, i1 false) %34 = addrspacecast {}* %26 to {} addrspace(10)* %35 = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* br label %loop.i1 loop.i1: ; preds = %loop.i1, %zeroType.22.exit %36 = phi i64 [ 0, %zeroType.22.exit ], [ %37, %loop.i1 ] %37 = add i64 %36, 1 %38 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %35, i64 %36, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %38, align 8 %39 = icmp eq i64 %37, 1 br i1 %39, label %zeroType.19.exit, label %loop.i1 zeroType.19.exit: ; preds = %loop.i1 %"'ipc11" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %40 = bitcast {}* %26 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %41 = bitcast {}*** %28 to {}** %42 = getelementptr inbounds {}*, {}** %41, i64 -14 %43 = addrspacecast {}* %23 to {} addrspace(10)* %44 = bitcast {}* %23 to [1 x {} addrspace(10)*]* %45 = call {}*** @julia.get_pgcstack() #37 %ptls_field5 = getelementptr inbounds {}**, {}*** %45, i64 2 %46 = bitcast {}*** %ptls_field5 to i64*** %ptls_load67 = load i64**, i64*** %46, align 8, !tbaa !24, !alias.scope !2805, !noalias !2808 %47 = getelementptr inbounds i64*, i64** %ptls_load67, i64 2 %safepoint = load i64*, i64** %47, align 8, !tbaa !28, !invariant.load !23, !alias.scope !2810, !noalias !2813 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #37, !dbg !2815 fence syncscope("singlethread") seq_cst %48 = addrspacecast {} addrspace(10)* %2 to {} addrspace(11)*, !dbg !2816 %49 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %48) #38, !dbg !2816 %50 = bitcast {}* %49 to i8**, !dbg !2816 %arrayptr = load i8*, i8** %50, align 8, !dbg !2816, !tbaa !273, !alias.scope !2820, !noalias !2823, !nonnull !23 %getfield_addr = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %3, i64 0, i32 0, !dbg !2825 %getfield = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr unordered, align 8, !dbg !2825, !tbaa !28, !invariant.load !23, !alias.scope !2827, !noalias !2830, !nonnull !23, !dereferenceable !129, !align !130 %51 = addrspacecast {} addrspace(10)* %getfield to {} addrspace(11)*, !dbg !2832 %52 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %51) #38, !dbg !2832 %53 = bitcast {}* %52 to i8**, !dbg !2832 %arrayptr3 = load i8*, i8** %53, align 8, !dbg !2832, !tbaa !273, !alias.scope !2835, !noalias !2838, !nonnull !23 %.not = icmp eq i8* %arrayptr, %arrayptr3, !dbg !2840 %54 = getelementptr inbounds { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %tapemem, i32 0, i32 2, !dbg !2815 store i1 %.not, i1 addrspace(10)* %54, align 1, !dbg !2815 br i1 %.not, label %L10, label %L12, !dbg !2815 common.ret: ; preds = %L12, %L10 %55 = load {} addrspace(10)*, {} addrspace(10)** %5, align 8, !dbg !2815 ret {} addrspace(10)* %55, !dbg !2815 L10: ; preds = %zeroType.19.exit %"'ipc13" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc11" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2815 %_augmented = call fastcc { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } @augmented_julia_unaliascopy_1487({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" %40, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc13", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" %44, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %3, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'2"), !dbg !2815 %56 = getelementptr inbounds { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %tapemem, i32 0, i32 1, !dbg !2815 store { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } %_augmented, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } addrspace(10)* %56, align 8, !dbg !2815 %57 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } %_augmented, 0, !dbg !2815 %58 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } %_augmented, 1, !dbg !2815 %59 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } %_augmented, 2, !dbg !2815 %60 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %57, 0, !dbg !2815 %61 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %57, 1, !dbg !2815 %62 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %57, 3, !dbg !2815 call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %11, {} addrspace(10)* %58, {} addrspace(10)* %59, {} addrspace(10)* %60, {} addrspace(10)* %61, {} addrspace(10)* %62), !dbg !2815 %63 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %40, i64 0, i32 0, !dbg !2815 %64 = load {} addrspace(10)*, {} addrspace(10)** %63, align 8, !dbg !2815, !alias.scope !2843, !noalias !2846 %65 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2815 store {} addrspace(10)* %64, {} addrspace(10)** %65, align 8, !dbg !2815, !noalias !2848 %"'ipc" = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'" to i8*, !dbg !2815 %66 = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0 to i8*, !dbg !2815 %"'ipc12" = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc11" to i8 addrspace(10)*, !dbg !2815 %67 = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %40 to i8*, !dbg !2815 call void @llvm.memcpy.p0i8.p10i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(40) %"'ipc", i8 addrspace(10)* noundef nonnull align 8 dereferenceable(40) %"'ipc12", i64 noundef 40, i1 noundef false) #37, !dbg !2815 call void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(40) %66, i8* noundef nonnull align 8 dereferenceable(40) %67, i64 noundef 40, i1 noundef false) #37, !dbg !2815, !noalias !2848 br label %common.ret L12: ; preds = %zeroType.19.exit %68 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*]* %1, i64 0, i64 0, !dbg !2815 store {} addrspace(10)* %getfield, {} addrspace(10)** %68, align 8, !dbg !2815, !noalias !2848 %"'ipc14" = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'" to i8*, !dbg !2815 %69 = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %0 to i8*, !dbg !2815 %"'ipc15" = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %"'2" to i8 addrspace(11)*, !dbg !2815 %70 = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %3 to i8 addrspace(11)*, !dbg !2815 call void @llvm.memcpy.p0i8.p11i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(40) %"'ipc14", i8 addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %"'ipc15", i64 noundef 40, i1 noundef false) #37, !dbg !2815 call void @llvm.memcpy.p0i8.p11i8.i64(i8* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(40) %69, i8 addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %70, i64 noundef 40, i1 noundef false) #37, !dbg !2815, !noalias !2848 br label %common.ret } ; Function Attrs: mustprogress willreturn define internal fastcc { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } @augmented_julia_copyto__1477.23({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %"'1") unnamed_addr #33 !dbg !2816 { top: %2 = alloca { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }, align 8 %3 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }* %2, i64 0, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %3, align 8 %4 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }* %2, i64 0, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %4, align 8 %5 = getelementptr { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }* %2, i64 0, i32 3 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %5, align 8 %6 = alloca [1 x {} addrspace(10)*], i64 1, align 8 %7 = bitcast [1 x {} addrspace(10)*]* %6 to {}* %8 = bitcast [1 x {} addrspace(10)*]* %6 to {}* %9 = call {}*** @julia.get_pgcstack() %10 = call {}*** @julia.get_pgcstack() %11 = bitcast {}*** %10 to {}** %12 = getelementptr inbounds {}*, {}** %11, i64 -14 %"'mi" = call noalias nonnull dereferenceable(40) dereferenceable_or_null(40) {} addrspace(10)* @julia.gc_alloc_obj({}** %12, i64 40, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146539529808 to {}*) to {} addrspace(10)*)) %13 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }* %2, i32 0, i32 0 store {} addrspace(10)* %"'mi", {} addrspace(10)** %13, align 8 %14 = bitcast {} addrspace(10)* %"'mi" to i8 addrspace(10)* call void @llvm.memset.p10i8.i64(i8 addrspace(10)* nonnull dereferenceable(40) dereferenceable_or_null(40) %14, i8 0, i64 40, i1 false) %15 = call noalias nonnull dereferenceable(40) dereferenceable_or_null(40) {} addrspace(10)* @julia.gc_alloc_obj({}** %12, i64 40, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146539529808 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !1596 %16 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }* %2, i32 0, i32 1 store {} addrspace(10)* %15, {} addrspace(10)** %16, align 8 %17 = bitcast {} addrspace(10)* %15 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* br label %loop.i loop.i: ; preds = %loop.i, %top %18 = phi i64 [ 0, %top ], [ %19, %loop.i ] %19 = add i64 %18, 1 %20 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %17, i64 %18, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %20, align 8 %21 = icmp eq i64 %19, 1 br i1 %21, label %zeroType.17.exit, label %loop.i zeroType.17.exit: ; preds = %loop.i %22 = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* br label %loop.i1 loop.i1: ; preds = %loop.i1, %zeroType.17.exit %23 = phi i64 [ 0, %zeroType.17.exit ], [ %24, %loop.i1 ] %24 = add i64 %23, 1 %25 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %22, i64 %23, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %25, align 8 %26 = icmp eq i64 %24, 1 br i1 %26, label %zeroType.17.exit2, label %loop.i1 zeroType.17.exit2: ; preds = %loop.i1 %"'ipc" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %27 = bitcast {} addrspace(10)* %15 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %28 = bitcast {}*** %9 to {}** %29 = getelementptr inbounds {}*, {}** %28, i64 -14 %30 = addrspacecast {}* %7 to {} addrspace(10)* %31 = bitcast {}* %7 to [1 x {} addrspace(10)*]* %32 = call {}*** @julia.get_pgcstack() #37 %ptls_field6 = getelementptr inbounds {}**, {}*** %32, i64 2 %33 = bitcast {}*** %ptls_field6 to i64*** %ptls_load78 = load i64**, i64*** %33, align 8, !tbaa !24, !alias.scope !2817, !noalias !2820 %34 = getelementptr inbounds i64*, i64** %ptls_load78, i64 2 %safepoint = load i64*, i64** %34, align 8, !tbaa !28, !invariant.load !23, !alias.scope !2822, !noalias !2825 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #37, !dbg !2827 fence syncscope("singlethread") seq_cst %35 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !2828 %36 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !2838 %unbox = load i64, i64 addrspace(11)* %36, align 8, !dbg !2840, !tbaa !28, !invariant.load !23, !alias.scope !2842, !noalias !2845 %unbox2 = load i64, i64 addrspace(11)* %35, align 8, !dbg !2840, !tbaa !28, !invariant.load !23, !alias.scope !2842, !noalias !2845 %37 = sub i64 %unbox, %unbox2, !dbg !2840 %38 = icmp ult i64 %37, 9223372036854775807, !dbg !2847 br i1 %38, label %L12, label %common.ret, !dbg !2837 common.ret: ; preds = %L12, %zeroType.17.exit2 %39 = load { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }* %2, align 8, !dbg !2848 ret { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } %39, !dbg !2848 L12: ; preds = %zeroType.17.exit2 %"'ipc9" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2849 %40 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %27 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2849 %_augmented10 = call fastcc {} addrspace(10)* @augmented_julia_unalias_1484({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" %40, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc9", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" %31, {} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1"), !dbg !2849 %41 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }* %2, i32 0, i32 3, !dbg !2850 store {} addrspace(10)* %_augmented10, {} addrspace(10)** %41, align 8, !dbg !2850 %"'ipc8" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2850 %42 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %27 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2850 %_augmented = call fastcc i64 @augmented_julia_copyto_unaliased__1481({} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %42, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc8"), !dbg !2850 %43 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }* %2, i32 0, i32 2 store i64 %_augmented, i64* %43, align 8 br label %common.ret } ; Function Attrs: mustprogress willreturn define internal fastcc void @diffejulia_copyto_unaliased__1481({} addrspace(10)* align 16 dereferenceable(40) "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %"'1", i64 %value_phi14.unr) unnamed_addr #34 !dbg !2875 { top: %"iv1'ac" = alloca i64, align 8 %"iv'ac" = alloca i64, align 8 %"arrayref.epil'de" = alloca double, align 8 %2 = getelementptr double, double* %"arrayref.epil'de", i64 0 store double 0.000000e+00, double* %2, align 8 %_cache = alloca i8, align 1 %"arrayref.7'de" = alloca double, align 8 %3 = getelementptr double, double* %"arrayref.7'de", i64 0 store double 0.000000e+00, double* %3, align 8 %"arrayref.6'de" = alloca double, align 8 %4 = getelementptr double, double* %"arrayref.6'de", i64 0 store double 0.000000e+00, double* %4, align 8 %"arrayref.5'de" = alloca double, align 8 %5 = getelementptr double, double* %"arrayref.5'de", i64 0 store double 0.000000e+00, double* %5, align 8 %"arrayref.4'de" = alloca double, align 8 %6 = getelementptr double, double* %"arrayref.4'de", i64 0 store double 0.000000e+00, double* %6, align 8 %"arrayref.3'de" = alloca double, align 8 %7 = getelementptr double, double* %"arrayref.3'de", i64 0 store double 0.000000e+00, double* %7, align 8 %"arrayref.2'de" = alloca double, align 8 %8 = getelementptr double, double* %"arrayref.2'de", i64 0 store double 0.000000e+00, double* %8, align 8 %"arrayref.1'de" = alloca double, align 8 %9 = getelementptr double, double* %"arrayref.1'de", i64 0 store double 0.000000e+00, double* %9, align 8 %"arrayref'de" = alloca double, align 8 %10 = getelementptr double, double* %"arrayref'de", i64 0 store double 0.000000e+00, double* %10, align 8 %11 = call {}*** @julia.get_pgcstack() #37 %12 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !2876 %13 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !2886 %unbox = load i64, i64 addrspace(11)* %13, align 8, !dbg !2888, !tbaa !28, !invariant.load !23, !alias.scope !2890, !noalias !2893 %unbox2 = load i64, i64 addrspace(11)* %12, align 8, !dbg !2888, !tbaa !28, !invariant.load !23, !alias.scope !2890, !noalias !2893 %14 = sub i64 %unbox, %unbox2, !dbg !2888 %15 = add i64 %14, 1, !dbg !2895 %16 = call i64 @llvm.smax.i64(i64 %15, i64 noundef 0) #37, !dbg !2896 %17 = icmp ult i64 %14, 9223372036854775807, !dbg !2901 store i8 0, i8* %_cache, align 1, !dbg !2885, !invariant.group !2902 br i1 %17, label %L12, label %common.ret, !dbg !2885 common.ret.loopexit.unr-lcssa.loopexit: ; preds = %L54 br label %common.ret.loopexit.unr-lcssa, !dbg !2903 common.ret.loopexit.unr-lcssa: ; preds = %L41.L54_crit_edge, %common.ret.loopexit.unr-lcssa.loopexit %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !2903 store i8 1, i8* %_cache, align 1, !dbg !2903, !invariant.group !2902 br i1 %lcmp.mod.not, label %common.ret, label %L54.epil.preheader, !dbg !2903 L54.epil.preheader: ; preds = %common.ret.loopexit.unr-lcssa %18 = add nsw i64 %xtraiter, -1, !dbg !2903 br label %L54.epil, !dbg !2903 L54.epil: ; preds = %L54.epil, %L54.epil.preheader %iv1 = phi i64 [ 0, %L54.epil.preheader ], [ %iv.next2, %L54.epil ] %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !2904 %19 = add i64 %value_phi14.unr, %iv1, !dbg !2904 %20 = add i64 %19, -1, !dbg !2904 %21 = add i64 %20, %unbox20.pre, !dbg !2907 %"'ipg10" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl", i64 %21, !dbg !2907 %"'ipg" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl", i64 %20, !dbg !2908 %epil.iter.cmp.not = icmp eq i64 %iv.next2, %xtraiter, !dbg !2903 br i1 %epil.iter.cmp.not, label %common.ret.loopexit, label %L54.epil, !dbg !2903, !llvm.loop !2909 common.ret.loopexit: ; preds = %L54.epil store i8 2, i8* %_cache, align 1, !dbg !2910, !invariant.group !2902 br label %common.ret, !dbg !2910 common.ret: ; preds = %common.ret.loopexit, %common.ret.loopexit.unr-lcssa, %top br label %invertcommon.ret, !dbg !2910 L12: ; preds = %top %22 = add nsw i64 %16, -1, !dbg !2911 br i1 true, label %L41.L54_crit_edge, label %L99, !dbg !2914 L41.L54_crit_edge: ; preds = %L12 %"getfield_addr.phi.trans.insert'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %"'1", i64 0, i32 0 %"getfield.pre'ipl" = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %"getfield_addr.phi.trans.insert'ipg" unordered, align 8, !dbg !2915, !tbaa !28, !alias.scope !2916, !noalias !2917, !invariant.group !2918 %.phi.trans.insert = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 2 %unbox20.pre = load i64, i64 addrspace(11)* %.phi.trans.insert, align 8, !dbg !2904, !tbaa !28, !invariant.load !23, !alias.scope !2890, !noalias !2893, !invariant.group !2919 %"'ipc11" = addrspacecast {} addrspace(10)* %"getfield.pre'ipl" to double addrspace(13)* addrspace(11)*, !dbg !2907 %"arrayptr.pre40'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc11", align 8, !dbg !2907, !tbaa !273, !alias.scope !2920, !noalias !2923, !invariant.group !2925 %"'ipc" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !2908 %"arrayptr22.pre41'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc", align 16, !dbg !2908, !tbaa !273, !alias.scope !2926, !noalias !2929, !invariant.group !2931 %xtraiter = and i64 %16, 7, !dbg !2932 %23 = icmp ult i64 %22, 7, !dbg !2932 br i1 %23, label %common.ret.loopexit.unr-lcssa, label %L41.L54_crit_edge.new, !dbg !2932 L41.L54_crit_edge.new: ; preds = %L41.L54_crit_edge %unroll_iter = and i64 %16, 9223372036854775800, !dbg !2932 %24 = add nsw i64 %unroll_iter, -8, !dbg !2932 %25 = lshr i64 %24, 3, !dbg !2932 br label %L54, !dbg !2932 L54: ; preds = %L54, %L41.L54_crit_edge.new %iv = phi i64 [ %iv.next, %L54 ], [ 0, %L41.L54_crit_edge.new ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !2904 %26 = shl i64 %iv, 3, !dbg !2904 %27 = shl i64 %iv, 3, !dbg !2904 %28 = add i64 %27, 1, !dbg !2904 %29 = add nsw i64 %28, -1, !dbg !2904 %30 = add i64 %29, %unbox20.pre, !dbg !2907 %"'ipg70" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl", i64 %30, !dbg !2907 %"'ipg67" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl", i64 %29, !dbg !2908 %31 = add nuw nsw i64 %28, 1, !dbg !2933 %32 = add i64 %28, %unbox20.pre, !dbg !2907 %"'ipg64" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl", i64 %32, !dbg !2907 %"'ipg62" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl", i64 %28, !dbg !2908 %33 = add nuw nsw i64 %28, 2, !dbg !2933 %34 = add i64 %31, %unbox20.pre, !dbg !2907 %"'ipg59" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl", i64 %34, !dbg !2907 %"'ipg56" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl", i64 %31, !dbg !2908 %35 = add nuw nsw i64 %28, 3, !dbg !2933 %36 = add i64 %33, %unbox20.pre, !dbg !2907 %"'ipg53" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl", i64 %36, !dbg !2907 %"'ipg50" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl", i64 %33, !dbg !2908 %37 = add nuw nsw i64 %28, 4, !dbg !2933 %38 = add i64 %35, %unbox20.pre, !dbg !2907 %"'ipg47" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl", i64 %38, !dbg !2907 %"'ipg44" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl", i64 %35, !dbg !2908 %39 = add nuw nsw i64 %28, 5, !dbg !2933 %40 = add i64 %37, %unbox20.pre, !dbg !2907 %"'ipg41" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl", i64 %40, !dbg !2907 %"'ipg38" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl", i64 %37, !dbg !2908 %41 = add nuw nsw i64 %28, 6, !dbg !2933 %42 = add i64 %39, %unbox20.pre, !dbg !2907 %"'ipg35" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl", i64 %42, !dbg !2907 %"'ipg32" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl", i64 %39, !dbg !2908 %43 = add i64 %41, %unbox20.pre, !dbg !2907 %"'ipg25" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl", i64 %43, !dbg !2907 %"'ipg19" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl", i64 %41, !dbg !2908 %niter.next.7 = add i64 %26, 8, !dbg !2903 %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter, !dbg !2903 br i1 %niter.ncmp.7, label %common.ret.loopexit.unr-lcssa.loopexit, label %L54, !dbg !2903 L99: ; preds = %L12 unreachable inverttop: ; preds = %invertL12, %invertcommon.ret fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertcommon.ret.loopexit.unr-lcssa.loopexit: ; preds = %invertcommon.ret.loopexit.unr-lcssa %unroll_iter_unwrap = and i64 %16, 9223372036854775800 %_unwrap = add nsw i64 %unroll_iter_unwrap, -8 %_unwrap3 = lshr i64 %_unwrap, 3 br label %mergeinvertL54_common.ret.loopexit.unr-lcssa.loopexit mergeinvertL54_common.ret.loopexit.unr-lcssa.loopexit: ; preds = %invertcommon.ret.loopexit.unr-lcssa.loopexit store i64 %_unwrap3, i64* %"iv'ac", align 8 br label %invertL54 invertcommon.ret.loopexit.unr-lcssa: ; preds = %invertcommon.ret, %invertL54.epil.preheader %_unwrap4 = add nsw i64 %16, -1 %_unwrap5 = icmp ult i64 %_unwrap4, 7 br i1 %_unwrap5, label %invertL41.L54_crit_edge, label %invertcommon.ret.loopexit.unr-lcssa.loopexit invertL54.epil.preheader: ; preds = %invertL54.epil br label %invertcommon.ret.loopexit.unr-lcssa invertL54.epil: ; preds = %mergeinvertL54.epil_common.ret.loopexit, %incinvertL54.epil %44 = load i64, i64* %"iv1'ac", align 8, !dbg !2908 %"'ipc_unwrap" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !2908 %"arrayptr22.pre41'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap", align 16, !dbg !2908, !tbaa !273, !alias.scope !2926, !noalias !2929 %_unwrap7 = add i64 %value_phi14.unr, %44, !dbg !2908 %_unwrap8 = add i64 %_unwrap7, -1, !dbg !2908 %"'ipg_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'il_phi_unwrap", i64 %_unwrap8, !dbg !2908 %45 = load double, double addrspace(13)* %"'ipg_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 store double 0.000000e+00, double addrspace(13)* %"'ipg_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 %46 = load double, double* %"arrayref.epil'de", align 8, !dbg !2908 %47 = fadd fast double %46, %45, !dbg !2908 store double %47, double* %"arrayref.epil'de", align 8, !dbg !2908 %48 = load double, double* %"arrayref.epil'de", align 8, !dbg !2907 store double 0.000000e+00, double* %"arrayref.epil'de", align 8, !dbg !2907 %49 = load i64, i64* %"iv1'ac", align 8, !dbg !2907 %"getfield_addr.phi.trans.insert'ipg_unwrap" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %"'1", i64 0, i32 0, !dbg !2907 %"getfield.pre'il_phi_unwrap" = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %"getfield_addr.phi.trans.insert'ipg_unwrap" unordered, align 8, !dbg !2915, !tbaa !28, !alias.scope !2916, !noalias !2917 %"'ipc11_unwrap" = addrspacecast {} addrspace(10)* %"getfield.pre'il_phi_unwrap" to double addrspace(13)* addrspace(11)*, !dbg !2907 %"arrayptr.pre40'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc11_unwrap", align 8, !dbg !2907, !tbaa !273, !alias.scope !2920, !noalias !2923 %.phi.trans.insert_unwrap = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 2, !dbg !2907 %unbox20.pre_unwrap = load i64, i64 addrspace(11)* %.phi.trans.insert_unwrap, align 8, !dbg !2904, !tbaa !28, !alias.scope !2890, !noalias !2893, !invariant.group !2919 %_unwrap12 = add i64 %_unwrap8, %unbox20.pre_unwrap, !dbg !2907 %"'ipg10_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'il_phi_unwrap", i64 %_unwrap12, !dbg !2907 %50 = atomicrmw fadd double addrspace(13)* %"'ipg10_unwrap", double %48 monotonic, align 8, !dbg !2907 %51 = load i64, i64* %"iv1'ac", align 8 %52 = icmp eq i64 %51, 0 %53 = xor i1 %52, true br i1 %52, label %invertL54.epil.preheader, label %incinvertL54.epil incinvertL54.epil: ; preds = %invertL54.epil %54 = load i64, i64* %"iv1'ac", align 8 %55 = add nsw i64 %54, -1 store i64 %55, i64* %"iv1'ac", align 8 br label %invertL54.epil invertcommon.ret.loopexit: ; preds = %invertcommon.ret %xtraiter_unwrap = and i64 %16, 7 %_unwrap14 = add nsw i64 %xtraiter_unwrap, -1 br label %mergeinvertL54.epil_common.ret.loopexit mergeinvertL54.epil_common.ret.loopexit: ; preds = %invertcommon.ret.loopexit store i64 %_unwrap14, i64* %"iv1'ac", align 8 br label %invertL54.epil invertcommon.ret: ; preds = %common.ret %56 = load i8, i8* %_cache, align 1, !invariant.group !2902 switch i8 %56, label %invertcommon.ret.loopexit [ i8 0, label %inverttop i8 1, label %invertcommon.ret.loopexit.unr-lcssa ] invertL12: ; preds = %invertL41.L54_crit_edge br label %inverttop invertL41.L54_crit_edge: ; preds = %invertL41.L54_crit_edge.new, %invertcommon.ret.loopexit.unr-lcssa br label %invertL12 invertL41.L54_crit_edge.new: ; preds = %invertL54 br label %invertL41.L54_crit_edge invertL54: ; preds = %incinvertL54, %mergeinvertL54_common.ret.loopexit.unr-lcssa.loopexit %57 = load i64, i64* %"iv'ac", align 8, !dbg !2908 %"'ipc_unwrap20" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !2908 %"arrayptr22.pre41'ipl_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap20", align 16, !dbg !2908, !tbaa !273, !alias.scope !2926, !noalias !2929, !invariant.group !2931 %_unwrap21 = shl i64 %57, 3, !dbg !2908 %_unwrap22 = add i64 %_unwrap21, 1, !dbg !2908 %_unwrap23 = add nuw nsw i64 %_unwrap22, 6, !dbg !2908 %"'ipg19_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl_unwrap", i64 %_unwrap23, !dbg !2908 %58 = load double, double addrspace(13)* %"'ipg19_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 store double 0.000000e+00, double addrspace(13)* %"'ipg19_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 %59 = load double, double* %"arrayref.7'de", align 8, !dbg !2908 %60 = fadd fast double %59, %58, !dbg !2908 store double %60, double* %"arrayref.7'de", align 8, !dbg !2908 %61 = load double, double* %"arrayref.7'de", align 8, !dbg !2907 store double 0.000000e+00, double* %"arrayref.7'de", align 8, !dbg !2907 %62 = load i64, i64* %"iv'ac", align 8, !dbg !2907 %"getfield_addr.phi.trans.insert'ipg_unwrap26" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %"'1", i64 0, i32 0, !dbg !2907 %"getfield.pre'ipl_unwrap" = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %"getfield_addr.phi.trans.insert'ipg_unwrap26" unordered, align 8, !dbg !2915, !tbaa !28, !alias.scope !2916, !noalias !2917, !invariant.group !2918 %"'ipc11_unwrap27" = addrspacecast {} addrspace(10)* %"getfield.pre'ipl_unwrap" to double addrspace(13)* addrspace(11)*, !dbg !2907 %"arrayptr.pre40'ipl_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc11_unwrap27", align 8, !dbg !2907, !tbaa !273, !alias.scope !2920, !noalias !2923, !invariant.group !2925 %.phi.trans.insert_unwrap28 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 2, !dbg !2907 %unbox20.pre_unwrap29 = load i64, i64 addrspace(11)* %.phi.trans.insert_unwrap28, align 8, !dbg !2904, !tbaa !28, !alias.scope !2890, !noalias !2893, !invariant.group !2919 %_unwrap30 = add i64 %_unwrap23, %unbox20.pre_unwrap29, !dbg !2907 %"'ipg25_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl_unwrap", i64 %_unwrap30, !dbg !2907 %63 = atomicrmw fadd double addrspace(13)* %"'ipg25_unwrap", double %61 monotonic, align 8, !dbg !2907 %64 = load i64, i64* %"iv'ac", align 8, !dbg !2908 %_unwrap33 = add nuw nsw i64 %_unwrap22, 5, !dbg !2908 %"'ipg32_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl_unwrap", i64 %_unwrap33, !dbg !2908 %65 = load double, double addrspace(13)* %"'ipg32_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 store double 0.000000e+00, double addrspace(13)* %"'ipg32_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 %66 = load double, double* %"arrayref.6'de", align 8, !dbg !2908 %67 = fadd fast double %66, %65, !dbg !2908 store double %67, double* %"arrayref.6'de", align 8, !dbg !2908 %68 = load double, double* %"arrayref.6'de", align 8, !dbg !2907 store double 0.000000e+00, double* %"arrayref.6'de", align 8, !dbg !2907 %69 = load i64, i64* %"iv'ac", align 8, !dbg !2907 %_unwrap36 = add i64 %_unwrap33, %unbox20.pre_unwrap29, !dbg !2907 %"'ipg35_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl_unwrap", i64 %_unwrap36, !dbg !2907 %70 = atomicrmw fadd double addrspace(13)* %"'ipg35_unwrap", double %68 monotonic, align 8, !dbg !2907 %71 = load i64, i64* %"iv'ac", align 8, !dbg !2908 %_unwrap39 = add nuw nsw i64 %_unwrap22, 4, !dbg !2908 %"'ipg38_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl_unwrap", i64 %_unwrap39, !dbg !2908 %72 = load double, double addrspace(13)* %"'ipg38_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 store double 0.000000e+00, double addrspace(13)* %"'ipg38_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 %73 = load double, double* %"arrayref.5'de", align 8, !dbg !2908 %74 = fadd fast double %73, %72, !dbg !2908 store double %74, double* %"arrayref.5'de", align 8, !dbg !2908 %75 = load double, double* %"arrayref.5'de", align 8, !dbg !2907 store double 0.000000e+00, double* %"arrayref.5'de", align 8, !dbg !2907 %76 = load i64, i64* %"iv'ac", align 8, !dbg !2907 %_unwrap42 = add i64 %_unwrap39, %unbox20.pre_unwrap29, !dbg !2907 %"'ipg41_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl_unwrap", i64 %_unwrap42, !dbg !2907 %77 = atomicrmw fadd double addrspace(13)* %"'ipg41_unwrap", double %75 monotonic, align 8, !dbg !2907 %78 = load i64, i64* %"iv'ac", align 8, !dbg !2908 %_unwrap45 = add nuw nsw i64 %_unwrap22, 3, !dbg !2908 %"'ipg44_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl_unwrap", i64 %_unwrap45, !dbg !2908 %79 = load double, double addrspace(13)* %"'ipg44_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 store double 0.000000e+00, double addrspace(13)* %"'ipg44_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 %80 = load double, double* %"arrayref.4'de", align 8, !dbg !2908 %81 = fadd fast double %80, %79, !dbg !2908 store double %81, double* %"arrayref.4'de", align 8, !dbg !2908 %82 = load double, double* %"arrayref.4'de", align 8, !dbg !2907 store double 0.000000e+00, double* %"arrayref.4'de", align 8, !dbg !2907 %83 = load i64, i64* %"iv'ac", align 8, !dbg !2907 %_unwrap48 = add i64 %_unwrap45, %unbox20.pre_unwrap29, !dbg !2907 %"'ipg47_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl_unwrap", i64 %_unwrap48, !dbg !2907 %84 = atomicrmw fadd double addrspace(13)* %"'ipg47_unwrap", double %82 monotonic, align 8, !dbg !2907 %85 = load i64, i64* %"iv'ac", align 8, !dbg !2908 %_unwrap51 = add nuw nsw i64 %_unwrap22, 2, !dbg !2908 %"'ipg50_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl_unwrap", i64 %_unwrap51, !dbg !2908 %86 = load double, double addrspace(13)* %"'ipg50_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 store double 0.000000e+00, double addrspace(13)* %"'ipg50_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 %87 = load double, double* %"arrayref.3'de", align 8, !dbg !2908 %88 = fadd fast double %87, %86, !dbg !2908 store double %88, double* %"arrayref.3'de", align 8, !dbg !2908 %89 = load double, double* %"arrayref.3'de", align 8, !dbg !2907 store double 0.000000e+00, double* %"arrayref.3'de", align 8, !dbg !2907 %90 = load i64, i64* %"iv'ac", align 8, !dbg !2907 %_unwrap54 = add i64 %_unwrap51, %unbox20.pre_unwrap29, !dbg !2907 %"'ipg53_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl_unwrap", i64 %_unwrap54, !dbg !2907 %91 = atomicrmw fadd double addrspace(13)* %"'ipg53_unwrap", double %89 monotonic, align 8, !dbg !2907 %92 = load i64, i64* %"iv'ac", align 8, !dbg !2908 %_unwrap57 = add nuw nsw i64 %_unwrap22, 1, !dbg !2908 %"'ipg56_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl_unwrap", i64 %_unwrap57, !dbg !2908 %93 = load double, double addrspace(13)* %"'ipg56_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 store double 0.000000e+00, double addrspace(13)* %"'ipg56_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 %94 = load double, double* %"arrayref.2'de", align 8, !dbg !2908 %95 = fadd fast double %94, %93, !dbg !2908 store double %95, double* %"arrayref.2'de", align 8, !dbg !2908 %96 = load double, double* %"arrayref.2'de", align 8, !dbg !2907 store double 0.000000e+00, double* %"arrayref.2'de", align 8, !dbg !2907 %97 = load i64, i64* %"iv'ac", align 8, !dbg !2907 %_unwrap60 = add i64 %_unwrap57, %unbox20.pre_unwrap29, !dbg !2907 %"'ipg59_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl_unwrap", i64 %_unwrap60, !dbg !2907 %98 = atomicrmw fadd double addrspace(13)* %"'ipg59_unwrap", double %96 monotonic, align 8, !dbg !2907 %99 = load i64, i64* %"iv'ac", align 8, !dbg !2908 %"'ipg62_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl_unwrap", i64 %_unwrap22, !dbg !2908 %100 = load double, double addrspace(13)* %"'ipg62_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 store double 0.000000e+00, double addrspace(13)* %"'ipg62_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 %101 = load double, double* %"arrayref.1'de", align 8, !dbg !2908 %102 = fadd fast double %101, %100, !dbg !2908 store double %102, double* %"arrayref.1'de", align 8, !dbg !2908 %103 = load double, double* %"arrayref.1'de", align 8, !dbg !2907 store double 0.000000e+00, double* %"arrayref.1'de", align 8, !dbg !2907 %104 = load i64, i64* %"iv'ac", align 8, !dbg !2907 %_unwrap65 = add i64 %_unwrap22, %unbox20.pre_unwrap29, !dbg !2907 %"'ipg64_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl_unwrap", i64 %_unwrap65, !dbg !2907 %105 = atomicrmw fadd double addrspace(13)* %"'ipg64_unwrap", double %103 monotonic, align 8, !dbg !2907 %106 = load i64, i64* %"iv'ac", align 8, !dbg !2908 %_unwrap68 = add nsw i64 %_unwrap22, -1, !dbg !2908 %"'ipg67_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr22.pre41'ipl_unwrap", i64 %_unwrap68, !dbg !2908 %107 = load double, double addrspace(13)* %"'ipg67_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 store double 0.000000e+00, double addrspace(13)* %"'ipg67_unwrap", align 8, !dbg !2908, !tbaa !67, !alias.scope !2935, !noalias !2938 %108 = load double, double* %"arrayref'de", align 8, !dbg !2908 %109 = fadd fast double %108, %107, !dbg !2908 store double %109, double* %"arrayref'de", align 8, !dbg !2908 %110 = load double, double* %"arrayref'de", align 8, !dbg !2907 store double 0.000000e+00, double* %"arrayref'de", align 8, !dbg !2907 %111 = load i64, i64* %"iv'ac", align 8, !dbg !2907 %_unwrap71 = add i64 %_unwrap68, %unbox20.pre_unwrap29, !dbg !2907 %"'ipg70_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr.pre40'ipl_unwrap", i64 %_unwrap71, !dbg !2907 %112 = atomicrmw fadd double addrspace(13)* %"'ipg70_unwrap", double %110 monotonic, align 8, !dbg !2907 %113 = load i64, i64* %"iv'ac", align 8 %114 = icmp eq i64 %113, 0 %115 = xor i1 %114, true br i1 %114, label %invertL41.L54_crit_edge.new, label %incinvertL54 incinvertL54: ; preds = %invertL54 %116 = load i64, i64* %"iv'ac", align 8 %117 = add nsw i64 %116, -1 store i64 %117, i64* %"iv'ac", align 8 br label %invertL54 } ; Function Attrs: mustprogress willreturn define internal fastcc void @diffejulia_copyto__1477.24({} addrspace(10)* align 16 dereferenceable(40) "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %"'1", { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %tapeArg) unnamed_addr #33 !dbg !2990 { top: %tapeld_cache = alloca { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, align 8 store { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i64 undef, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i1 undef }, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i64 undef }, i1 undef }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }* %tapeld_cache, align 8 %2 = call {}*** @julia.get_pgcstack() %3 = call {}*** @julia.get_pgcstack() %4 = bitcast {}*** %3 to {}** %5 = getelementptr inbounds {}*, {}** %4, i64 -14 %"'mi" = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %tapeArg, 0 %6 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %tapeArg, 1 %"'ipc" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %7 = bitcast {} addrspace(10)* %6 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %8 = call {}*** @julia.get_pgcstack() #37 %9 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %tapeArg, 4, !dbg !2991 br i1 %9, label %L12, label %common.ret, !dbg !2991 common.ret: ; preds = %L12, %top br label %invertcommon.ret, !dbg !2992 L12: ; preds = %top %"'ipc19" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2993 %tapeArg20 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %tapeArg, 3, !dbg !2993 %10 = bitcast {} addrspace(10)* %tapeArg20 to { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, !dbg !2994 %tapeld = load { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %10, align 8, !dbg !2994, !enzyme_mustcache !23 store { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } %tapeld, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }* %tapeld_cache, align 8, !dbg !2994, !invariant.group !2995 %"'ipc17" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2994 %11 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %7 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2994 %tapeArg18 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %tapeArg, 2, !dbg !2994 br label %common.ret inverttop: ; preds = %invertL12, %invertcommon.ret fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertcommon.ret: ; preds = %common.ret br i1 %9, label %invertL12, label %inverttop invertL12: ; preds = %invertcommon.ret %_unwrap = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %7 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2994 %"'ipc17_unwrap" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2994 %tapeArg18_unwrap = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %tapeArg, 2, !dbg !2994 call fastcc void @diffejulia_copyto_unaliased__1481({} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %_unwrap, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc17_unwrap", i64 %tapeArg18_unwrap), !dbg !2994 %"'ipc19_unwrap" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2993 %12 = load { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }* %tapeld_cache, align 8, !dbg !2994, !invariant.group !2995 call fastcc void @diffejulia_unalias_1484({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" undef, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc19_unwrap", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" undef, {} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1", { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } %12), !dbg !2993 br label %inverttop } ; Function Attrs: mustprogress willreturn define internal fastcc void @diffejulia_unaliascopy_1487({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* noalias nocapture nofree writeonly align 8 dereferenceable(40) "enzyme_sret" %0, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'", [1 x {} addrspace(10)*]* noalias nocapture nofree writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %2, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %"'1", { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } %tapeArg) unnamed_addr #36 !dbg !2957 { top: %3 = call {}*** @julia.get_pgcstack() #37 %4 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } %tapeArg, 3, !dbg !2958 %5 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } %tapeArg, 1, !dbg !2958 %6 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } %tapeArg, 2, !dbg !2958 %tapeArg3 = extractvalue { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } %tapeArg, 0, !dbg !2962 br label %inverttop, !dbg !2963 inverttop: ; preds = %top call fastcc void @diffejulia_copyto__1477.24({} addrspace(10)* align 16 %6, {} addrspace(10)* align 16 %5, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %2, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1", { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } %tapeArg3), !dbg !2962 fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void } ; Function Attrs: mustprogress willreturn define internal fastcc void @diffejulia_unalias_1484({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* noalias nocapture nofree writeonly align 8 dereferenceable(40) "enzyme_sret" %0, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'", [1 x {} addrspace(10)*]* noalias nocapture nofree writeonly align 8 dereferenceable(8) "enzyme_inactive" "enzymejl_returnRoots" %1, {} addrspace(10)* align 16 dereferenceable(40) "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %2, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %"'1", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %3, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %"'2", { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } %tapeArg) unnamed_addr #35 !dbg !2940 { top: %4 = call {}*** @julia.get_pgcstack() %5 = call {}*** @julia.get_pgcstack() %6 = bitcast {}*** %5 to {}** %7 = getelementptr inbounds {}*, {}** %6, i64 -14 %"'mi" = extractvalue { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } %tapeArg, 0 %"'ipc25" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %8 = call {}*** @julia.get_pgcstack() #37 %.not = extractvalue { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } %tapeArg, 2, !dbg !2941 br i1 %.not, label %L10, label %L12, !dbg !2941 common.ret: ; preds = %L12, %L10 br label %invertcommon.ret, !dbg !2941 L10: ; preds = %top %"'ipc32" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc25" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2941 %tapeArg33 = extractvalue { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } %tapeArg, 1, !dbg !2941 %"'ipc" = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'" to i8*, !dbg !2941 %"'ipc26" = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc25" to i8 addrspace(10)*, !dbg !2941 br label %common.ret L12: ; preds = %top %"'ipc36" = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'" to i8*, !dbg !2941 %"'ipc37" = bitcast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %"'2" to i8 addrspace(11)*, !dbg !2941 br label %common.ret inverttop: ; preds = %invertL12, %invertL10 fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertcommon.ret: ; preds = %common.ret br i1 %.not, label %invertL10, label %invertL12 invertL10: ; preds = %invertcommon.ret %"'ipc32_unwrap" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc25" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2941 %tapeArg33_unwrap = extractvalue { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } %tapeArg, 1, !dbg !2941 call fastcc void @diffejulia_unaliascopy_1487({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" undef, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc32_unwrap", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" undef, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %3, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'2", { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } %tapeArg33_unwrap), !dbg !2941 br label %inverttop invertL12: ; preds = %invertcommon.ret br label %inverttop } ; Function Attrs: mustprogress willreturn define internal fastcc void @diffejulia_copyto__1477({} addrspace(10)* align 16 dereferenceable(40) "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* align 16 "enzymejl_parmtype"="140151416616992" "enzymejl_parmtype_ref"="2" %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 dereferenceable(40) "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 "enzymejl_parmtype"="140151604778320" "enzymejl_parmtype_ref"="1" %"'1", { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } %tapeArg) unnamed_addr #33 !dbg !2851 { top: %tapeld_cache = alloca { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, align 8 store { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 } { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i64 undef, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i1 undef }, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i64 undef }, i1 undef }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }* %tapeld_cache, align 8 %2 = call {}*** @julia.get_pgcstack() %3 = call {}*** @julia.get_pgcstack() %4 = bitcast {}*** %3 to {}** %5 = getelementptr inbounds {}*, {}** %4, i64 -14 %"'mi" = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } %tapeArg, 0 %6 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } %tapeArg, 1 %"'ipc" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %7 = bitcast {} addrspace(10)* %6 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !23 %8 = call {}*** @julia.get_pgcstack() #37 %9 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 0, !dbg !2852 %10 = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* %1, i64 0, i32 1, i64 0, i64 1, !dbg !2862 %unbox = load i64, i64 addrspace(11)* %10, align 8, !dbg !2864, !tbaa !28, !invariant.load !23, !alias.scope !2866, !noalias !2869 %unbox2 = load i64, i64 addrspace(11)* %9, align 8, !dbg !2864, !tbaa !28, !invariant.load !23, !alias.scope !2866, !noalias !2869 %11 = sub i64 %unbox, %unbox2, !dbg !2864 %12 = icmp ult i64 %11, 9223372036854775807, !dbg !2871 br i1 %12, label %L12, label %common.ret, !dbg !2861 common.ret: ; preds = %L12, %top br label %invertcommon.ret, !dbg !2872 L12: ; preds = %top %"'ipc16" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2873 %tapeArg17 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } %tapeArg, 3, !dbg !2873 %13 = bitcast {} addrspace(10)* %tapeArg17 to { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, !dbg !2874 %tapeld = load { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %13, align 8, !dbg !2874, !enzyme_mustcache !23 store { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } %tapeld, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }* %tapeld_cache, align 8, !dbg !2874, !invariant.group !2875 %"'ipc14" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2874 %14 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %7 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2874 %tapeArg15 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } %tapeArg, 2, !dbg !2874 br label %common.ret inverttop: ; preds = %invertL12, %invertcommon.ret fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertcommon.ret: ; preds = %common.ret br i1 %12, label %invertL12, label %inverttop invertL12: ; preds = %invertcommon.ret %_unwrap = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %7 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2874 %"'ipc14_unwrap" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !2874 %tapeArg15_unwrap = extractvalue { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } %tapeArg, 2, !dbg !2874 call fastcc void @diffejulia_copyto_unaliased__1481({} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %_unwrap, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc14_unwrap", i64 %tapeArg15_unwrap), !dbg !2874 %"'ipc16_unwrap" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !2873 %15 = load { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }* %tapeld_cache, align 8, !dbg !2874, !invariant.group !2875 call fastcc void @diffejulia_unalias_1484({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" undef, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc16_unwrap", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" undef, {} addrspace(10)* align 16 %0, {} addrspace(10)* align 16 %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'1", { {} addrspace(10)*, { { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)*, i1 }, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } %15), !dbg !2873 br label %inverttop } after simplification : ; Function Attrs: mustprogress nofree willreturn define internal fastcc double @preprocess_julia__mapreduce_1461({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0) unnamed_addr #37 !dbg !3000 { top: %1 = call {}*** @julia.get_pgcstack() #38 %ptls_field22 = getelementptr inbounds {}**, {}*** %1, i64 2 %2 = bitcast {}*** %ptls_field22 to i64*** %ptls_load2324 = load i64**, i64*** %2, align 8, !tbaa !24 %3 = getelementptr inbounds i64*, i64** %ptls_load2324, i64 2 %safepoint = load i64*, i64** %3, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #38, !dbg !3001 fence syncscope("singlethread") seq_cst %4 = addrspacecast {} addrspace(10)* %0 to {} addrspace(10)* addrspace(11)*, !dbg !3002 %arraysize_ptr = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %4, i64 3, !dbg !3002 %5 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr to i64 addrspace(11)*, !dbg !3002 %arraysize = load i64, i64 addrspace(11)* %5, align 8, !dbg !3002, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !42, !noalias !45 %arraysize_ptr2 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %4, i64 4, !dbg !3002 %6 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr2 to i64 addrspace(11)*, !dbg !3002 %arraysize3 = load i64, i64 addrspace(11)* %6, align 16, !dbg !3002, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !42, !noalias !45 %7 = mul i64 %arraysize3, %arraysize, !dbg !3006 switch i64 %7, label %L15 [ i64 0, label %common.ret i64 1, label %L13 ], !dbg !3010 L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %L25 %8 = or i64 %unroll_iter, 2, !dbg !3011 br label %L20.common.ret.loopexit_crit_edge.unr-lcssa, !dbg !3011 L20.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %L25.lr.ph, %L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit %.lcssa.ph = phi double [ undef, %L25.lr.ph ], [ %47, %L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %value_phi1131.unr = phi i64 [ 2, %L25.lr.ph ], [ %8, %L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %value_phi30.unr = phi double [ %17, %L25.lr.ph ], [ %47, %L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !3011 br i1 %lcmp.mod.not, label %common.ret, label %L25.epil.preheader, !dbg !3011 L25.epil.preheader: ; preds = %L20.common.ret.loopexit_crit_edge.unr-lcssa br label %L25.epil, !dbg !3011 L25.epil: ; preds = %L25.epil.preheader, %L25.epil %iv1 = phi i64 [ 0, %L25.epil.preheader ], [ %iv.next2, %L25.epil ] %value_phi30.epil = phi double [ %12, %L25.epil ], [ %value_phi30.unr, %L25.epil.preheader ] %9 = add nuw nsw i64 %value_phi1131.unr, %iv1, !dbg !3012 %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !3012 %10 = add nuw nsw i64 %9, 1, !dbg !3012 %11 = getelementptr inbounds double, double addrspace(13)* %arrayptr627, i64 %9, !dbg !3014 %arrayref14.epil = load double, double addrspace(13)* %11, align 8, !dbg !3014, !tbaa !67, !alias.scope !70, !noalias !71 %12 = fadd double %value_phi30.epil, %arrayref14.epil, !dbg !3015 %epil.iter.cmp.not = icmp eq i64 %iv.next2, %xtraiter, !dbg !3011 br i1 %epil.iter.cmp.not, label %common.ret.loopexit, label %L25.epil, !dbg !3011, !llvm.loop !3018 common.ret.loopexit: ; preds = %L25.epil br label %common.ret, !dbg !3019 common.ret: ; preds = %common.ret.loopexit, %L30, %L17, %L13, %L20.common.ret.loopexit_crit_edge.unr-lcssa, %top %common.ret.op = phi double [ %arrayref, %L13 ], [ %48, %L30 ], [ 0.000000e+00, %top ], [ %17, %L17 ], [ %.lcssa.ph, %L20.common.ret.loopexit_crit_edge.unr-lcssa ], [ %12, %common.ret.loopexit ] ret double %common.ret.op, !dbg !3019 L13: ; preds = %top %13 = addrspacecast {} addrspace(10)* %0 to double addrspace(13)* addrspace(11)*, !dbg !3020 %arrayptr26 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %13, align 16, !dbg !3020, !tbaa !28, !invariant.load !23, !alias.scope !3022, !noalias !45, !nonnull !23 %arrayref = load double, double addrspace(13)* %arrayptr26, align 8, !dbg !3020, !tbaa !67, !alias.scope !70, !noalias !71 br label %common.ret L15: ; preds = %top %14 = icmp sgt i64 %7, 15, !dbg !3025 br i1 %14, label %L30, label %L17, !dbg !3026 L17: ; preds = %L15 %15 = addrspacecast {} addrspace(10)* %0 to double addrspace(13)* addrspace(11)*, !dbg !3027 %arrayptr627 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %15, align 16, !dbg !3027, !tbaa !28, !invariant.load !23, !alias.scope !3022, !noalias !45, !nonnull !23 %arrayref7 = load double, double addrspace(13)* %arrayptr627, align 8, !dbg !3027, !tbaa !67, !alias.scope !70, !noalias !71 %16 = getelementptr inbounds double, double addrspace(13)* %arrayptr627, i64 1, !dbg !3029 %arrayref10 = load double, double addrspace(13)* %16, align 8, !dbg !3029, !tbaa !67, !alias.scope !70, !noalias !71 %17 = fadd double %arrayref7, %arrayref10, !dbg !3031 %.not2829 = icmp sgt i64 %7, 2, !dbg !3034 br i1 %.not2829, label %L25.lr.ph, label %common.ret, !dbg !3011 L25.lr.ph: ; preds = %L17 %18 = add nsw i64 %7, -2, !dbg !3011 %19 = add nsw i64 %7, -3, !dbg !3011 %xtraiter = and i64 %18, 7, !dbg !3011 %20 = icmp ult i64 %19, 7, !dbg !3011 br i1 %20, label %L20.common.ret.loopexit_crit_edge.unr-lcssa, label %L25.lr.ph.new, !dbg !3011 L25.lr.ph.new: ; preds = %L25.lr.ph %unroll_iter = and i64 %18, -8, !dbg !3011 br label %L25, !dbg !3011 L25: ; preds = %L25, %L25.lr.ph.new %iv = phi i64 [ %iv.next, %L25 ], [ 0, %L25.lr.ph.new ] %value_phi30 = phi double [ %17, %L25.lr.ph.new ], [ %47, %L25 ] %21 = shl nuw i64 %iv, 3, !dbg !3012 %iv.next = add nuw nsw i64 %iv, 1, !dbg !3012 %22 = shl i64 %iv, 3, !dbg !3012 %23 = add nuw nsw i64 %22, 2, !dbg !3012 %24 = or i64 %23, 1, !dbg !3012 %25 = getelementptr inbounds double, double addrspace(13)* %arrayptr627, i64 %23, !dbg !3014 %arrayref14 = load double, double addrspace(13)* %25, align 8, !dbg !3014, !tbaa !67, !alias.scope !70, !noalias !71 %26 = fadd double %value_phi30, %arrayref14, !dbg !3015 %27 = add nuw nsw i64 %23, 2, !dbg !3012 %28 = getelementptr inbounds double, double addrspace(13)* %arrayptr627, i64 %24, !dbg !3014 %arrayref14.1 = load double, double addrspace(13)* %28, align 8, !dbg !3014, !tbaa !67, !alias.scope !70, !noalias !71 %29 = fadd double %26, %arrayref14.1, !dbg !3015 %30 = add nuw nsw i64 %23, 3, !dbg !3012 %31 = getelementptr inbounds double, double addrspace(13)* %arrayptr627, i64 %27, !dbg !3014 %arrayref14.2 = load double, double addrspace(13)* %31, align 8, !dbg !3014, !tbaa !67, !alias.scope !70, !noalias !71 %32 = fadd double %29, %arrayref14.2, !dbg !3015 %33 = add nuw nsw i64 %23, 4, !dbg !3012 %34 = getelementptr inbounds double, double addrspace(13)* %arrayptr627, i64 %30, !dbg !3014 %arrayref14.3 = load double, double addrspace(13)* %34, align 8, !dbg !3014, !tbaa !67, !alias.scope !70, !noalias !71 %35 = fadd double %32, %arrayref14.3, !dbg !3015 %36 = add nuw nsw i64 %23, 5, !dbg !3012 %37 = getelementptr inbounds double, double addrspace(13)* %arrayptr627, i64 %33, !dbg !3014 %arrayref14.4 = load double, double addrspace(13)* %37, align 8, !dbg !3014, !tbaa !67, !alias.scope !70, !noalias !71 %38 = fadd double %35, %arrayref14.4, !dbg !3015 %39 = add nuw nsw i64 %23, 6, !dbg !3012 %40 = getelementptr inbounds double, double addrspace(13)* %arrayptr627, i64 %36, !dbg !3014 %arrayref14.5 = load double, double addrspace(13)* %40, align 8, !dbg !3014, !tbaa !67, !alias.scope !70, !noalias !71 %41 = fadd double %38, %arrayref14.5, !dbg !3015 %42 = add nuw nsw i64 %23, 7, !dbg !3012 %43 = getelementptr inbounds double, double addrspace(13)* %arrayptr627, i64 %39, !dbg !3014 %arrayref14.6 = load double, double addrspace(13)* %43, align 8, !dbg !3014, !tbaa !67, !alias.scope !70, !noalias !71 %44 = fadd double %41, %arrayref14.6, !dbg !3015 %45 = add nuw nsw i64 %23, 8, !dbg !3012 %46 = getelementptr inbounds double, double addrspace(13)* %arrayptr627, i64 %42, !dbg !3014 %arrayref14.7 = load double, double addrspace(13)* %46, align 8, !dbg !3014, !tbaa !67, !alias.scope !70, !noalias !71 %47 = fadd double %44, %arrayref14.7, !dbg !3015 %niter.next.7 = add i64 %21, 8, !dbg !3011 %niter.ncmp.7.not = icmp eq i64 %niter.next.7, %unroll_iter, !dbg !3011 br i1 %niter.ncmp.7.not, label %L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit, label %L25, !dbg !3011 L30: ; preds = %L15 %48 = call fastcc double @julia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) %0, i64 noundef signext 1, i64 signext %7) #39, !dbg !3035 br label %common.ret } after simplification : ; Function Attrs: mustprogress nofree noinline willreturn define internal fastcc double @preprocess_julia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %1, i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %2) unnamed_addr #38 !dbg !3091 { top: %3 = call {}*** @julia.get_pgcstack() #39 %ptls_field22 = getelementptr inbounds {}**, {}*** %3, i64 2 %4 = bitcast {}*** %ptls_field22 to i64*** %ptls_load2324 = load i64**, i64*** %4, align 8, !tbaa !24 %5 = getelementptr inbounds i64*, i64** %ptls_load2324, i64 2 %safepoint = load i64*, i64** %5, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #39, !dbg !3092 fence syncscope("singlethread") seq_cst %.not = icmp eq i64 %2, %1, !dbg !3093 br i1 %.not, label %L3, label %L5, !dbg !3094 L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %L32 br label %L28.common.ret.loopexit_crit_edge.unr-lcssa, !dbg !3095 L28.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit, %L32.lr.ph %.lcssa.ph = phi double [ undef, %L32.lr.ph ], [ %57, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %value_phi932.unr = phi i64 [ 0, %L32.lr.ph ], [ %unroll_iter, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %value_phi831.unr = phi double [ %19, %L32.lr.ph ], [ %57, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !3095 br i1 %lcmp.mod.not, label %common.ret, label %L32.epil.preheader, !dbg !3095 L32.epil.preheader: ; preds = %L28.common.ret.loopexit_crit_edge.unr-lcssa br label %L32.epil, !dbg !3095 L32.epil: ; preds = %L32.epil.preheader, %L32.epil %iv1 = phi i64 [ 0, %L32.epil.preheader ], [ %iv.next2, %L32.epil ] %value_phi831.epil = phi double [ %10, %L32.epil ], [ %value_phi831.unr, %L32.epil.preheader ] %6 = add nuw nsw i64 %value_phi932.unr, %iv1, !dbg !3097 %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !3097 %7 = add nuw nsw i64 %6, 1, !dbg !3097 %8 = add i64 %6, %21, !dbg !3100 %9 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %8, !dbg !3100 %arrayref13.epil = load double, double addrspace(13)* %9, align 8, !dbg !3100, !tbaa !67, !alias.scope !70, !noalias !71 %10 = fadd reassoc contract double %value_phi831.epil, %arrayref13.epil, !dbg !3103 %epil.iter.cmp.not = icmp eq i64 %iv.next2, %xtraiter, !dbg !3095 br i1 %epil.iter.cmp.not, label %common.ret.loopexit, label %L32.epil, !dbg !3095, !llvm.loop !3106 common.ret.loopexit: ; preds = %L32.epil br label %common.ret, !dbg !3107 common.ret: ; preds = %common.ret.loopexit, %L59, %L8, %L3, %L28.common.ret.loopexit_crit_edge.unr-lcssa %common.ret.op = phi double [ %arrayref, %L3 ], [ %63, %L59 ], [ %19, %L8 ], [ %.lcssa.ph, %L28.common.ret.loopexit_crit_edge.unr-lcssa ], [ %10, %common.ret.loopexit ] ret double %common.ret.op, !dbg !3107 L3: ; preds = %top %11 = add i64 %2, -1, !dbg !3108 %12 = addrspacecast {} addrspace(10)* %0 to double addrspace(13)* addrspace(11)*, !dbg !3108 %arrayptr25 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %12, align 16, !dbg !3108, !tbaa !28, !invariant.load !23, !alias.scope !3110, !noalias !45, !nonnull !23 %13 = getelementptr inbounds double, double addrspace(13)* %arrayptr25, i64 %11, !dbg !3108 %arrayref = load double, double addrspace(13)* %13, align 8, !dbg !3108, !tbaa !67, !alias.scope !70, !noalias !71 br label %common.ret L5: ; preds = %top %14 = sub i64 %2, %1, !dbg !3113 %.not26 = icmp slt i64 %14, 1024, !dbg !3115 br i1 %.not26, label %L8, label %L59, !dbg !3114 L8: ; preds = %L5 %15 = add i64 %1, -1, !dbg !3116 %16 = addrspacecast {} addrspace(10)* %0 to double addrspace(13)* addrspace(11)*, !dbg !3116 %arrayptr327 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %16, align 16, !dbg !3116, !tbaa !28, !invariant.load !23, !alias.scope !3110, !noalias !45, !nonnull !23 %17 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %15, !dbg !3116 %arrayref4 = load double, double addrspace(13)* %17, align 8, !dbg !3116, !tbaa !67, !alias.scope !70, !noalias !71 %18 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %1, !dbg !3118 %arrayref7 = load double, double addrspace(13)* %18, align 8, !dbg !3118, !tbaa !67, !alias.scope !70, !noalias !71 %19 = fadd double %arrayref4, %arrayref7, !dbg !3120 %20 = add i64 %1, 2, !dbg !3123 %.not28 = icmp sgt i64 %20, %2, !dbg !3125 %21 = add i64 %1, 1, !dbg !3127 %value_phi = select i1 %.not28, i64 %21, i64 %2, !dbg !3127 %22 = sub i64 %value_phi, %20, !dbg !3130 %23 = add i64 %22, 1, !dbg !3134 %24 = icmp ugt i64 %22, 9223372036854775806, !dbg !3135 br i1 %24, label %common.ret, label %L32.lr.ph, !dbg !3136 L32.lr.ph: ; preds = %L8 %xtraiter = and i64 %23, 7, !dbg !3095 %25 = icmp ult i64 %22, 7, !dbg !3095 br i1 %25, label %L28.common.ret.loopexit_crit_edge.unr-lcssa, label %L32.lr.ph.new, !dbg !3095 L32.lr.ph.new: ; preds = %L32.lr.ph %unroll_iter = and i64 %23, 9223372036854775800, !dbg !3095 %26 = add i64 %1, 3 %27 = add i64 %1, 4 %28 = add i64 %1, 5 %29 = add i64 %1, 6 %30 = add i64 %1, 7 %31 = add i64 %1, 8 br label %L32, !dbg !3095 L32: ; preds = %L32, %L32.lr.ph.new %iv = phi i64 [ %iv.next, %L32 ], [ 0, %L32.lr.ph.new ] %value_phi831 = phi double [ %19, %L32.lr.ph.new ], [ %57, %L32 ] %32 = shl nuw nsw i64 %iv, 3, !dbg !3100 %iv.next = add nuw nsw i64 %iv, 1, !dbg !3100 %33 = add i64 %32, %21, !dbg !3100 %34 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %33, !dbg !3100 %arrayref13 = load double, double addrspace(13)* %34, align 8, !dbg !3100, !tbaa !67, !alias.scope !70, !noalias !71 %35 = fadd reassoc contract double %value_phi831, %arrayref13, !dbg !3103 %36 = add i64 %20, %32, !dbg !3100 %37 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %36, !dbg !3100 %arrayref13.1 = load double, double addrspace(13)* %37, align 8, !dbg !3100, !tbaa !67, !alias.scope !70, !noalias !71 %38 = fadd reassoc contract double %35, %arrayref13.1, !dbg !3103 %39 = add i64 %26, %32, !dbg !3100 %40 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %39, !dbg !3100 %arrayref13.2 = load double, double addrspace(13)* %40, align 8, !dbg !3100, !tbaa !67, !alias.scope !70, !noalias !71 %41 = fadd reassoc contract double %38, %arrayref13.2, !dbg !3103 %42 = add i64 %27, %32, !dbg !3100 %43 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %42, !dbg !3100 %arrayref13.3 = load double, double addrspace(13)* %43, align 8, !dbg !3100, !tbaa !67, !alias.scope !70, !noalias !71 %44 = fadd reassoc contract double %41, %arrayref13.3, !dbg !3103 %45 = add i64 %28, %32, !dbg !3100 %46 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %45, !dbg !3100 %arrayref13.4 = load double, double addrspace(13)* %46, align 8, !dbg !3100, !tbaa !67, !alias.scope !70, !noalias !71 %47 = fadd reassoc contract double %44, %arrayref13.4, !dbg !3103 %48 = add i64 %29, %32, !dbg !3100 %49 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %48, !dbg !3100 %arrayref13.5 = load double, double addrspace(13)* %49, align 8, !dbg !3100, !tbaa !67, !alias.scope !70, !noalias !71 %50 = fadd reassoc contract double %47, %arrayref13.5, !dbg !3103 %51 = add i64 %30, %32, !dbg !3100 %52 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %51, !dbg !3100 %arrayref13.6 = load double, double addrspace(13)* %52, align 8, !dbg !3100, !tbaa !67, !alias.scope !70, !noalias !71 %53 = fadd reassoc contract double %50, %arrayref13.6, !dbg !3103 %54 = add nuw nsw i64 %32, 8, !dbg !3097 %55 = add i64 %31, %32, !dbg !3100 %56 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %55, !dbg !3100 %arrayref13.7 = load double, double addrspace(13)* %56, align 8, !dbg !3100, !tbaa !67, !alias.scope !70, !noalias !71 %57 = fadd reassoc contract double %53, %arrayref13.7, !dbg !3103 %niter.ncmp.7.not = icmp eq i64 %54, %unroll_iter, !dbg !3095 br i1 %niter.ncmp.7.not, label %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit, label %L32, !dbg !3095, !llvm.loop !3137 L59: ; preds = %L5 %58 = ashr i64 %14, 1, !dbg !3138 %59 = add i64 %58, %1, !dbg !3141 %60 = call fastcc double @julia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) %0, i64 signext %1, i64 signext %59) #40, !dbg !3142 %61 = add i64 %59, 1, !dbg !3143 %62 = call fastcc double @julia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) %0, i64 signext %61, i64 signext %2) #40, !dbg !3144 %63 = fadd double %60, %62, !dbg !3145 br label %common.ret } after simplification : ; Function Attrs: mustprogress nofree noinline willreturn define internal fastcc double @preprocess_julia_mapreduce_impl_1464.26({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %1, i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %2) unnamed_addr #38 !dbg !3292 { top: %3 = call {}*** @julia.get_pgcstack() #39 %ptls_field22 = getelementptr inbounds {}**, {}*** %3, i64 2 %4 = bitcast {}*** %ptls_field22 to i64*** %ptls_load2324 = load i64**, i64*** %4, align 8, !tbaa !24 %5 = getelementptr inbounds i64*, i64** %ptls_load2324, i64 2 %safepoint = load i64*, i64** %5, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #39, !dbg !3293 fence syncscope("singlethread") seq_cst %.not = icmp eq i64 %2, %1, !dbg !3294 br i1 %.not, label %L3, label %L5, !dbg !3295 L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %L32 br label %L28.common.ret.loopexit_crit_edge.unr-lcssa, !dbg !3296 L28.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit, %L32.lr.ph %.lcssa.ph = phi double [ undef, %L32.lr.ph ], [ %57, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %value_phi932.unr = phi i64 [ 0, %L32.lr.ph ], [ %unroll_iter, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %value_phi831.unr = phi double [ %19, %L32.lr.ph ], [ %57, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !3296 br i1 %lcmp.mod.not, label %common.ret, label %L32.epil.preheader, !dbg !3296 L32.epil.preheader: ; preds = %L28.common.ret.loopexit_crit_edge.unr-lcssa br label %L32.epil, !dbg !3296 L32.epil: ; preds = %L32.epil.preheader, %L32.epil %iv1 = phi i64 [ 0, %L32.epil.preheader ], [ %iv.next2, %L32.epil ] %value_phi831.epil = phi double [ %10, %L32.epil ], [ %value_phi831.unr, %L32.epil.preheader ] %6 = add nuw nsw i64 %value_phi932.unr, %iv1, !dbg !3298 %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !3298 %7 = add nuw nsw i64 %6, 1, !dbg !3298 %8 = add i64 %6, %21, !dbg !3301 %9 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %8, !dbg !3301 %arrayref13.epil = load double, double addrspace(13)* %9, align 8, !dbg !3301, !tbaa !67, !alias.scope !70, !noalias !71 %10 = fadd reassoc contract double %value_phi831.epil, %arrayref13.epil, !dbg !3304 %epil.iter.cmp.not = icmp eq i64 %iv.next2, %xtraiter, !dbg !3296 br i1 %epil.iter.cmp.not, label %common.ret.loopexit, label %L32.epil, !dbg !3296, !llvm.loop !3307 common.ret.loopexit: ; preds = %L32.epil br label %common.ret, !dbg !3308 common.ret: ; preds = %common.ret.loopexit, %L59, %L8, %L3, %L28.common.ret.loopexit_crit_edge.unr-lcssa %common.ret.op = phi double [ %arrayref, %L3 ], [ %63, %L59 ], [ %19, %L8 ], [ %.lcssa.ph, %L28.common.ret.loopexit_crit_edge.unr-lcssa ], [ %10, %common.ret.loopexit ] ret double %common.ret.op, !dbg !3308 L3: ; preds = %top %11 = add i64 %2, -1, !dbg !3309 %12 = addrspacecast {} addrspace(10)* %0 to double addrspace(13)* addrspace(11)*, !dbg !3309 %arrayptr25 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %12, align 16, !dbg !3309, !tbaa !28, !invariant.load !23, !alias.scope !3311, !noalias !45, !nonnull !23 %13 = getelementptr inbounds double, double addrspace(13)* %arrayptr25, i64 %11, !dbg !3309 %arrayref = load double, double addrspace(13)* %13, align 8, !dbg !3309, !tbaa !67, !alias.scope !70, !noalias !71 br label %common.ret L5: ; preds = %top %14 = sub i64 %2, %1, !dbg !3314 %.not26 = icmp slt i64 %14, 1024, !dbg !3316 br i1 %.not26, label %L8, label %L59, !dbg !3315 L8: ; preds = %L5 %15 = add i64 %1, -1, !dbg !3317 %16 = addrspacecast {} addrspace(10)* %0 to double addrspace(13)* addrspace(11)*, !dbg !3317 %arrayptr327 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %16, align 16, !dbg !3317, !tbaa !28, !invariant.load !23, !alias.scope !3311, !noalias !45, !nonnull !23 %17 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %15, !dbg !3317 %arrayref4 = load double, double addrspace(13)* %17, align 8, !dbg !3317, !tbaa !67, !alias.scope !70, !noalias !71 %18 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %1, !dbg !3319 %arrayref7 = load double, double addrspace(13)* %18, align 8, !dbg !3319, !tbaa !67, !alias.scope !70, !noalias !71 %19 = fadd double %arrayref4, %arrayref7, !dbg !3321 %20 = add i64 %1, 2, !dbg !3324 %.not28 = icmp sgt i64 %20, %2, !dbg !3326 %21 = add i64 %1, 1, !dbg !3328 %value_phi = select i1 %.not28, i64 %21, i64 %2, !dbg !3328 %22 = sub i64 %value_phi, %20, !dbg !3331 %23 = add i64 %22, 1, !dbg !3335 %24 = icmp ugt i64 %22, 9223372036854775806, !dbg !3336 br i1 %24, label %common.ret, label %L32.lr.ph, !dbg !3337 L32.lr.ph: ; preds = %L8 %xtraiter = and i64 %23, 7, !dbg !3296 %25 = icmp ult i64 %22, 7, !dbg !3296 br i1 %25, label %L28.common.ret.loopexit_crit_edge.unr-lcssa, label %L32.lr.ph.new, !dbg !3296 L32.lr.ph.new: ; preds = %L32.lr.ph %unroll_iter = and i64 %23, 9223372036854775800, !dbg !3296 %26 = add i64 %1, 3 %27 = add i64 %1, 4 %28 = add i64 %1, 5 %29 = add i64 %1, 6 %30 = add i64 %1, 7 %31 = add i64 %1, 8 br label %L32, !dbg !3296 L32: ; preds = %L32, %L32.lr.ph.new %iv = phi i64 [ %iv.next, %L32 ], [ 0, %L32.lr.ph.new ] %value_phi831 = phi double [ %19, %L32.lr.ph.new ], [ %57, %L32 ] %32 = shl nuw nsw i64 %iv, 3, !dbg !3301 %iv.next = add nuw nsw i64 %iv, 1, !dbg !3301 %33 = add i64 %32, %21, !dbg !3301 %34 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %33, !dbg !3301 %arrayref13 = load double, double addrspace(13)* %34, align 8, !dbg !3301, !tbaa !67, !alias.scope !70, !noalias !71 %35 = fadd reassoc contract double %value_phi831, %arrayref13, !dbg !3304 %36 = add i64 %20, %32, !dbg !3301 %37 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %36, !dbg !3301 %arrayref13.1 = load double, double addrspace(13)* %37, align 8, !dbg !3301, !tbaa !67, !alias.scope !70, !noalias !71 %38 = fadd reassoc contract double %35, %arrayref13.1, !dbg !3304 %39 = add i64 %26, %32, !dbg !3301 %40 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %39, !dbg !3301 %arrayref13.2 = load double, double addrspace(13)* %40, align 8, !dbg !3301, !tbaa !67, !alias.scope !70, !noalias !71 %41 = fadd reassoc contract double %38, %arrayref13.2, !dbg !3304 %42 = add i64 %27, %32, !dbg !3301 %43 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %42, !dbg !3301 %arrayref13.3 = load double, double addrspace(13)* %43, align 8, !dbg !3301, !tbaa !67, !alias.scope !70, !noalias !71 %44 = fadd reassoc contract double %41, %arrayref13.3, !dbg !3304 %45 = add i64 %28, %32, !dbg !3301 %46 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %45, !dbg !3301 %arrayref13.4 = load double, double addrspace(13)* %46, align 8, !dbg !3301, !tbaa !67, !alias.scope !70, !noalias !71 %47 = fadd reassoc contract double %44, %arrayref13.4, !dbg !3304 %48 = add i64 %29, %32, !dbg !3301 %49 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %48, !dbg !3301 %arrayref13.5 = load double, double addrspace(13)* %49, align 8, !dbg !3301, !tbaa !67, !alias.scope !70, !noalias !71 %50 = fadd reassoc contract double %47, %arrayref13.5, !dbg !3304 %51 = add i64 %30, %32, !dbg !3301 %52 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %51, !dbg !3301 %arrayref13.6 = load double, double addrspace(13)* %52, align 8, !dbg !3301, !tbaa !67, !alias.scope !70, !noalias !71 %53 = fadd reassoc contract double %50, %arrayref13.6, !dbg !3304 %54 = add nuw nsw i64 %32, 8, !dbg !3298 %55 = add i64 %31, %32, !dbg !3301 %56 = getelementptr inbounds double, double addrspace(13)* %arrayptr327, i64 %55, !dbg !3301 %arrayref13.7 = load double, double addrspace(13)* %56, align 8, !dbg !3301, !tbaa !67, !alias.scope !70, !noalias !71 %57 = fadd reassoc contract double %53, %arrayref13.7, !dbg !3304 %niter.ncmp.7.not = icmp eq i64 %54, %unroll_iter, !dbg !3296 br i1 %niter.ncmp.7.not, label %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit, label %L32, !dbg !3296, !llvm.loop !3338 L59: ; preds = %L5 %58 = ashr i64 %14, 1, !dbg !3339 %59 = add i64 %58, %1, !dbg !3342 %60 = call fastcc double @julia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) %0, i64 signext %1, i64 signext %59) #40, !dbg !3343 %61 = add i64 %59, 1, !dbg !3344 %62 = call fastcc double @julia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) %0, i64 signext %61, i64 signext %2) #40, !dbg !3345 %63 = fadd double %60, %62, !dbg !3346 br label %common.ret } ; Function Attrs: mustprogress nofree noinline willreturn define internal fastcc {} addrspace(10)* @augmented_julia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* nocapture nofree align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'", i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %1, i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %2) unnamed_addr #38 !dbg !3349 { top: %3 = call {}*** @julia.get_pgcstack() %4 = alloca {} addrspace(10)*, align 8 %5 = bitcast {}*** %3 to {}** %6 = getelementptr inbounds {}*, {}** %5, i64 -14 %7 = getelementptr inbounds {}*, {}** %6, i64 16 %8 = bitcast {}** %7 to i8** %9 = load i8*, i8** %8, align 8 %10 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) {} addrspace(10)* @julia.gc_alloc_obj({}** %6, i64 16, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140146496478032 to {}*) to {} addrspace(10)*)) %11 = bitcast {} addrspace(10)* %10 to { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* br label %loop.i loop.i: ; preds = %loop.i, %top %12 = phi i64 [ 0, %top ], [ %13, %loop.i ] %13 = add i64 %12, 1 %14 = getelementptr { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %11, i64 %12, i32 0 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %14, align 8 %15 = getelementptr { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %11, i64 %12, i32 1 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %15, align 8 %16 = icmp eq i64 %13, 1 br i1 %16, label %zeroType.27.exit, label %loop.i zeroType.27.exit: ; preds = %loop.i %tapemem = bitcast {} addrspace(10)* %10 to { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* store {} addrspace(10)* %10, {} addrspace(10)** %4, align 8 %"iv1'ac" = alloca i64, align 8 %"iv'ac" = alloca i64, align 8 %17 = call {}*** @julia.get_pgcstack() #39 %ptls_field22 = getelementptr inbounds {}**, {}*** %17, i64 2 %18 = bitcast {}*** %ptls_field22 to i64*** %ptls_load2324 = load i64**, i64*** %18, align 8, !tbaa !24, !alias.scope !3350, !noalias !3353 %19 = getelementptr inbounds i64*, i64** %ptls_load2324, i64 2 %safepoint = load i64*, i64** %19, align 8, !tbaa !28, !invariant.load !23, !alias.scope !3355, !noalias !3358 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #39, !dbg !3360 fence syncscope("singlethread") seq_cst %.not = icmp eq i64 %2, %1, !dbg !3361 br i1 %.not, label %L3, label %L5, !dbg !3362 L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %L32 br label %L28.common.ret.loopexit_crit_edge.unr-lcssa, !dbg !3363 L28.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %L32.lr.ph, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit %value_phi932.unr = phi i64 [ 0, %L32.lr.ph ], [ %unroll_iter, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !3363 br i1 %lcmp.mod.not, label %common.ret, label %L32.epil.preheader, !dbg !3363 L32.epil.preheader: ; preds = %L28.common.ret.loopexit_crit_edge.unr-lcssa %20 = add nsw i64 %xtraiter, -1, !dbg !3363 br label %L32.epil, !dbg !3363 L32.epil: ; preds = %L32.epil, %L32.epil.preheader %iv1 = phi i64 [ 0, %L32.epil.preheader ], [ %iv.next2, %L32.epil ] %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !3365 %21 = add nuw nsw i64 %value_phi932.unr, %iv1, !dbg !3365 %22 = add i64 %21, %28, !dbg !3368 %epil.iter.cmp.not = icmp eq i64 %iv.next2, %xtraiter, !dbg !3363 br i1 %epil.iter.cmp.not, label %common.ret.loopexit, label %L32.epil, !dbg !3363, !llvm.loop !3371 common.ret.loopexit: ; preds = %L32.epil br label %common.ret, !dbg !3372 common.ret: ; preds = %L59, %L8, %L3, %common.ret.loopexit, %L28.common.ret.loopexit_crit_edge.unr-lcssa %23 = load {} addrspace(10)*, {} addrspace(10)** %4, align 8, !dbg !3372 ret {} addrspace(10)* %23, !dbg !3372 L3: ; preds = %zeroType.27.exit %24 = add i64 %2, -1, !dbg !3373 %"'ipc" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3373 %"arrayptr25'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc", align 16, !dbg !3373, !tbaa !28, !alias.scope !3375, !noalias !3380, !nonnull !23 br label %common.ret L5: ; preds = %zeroType.27.exit %25 = sub i64 %2, %1, !dbg !3382 %.not26 = icmp slt i64 %25, 1024, !dbg !3384 br i1 %.not26, label %L8, label %L59, !dbg !3383 L8: ; preds = %L5 %26 = add i64 %1, -1, !dbg !3385 %"'ipc7" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3385 %"arrayptr327'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc7", align 16, !dbg !3385, !tbaa !28, !alias.scope !3375, !noalias !3380, !nonnull !23 %27 = add i64 %1, 2, !dbg !3387 %.not28 = icmp sgt i64 %27, %2, !dbg !3389 %28 = add i64 %1, 1, !dbg !3391 %value_phi = select i1 %.not28, i64 %28, i64 %2, !dbg !3391 %29 = sub i64 %value_phi, %27, !dbg !3394 %30 = add i64 %29, 1, !dbg !3398 %31 = icmp ugt i64 %29, 9223372036854775806, !dbg !3399 br i1 %31, label %common.ret, label %L32.lr.ph, !dbg !3400 L32.lr.ph: ; preds = %L8 %xtraiter = and i64 %30, 7, !dbg !3363 %32 = icmp ult i64 %29, 7, !dbg !3363 br i1 %32, label %L28.common.ret.loopexit_crit_edge.unr-lcssa, label %L32.lr.ph.new, !dbg !3363 L32.lr.ph.new: ; preds = %L32.lr.ph %unroll_iter = and i64 %30, 9223372036854775800, !dbg !3363 %33 = add i64 %1, 3 %34 = add i64 %1, 4 %35 = add i64 %1, 5 %36 = add i64 %1, 6 %37 = add i64 %1, 7 %38 = add i64 %1, 8 %39 = add nsw i64 %unroll_iter, -8, !dbg !3363 %40 = lshr i64 %39, 3, !dbg !3363 br label %L32, !dbg !3363 L32: ; preds = %L32, %L32.lr.ph.new %iv = phi i64 [ %iv.next, %L32 ], [ 0, %L32.lr.ph.new ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !3368 %41 = shl nuw nsw i64 %iv, 3, !dbg !3368 %42 = add i64 %41, %28, !dbg !3368 %43 = add i64 %27, %41, !dbg !3368 %44 = add i64 %33, %41, !dbg !3368 %45 = add i64 %34, %41, !dbg !3368 %46 = add i64 %35, %41, !dbg !3368 %47 = add i64 %36, %41, !dbg !3368 %48 = add i64 %37, %41, !dbg !3368 %49 = add nuw nsw i64 %41, 8, !dbg !3365 %50 = add i64 %38, %41, !dbg !3368 %niter.ncmp.7.not = icmp eq i64 %49, %unroll_iter, !dbg !3363 br i1 %niter.ncmp.7.not, label %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit, label %L32, !dbg !3363, !llvm.loop !3401 L59: ; preds = %L5 %51 = ashr i64 %25, 1, !dbg !3402 %52 = add i64 %51, %1, !dbg !3405 %_augmented27 = call fastcc {} addrspace(10)* @augmented_julia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree readonly align 16 %0, {} addrspace(10)* nocapture nofree align 16 %"'", i64 signext %1, i64 signext %52), !dbg !3406 %53 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %tapemem, i32 0, i32 1, !dbg !3407 store {} addrspace(10)* %_augmented27, {} addrspace(10)* addrspace(10)* %53, align 8, !dbg !3407 call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %10, {} addrspace(10)* %_augmented27), !dbg !3407 %54 = add i64 %52, 1, !dbg !3407 %_augmented = call fastcc {} addrspace(10)* @augmented_julia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree readonly align 16 %0, {} addrspace(10)* nocapture nofree align 16 %"'", i64 signext %54, i64 signext %2), !dbg !3408 %55 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %tapemem, i32 0, i32 0 store {} addrspace(10)* %_augmented, {} addrspace(10)* addrspace(10)* %55, align 8 call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %10, {} addrspace(10)* %_augmented) br label %common.ret } ; Function Attrs: mustprogress nofree noinline willreturn define internal fastcc void @diffejulia_mapreduce_impl_1464.28({} addrspace(10)* nocapture nofree readonly align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* nocapture nofree align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'", i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %1, i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %2, double %differeturn, { {} addrspace(10)*, {} addrspace(10)* } %tapeArg) unnamed_addr #38 !dbg !3409 { top: %"iv1'ac" = alloca i64, align 8 %"iv'ac" = alloca i64, align 8 %"common.ret.op'de" = alloca double, align 8 %3 = getelementptr double, double* %"common.ret.op'de", i64 0 store double 0.000000e+00, double* %3, align 8 %".lcssa.ph'de" = alloca double, align 8 %4 = getelementptr double, double* %".lcssa.ph'de", i64 0 store double 0.000000e+00, double* %4, align 8 %"'de" = alloca double, align 8 %5 = getelementptr double, double* %"'de", i64 0 store double 0.000000e+00, double* %5, align 8 %"value_phi831.unr'de" = alloca double, align 8 %6 = getelementptr double, double* %"value_phi831.unr'de", i64 0 store double 0.000000e+00, double* %6, align 8 %"'de8" = alloca double, align 8 %7 = getelementptr double, double* %"'de8", i64 0 store double 0.000000e+00, double* %7, align 8 %"'de16" = alloca double, align 8 %8 = getelementptr double, double* %"'de16", i64 0 store double 0.000000e+00, double* %8, align 8 %"value_phi831.epil'de" = alloca double, align 8 %9 = getelementptr double, double* %"value_phi831.epil'de", i64 0 store double 0.000000e+00, double* %9, align 8 %"arrayref13.epil'de" = alloca double, align 8 %10 = getelementptr double, double* %"arrayref13.epil'de", i64 0 store double 0.000000e+00, double* %10, align 8 %"'de39" = alloca double, align 8 %11 = getelementptr double, double* %"'de39", i64 0 store double 0.000000e+00, double* %11, align 8 %"arrayref'de" = alloca double, align 8 %12 = getelementptr double, double* %"arrayref'de", i64 0 store double 0.000000e+00, double* %12, align 8 %_cache = alloca i8, align 1 %_cache43 = alloca i8, align 1 %"arrayref4'de" = alloca double, align 8 %13 = getelementptr double, double* %"arrayref4'de", i64 0 store double 0.000000e+00, double* %13, align 8 %"arrayref7'de" = alloca double, align 8 %14 = getelementptr double, double* %"arrayref7'de", i64 0 store double 0.000000e+00, double* %14, align 8 %"'de59" = alloca double, align 8 %15 = getelementptr double, double* %"'de59", i64 0 store double 0.000000e+00, double* %15, align 8 %"arrayref13.7'de" = alloca double, align 8 %16 = getelementptr double, double* %"arrayref13.7'de", i64 0 store double 0.000000e+00, double* %16, align 8 %"'de67" = alloca double, align 8 %17 = getelementptr double, double* %"'de67", i64 0 store double 0.000000e+00, double* %17, align 8 %"arrayref13.6'de" = alloca double, align 8 %18 = getelementptr double, double* %"arrayref13.6'de", i64 0 store double 0.000000e+00, double* %18, align 8 %"'de73" = alloca double, align 8 %19 = getelementptr double, double* %"'de73", i64 0 store double 0.000000e+00, double* %19, align 8 %"arrayref13.5'de" = alloca double, align 8 %20 = getelementptr double, double* %"arrayref13.5'de", i64 0 store double 0.000000e+00, double* %20, align 8 %"'de79" = alloca double, align 8 %21 = getelementptr double, double* %"'de79", i64 0 store double 0.000000e+00, double* %21, align 8 %"arrayref13.4'de" = alloca double, align 8 %22 = getelementptr double, double* %"arrayref13.4'de", i64 0 store double 0.000000e+00, double* %22, align 8 %"'de85" = alloca double, align 8 %23 = getelementptr double, double* %"'de85", i64 0 store double 0.000000e+00, double* %23, align 8 %"arrayref13.3'de" = alloca double, align 8 %24 = getelementptr double, double* %"arrayref13.3'de", i64 0 store double 0.000000e+00, double* %24, align 8 %"'de91" = alloca double, align 8 %25 = getelementptr double, double* %"'de91", i64 0 store double 0.000000e+00, double* %25, align 8 %"arrayref13.2'de" = alloca double, align 8 %26 = getelementptr double, double* %"arrayref13.2'de", i64 0 store double 0.000000e+00, double* %26, align 8 %"'de97" = alloca double, align 8 %27 = getelementptr double, double* %"'de97", i64 0 store double 0.000000e+00, double* %27, align 8 %"arrayref13.1'de" = alloca double, align 8 %28 = getelementptr double, double* %"arrayref13.1'de", i64 0 store double 0.000000e+00, double* %28, align 8 %"value_phi831'de" = alloca double, align 8 %29 = getelementptr double, double* %"value_phi831'de", i64 0 store double 0.000000e+00, double* %29, align 8 %"arrayref13'de" = alloca double, align 8 %30 = getelementptr double, double* %"arrayref13'de", i64 0 store double 0.000000e+00, double* %30, align 8 %"'de109" = alloca double, align 8 %31 = getelementptr double, double* %"'de109", i64 0 store double 0.000000e+00, double* %31, align 8 %"'de110" = alloca double, align 8 %32 = getelementptr double, double* %"'de110", i64 0 store double 0.000000e+00, double* %32, align 8 %tapeld_cache = alloca { {} addrspace(10)*, {} addrspace(10)* }, align 8 store { {} addrspace(10)*, {} addrspace(10)* } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*) }, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld_cache, align 8 %tapeld119_cache = alloca { {} addrspace(10)*, {} addrspace(10)* }, align 8 store { {} addrspace(10)*, {} addrspace(10)* } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*) }, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld119_cache, align 8 %33 = call {}*** @julia.get_pgcstack() #39 %.not = icmp eq i64 %2, %1, !dbg !3410 br i1 %.not, label %L3, label %L5, !dbg !3411 L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %L32 br label %L28.common.ret.loopexit_crit_edge.unr-lcssa, !dbg !3412 L28.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %L32.lr.ph, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit %value_phi932.unr = phi i64 [ 0, %L32.lr.ph ], [ %unroll_iter, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !3412 store i8 2, i8* %_cache, align 1, !dbg !3412, !invariant.group !3414 store i8 3, i8* %_cache43, align 1, !dbg !3412, !invariant.group !3415 br i1 %lcmp.mod.not, label %common.ret, label %L32.epil.preheader, !dbg !3412 L32.epil.preheader: ; preds = %L28.common.ret.loopexit_crit_edge.unr-lcssa %34 = add nsw i64 %xtraiter, -1, !dbg !3412 br label %L32.epil, !dbg !3412 L32.epil: ; preds = %L32.epil, %L32.epil.preheader %iv1 = phi i64 [ 0, %L32.epil.preheader ], [ %iv.next2, %L32.epil ] %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !3416 %35 = add nuw nsw i64 %value_phi932.unr, %iv1, !dbg !3416 %36 = add i64 %35, %41, !dbg !3419 %"'ipg" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %36, !dbg !3419 %epil.iter.cmp.not = icmp eq i64 %iv.next2, %xtraiter, !dbg !3412 br i1 %epil.iter.cmp.not, label %common.ret.loopexit, label %L32.epil, !dbg !3412, !llvm.loop !3422 common.ret.loopexit: ; preds = %L32.epil store i8 1, i8* %_cache, align 1, !dbg !3423, !invariant.group !3414 store i8 2, i8* %_cache43, align 1, !dbg !3423, !invariant.group !3415 br label %common.ret, !dbg !3423 common.ret: ; preds = %L59, %L8, %L3, %common.ret.loopexit, %L28.common.ret.loopexit_crit_edge.unr-lcssa br label %invertcommon.ret, !dbg !3423 L3: ; preds = %top %37 = add i64 %2, -1, !dbg !3424 %"'ipc45" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3424 %"arrayptr25'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc45", align 16, !dbg !3424, !tbaa !28, !alias.scope !3426, !noalias !3429, !nonnull !23 %"'ipg44" = getelementptr inbounds double, double addrspace(13)* %"arrayptr25'ipl", i64 %37, !dbg !3424 store i8 4, i8* %_cache, align 1, !invariant.group !3414 store i8 4, i8* %_cache43, align 1, !invariant.group !3415 br label %common.ret L5: ; preds = %top %38 = sub i64 %2, %1, !dbg !3431 %.not26 = icmp slt i64 %38, 1024, !dbg !3433 br i1 %.not26, label %L8, label %L59, !dbg !3432 L8: ; preds = %L5 %39 = add i64 %1, -1, !dbg !3434 %"'ipc" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3434 %"arrayptr327'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc", align 16, !dbg !3434, !tbaa !28, !alias.scope !3426, !noalias !3429, !nonnull !23, !invariant.group !3436 %"'ipg54" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %39, !dbg !3434 %"'ipg50" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %1, !dbg !3437 %40 = add i64 %1, 2, !dbg !3439 %.not28 = icmp sgt i64 %40, %2, !dbg !3441 %41 = add i64 %1, 1, !dbg !3443 %value_phi = select i1 %.not28, i64 %41, i64 %2, !dbg !3443 %42 = sub i64 %value_phi, %40, !dbg !3446 %43 = add i64 %42, 1, !dbg !3450 %44 = icmp ugt i64 %42, 9223372036854775806, !dbg !3451 store i8 0, i8* %_cache, align 1, !dbg !3452, !invariant.group !3414 store i8 0, i8* %_cache43, align 1, !dbg !3452, !invariant.group !3415 br i1 %44, label %common.ret, label %L32.lr.ph, !dbg !3452 L32.lr.ph: ; preds = %L8 %xtraiter = and i64 %43, 7, !dbg !3412 %45 = icmp ult i64 %42, 7, !dbg !3412 br i1 %45, label %L28.common.ret.loopexit_crit_edge.unr-lcssa, label %L32.lr.ph.new, !dbg !3412 L32.lr.ph.new: ; preds = %L32.lr.ph %unroll_iter = and i64 %43, 9223372036854775800, !dbg !3412 %46 = add i64 %1, 3 %47 = add i64 %1, 4 %48 = add i64 %1, 5 %49 = add i64 %1, 6 %50 = add i64 %1, 7 %51 = add i64 %1, 8 %52 = add nsw i64 %unroll_iter, -8, !dbg !3412 %53 = lshr i64 %52, 3, !dbg !3412 br label %L32, !dbg !3412 L32: ; preds = %L32, %L32.lr.ph.new %iv = phi i64 [ %iv.next, %L32 ], [ 0, %L32.lr.ph.new ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !3419 %54 = shl nuw nsw i64 %iv, 3, !dbg !3419 %55 = add i64 %54, %41, !dbg !3419 %"'ipg103" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %55, !dbg !3419 %56 = add i64 %40, %54, !dbg !3419 %"'ipg98" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %56, !dbg !3419 %57 = add i64 %46, %54, !dbg !3419 %"'ipg92" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %57, !dbg !3419 %58 = add i64 %47, %54, !dbg !3419 %"'ipg86" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %58, !dbg !3419 %59 = add i64 %48, %54, !dbg !3419 %"'ipg80" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %59, !dbg !3419 %60 = add i64 %49, %54, !dbg !3419 %"'ipg74" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %60, !dbg !3419 %61 = add i64 %50, %54, !dbg !3419 %"'ipg68" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %61, !dbg !3419 %62 = add nuw nsw i64 %54, 8, !dbg !3416 %63 = add i64 %51, %54, !dbg !3419 %"'ipg60" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %63, !dbg !3419 %niter.ncmp.7.not = icmp eq i64 %62, %unroll_iter, !dbg !3412 br i1 %niter.ncmp.7.not, label %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit, label %L32, !dbg !3412, !llvm.loop !3453 L59: ; preds = %L5 %64 = ashr i64 %38, 1, !dbg !3454 %65 = add i64 %64, %1, !dbg !3457 %tapeArg117 = extractvalue { {} addrspace(10)*, {} addrspace(10)* } %tapeArg, 1, !dbg !3458 %66 = bitcast {} addrspace(10)* %tapeArg117 to { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)*, !dbg !3459 %tapeld119 = load { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %66, align 8, !dbg !3459, !enzyme_mustcache !23 %67 = add i64 %65, 1, !dbg !3459 %tapeArg115 = extractvalue { {} addrspace(10)*, {} addrspace(10)* } %tapeArg, 0, !dbg !3460 %68 = bitcast {} addrspace(10)* %tapeArg115 to { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)*, !dbg !3461 %tapeld = load { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %68, align 8, !dbg !3461, !enzyme_mustcache !23 store i8 3, i8* %_cache, align 1, !invariant.group !3414 store { {} addrspace(10)*, {} addrspace(10)* } %tapeld119, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld119_cache, align 8, !invariant.group !3464 store { {} addrspace(10)*, {} addrspace(10)* } %tapeld, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld_cache, align 8, !invariant.group !3465 store i8 1, i8* %_cache43, align 1, !invariant.group !3415 br label %common.ret inverttop: ; preds = %invertL5, %invertL3 fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertL28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %invertL28.common.ret.loopexit_crit_edge.unr-lcssa %_unwrap = add i64 %1, 2 %.not28_unwrap = icmp sgt i64 %_unwrap, %2 %_unwrap2 = add i64 %1, 1 %value_phi_unwrap = select i1 %.not28_unwrap, i64 %_unwrap2, i64 %2 %_unwrap3 = sub i64 %value_phi_unwrap, %_unwrap %_unwrap4 = add i64 %_unwrap3, 1 %unroll_iter_unwrap = and i64 %_unwrap4, 9223372036854775800 %_unwrap5 = add nsw i64 %unroll_iter_unwrap, -8 %_unwrap6 = lshr i64 %_unwrap5, 3 br label %mergeinvertL32_L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit mergeinvertL32_L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %invertL28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit store i64 %_unwrap6, i64* %"iv'ac", align 8 br label %invertL32 invertL28.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %invertcommon.ret, %invertL32.epil.preheader %69 = load double, double* %".lcssa.ph'de", align 8 store double 0.000000e+00, double* %".lcssa.ph'de", align 8 %_unwrap9 = add i64 %1, 2 %.not28_unwrap10 = icmp sgt i64 %_unwrap9, %2 %_unwrap11 = add i64 %1, 1 %value_phi_unwrap12 = select i1 %.not28_unwrap10, i64 %_unwrap11, i64 %2 %_unwrap13 = sub i64 %value_phi_unwrap12, %_unwrap9 %_unwrap14 = icmp ult i64 %_unwrap13, 7 %70 = xor i1 %_unwrap14, true %71 = select fast i1 %70, double %69, double 0.000000e+00 %72 = load double, double* %"'de", align 8 %73 = fadd fast double %72, %69 %74 = select fast i1 %_unwrap14, double %72, double %73 store double %74, double* %"'de", align 8 %75 = load double, double* %"value_phi831.unr'de", align 8 store double 0.000000e+00, double* %"value_phi831.unr'de", align 8 %76 = select fast i1 %70, double %75, double 0.000000e+00 %77 = load double, double* %"'de", align 8 %78 = fadd fast double %77, %75 %79 = select fast i1 %_unwrap14, double %77, double %78 store double %79, double* %"'de", align 8 %80 = select fast i1 %_unwrap14, double %75, double 0.000000e+00 %81 = load double, double* %"'de8", align 8 %82 = fadd fast double %81, %75 %83 = select fast i1 %_unwrap14, double %82, double %81 store double %83, double* %"'de8", align 8 br i1 %_unwrap14, label %invertL32.lr.ph, label %invertL28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit invertL32.epil.preheader: ; preds = %invertL32.epil_phimerge br label %invertL28.common.ret.loopexit_crit_edge.unr-lcssa invertL32.epil: ; preds = %mergeinvertL32.epil_common.ret.loopexit, %incinvertL32.epil %84 = load double, double* %"'de16", align 8, !dbg !3466 store double 0.000000e+00, double* %"'de16", align 8, !dbg !3466 %85 = load double, double* %"value_phi831.epil'de", align 8, !dbg !3466 %86 = fadd fast double %85, %84, !dbg !3466 store double %86, double* %"value_phi831.epil'de", align 8, !dbg !3466 %87 = load double, double* %"arrayref13.epil'de", align 8, !dbg !3466 %88 = fadd fast double %87, %84, !dbg !3466 store double %88, double* %"arrayref13.epil'de", align 8, !dbg !3466 %89 = load double, double* %"arrayref13.epil'de", align 8, !dbg !3419 store double 0.000000e+00, double* %"arrayref13.epil'de", align 8, !dbg !3419 %90 = load i64, i64* %"iv1'ac", align 8, !dbg !3419 %"'ipc_unwrap" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3419 %"arrayptr327'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap", align 16, !dbg !3434, !tbaa !28, !alias.scope !3426, !noalias !3429, !nonnull !23 %_unwrap17 = add i64 %1, 2, !dbg !3419 %.not28_unwrap18 = icmp sgt i64 %_unwrap17, %2, !dbg !3419 %_unwrap19 = add i64 %1, 1, !dbg !3419 %value_phi_unwrap20 = select i1 %.not28_unwrap18, i64 %_unwrap19, i64 %2, !dbg !3419 %_unwrap21 = sub i64 %value_phi_unwrap20, %_unwrap17, !dbg !3419 %_unwrap22 = icmp ult i64 %_unwrap21, 7, !dbg !3419 br i1 %_unwrap22, label %invertL32.epil_phirc, label %invertL32.epil_phirc23, !dbg !3419 invertL32.epil_phirc: ; preds = %invertL32.epil br label %invertL32.epil_phimerge invertL32.epil_phirc23: ; preds = %invertL32.epil %_unwrap24 = add i64 %_unwrap21, 1 %unroll_iter_unwrap25 = and i64 %_unwrap24, 9223372036854775800 br label %invertL32.epil_phimerge invertL32.epil_phimerge: ; preds = %invertL32.epil_phirc23, %invertL32.epil_phirc %91 = phi i64 [ 0, %invertL32.epil_phirc ], [ %unroll_iter_unwrap25, %invertL32.epil_phirc23 ], !dbg !3419 %_unwrap26 = add nuw nsw i64 %91, %90, !dbg !3419 %_unwrap27 = add i64 %_unwrap26, %_unwrap19, !dbg !3419 %"'ipg_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'il_phi_unwrap", i64 %_unwrap27, !dbg !3419 %92 = atomicrmw fadd double addrspace(13)* %"'ipg_unwrap", double %89 monotonic, align 8, !dbg !3419 %93 = load double, double* %"value_phi831.epil'de", align 8 store double 0.000000e+00, double* %"value_phi831.epil'de", align 8 %94 = load i64, i64* %"iv1'ac", align 8 %95 = icmp eq i64 %94, 0 %96 = xor i1 %95, true %97 = select fast i1 %95, double %93, double 0.000000e+00 %98 = load double, double* %"value_phi831.unr'de", align 8 %99 = fadd fast double %98, %93 %100 = select fast i1 %95, double %99, double %98 store double %100, double* %"value_phi831.unr'de", align 8 %101 = select fast i1 %96, double %93, double 0.000000e+00 %102 = load double, double* %"'de16", align 8 %103 = fadd fast double %102, %93 %104 = select fast i1 %95, double %102, double %103 store double %104, double* %"'de16", align 8 br i1 %95, label %invertL32.epil.preheader, label %incinvertL32.epil incinvertL32.epil: ; preds = %invertL32.epil_phimerge %105 = load i64, i64* %"iv1'ac", align 8 %106 = add nsw i64 %105, -1 store i64 %106, i64* %"iv1'ac", align 8 br label %invertL32.epil invertcommon.ret.loopexit: ; preds = %invertcommon.ret %_unwrap31 = add i64 %1, 2 %.not28_unwrap32 = icmp sgt i64 %_unwrap31, %2 %_unwrap33 = add i64 %1, 1 %value_phi_unwrap34 = select i1 %.not28_unwrap32, i64 %_unwrap33, i64 %2 %_unwrap35 = sub i64 %value_phi_unwrap34, %_unwrap31 %_unwrap36 = add i64 %_unwrap35, 1 %xtraiter_unwrap = and i64 %_unwrap36, 7 %_unwrap37 = add nsw i64 %xtraiter_unwrap, -1 br label %mergeinvertL32.epil_common.ret.loopexit mergeinvertL32.epil_common.ret.loopexit: ; preds = %invertcommon.ret.loopexit store i64 %_unwrap37, i64* %"iv1'ac", align 8 br label %invertL32.epil invertcommon.ret: ; preds = %common.ret store double %differeturn, double* %"common.ret.op'de", align 8 %107 = load double, double* %"common.ret.op'de", align 8 store double 0.000000e+00, double* %"common.ret.op'de", align 8 %108 = load i8, i8* %_cache, align 1, !invariant.group !3414 %109 = icmp eq i8 0, %108 %110 = icmp eq i8 1, %108 %111 = icmp eq i8 2, %108 %112 = icmp eq i8 3, %108 %113 = icmp eq i8 4, %108 %114 = select fast i1 %110, double %107, double 0.000000e+00 %115 = load double, double* %"'de16", align 8 %116 = fadd fast double %115, %107 %117 = select fast i1 %110, double %116, double %115 store double %117, double* %"'de16", align 8 %118 = select fast i1 %112, double %107, double 0.000000e+00 %119 = load double, double* %"'de39", align 8 %120 = fadd fast double %119, %107 %121 = select fast i1 %112, double %120, double %119 store double %121, double* %"'de39", align 8 %122 = select fast i1 %109, double %107, double 0.000000e+00 %123 = load double, double* %"'de8", align 8 %124 = fadd fast double %123, %107 %125 = select fast i1 %109, double %124, double %123 store double %125, double* %"'de8", align 8 %126 = select fast i1 %113, double %107, double 0.000000e+00 %127 = load double, double* %"arrayref'de", align 8 %128 = fadd fast double %127, %107 %129 = select fast i1 %113, double %128, double %127 store double %129, double* %"arrayref'de", align 8 %130 = select fast i1 %111, double %107, double 0.000000e+00 %131 = load double, double* %".lcssa.ph'de", align 8 %132 = fadd fast double %131, %107 %133 = select fast i1 %111, double %132, double %131 store double %133, double* %".lcssa.ph'de", align 8 %134 = load i8, i8* %_cache43, align 1, !invariant.group !3415 switch i8 %134, label %invertL3 [ i8 0, label %invertL8 i8 1, label %invertL59 i8 2, label %invertcommon.ret.loopexit i8 3, label %invertL28.common.ret.loopexit_crit_edge.unr-lcssa ] invertL3: ; preds = %invertcommon.ret %135 = load double, double* %"arrayref'de", align 8, !dbg !3424 store double 0.000000e+00, double* %"arrayref'de", align 8, !dbg !3424 %"'ipc45_unwrap" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3424 %"arrayptr25'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc45_unwrap", align 16, !dbg !3424, !tbaa !28, !alias.scope !3426, !noalias !3429, !nonnull !23 %_unwrap46 = add i64 %2, -1, !dbg !3424 %"'ipg44_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr25'il_phi_unwrap", i64 %_unwrap46, !dbg !3424 %136 = atomicrmw fadd double addrspace(13)* %"'ipg44_unwrap", double %135 monotonic, align 8, !dbg !3424 br label %inverttop invertL5: ; preds = %invertL59, %invertL8 br label %inverttop invertL8: ; preds = %invertL32.lr.ph, %invertcommon.ret %137 = load double, double* %"'de8", align 8, !dbg !3469 store double 0.000000e+00, double* %"'de8", align 8, !dbg !3469 %138 = load double, double* %"arrayref4'de", align 8, !dbg !3469 %139 = fadd fast double %138, %137, !dbg !3469 store double %139, double* %"arrayref4'de", align 8, !dbg !3469 %140 = load double, double* %"arrayref7'de", align 8, !dbg !3469 %141 = fadd fast double %140, %137, !dbg !3469 store double %141, double* %"arrayref7'de", align 8, !dbg !3469 %142 = load double, double* %"arrayref7'de", align 8, !dbg !3437 store double 0.000000e+00, double* %"arrayref7'de", align 8, !dbg !3437 %"'ipc_unwrap51" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3437 %"arrayptr327'il_phi_unwrap52" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap51", align 16, !dbg !3434, !tbaa !28, !alias.scope !3426, !noalias !3429, !nonnull !23 %"'ipg50_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'il_phi_unwrap52", i64 %1, !dbg !3437 %143 = atomicrmw fadd double addrspace(13)* %"'ipg50_unwrap", double %142 monotonic, align 8, !dbg !3437 %144 = load double, double* %"arrayref4'de", align 8, !dbg !3434 store double 0.000000e+00, double* %"arrayref4'de", align 8, !dbg !3434 %_unwrap55 = add i64 %1, -1, !dbg !3434 %"'ipg54_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'il_phi_unwrap52", i64 %_unwrap55, !dbg !3434 %145 = atomicrmw fadd double addrspace(13)* %"'ipg54_unwrap", double %144 monotonic, align 8, !dbg !3434 br label %invertL5 invertL32.lr.ph: ; preds = %invertL32.lr.ph.new, %invertL28.common.ret.loopexit_crit_edge.unr-lcssa br label %invertL8 invertL32.lr.ph.new: ; preds = %invertL32 br label %invertL32.lr.ph invertL32: ; preds = %incinvertL32, %mergeinvertL32_L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit %146 = load double, double* %"'de", align 8, !dbg !3466 store double 0.000000e+00, double* %"'de", align 8, !dbg !3466 %147 = load double, double* %"'de59", align 8, !dbg !3466 %148 = fadd fast double %147, %146, !dbg !3466 store double %148, double* %"'de59", align 8, !dbg !3466 %149 = load double, double* %"arrayref13.7'de", align 8, !dbg !3466 %150 = fadd fast double %149, %146, !dbg !3466 store double %150, double* %"arrayref13.7'de", align 8, !dbg !3466 %151 = load double, double* %"arrayref13.7'de", align 8, !dbg !3419 store double 0.000000e+00, double* %"arrayref13.7'de", align 8, !dbg !3419 %152 = load i64, i64* %"iv'ac", align 8, !dbg !3419 %"'ipc_unwrap61" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3419 %"arrayptr327'ipl_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap61", align 16, !dbg !3434, !tbaa !28, !alias.scope !3426, !noalias !3429, !nonnull !23, !invariant.group !3436 %_unwrap62 = add i64 %1, 8, !dbg !3419 %_unwrap63 = shl nuw nsw i64 %152, 3, !dbg !3419 %_unwrap64 = add i64 %_unwrap62, %_unwrap63, !dbg !3419 %"'ipg60_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap64, !dbg !3419 %153 = atomicrmw fadd double addrspace(13)* %"'ipg60_unwrap", double %151 monotonic, align 8, !dbg !3419 %154 = load double, double* %"'de59", align 8, !dbg !3466 store double 0.000000e+00, double* %"'de59", align 8, !dbg !3466 %155 = load double, double* %"'de67", align 8, !dbg !3466 %156 = fadd fast double %155, %154, !dbg !3466 store double %156, double* %"'de67", align 8, !dbg !3466 %157 = load double, double* %"arrayref13.6'de", align 8, !dbg !3466 %158 = fadd fast double %157, %154, !dbg !3466 store double %158, double* %"arrayref13.6'de", align 8, !dbg !3466 %159 = load double, double* %"arrayref13.6'de", align 8, !dbg !3419 store double 0.000000e+00, double* %"arrayref13.6'de", align 8, !dbg !3419 %160 = load i64, i64* %"iv'ac", align 8, !dbg !3419 %_unwrap69 = add i64 %1, 7, !dbg !3419 %_unwrap70 = add i64 %_unwrap69, %_unwrap63, !dbg !3419 %"'ipg68_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap70, !dbg !3419 %161 = atomicrmw fadd double addrspace(13)* %"'ipg68_unwrap", double %159 monotonic, align 8, !dbg !3419 %162 = load double, double* %"'de67", align 8, !dbg !3466 store double 0.000000e+00, double* %"'de67", align 8, !dbg !3466 %163 = load double, double* %"'de73", align 8, !dbg !3466 %164 = fadd fast double %163, %162, !dbg !3466 store double %164, double* %"'de73", align 8, !dbg !3466 %165 = load double, double* %"arrayref13.5'de", align 8, !dbg !3466 %166 = fadd fast double %165, %162, !dbg !3466 store double %166, double* %"arrayref13.5'de", align 8, !dbg !3466 %167 = load double, double* %"arrayref13.5'de", align 8, !dbg !3419 store double 0.000000e+00, double* %"arrayref13.5'de", align 8, !dbg !3419 %168 = load i64, i64* %"iv'ac", align 8, !dbg !3419 %_unwrap75 = add i64 %1, 6, !dbg !3419 %_unwrap76 = add i64 %_unwrap75, %_unwrap63, !dbg !3419 %"'ipg74_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap76, !dbg !3419 %169 = atomicrmw fadd double addrspace(13)* %"'ipg74_unwrap", double %167 monotonic, align 8, !dbg !3419 %170 = load double, double* %"'de73", align 8, !dbg !3466 store double 0.000000e+00, double* %"'de73", align 8, !dbg !3466 %171 = load double, double* %"'de79", align 8, !dbg !3466 %172 = fadd fast double %171, %170, !dbg !3466 store double %172, double* %"'de79", align 8, !dbg !3466 %173 = load double, double* %"arrayref13.4'de", align 8, !dbg !3466 %174 = fadd fast double %173, %170, !dbg !3466 store double %174, double* %"arrayref13.4'de", align 8, !dbg !3466 %175 = load double, double* %"arrayref13.4'de", align 8, !dbg !3419 store double 0.000000e+00, double* %"arrayref13.4'de", align 8, !dbg !3419 %176 = load i64, i64* %"iv'ac", align 8, !dbg !3419 %_unwrap81 = add i64 %1, 5, !dbg !3419 %_unwrap82 = add i64 %_unwrap81, %_unwrap63, !dbg !3419 %"'ipg80_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap82, !dbg !3419 %177 = atomicrmw fadd double addrspace(13)* %"'ipg80_unwrap", double %175 monotonic, align 8, !dbg !3419 %178 = load double, double* %"'de79", align 8, !dbg !3466 store double 0.000000e+00, double* %"'de79", align 8, !dbg !3466 %179 = load double, double* %"'de85", align 8, !dbg !3466 %180 = fadd fast double %179, %178, !dbg !3466 store double %180, double* %"'de85", align 8, !dbg !3466 %181 = load double, double* %"arrayref13.3'de", align 8, !dbg !3466 %182 = fadd fast double %181, %178, !dbg !3466 store double %182, double* %"arrayref13.3'de", align 8, !dbg !3466 %183 = load double, double* %"arrayref13.3'de", align 8, !dbg !3419 store double 0.000000e+00, double* %"arrayref13.3'de", align 8, !dbg !3419 %184 = load i64, i64* %"iv'ac", align 8, !dbg !3419 %_unwrap87 = add i64 %1, 4, !dbg !3419 %_unwrap88 = add i64 %_unwrap87, %_unwrap63, !dbg !3419 %"'ipg86_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap88, !dbg !3419 %185 = atomicrmw fadd double addrspace(13)* %"'ipg86_unwrap", double %183 monotonic, align 8, !dbg !3419 %186 = load double, double* %"'de85", align 8, !dbg !3466 store double 0.000000e+00, double* %"'de85", align 8, !dbg !3466 %187 = load double, double* %"'de91", align 8, !dbg !3466 %188 = fadd fast double %187, %186, !dbg !3466 store double %188, double* %"'de91", align 8, !dbg !3466 %189 = load double, double* %"arrayref13.2'de", align 8, !dbg !3466 %190 = fadd fast double %189, %186, !dbg !3466 store double %190, double* %"arrayref13.2'de", align 8, !dbg !3466 %191 = load double, double* %"arrayref13.2'de", align 8, !dbg !3419 store double 0.000000e+00, double* %"arrayref13.2'de", align 8, !dbg !3419 %192 = load i64, i64* %"iv'ac", align 8, !dbg !3419 %_unwrap93 = add i64 %1, 3, !dbg !3419 %_unwrap94 = add i64 %_unwrap93, %_unwrap63, !dbg !3419 %"'ipg92_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap94, !dbg !3419 %193 = atomicrmw fadd double addrspace(13)* %"'ipg92_unwrap", double %191 monotonic, align 8, !dbg !3419 %194 = load double, double* %"'de91", align 8, !dbg !3466 store double 0.000000e+00, double* %"'de91", align 8, !dbg !3466 %195 = load double, double* %"'de97", align 8, !dbg !3466 %196 = fadd fast double %195, %194, !dbg !3466 store double %196, double* %"'de97", align 8, !dbg !3466 %197 = load double, double* %"arrayref13.1'de", align 8, !dbg !3466 %198 = fadd fast double %197, %194, !dbg !3466 store double %198, double* %"arrayref13.1'de", align 8, !dbg !3466 %199 = load double, double* %"arrayref13.1'de", align 8, !dbg !3419 store double 0.000000e+00, double* %"arrayref13.1'de", align 8, !dbg !3419 %200 = load i64, i64* %"iv'ac", align 8, !dbg !3419 %_unwrap99 = add i64 %1, 2, !dbg !3419 %_unwrap100 = add i64 %_unwrap99, %_unwrap63, !dbg !3419 %"'ipg98_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap100, !dbg !3419 %201 = atomicrmw fadd double addrspace(13)* %"'ipg98_unwrap", double %199 monotonic, align 8, !dbg !3419 %202 = load double, double* %"'de97", align 8, !dbg !3466 store double 0.000000e+00, double* %"'de97", align 8, !dbg !3466 %203 = load double, double* %"value_phi831'de", align 8, !dbg !3466 %204 = fadd fast double %203, %202, !dbg !3466 store double %204, double* %"value_phi831'de", align 8, !dbg !3466 %205 = load double, double* %"arrayref13'de", align 8, !dbg !3466 %206 = fadd fast double %205, %202, !dbg !3466 store double %206, double* %"arrayref13'de", align 8, !dbg !3466 %207 = load double, double* %"arrayref13'de", align 8, !dbg !3419 store double 0.000000e+00, double* %"arrayref13'de", align 8, !dbg !3419 %208 = load i64, i64* %"iv'ac", align 8, !dbg !3419 %_unwrap104 = add i64 %1, 1, !dbg !3419 %_unwrap105 = add i64 %_unwrap63, %_unwrap104, !dbg !3419 %"'ipg103_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap105, !dbg !3419 %209 = atomicrmw fadd double addrspace(13)* %"'ipg103_unwrap", double %207 monotonic, align 8, !dbg !3419 %210 = load double, double* %"value_phi831'de", align 8 store double 0.000000e+00, double* %"value_phi831'de", align 8 %211 = load i64, i64* %"iv'ac", align 8 %212 = icmp eq i64 %211, 0 %213 = xor i1 %212, true %214 = select fast i1 %213, double %210, double 0.000000e+00 %215 = load double, double* %"'de", align 8 %216 = fadd fast double %215, %210 %217 = select fast i1 %212, double %215, double %216 store double %217, double* %"'de", align 8 %218 = select fast i1 %212, double %210, double 0.000000e+00 %219 = load double, double* %"'de8", align 8 %220 = fadd fast double %219, %210 %221 = select fast i1 %212, double %220, double %219 store double %221, double* %"'de8", align 8 br i1 %212, label %invertL32.lr.ph.new, label %incinvertL32 incinvertL32: ; preds = %invertL32 %222 = load i64, i64* %"iv'ac", align 8 %223 = add nsw i64 %222, -1 store i64 %223, i64* %"iv'ac", align 8 br label %invertL32 invertL59: ; preds = %invertcommon.ret %224 = load double, double* %"'de39", align 8, !dbg !3461 store double 0.000000e+00, double* %"'de39", align 8, !dbg !3461 %225 = load double, double* %"'de109", align 8, !dbg !3461 %226 = fadd fast double %225, %224, !dbg !3461 store double %226, double* %"'de109", align 8, !dbg !3461 %227 = load double, double* %"'de110", align 8, !dbg !3461 %228 = fadd fast double %227, %224, !dbg !3461 store double %228, double* %"'de110", align 8, !dbg !3461 %_unwrap111 = sub i64 %2, %1, !dbg !3460 %_unwrap112 = ashr i64 %_unwrap111, 1, !dbg !3460 %_unwrap113 = add i64 %_unwrap112, %1, !dbg !3460 %_unwrap114 = add i64 %_unwrap113, 1, !dbg !3460 %229 = load double, double* %"'de110", align 8, !dbg !3460 %230 = load { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld_cache, align 8, !dbg !3461, !invariant.group !3465 call fastcc void @diffejulia_mapreduce_impl_1464.28({} addrspace(10)* nocapture nofree readonly align 16 %0, {} addrspace(10)* nocapture nofree align 16 %"'", i64 signext %_unwrap114, i64 signext %2, double %229, { {} addrspace(10)*, {} addrspace(10)* } %230), !dbg !3460 store double 0.000000e+00, double* %"'de110", align 8, !dbg !3460 %231 = load double, double* %"'de109", align 8, !dbg !3458 %232 = load { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld119_cache, align 8, !dbg !3459, !invariant.group !3464 call fastcc void @diffejulia_mapreduce_impl_1464.28({} addrspace(10)* nocapture nofree readonly align 16 %0, {} addrspace(10)* nocapture nofree align 16 %"'", i64 signext %1, i64 signext %_unwrap113, double %231, { {} addrspace(10)*, {} addrspace(10)* } %232), !dbg !3458 store double 0.000000e+00, double* %"'de109", align 8, !dbg !3458 br label %invertL5 } ; Function Attrs: mustprogress nofree noinline willreturn define internal fastcc void @diffejulia_mapreduce_impl_1464.25({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* nocapture nofree align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'", i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %1, i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %2, double %differeturn) unnamed_addr #38 !dbg !3220 { top: %"iv1'ac" = alloca i64, align 8 %"iv'ac" = alloca i64, align 8 %"common.ret.op'de" = alloca double, align 8 %3 = getelementptr double, double* %"common.ret.op'de", i64 0 store double 0.000000e+00, double* %3, align 8 %".lcssa.ph'de" = alloca double, align 8 %4 = getelementptr double, double* %".lcssa.ph'de", i64 0 store double 0.000000e+00, double* %4, align 8 %"'de" = alloca double, align 8 %5 = getelementptr double, double* %"'de", i64 0 store double 0.000000e+00, double* %5, align 8 %"value_phi831.unr'de" = alloca double, align 8 %6 = getelementptr double, double* %"value_phi831.unr'de", i64 0 store double 0.000000e+00, double* %6, align 8 %"'de7" = alloca double, align 8 %7 = getelementptr double, double* %"'de7", i64 0 store double 0.000000e+00, double* %7, align 8 %"'de14" = alloca double, align 8 %8 = getelementptr double, double* %"'de14", i64 0 store double 0.000000e+00, double* %8, align 8 %"value_phi831.epil'de" = alloca double, align 8 %9 = getelementptr double, double* %"value_phi831.epil'de", i64 0 store double 0.000000e+00, double* %9, align 8 %"arrayref13.epil'de" = alloca double, align 8 %10 = getelementptr double, double* %"arrayref13.epil'de", i64 0 store double 0.000000e+00, double* %10, align 8 %"'de36" = alloca double, align 8 %11 = getelementptr double, double* %"'de36", i64 0 store double 0.000000e+00, double* %11, align 8 %"arrayref'de" = alloca double, align 8 %12 = getelementptr double, double* %"arrayref'de", i64 0 store double 0.000000e+00, double* %12, align 8 %_cache = alloca i8, align 1 %_cache40 = alloca i8, align 1 %"arrayref4'de" = alloca double, align 8 %13 = getelementptr double, double* %"arrayref4'de", i64 0 store double 0.000000e+00, double* %13, align 8 %"arrayref7'de" = alloca double, align 8 %14 = getelementptr double, double* %"arrayref7'de", i64 0 store double 0.000000e+00, double* %14, align 8 %"'de56" = alloca double, align 8 %15 = getelementptr double, double* %"'de56", i64 0 store double 0.000000e+00, double* %15, align 8 %"arrayref13.7'de" = alloca double, align 8 %16 = getelementptr double, double* %"arrayref13.7'de", i64 0 store double 0.000000e+00, double* %16, align 8 %"'de64" = alloca double, align 8 %17 = getelementptr double, double* %"'de64", i64 0 store double 0.000000e+00, double* %17, align 8 %"arrayref13.6'de" = alloca double, align 8 %18 = getelementptr double, double* %"arrayref13.6'de", i64 0 store double 0.000000e+00, double* %18, align 8 %"'de70" = alloca double, align 8 %19 = getelementptr double, double* %"'de70", i64 0 store double 0.000000e+00, double* %19, align 8 %"arrayref13.5'de" = alloca double, align 8 %20 = getelementptr double, double* %"arrayref13.5'de", i64 0 store double 0.000000e+00, double* %20, align 8 %"'de76" = alloca double, align 8 %21 = getelementptr double, double* %"'de76", i64 0 store double 0.000000e+00, double* %21, align 8 %"arrayref13.4'de" = alloca double, align 8 %22 = getelementptr double, double* %"arrayref13.4'de", i64 0 store double 0.000000e+00, double* %22, align 8 %"'de82" = alloca double, align 8 %23 = getelementptr double, double* %"'de82", i64 0 store double 0.000000e+00, double* %23, align 8 %"arrayref13.3'de" = alloca double, align 8 %24 = getelementptr double, double* %"arrayref13.3'de", i64 0 store double 0.000000e+00, double* %24, align 8 %"'de88" = alloca double, align 8 %25 = getelementptr double, double* %"'de88", i64 0 store double 0.000000e+00, double* %25, align 8 %"arrayref13.2'de" = alloca double, align 8 %26 = getelementptr double, double* %"arrayref13.2'de", i64 0 store double 0.000000e+00, double* %26, align 8 %"'de94" = alloca double, align 8 %27 = getelementptr double, double* %"'de94", i64 0 store double 0.000000e+00, double* %27, align 8 %"arrayref13.1'de" = alloca double, align 8 %28 = getelementptr double, double* %"arrayref13.1'de", i64 0 store double 0.000000e+00, double* %28, align 8 %"value_phi831'de" = alloca double, align 8 %29 = getelementptr double, double* %"value_phi831'de", i64 0 store double 0.000000e+00, double* %29, align 8 %"arrayref13'de" = alloca double, align 8 %30 = getelementptr double, double* %"arrayref13'de", i64 0 store double 0.000000e+00, double* %30, align 8 %"'de106" = alloca double, align 8 %31 = getelementptr double, double* %"'de106", i64 0 store double 0.000000e+00, double* %31, align 8 %"'de107" = alloca double, align 8 %32 = getelementptr double, double* %"'de107", i64 0 store double 0.000000e+00, double* %32, align 8 %tapeld_cache = alloca { {} addrspace(10)*, {} addrspace(10)* }, align 8 store { {} addrspace(10)*, {} addrspace(10)* } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*) }, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld_cache, align 8 %33 = call {}*** @julia.get_pgcstack() #39 %ptls_field22 = getelementptr inbounds {}**, {}*** %33, i64 2 %34 = bitcast {}*** %ptls_field22 to i64*** %ptls_load2324 = load i64**, i64*** %34, align 8, !tbaa !24, !alias.scope !3221, !noalias !3224 %35 = getelementptr inbounds i64*, i64** %ptls_load2324, i64 2 %safepoint = load i64*, i64** %35, align 8, !tbaa !28, !invariant.load !23, !alias.scope !3226, !noalias !3229 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #39, !dbg !3231 fence syncscope("singlethread") seq_cst %.not = icmp eq i64 %2, %1, !dbg !3232 br i1 %.not, label %L3, label %L5, !dbg !3233 L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %L32 br label %L28.common.ret.loopexit_crit_edge.unr-lcssa, !dbg !3234 L28.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %L32.lr.ph, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit %value_phi932.unr = phi i64 [ 0, %L32.lr.ph ], [ %unroll_iter, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !3234 store i8 3, i8* %_cache, align 1, !dbg !3234, !invariant.group !3236 store i8 3, i8* %_cache40, align 1, !dbg !3234, !invariant.group !3237 br i1 %lcmp.mod.not, label %common.ret, label %L32.epil.preheader, !dbg !3234 L32.epil.preheader: ; preds = %L28.common.ret.loopexit_crit_edge.unr-lcssa %36 = add nsw i64 %xtraiter, -1, !dbg !3234 br label %L32.epil, !dbg !3234 L32.epil: ; preds = %L32.epil, %L32.epil.preheader %iv1 = phi i64 [ 0, %L32.epil.preheader ], [ %iv.next2, %L32.epil ] %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !3238 %37 = add nuw nsw i64 %value_phi932.unr, %iv1, !dbg !3238 %38 = add i64 %37, %43, !dbg !3241 %"'ipg" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %38, !dbg !3241 %epil.iter.cmp.not = icmp eq i64 %iv.next2, %xtraiter, !dbg !3234 br i1 %epil.iter.cmp.not, label %common.ret.loopexit, label %L32.epil, !dbg !3234, !llvm.loop !3244 common.ret.loopexit: ; preds = %L32.epil store i8 1, i8* %_cache, align 1, !dbg !3245, !invariant.group !3236 store i8 0, i8* %_cache40, align 1, !dbg !3245, !invariant.group !3237 br label %common.ret, !dbg !3245 common.ret: ; preds = %L59, %L8, %L3, %common.ret.loopexit, %L28.common.ret.loopexit_crit_edge.unr-lcssa br label %invertcommon.ret, !dbg !3245 L3: ; preds = %top %39 = add i64 %2, -1, !dbg !3246 %"'ipc42" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3246 %"arrayptr25'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc42", align 16, !dbg !3246, !tbaa !28, !alias.scope !3248, !noalias !3251, !nonnull !23 %"'ipg41" = getelementptr inbounds double, double addrspace(13)* %"arrayptr25'ipl", i64 %39, !dbg !3246 store i8 2, i8* %_cache, align 1, !invariant.group !3236 store i8 4, i8* %_cache40, align 1, !invariant.group !3237 br label %common.ret L5: ; preds = %top %40 = sub i64 %2, %1, !dbg !3253 %.not26 = icmp slt i64 %40, 1024, !dbg !3255 br i1 %.not26, label %L8, label %L59, !dbg !3254 L8: ; preds = %L5 %41 = add i64 %1, -1, !dbg !3256 %"'ipc" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3256 %"arrayptr327'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc", align 16, !dbg !3256, !tbaa !28, !alias.scope !3248, !noalias !3251, !nonnull !23, !invariant.group !3258 %"'ipg51" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %41, !dbg !3256 %"'ipg47" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %1, !dbg !3259 %42 = add i64 %1, 2, !dbg !3261 %.not28 = icmp sgt i64 %42, %2, !dbg !3263 %43 = add i64 %1, 1, !dbg !3265 %value_phi = select i1 %.not28, i64 %43, i64 %2, !dbg !3265 %44 = sub i64 %value_phi, %42, !dbg !3268 %45 = add i64 %44, 1, !dbg !3272 %46 = icmp ugt i64 %44, 9223372036854775806, !dbg !3273 store i8 4, i8* %_cache, align 1, !dbg !3274, !invariant.group !3236 store i8 2, i8* %_cache40, align 1, !dbg !3274, !invariant.group !3237 br i1 %46, label %common.ret, label %L32.lr.ph, !dbg !3274 L32.lr.ph: ; preds = %L8 %xtraiter = and i64 %45, 7, !dbg !3234 %47 = icmp ult i64 %44, 7, !dbg !3234 br i1 %47, label %L28.common.ret.loopexit_crit_edge.unr-lcssa, label %L32.lr.ph.new, !dbg !3234 L32.lr.ph.new: ; preds = %L32.lr.ph %unroll_iter = and i64 %45, 9223372036854775800, !dbg !3234 %48 = add i64 %1, 3 %49 = add i64 %1, 4 %50 = add i64 %1, 5 %51 = add i64 %1, 6 %52 = add i64 %1, 7 %53 = add i64 %1, 8 %54 = add nsw i64 %unroll_iter, -8, !dbg !3234 %55 = lshr i64 %54, 3, !dbg !3234 br label %L32, !dbg !3234 L32: ; preds = %L32, %L32.lr.ph.new %iv = phi i64 [ %iv.next, %L32 ], [ 0, %L32.lr.ph.new ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !3241 %56 = shl nuw nsw i64 %iv, 3, !dbg !3241 %57 = add i64 %56, %43, !dbg !3241 %"'ipg100" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %57, !dbg !3241 %58 = add i64 %42, %56, !dbg !3241 %"'ipg95" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %58, !dbg !3241 %59 = add i64 %48, %56, !dbg !3241 %"'ipg89" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %59, !dbg !3241 %60 = add i64 %49, %56, !dbg !3241 %"'ipg83" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %60, !dbg !3241 %61 = add i64 %50, %56, !dbg !3241 %"'ipg77" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %61, !dbg !3241 %62 = add i64 %51, %56, !dbg !3241 %"'ipg71" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %62, !dbg !3241 %63 = add i64 %52, %56, !dbg !3241 %"'ipg65" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %63, !dbg !3241 %64 = add nuw nsw i64 %56, 8, !dbg !3238 %65 = add i64 %53, %56, !dbg !3241 %"'ipg57" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %65, !dbg !3241 %niter.ncmp.7.not = icmp eq i64 %64, %unroll_iter, !dbg !3234 br i1 %niter.ncmp.7.not, label %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit, label %L32, !dbg !3234, !llvm.loop !3275 L59: ; preds = %L5 %66 = ashr i64 %40, 1, !dbg !3276 %67 = add i64 %66, %1, !dbg !3279 %_augmented = call fastcc {} addrspace(10)* @augmented_julia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree readonly align 16 %0, {} addrspace(10)* nocapture nofree align 16 %"'", i64 signext %1, i64 signext %67), !dbg !3280 %68 = bitcast {} addrspace(10)* %_augmented to { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)*, !dbg !3281 %tapeld = load { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %68, align 8, !dbg !3281, !enzyme_mustcache !23 %69 = add i64 %67, 1, !dbg !3281 store i8 0, i8* %_cache, align 1, !invariant.group !3236 store { {} addrspace(10)*, {} addrspace(10)* } %tapeld, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld_cache, align 8, !invariant.group !3283 store i8 1, i8* %_cache40, align 1, !invariant.group !3237 br label %common.ret inverttop: ; preds = %invertL5, %invertL3 fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertL28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %invertL28.common.ret.loopexit_crit_edge.unr-lcssa %_unwrap = add i64 %1, 2 %.not28_unwrap = icmp sgt i64 %_unwrap, %2 %_unwrap1 = add i64 %1, 1 %value_phi_unwrap = select i1 %.not28_unwrap, i64 %_unwrap1, i64 %2 %_unwrap2 = sub i64 %value_phi_unwrap, %_unwrap %_unwrap3 = add i64 %_unwrap2, 1 %unroll_iter_unwrap = and i64 %_unwrap3, 9223372036854775800 %_unwrap4 = add nsw i64 %unroll_iter_unwrap, -8 %_unwrap5 = lshr i64 %_unwrap4, 3 br label %mergeinvertL32_L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit mergeinvertL32_L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %invertL28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit store i64 %_unwrap5, i64* %"iv'ac", align 8 br label %invertL32 invertL28.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %invertcommon.ret, %invertL32.epil.preheader %70 = load double, double* %".lcssa.ph'de", align 8 store double 0.000000e+00, double* %".lcssa.ph'de", align 8 %_unwrap8 = add i64 %1, 2 %.not28_unwrap9 = icmp sgt i64 %_unwrap8, %2 %_unwrap10 = add i64 %1, 1 %value_phi_unwrap11 = select i1 %.not28_unwrap9, i64 %_unwrap10, i64 %2 %_unwrap12 = sub i64 %value_phi_unwrap11, %_unwrap8 %_unwrap13 = icmp ult i64 %_unwrap12, 7 %71 = xor i1 %_unwrap13, true %72 = select fast i1 %71, double %70, double 0.000000e+00 %73 = load double, double* %"'de", align 8 %74 = fadd fast double %73, %70 %75 = select fast i1 %_unwrap13, double %73, double %74 store double %75, double* %"'de", align 8 %76 = load double, double* %"value_phi831.unr'de", align 8 store double 0.000000e+00, double* %"value_phi831.unr'de", align 8 %77 = select fast i1 %71, double %76, double 0.000000e+00 %78 = load double, double* %"'de", align 8 %79 = fadd fast double %78, %76 %80 = select fast i1 %_unwrap13, double %78, double %79 store double %80, double* %"'de", align 8 %81 = select fast i1 %_unwrap13, double %76, double 0.000000e+00 %82 = load double, double* %"'de7", align 8 %83 = fadd fast double %82, %76 %84 = select fast i1 %_unwrap13, double %83, double %82 store double %84, double* %"'de7", align 8 br i1 %_unwrap13, label %invertL32.lr.ph, label %invertL28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit invertL32.epil.preheader: ; preds = %invertL32.epil_phimerge br label %invertL28.common.ret.loopexit_crit_edge.unr-lcssa invertL32.epil: ; preds = %mergeinvertL32.epil_common.ret.loopexit, %incinvertL32.epil %85 = load double, double* %"'de14", align 8, !dbg !3284 store double 0.000000e+00, double* %"'de14", align 8, !dbg !3284 %86 = load double, double* %"value_phi831.epil'de", align 8, !dbg !3284 %87 = fadd fast double %86, %85, !dbg !3284 store double %87, double* %"value_phi831.epil'de", align 8, !dbg !3284 %88 = load double, double* %"arrayref13.epil'de", align 8, !dbg !3284 %89 = fadd fast double %88, %85, !dbg !3284 store double %89, double* %"arrayref13.epil'de", align 8, !dbg !3284 %90 = load double, double* %"arrayref13.epil'de", align 8, !dbg !3241 store double 0.000000e+00, double* %"arrayref13.epil'de", align 8, !dbg !3241 %91 = load i64, i64* %"iv1'ac", align 8, !dbg !3241 %"'ipc_unwrap" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3241 %"arrayptr327'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap", align 16, !dbg !3256, !tbaa !28, !alias.scope !3248, !noalias !3251, !nonnull !23 %_unwrap15 = add i64 %1, 2, !dbg !3241 %.not28_unwrap16 = icmp sgt i64 %_unwrap15, %2, !dbg !3241 %_unwrap17 = add i64 %1, 1, !dbg !3241 %value_phi_unwrap18 = select i1 %.not28_unwrap16, i64 %_unwrap17, i64 %2, !dbg !3241 %_unwrap19 = sub i64 %value_phi_unwrap18, %_unwrap15, !dbg !3241 %_unwrap20 = icmp ult i64 %_unwrap19, 7, !dbg !3241 br i1 %_unwrap20, label %invertL32.epil_phirc, label %invertL32.epil_phirc21, !dbg !3241 invertL32.epil_phirc: ; preds = %invertL32.epil br label %invertL32.epil_phimerge invertL32.epil_phirc21: ; preds = %invertL32.epil %_unwrap22 = add i64 %_unwrap19, 1 %unroll_iter_unwrap23 = and i64 %_unwrap22, 9223372036854775800 br label %invertL32.epil_phimerge invertL32.epil_phimerge: ; preds = %invertL32.epil_phirc21, %invertL32.epil_phirc %92 = phi i64 [ 0, %invertL32.epil_phirc ], [ %unroll_iter_unwrap23, %invertL32.epil_phirc21 ], !dbg !3241 %_unwrap24 = add nuw nsw i64 %92, %91, !dbg !3241 %_unwrap25 = add i64 %_unwrap24, %_unwrap17, !dbg !3241 %"'ipg_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'il_phi_unwrap", i64 %_unwrap25, !dbg !3241 %93 = atomicrmw fadd double addrspace(13)* %"'ipg_unwrap", double %90 monotonic, align 8, !dbg !3241 %94 = load double, double* %"value_phi831.epil'de", align 8 store double 0.000000e+00, double* %"value_phi831.epil'de", align 8 %95 = load i64, i64* %"iv1'ac", align 8 %96 = icmp eq i64 %95, 0 %97 = xor i1 %96, true %98 = select fast i1 %96, double %94, double 0.000000e+00 %99 = load double, double* %"value_phi831.unr'de", align 8 %100 = fadd fast double %99, %94 %101 = select fast i1 %96, double %100, double %99 store double %101, double* %"value_phi831.unr'de", align 8 %102 = select fast i1 %97, double %94, double 0.000000e+00 %103 = load double, double* %"'de14", align 8 %104 = fadd fast double %103, %94 %105 = select fast i1 %96, double %103, double %104 store double %105, double* %"'de14", align 8 br i1 %96, label %invertL32.epil.preheader, label %incinvertL32.epil incinvertL32.epil: ; preds = %invertL32.epil_phimerge %106 = load i64, i64* %"iv1'ac", align 8 %107 = add nsw i64 %106, -1 store i64 %107, i64* %"iv1'ac", align 8 br label %invertL32.epil invertcommon.ret.loopexit: ; preds = %invertcommon.ret %_unwrap28 = add i64 %1, 2 %.not28_unwrap29 = icmp sgt i64 %_unwrap28, %2 %_unwrap30 = add i64 %1, 1 %value_phi_unwrap31 = select i1 %.not28_unwrap29, i64 %_unwrap30, i64 %2 %_unwrap32 = sub i64 %value_phi_unwrap31, %_unwrap28 %_unwrap33 = add i64 %_unwrap32, 1 %xtraiter_unwrap = and i64 %_unwrap33, 7 %_unwrap34 = add nsw i64 %xtraiter_unwrap, -1 br label %mergeinvertL32.epil_common.ret.loopexit mergeinvertL32.epil_common.ret.loopexit: ; preds = %invertcommon.ret.loopexit store i64 %_unwrap34, i64* %"iv1'ac", align 8 br label %invertL32.epil invertcommon.ret: ; preds = %common.ret store double %differeturn, double* %"common.ret.op'de", align 8 %108 = load double, double* %"common.ret.op'de", align 8 store double 0.000000e+00, double* %"common.ret.op'de", align 8 %109 = load i8, i8* %_cache, align 1, !invariant.group !3236 %110 = icmp eq i8 0, %109 %111 = icmp eq i8 1, %109 %112 = icmp eq i8 2, %109 %113 = icmp eq i8 3, %109 %114 = icmp eq i8 4, %109 %115 = select fast i1 %111, double %108, double 0.000000e+00 %116 = load double, double* %"'de14", align 8 %117 = fadd fast double %116, %108 %118 = select fast i1 %111, double %117, double %116 store double %118, double* %"'de14", align 8 %119 = select fast i1 %110, double %108, double 0.000000e+00 %120 = load double, double* %"'de36", align 8 %121 = fadd fast double %120, %108 %122 = select fast i1 %110, double %121, double %120 store double %122, double* %"'de36", align 8 %123 = select fast i1 %114, double %108, double 0.000000e+00 %124 = load double, double* %"'de7", align 8 %125 = fadd fast double %124, %108 %126 = select fast i1 %114, double %125, double %124 store double %126, double* %"'de7", align 8 %127 = select fast i1 %112, double %108, double 0.000000e+00 %128 = load double, double* %"arrayref'de", align 8 %129 = fadd fast double %128, %108 %130 = select fast i1 %112, double %129, double %128 store double %130, double* %"arrayref'de", align 8 %131 = select fast i1 %113, double %108, double 0.000000e+00 %132 = load double, double* %".lcssa.ph'de", align 8 %133 = fadd fast double %132, %108 %134 = select fast i1 %113, double %133, double %132 store double %134, double* %".lcssa.ph'de", align 8 %135 = load i8, i8* %_cache40, align 1, !invariant.group !3237 switch i8 %135, label %invertL3 [ i8 0, label %invertcommon.ret.loopexit i8 1, label %invertL59 i8 2, label %invertL8 i8 3, label %invertL28.common.ret.loopexit_crit_edge.unr-lcssa ] invertL3: ; preds = %invertcommon.ret %136 = load double, double* %"arrayref'de", align 8, !dbg !3246 store double 0.000000e+00, double* %"arrayref'de", align 8, !dbg !3246 %"'ipc42_unwrap" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3246 %"arrayptr25'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc42_unwrap", align 16, !dbg !3246, !tbaa !28, !alias.scope !3248, !noalias !3251, !nonnull !23 %_unwrap43 = add i64 %2, -1, !dbg !3246 %"'ipg41_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr25'il_phi_unwrap", i64 %_unwrap43, !dbg !3246 %137 = atomicrmw fadd double addrspace(13)* %"'ipg41_unwrap", double %136 monotonic, align 8, !dbg !3246 br label %inverttop invertL5: ; preds = %invertL59, %invertL8 br label %inverttop invertL8: ; preds = %invertL32.lr.ph, %invertcommon.ret %138 = load double, double* %"'de7", align 8, !dbg !3287 store double 0.000000e+00, double* %"'de7", align 8, !dbg !3287 %139 = load double, double* %"arrayref4'de", align 8, !dbg !3287 %140 = fadd fast double %139, %138, !dbg !3287 store double %140, double* %"arrayref4'de", align 8, !dbg !3287 %141 = load double, double* %"arrayref7'de", align 8, !dbg !3287 %142 = fadd fast double %141, %138, !dbg !3287 store double %142, double* %"arrayref7'de", align 8, !dbg !3287 %143 = load double, double* %"arrayref7'de", align 8, !dbg !3259 store double 0.000000e+00, double* %"arrayref7'de", align 8, !dbg !3259 %"'ipc_unwrap48" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3259 %"arrayptr327'il_phi_unwrap49" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap48", align 16, !dbg !3256, !tbaa !28, !alias.scope !3248, !noalias !3251, !nonnull !23 %"'ipg47_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'il_phi_unwrap49", i64 %1, !dbg !3259 %144 = atomicrmw fadd double addrspace(13)* %"'ipg47_unwrap", double %143 monotonic, align 8, !dbg !3259 %145 = load double, double* %"arrayref4'de", align 8, !dbg !3256 store double 0.000000e+00, double* %"arrayref4'de", align 8, !dbg !3256 %_unwrap52 = add i64 %1, -1, !dbg !3256 %"'ipg51_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'il_phi_unwrap49", i64 %_unwrap52, !dbg !3256 %146 = atomicrmw fadd double addrspace(13)* %"'ipg51_unwrap", double %145 monotonic, align 8, !dbg !3256 br label %invertL5 invertL32.lr.ph: ; preds = %invertL32.lr.ph.new, %invertL28.common.ret.loopexit_crit_edge.unr-lcssa br label %invertL8 invertL32.lr.ph.new: ; preds = %invertL32 br label %invertL32.lr.ph invertL32: ; preds = %incinvertL32, %mergeinvertL32_L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit %147 = load double, double* %"'de", align 8, !dbg !3284 store double 0.000000e+00, double* %"'de", align 8, !dbg !3284 %148 = load double, double* %"'de56", align 8, !dbg !3284 %149 = fadd fast double %148, %147, !dbg !3284 store double %149, double* %"'de56", align 8, !dbg !3284 %150 = load double, double* %"arrayref13.7'de", align 8, !dbg !3284 %151 = fadd fast double %150, %147, !dbg !3284 store double %151, double* %"arrayref13.7'de", align 8, !dbg !3284 %152 = load double, double* %"arrayref13.7'de", align 8, !dbg !3241 store double 0.000000e+00, double* %"arrayref13.7'de", align 8, !dbg !3241 %153 = load i64, i64* %"iv'ac", align 8, !dbg !3241 %"'ipc_unwrap58" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3241 %"arrayptr327'ipl_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap58", align 16, !dbg !3256, !tbaa !28, !alias.scope !3248, !noalias !3251, !nonnull !23, !invariant.group !3258 %_unwrap59 = add i64 %1, 8, !dbg !3241 %_unwrap60 = shl nuw nsw i64 %153, 3, !dbg !3241 %_unwrap61 = add i64 %_unwrap59, %_unwrap60, !dbg !3241 %"'ipg57_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap61, !dbg !3241 %154 = atomicrmw fadd double addrspace(13)* %"'ipg57_unwrap", double %152 monotonic, align 8, !dbg !3241 %155 = load double, double* %"'de56", align 8, !dbg !3284 store double 0.000000e+00, double* %"'de56", align 8, !dbg !3284 %156 = load double, double* %"'de64", align 8, !dbg !3284 %157 = fadd fast double %156, %155, !dbg !3284 store double %157, double* %"'de64", align 8, !dbg !3284 %158 = load double, double* %"arrayref13.6'de", align 8, !dbg !3284 %159 = fadd fast double %158, %155, !dbg !3284 store double %159, double* %"arrayref13.6'de", align 8, !dbg !3284 %160 = load double, double* %"arrayref13.6'de", align 8, !dbg !3241 store double 0.000000e+00, double* %"arrayref13.6'de", align 8, !dbg !3241 %161 = load i64, i64* %"iv'ac", align 8, !dbg !3241 %_unwrap66 = add i64 %1, 7, !dbg !3241 %_unwrap67 = add i64 %_unwrap66, %_unwrap60, !dbg !3241 %"'ipg65_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap67, !dbg !3241 %162 = atomicrmw fadd double addrspace(13)* %"'ipg65_unwrap", double %160 monotonic, align 8, !dbg !3241 %163 = load double, double* %"'de64", align 8, !dbg !3284 store double 0.000000e+00, double* %"'de64", align 8, !dbg !3284 %164 = load double, double* %"'de70", align 8, !dbg !3284 %165 = fadd fast double %164, %163, !dbg !3284 store double %165, double* %"'de70", align 8, !dbg !3284 %166 = load double, double* %"arrayref13.5'de", align 8, !dbg !3284 %167 = fadd fast double %166, %163, !dbg !3284 store double %167, double* %"arrayref13.5'de", align 8, !dbg !3284 %168 = load double, double* %"arrayref13.5'de", align 8, !dbg !3241 store double 0.000000e+00, double* %"arrayref13.5'de", align 8, !dbg !3241 %169 = load i64, i64* %"iv'ac", align 8, !dbg !3241 %_unwrap72 = add i64 %1, 6, !dbg !3241 %_unwrap73 = add i64 %_unwrap72, %_unwrap60, !dbg !3241 %"'ipg71_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap73, !dbg !3241 %170 = atomicrmw fadd double addrspace(13)* %"'ipg71_unwrap", double %168 monotonic, align 8, !dbg !3241 %171 = load double, double* %"'de70", align 8, !dbg !3284 store double 0.000000e+00, double* %"'de70", align 8, !dbg !3284 %172 = load double, double* %"'de76", align 8, !dbg !3284 %173 = fadd fast double %172, %171, !dbg !3284 store double %173, double* %"'de76", align 8, !dbg !3284 %174 = load double, double* %"arrayref13.4'de", align 8, !dbg !3284 %175 = fadd fast double %174, %171, !dbg !3284 store double %175, double* %"arrayref13.4'de", align 8, !dbg !3284 %176 = load double, double* %"arrayref13.4'de", align 8, !dbg !3241 store double 0.000000e+00, double* %"arrayref13.4'de", align 8, !dbg !3241 %177 = load i64, i64* %"iv'ac", align 8, !dbg !3241 %_unwrap78 = add i64 %1, 5, !dbg !3241 %_unwrap79 = add i64 %_unwrap78, %_unwrap60, !dbg !3241 %"'ipg77_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap79, !dbg !3241 %178 = atomicrmw fadd double addrspace(13)* %"'ipg77_unwrap", double %176 monotonic, align 8, !dbg !3241 %179 = load double, double* %"'de76", align 8, !dbg !3284 store double 0.000000e+00, double* %"'de76", align 8, !dbg !3284 %180 = load double, double* %"'de82", align 8, !dbg !3284 %181 = fadd fast double %180, %179, !dbg !3284 store double %181, double* %"'de82", align 8, !dbg !3284 %182 = load double, double* %"arrayref13.3'de", align 8, !dbg !3284 %183 = fadd fast double %182, %179, !dbg !3284 store double %183, double* %"arrayref13.3'de", align 8, !dbg !3284 %184 = load double, double* %"arrayref13.3'de", align 8, !dbg !3241 store double 0.000000e+00, double* %"arrayref13.3'de", align 8, !dbg !3241 %185 = load i64, i64* %"iv'ac", align 8, !dbg !3241 %_unwrap84 = add i64 %1, 4, !dbg !3241 %_unwrap85 = add i64 %_unwrap84, %_unwrap60, !dbg !3241 %"'ipg83_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap85, !dbg !3241 %186 = atomicrmw fadd double addrspace(13)* %"'ipg83_unwrap", double %184 monotonic, align 8, !dbg !3241 %187 = load double, double* %"'de82", align 8, !dbg !3284 store double 0.000000e+00, double* %"'de82", align 8, !dbg !3284 %188 = load double, double* %"'de88", align 8, !dbg !3284 %189 = fadd fast double %188, %187, !dbg !3284 store double %189, double* %"'de88", align 8, !dbg !3284 %190 = load double, double* %"arrayref13.2'de", align 8, !dbg !3284 %191 = fadd fast double %190, %187, !dbg !3284 store double %191, double* %"arrayref13.2'de", align 8, !dbg !3284 %192 = load double, double* %"arrayref13.2'de", align 8, !dbg !3241 store double 0.000000e+00, double* %"arrayref13.2'de", align 8, !dbg !3241 %193 = load i64, i64* %"iv'ac", align 8, !dbg !3241 %_unwrap90 = add i64 %1, 3, !dbg !3241 %_unwrap91 = add i64 %_unwrap90, %_unwrap60, !dbg !3241 %"'ipg89_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap91, !dbg !3241 %194 = atomicrmw fadd double addrspace(13)* %"'ipg89_unwrap", double %192 monotonic, align 8, !dbg !3241 %195 = load double, double* %"'de88", align 8, !dbg !3284 store double 0.000000e+00, double* %"'de88", align 8, !dbg !3284 %196 = load double, double* %"'de94", align 8, !dbg !3284 %197 = fadd fast double %196, %195, !dbg !3284 store double %197, double* %"'de94", align 8, !dbg !3284 %198 = load double, double* %"arrayref13.1'de", align 8, !dbg !3284 %199 = fadd fast double %198, %195, !dbg !3284 store double %199, double* %"arrayref13.1'de", align 8, !dbg !3284 %200 = load double, double* %"arrayref13.1'de", align 8, !dbg !3241 store double 0.000000e+00, double* %"arrayref13.1'de", align 8, !dbg !3241 %201 = load i64, i64* %"iv'ac", align 8, !dbg !3241 %_unwrap96 = add i64 %1, 2, !dbg !3241 %_unwrap97 = add i64 %_unwrap96, %_unwrap60, !dbg !3241 %"'ipg95_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap97, !dbg !3241 %202 = atomicrmw fadd double addrspace(13)* %"'ipg95_unwrap", double %200 monotonic, align 8, !dbg !3241 %203 = load double, double* %"'de94", align 8, !dbg !3284 store double 0.000000e+00, double* %"'de94", align 8, !dbg !3284 %204 = load double, double* %"value_phi831'de", align 8, !dbg !3284 %205 = fadd fast double %204, %203, !dbg !3284 store double %205, double* %"value_phi831'de", align 8, !dbg !3284 %206 = load double, double* %"arrayref13'de", align 8, !dbg !3284 %207 = fadd fast double %206, %203, !dbg !3284 store double %207, double* %"arrayref13'de", align 8, !dbg !3284 %208 = load double, double* %"arrayref13'de", align 8, !dbg !3241 store double 0.000000e+00, double* %"arrayref13'de", align 8, !dbg !3241 %209 = load i64, i64* %"iv'ac", align 8, !dbg !3241 %_unwrap101 = add i64 %1, 1, !dbg !3241 %_unwrap102 = add i64 %_unwrap60, %_unwrap101, !dbg !3241 %"'ipg100_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap102, !dbg !3241 %210 = atomicrmw fadd double addrspace(13)* %"'ipg100_unwrap", double %208 monotonic, align 8, !dbg !3241 %211 = load double, double* %"value_phi831'de", align 8 store double 0.000000e+00, double* %"value_phi831'de", align 8 %212 = load i64, i64* %"iv'ac", align 8 %213 = icmp eq i64 %212, 0 %214 = xor i1 %213, true %215 = select fast i1 %214, double %211, double 0.000000e+00 %216 = load double, double* %"'de", align 8 %217 = fadd fast double %216, %211 %218 = select fast i1 %213, double %216, double %217 store double %218, double* %"'de", align 8 %219 = select fast i1 %213, double %211, double 0.000000e+00 %220 = load double, double* %"'de7", align 8 %221 = fadd fast double %220, %211 %222 = select fast i1 %213, double %221, double %220 store double %222, double* %"'de7", align 8 br i1 %213, label %invertL32.lr.ph.new, label %incinvertL32 incinvertL32: ; preds = %invertL32 %223 = load i64, i64* %"iv'ac", align 8 %224 = add nsw i64 %223, -1 store i64 %224, i64* %"iv'ac", align 8 br label %invertL32 invertL59: ; preds = %invertcommon.ret %225 = load double, double* %"'de36", align 8, !dbg !3290 store double 0.000000e+00, double* %"'de36", align 8, !dbg !3290 %226 = load double, double* %"'de106", align 8, !dbg !3290 %227 = fadd fast double %226, %225, !dbg !3290 store double %227, double* %"'de106", align 8, !dbg !3290 %228 = load double, double* %"'de107", align 8, !dbg !3290 %229 = fadd fast double %228, %225, !dbg !3290 store double %229, double* %"'de107", align 8, !dbg !3290 %_unwrap108 = sub i64 %2, %1, !dbg !3282 %_unwrap109 = ashr i64 %_unwrap108, 1, !dbg !3282 %_unwrap110 = add i64 %_unwrap109, %1, !dbg !3282 %_unwrap111 = add i64 %_unwrap110, 1, !dbg !3282 %230 = load double, double* %"'de107", align 8, !dbg !3282 call fastcc void @diffejulia_mapreduce_impl_1464.25({} addrspace(10)* nocapture nofree readonly align 16 %0, {} addrspace(10)* nocapture nofree align 16 %"'", i64 signext %_unwrap111, i64 signext %2, double %230), !dbg !3282 store double 0.000000e+00, double* %"'de107", align 8, !dbg !3282 %231 = load double, double* %"'de106", align 8, !dbg !3280 %232 = load { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld_cache, align 8, !dbg !3281, !invariant.group !3283 call fastcc void @diffejulia_mapreduce_impl_1464.28({} addrspace(10)* nocapture nofree readonly align 16 %0, {} addrspace(10)* nocapture nofree align 16 %"'", i64 signext %1, i64 signext %_unwrap110, double %231, { {} addrspace(10)*, {} addrspace(10)* } %232), !dbg !3280 store double 0.000000e+00, double* %"'de106", align 8, !dbg !3280 br label %invertL5 } ; Function Attrs: mustprogress nofree noinline willreturn define internal fastcc void @diffejulia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* nocapture nofree align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'", i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %1, i64 signext "enzyme_inactive" "enzymejl_parmtype"="140151488608960" "enzymejl_parmtype_ref"="0" %2, double %differeturn) unnamed_addr #38 !dbg !3148 { top: %"iv1'ac" = alloca i64, align 8 %"iv'ac" = alloca i64, align 8 %"common.ret.op'de" = alloca double, align 8 %3 = getelementptr double, double* %"common.ret.op'de", i64 0 store double 0.000000e+00, double* %3, align 8 %".lcssa.ph'de" = alloca double, align 8 %4 = getelementptr double, double* %".lcssa.ph'de", i64 0 store double 0.000000e+00, double* %4, align 8 %"'de" = alloca double, align 8 %5 = getelementptr double, double* %"'de", i64 0 store double 0.000000e+00, double* %5, align 8 %"value_phi831.unr'de" = alloca double, align 8 %6 = getelementptr double, double* %"value_phi831.unr'de", i64 0 store double 0.000000e+00, double* %6, align 8 %"'de7" = alloca double, align 8 %7 = getelementptr double, double* %"'de7", i64 0 store double 0.000000e+00, double* %7, align 8 %"'de14" = alloca double, align 8 %8 = getelementptr double, double* %"'de14", i64 0 store double 0.000000e+00, double* %8, align 8 %"value_phi831.epil'de" = alloca double, align 8 %9 = getelementptr double, double* %"value_phi831.epil'de", i64 0 store double 0.000000e+00, double* %9, align 8 %"arrayref13.epil'de" = alloca double, align 8 %10 = getelementptr double, double* %"arrayref13.epil'de", i64 0 store double 0.000000e+00, double* %10, align 8 %"'de36" = alloca double, align 8 %11 = getelementptr double, double* %"'de36", i64 0 store double 0.000000e+00, double* %11, align 8 %"arrayref'de" = alloca double, align 8 %12 = getelementptr double, double* %"arrayref'de", i64 0 store double 0.000000e+00, double* %12, align 8 %_cache = alloca i8, align 1 %_cache40 = alloca i8, align 1 %"arrayref4'de" = alloca double, align 8 %13 = getelementptr double, double* %"arrayref4'de", i64 0 store double 0.000000e+00, double* %13, align 8 %"arrayref7'de" = alloca double, align 8 %14 = getelementptr double, double* %"arrayref7'de", i64 0 store double 0.000000e+00, double* %14, align 8 %"'de56" = alloca double, align 8 %15 = getelementptr double, double* %"'de56", i64 0 store double 0.000000e+00, double* %15, align 8 %"arrayref13.7'de" = alloca double, align 8 %16 = getelementptr double, double* %"arrayref13.7'de", i64 0 store double 0.000000e+00, double* %16, align 8 %"'de64" = alloca double, align 8 %17 = getelementptr double, double* %"'de64", i64 0 store double 0.000000e+00, double* %17, align 8 %"arrayref13.6'de" = alloca double, align 8 %18 = getelementptr double, double* %"arrayref13.6'de", i64 0 store double 0.000000e+00, double* %18, align 8 %"'de70" = alloca double, align 8 %19 = getelementptr double, double* %"'de70", i64 0 store double 0.000000e+00, double* %19, align 8 %"arrayref13.5'de" = alloca double, align 8 %20 = getelementptr double, double* %"arrayref13.5'de", i64 0 store double 0.000000e+00, double* %20, align 8 %"'de76" = alloca double, align 8 %21 = getelementptr double, double* %"'de76", i64 0 store double 0.000000e+00, double* %21, align 8 %"arrayref13.4'de" = alloca double, align 8 %22 = getelementptr double, double* %"arrayref13.4'de", i64 0 store double 0.000000e+00, double* %22, align 8 %"'de82" = alloca double, align 8 %23 = getelementptr double, double* %"'de82", i64 0 store double 0.000000e+00, double* %23, align 8 %"arrayref13.3'de" = alloca double, align 8 %24 = getelementptr double, double* %"arrayref13.3'de", i64 0 store double 0.000000e+00, double* %24, align 8 %"'de88" = alloca double, align 8 %25 = getelementptr double, double* %"'de88", i64 0 store double 0.000000e+00, double* %25, align 8 %"arrayref13.2'de" = alloca double, align 8 %26 = getelementptr double, double* %"arrayref13.2'de", i64 0 store double 0.000000e+00, double* %26, align 8 %"'de94" = alloca double, align 8 %27 = getelementptr double, double* %"'de94", i64 0 store double 0.000000e+00, double* %27, align 8 %"arrayref13.1'de" = alloca double, align 8 %28 = getelementptr double, double* %"arrayref13.1'de", i64 0 store double 0.000000e+00, double* %28, align 8 %"value_phi831'de" = alloca double, align 8 %29 = getelementptr double, double* %"value_phi831'de", i64 0 store double 0.000000e+00, double* %29, align 8 %"arrayref13'de" = alloca double, align 8 %30 = getelementptr double, double* %"arrayref13'de", i64 0 store double 0.000000e+00, double* %30, align 8 %"'de106" = alloca double, align 8 %31 = getelementptr double, double* %"'de106", i64 0 store double 0.000000e+00, double* %31, align 8 %"'de107" = alloca double, align 8 %32 = getelementptr double, double* %"'de107", i64 0 store double 0.000000e+00, double* %32, align 8 %tapeld_cache = alloca { {} addrspace(10)*, {} addrspace(10)* }, align 8 store { {} addrspace(10)*, {} addrspace(10)* } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*) }, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld_cache, align 8 %33 = call {}*** @julia.get_pgcstack() #39 %ptls_field22 = getelementptr inbounds {}**, {}*** %33, i64 2 %34 = bitcast {}*** %ptls_field22 to i64*** %ptls_load2324 = load i64**, i64*** %34, align 8, !tbaa !24, !alias.scope !3149, !noalias !3152 %35 = getelementptr inbounds i64*, i64** %ptls_load2324, i64 2 %safepoint = load i64*, i64** %35, align 8, !tbaa !28, !invariant.load !23, !alias.scope !3154, !noalias !3157 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #39, !dbg !3159 fence syncscope("singlethread") seq_cst %.not = icmp eq i64 %2, %1, !dbg !3160 br i1 %.not, label %L3, label %L5, !dbg !3161 L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %L32 br label %L28.common.ret.loopexit_crit_edge.unr-lcssa, !dbg !3162 L28.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %L32.lr.ph, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit %value_phi932.unr = phi i64 [ 0, %L32.lr.ph ], [ %unroll_iter, %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !3162 store i8 4, i8* %_cache, align 1, !dbg !3162, !invariant.group !3164 store i8 4, i8* %_cache40, align 1, !dbg !3162, !invariant.group !3165 br i1 %lcmp.mod.not, label %common.ret, label %L32.epil.preheader, !dbg !3162 L32.epil.preheader: ; preds = %L28.common.ret.loopexit_crit_edge.unr-lcssa %36 = add nsw i64 %xtraiter, -1, !dbg !3162 br label %L32.epil, !dbg !3162 L32.epil: ; preds = %L32.epil, %L32.epil.preheader %iv1 = phi i64 [ 0, %L32.epil.preheader ], [ %iv.next2, %L32.epil ] %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !3166 %37 = add nuw nsw i64 %value_phi932.unr, %iv1, !dbg !3166 %38 = add i64 %37, %43, !dbg !3169 %"'ipg" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %38, !dbg !3169 %epil.iter.cmp.not = icmp eq i64 %iv.next2, %xtraiter, !dbg !3162 br i1 %epil.iter.cmp.not, label %common.ret.loopexit, label %L32.epil, !dbg !3162, !llvm.loop !3172 common.ret.loopexit: ; preds = %L32.epil store i8 2, i8* %_cache, align 1, !dbg !3173, !invariant.group !3164 store i8 2, i8* %_cache40, align 1, !dbg !3173, !invariant.group !3165 br label %common.ret, !dbg !3173 common.ret: ; preds = %L59, %L8, %L3, %common.ret.loopexit, %L28.common.ret.loopexit_crit_edge.unr-lcssa br label %invertcommon.ret, !dbg !3173 L3: ; preds = %top %39 = add i64 %2, -1, !dbg !3174 %"'ipc42" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3174 %"arrayptr25'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc42", align 16, !dbg !3174, !tbaa !28, !alias.scope !3176, !noalias !3179, !nonnull !23 %"'ipg41" = getelementptr inbounds double, double addrspace(13)* %"arrayptr25'ipl", i64 %39, !dbg !3174 store i8 3, i8* %_cache, align 1, !invariant.group !3164 store i8 3, i8* %_cache40, align 1, !invariant.group !3165 br label %common.ret L5: ; preds = %top %40 = sub i64 %2, %1, !dbg !3181 %.not26 = icmp slt i64 %40, 1024, !dbg !3183 br i1 %.not26, label %L8, label %L59, !dbg !3182 L8: ; preds = %L5 %41 = add i64 %1, -1, !dbg !3184 %"'ipc" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3184 %"arrayptr327'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc", align 16, !dbg !3184, !tbaa !28, !alias.scope !3176, !noalias !3179, !nonnull !23, !invariant.group !3186 %"'ipg51" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %41, !dbg !3184 %"'ipg47" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %1, !dbg !3187 %42 = add i64 %1, 2, !dbg !3189 %.not28 = icmp sgt i64 %42, %2, !dbg !3191 %43 = add i64 %1, 1, !dbg !3193 %value_phi = select i1 %.not28, i64 %43, i64 %2, !dbg !3193 %44 = sub i64 %value_phi, %42, !dbg !3196 %45 = add i64 %44, 1, !dbg !3200 %46 = icmp ugt i64 %44, 9223372036854775806, !dbg !3201 store i8 0, i8* %_cache, align 1, !dbg !3202, !invariant.group !3164 store i8 1, i8* %_cache40, align 1, !dbg !3202, !invariant.group !3165 br i1 %46, label %common.ret, label %L32.lr.ph, !dbg !3202 L32.lr.ph: ; preds = %L8 %xtraiter = and i64 %45, 7, !dbg !3162 %47 = icmp ult i64 %44, 7, !dbg !3162 br i1 %47, label %L28.common.ret.loopexit_crit_edge.unr-lcssa, label %L32.lr.ph.new, !dbg !3162 L32.lr.ph.new: ; preds = %L32.lr.ph %unroll_iter = and i64 %45, 9223372036854775800, !dbg !3162 %48 = add i64 %1, 3 %49 = add i64 %1, 4 %50 = add i64 %1, 5 %51 = add i64 %1, 6 %52 = add i64 %1, 7 %53 = add i64 %1, 8 %54 = add nsw i64 %unroll_iter, -8, !dbg !3162 %55 = lshr i64 %54, 3, !dbg !3162 br label %L32, !dbg !3162 L32: ; preds = %L32, %L32.lr.ph.new %iv = phi i64 [ %iv.next, %L32 ], [ 0, %L32.lr.ph.new ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !3169 %56 = shl nuw nsw i64 %iv, 3, !dbg !3169 %57 = add i64 %56, %43, !dbg !3169 %"'ipg100" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %57, !dbg !3169 %58 = add i64 %42, %56, !dbg !3169 %"'ipg95" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %58, !dbg !3169 %59 = add i64 %48, %56, !dbg !3169 %"'ipg89" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %59, !dbg !3169 %60 = add i64 %49, %56, !dbg !3169 %"'ipg83" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %60, !dbg !3169 %61 = add i64 %50, %56, !dbg !3169 %"'ipg77" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %61, !dbg !3169 %62 = add i64 %51, %56, !dbg !3169 %"'ipg71" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %62, !dbg !3169 %63 = add i64 %52, %56, !dbg !3169 %"'ipg65" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %63, !dbg !3169 %64 = add nuw nsw i64 %56, 8, !dbg !3166 %65 = add i64 %53, %56, !dbg !3169 %"'ipg57" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl", i64 %65, !dbg !3169 %niter.ncmp.7.not = icmp eq i64 %64, %unroll_iter, !dbg !3162 br i1 %niter.ncmp.7.not, label %L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit, label %L32, !dbg !3162, !llvm.loop !3203 L59: ; preds = %L5 %66 = ashr i64 %40, 1, !dbg !3204 %67 = add i64 %66, %1, !dbg !3207 %_augmented = call fastcc {} addrspace(10)* @augmented_julia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree readonly align 16 %0, {} addrspace(10)* nocapture nofree align 16 %"'", i64 signext %1, i64 signext %67), !dbg !3208 %68 = bitcast {} addrspace(10)* %_augmented to { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)*, !dbg !3209 %tapeld = load { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %68, align 8, !dbg !3209, !enzyme_mustcache !23 %69 = add i64 %67, 1, !dbg !3209 store i8 1, i8* %_cache, align 1, !invariant.group !3164 store { {} addrspace(10)*, {} addrspace(10)* } %tapeld, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld_cache, align 8, !invariant.group !3211 store i8 0, i8* %_cache40, align 1, !invariant.group !3165 br label %common.ret inverttop: ; preds = %invertL5, %invertL3 fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertL28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %invertL28.common.ret.loopexit_crit_edge.unr-lcssa %_unwrap = add i64 %1, 2 %.not28_unwrap = icmp sgt i64 %_unwrap, %2 %_unwrap1 = add i64 %1, 1 %value_phi_unwrap = select i1 %.not28_unwrap, i64 %_unwrap1, i64 %2 %_unwrap2 = sub i64 %value_phi_unwrap, %_unwrap %_unwrap3 = add i64 %_unwrap2, 1 %unroll_iter_unwrap = and i64 %_unwrap3, 9223372036854775800 %_unwrap4 = add nsw i64 %unroll_iter_unwrap, -8 %_unwrap5 = lshr i64 %_unwrap4, 3 br label %mergeinvertL32_L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit mergeinvertL32_L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %invertL28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit store i64 %_unwrap5, i64* %"iv'ac", align 8 br label %invertL32 invertL28.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %invertcommon.ret, %invertL32.epil.preheader %70 = load double, double* %".lcssa.ph'de", align 8 store double 0.000000e+00, double* %".lcssa.ph'de", align 8 %_unwrap8 = add i64 %1, 2 %.not28_unwrap9 = icmp sgt i64 %_unwrap8, %2 %_unwrap10 = add i64 %1, 1 %value_phi_unwrap11 = select i1 %.not28_unwrap9, i64 %_unwrap10, i64 %2 %_unwrap12 = sub i64 %value_phi_unwrap11, %_unwrap8 %_unwrap13 = icmp ult i64 %_unwrap12, 7 %71 = xor i1 %_unwrap13, true %72 = select fast i1 %71, double %70, double 0.000000e+00 %73 = load double, double* %"'de", align 8 %74 = fadd fast double %73, %70 %75 = select fast i1 %_unwrap13, double %73, double %74 store double %75, double* %"'de", align 8 %76 = load double, double* %"value_phi831.unr'de", align 8 store double 0.000000e+00, double* %"value_phi831.unr'de", align 8 %77 = select fast i1 %71, double %76, double 0.000000e+00 %78 = load double, double* %"'de", align 8 %79 = fadd fast double %78, %76 %80 = select fast i1 %_unwrap13, double %78, double %79 store double %80, double* %"'de", align 8 %81 = select fast i1 %_unwrap13, double %76, double 0.000000e+00 %82 = load double, double* %"'de7", align 8 %83 = fadd fast double %82, %76 %84 = select fast i1 %_unwrap13, double %83, double %82 store double %84, double* %"'de7", align 8 br i1 %_unwrap13, label %invertL32.lr.ph, label %invertL28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit invertL32.epil.preheader: ; preds = %invertL32.epil_phimerge br label %invertL28.common.ret.loopexit_crit_edge.unr-lcssa invertL32.epil: ; preds = %mergeinvertL32.epil_common.ret.loopexit, %incinvertL32.epil %85 = load double, double* %"'de14", align 8, !dbg !3212 store double 0.000000e+00, double* %"'de14", align 8, !dbg !3212 %86 = load double, double* %"value_phi831.epil'de", align 8, !dbg !3212 %87 = fadd fast double %86, %85, !dbg !3212 store double %87, double* %"value_phi831.epil'de", align 8, !dbg !3212 %88 = load double, double* %"arrayref13.epil'de", align 8, !dbg !3212 %89 = fadd fast double %88, %85, !dbg !3212 store double %89, double* %"arrayref13.epil'de", align 8, !dbg !3212 %90 = load double, double* %"arrayref13.epil'de", align 8, !dbg !3169 store double 0.000000e+00, double* %"arrayref13.epil'de", align 8, !dbg !3169 %91 = load i64, i64* %"iv1'ac", align 8, !dbg !3169 %"'ipc_unwrap" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3169 %"arrayptr327'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap", align 16, !dbg !3184, !tbaa !28, !alias.scope !3176, !noalias !3179, !nonnull !23 %_unwrap15 = add i64 %1, 2, !dbg !3169 %.not28_unwrap16 = icmp sgt i64 %_unwrap15, %2, !dbg !3169 %_unwrap17 = add i64 %1, 1, !dbg !3169 %value_phi_unwrap18 = select i1 %.not28_unwrap16, i64 %_unwrap17, i64 %2, !dbg !3169 %_unwrap19 = sub i64 %value_phi_unwrap18, %_unwrap15, !dbg !3169 %_unwrap20 = icmp ult i64 %_unwrap19, 7, !dbg !3169 br i1 %_unwrap20, label %invertL32.epil_phirc, label %invertL32.epil_phirc21, !dbg !3169 invertL32.epil_phirc: ; preds = %invertL32.epil br label %invertL32.epil_phimerge invertL32.epil_phirc21: ; preds = %invertL32.epil %_unwrap22 = add i64 %_unwrap19, 1 %unroll_iter_unwrap23 = and i64 %_unwrap22, 9223372036854775800 br label %invertL32.epil_phimerge invertL32.epil_phimerge: ; preds = %invertL32.epil_phirc21, %invertL32.epil_phirc %92 = phi i64 [ 0, %invertL32.epil_phirc ], [ %unroll_iter_unwrap23, %invertL32.epil_phirc21 ], !dbg !3169 %_unwrap24 = add nuw nsw i64 %92, %91, !dbg !3169 %_unwrap25 = add i64 %_unwrap24, %_unwrap17, !dbg !3169 %"'ipg_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'il_phi_unwrap", i64 %_unwrap25, !dbg !3169 %93 = atomicrmw fadd double addrspace(13)* %"'ipg_unwrap", double %90 monotonic, align 8, !dbg !3169 %94 = load double, double* %"value_phi831.epil'de", align 8 store double 0.000000e+00, double* %"value_phi831.epil'de", align 8 %95 = load i64, i64* %"iv1'ac", align 8 %96 = icmp eq i64 %95, 0 %97 = xor i1 %96, true %98 = select fast i1 %96, double %94, double 0.000000e+00 %99 = load double, double* %"value_phi831.unr'de", align 8 %100 = fadd fast double %99, %94 %101 = select fast i1 %96, double %100, double %99 store double %101, double* %"value_phi831.unr'de", align 8 %102 = select fast i1 %97, double %94, double 0.000000e+00 %103 = load double, double* %"'de14", align 8 %104 = fadd fast double %103, %94 %105 = select fast i1 %96, double %103, double %104 store double %105, double* %"'de14", align 8 br i1 %96, label %invertL32.epil.preheader, label %incinvertL32.epil incinvertL32.epil: ; preds = %invertL32.epil_phimerge %106 = load i64, i64* %"iv1'ac", align 8 %107 = add nsw i64 %106, -1 store i64 %107, i64* %"iv1'ac", align 8 br label %invertL32.epil invertcommon.ret.loopexit: ; preds = %invertcommon.ret %_unwrap28 = add i64 %1, 2 %.not28_unwrap29 = icmp sgt i64 %_unwrap28, %2 %_unwrap30 = add i64 %1, 1 %value_phi_unwrap31 = select i1 %.not28_unwrap29, i64 %_unwrap30, i64 %2 %_unwrap32 = sub i64 %value_phi_unwrap31, %_unwrap28 %_unwrap33 = add i64 %_unwrap32, 1 %xtraiter_unwrap = and i64 %_unwrap33, 7 %_unwrap34 = add nsw i64 %xtraiter_unwrap, -1 br label %mergeinvertL32.epil_common.ret.loopexit mergeinvertL32.epil_common.ret.loopexit: ; preds = %invertcommon.ret.loopexit store i64 %_unwrap34, i64* %"iv1'ac", align 8 br label %invertL32.epil invertcommon.ret: ; preds = %common.ret store double %differeturn, double* %"common.ret.op'de", align 8 %108 = load double, double* %"common.ret.op'de", align 8 store double 0.000000e+00, double* %"common.ret.op'de", align 8 %109 = load i8, i8* %_cache, align 1, !invariant.group !3164 %110 = icmp eq i8 0, %109 %111 = icmp eq i8 1, %109 %112 = icmp eq i8 2, %109 %113 = icmp eq i8 3, %109 %114 = icmp eq i8 4, %109 %115 = select fast i1 %112, double %108, double 0.000000e+00 %116 = load double, double* %"'de14", align 8 %117 = fadd fast double %116, %108 %118 = select fast i1 %112, double %117, double %116 store double %118, double* %"'de14", align 8 %119 = select fast i1 %111, double %108, double 0.000000e+00 %120 = load double, double* %"'de36", align 8 %121 = fadd fast double %120, %108 %122 = select fast i1 %111, double %121, double %120 store double %122, double* %"'de36", align 8 %123 = select fast i1 %110, double %108, double 0.000000e+00 %124 = load double, double* %"'de7", align 8 %125 = fadd fast double %124, %108 %126 = select fast i1 %110, double %125, double %124 store double %126, double* %"'de7", align 8 %127 = select fast i1 %113, double %108, double 0.000000e+00 %128 = load double, double* %"arrayref'de", align 8 %129 = fadd fast double %128, %108 %130 = select fast i1 %113, double %129, double %128 store double %130, double* %"arrayref'de", align 8 %131 = select fast i1 %114, double %108, double 0.000000e+00 %132 = load double, double* %".lcssa.ph'de", align 8 %133 = fadd fast double %132, %108 %134 = select fast i1 %114, double %133, double %132 store double %134, double* %".lcssa.ph'de", align 8 %135 = load i8, i8* %_cache40, align 1, !invariant.group !3165 switch i8 %135, label %invertL28.common.ret.loopexit_crit_edge.unr-lcssa [ i8 0, label %invertL59 i8 1, label %invertL8 i8 2, label %invertcommon.ret.loopexit i8 3, label %invertL3 ] invertL3: ; preds = %invertcommon.ret %136 = load double, double* %"arrayref'de", align 8, !dbg !3174 store double 0.000000e+00, double* %"arrayref'de", align 8, !dbg !3174 %"'ipc42_unwrap" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3174 %"arrayptr25'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc42_unwrap", align 16, !dbg !3174, !tbaa !28, !alias.scope !3176, !noalias !3179, !nonnull !23 %_unwrap43 = add i64 %2, -1, !dbg !3174 %"'ipg41_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr25'il_phi_unwrap", i64 %_unwrap43, !dbg !3174 %137 = atomicrmw fadd double addrspace(13)* %"'ipg41_unwrap", double %136 monotonic, align 8, !dbg !3174 br label %inverttop invertL5: ; preds = %invertL59, %invertL8 br label %inverttop invertL8: ; preds = %invertL32.lr.ph, %invertcommon.ret %138 = load double, double* %"'de7", align 8, !dbg !3215 store double 0.000000e+00, double* %"'de7", align 8, !dbg !3215 %139 = load double, double* %"arrayref4'de", align 8, !dbg !3215 %140 = fadd fast double %139, %138, !dbg !3215 store double %140, double* %"arrayref4'de", align 8, !dbg !3215 %141 = load double, double* %"arrayref7'de", align 8, !dbg !3215 %142 = fadd fast double %141, %138, !dbg !3215 store double %142, double* %"arrayref7'de", align 8, !dbg !3215 %143 = load double, double* %"arrayref7'de", align 8, !dbg !3187 store double 0.000000e+00, double* %"arrayref7'de", align 8, !dbg !3187 %"'ipc_unwrap48" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3187 %"arrayptr327'il_phi_unwrap49" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap48", align 16, !dbg !3184, !tbaa !28, !alias.scope !3176, !noalias !3179, !nonnull !23 %"'ipg47_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'il_phi_unwrap49", i64 %1, !dbg !3187 %144 = atomicrmw fadd double addrspace(13)* %"'ipg47_unwrap", double %143 monotonic, align 8, !dbg !3187 %145 = load double, double* %"arrayref4'de", align 8, !dbg !3184 store double 0.000000e+00, double* %"arrayref4'de", align 8, !dbg !3184 %_unwrap52 = add i64 %1, -1, !dbg !3184 %"'ipg51_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'il_phi_unwrap49", i64 %_unwrap52, !dbg !3184 %146 = atomicrmw fadd double addrspace(13)* %"'ipg51_unwrap", double %145 monotonic, align 8, !dbg !3184 br label %invertL5 invertL32.lr.ph: ; preds = %invertL32.lr.ph.new, %invertL28.common.ret.loopexit_crit_edge.unr-lcssa br label %invertL8 invertL32.lr.ph.new: ; preds = %invertL32 br label %invertL32.lr.ph invertL32: ; preds = %incinvertL32, %mergeinvertL32_L28.common.ret.loopexit_crit_edge.unr-lcssa.loopexit %147 = load double, double* %"'de", align 8, !dbg !3212 store double 0.000000e+00, double* %"'de", align 8, !dbg !3212 %148 = load double, double* %"'de56", align 8, !dbg !3212 %149 = fadd fast double %148, %147, !dbg !3212 store double %149, double* %"'de56", align 8, !dbg !3212 %150 = load double, double* %"arrayref13.7'de", align 8, !dbg !3212 %151 = fadd fast double %150, %147, !dbg !3212 store double %151, double* %"arrayref13.7'de", align 8, !dbg !3212 %152 = load double, double* %"arrayref13.7'de", align 8, !dbg !3169 store double 0.000000e+00, double* %"arrayref13.7'de", align 8, !dbg !3169 %153 = load i64, i64* %"iv'ac", align 8, !dbg !3169 %"'ipc_unwrap58" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3169 %"arrayptr327'ipl_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap58", align 16, !dbg !3184, !tbaa !28, !alias.scope !3176, !noalias !3179, !nonnull !23, !invariant.group !3186 %_unwrap59 = add i64 %1, 8, !dbg !3169 %_unwrap60 = shl nuw nsw i64 %153, 3, !dbg !3169 %_unwrap61 = add i64 %_unwrap59, %_unwrap60, !dbg !3169 %"'ipg57_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap61, !dbg !3169 %154 = atomicrmw fadd double addrspace(13)* %"'ipg57_unwrap", double %152 monotonic, align 8, !dbg !3169 %155 = load double, double* %"'de56", align 8, !dbg !3212 store double 0.000000e+00, double* %"'de56", align 8, !dbg !3212 %156 = load double, double* %"'de64", align 8, !dbg !3212 %157 = fadd fast double %156, %155, !dbg !3212 store double %157, double* %"'de64", align 8, !dbg !3212 %158 = load double, double* %"arrayref13.6'de", align 8, !dbg !3212 %159 = fadd fast double %158, %155, !dbg !3212 store double %159, double* %"arrayref13.6'de", align 8, !dbg !3212 %160 = load double, double* %"arrayref13.6'de", align 8, !dbg !3169 store double 0.000000e+00, double* %"arrayref13.6'de", align 8, !dbg !3169 %161 = load i64, i64* %"iv'ac", align 8, !dbg !3169 %_unwrap66 = add i64 %1, 7, !dbg !3169 %_unwrap67 = add i64 %_unwrap66, %_unwrap60, !dbg !3169 %"'ipg65_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap67, !dbg !3169 %162 = atomicrmw fadd double addrspace(13)* %"'ipg65_unwrap", double %160 monotonic, align 8, !dbg !3169 %163 = load double, double* %"'de64", align 8, !dbg !3212 store double 0.000000e+00, double* %"'de64", align 8, !dbg !3212 %164 = load double, double* %"'de70", align 8, !dbg !3212 %165 = fadd fast double %164, %163, !dbg !3212 store double %165, double* %"'de70", align 8, !dbg !3212 %166 = load double, double* %"arrayref13.5'de", align 8, !dbg !3212 %167 = fadd fast double %166, %163, !dbg !3212 store double %167, double* %"arrayref13.5'de", align 8, !dbg !3212 %168 = load double, double* %"arrayref13.5'de", align 8, !dbg !3169 store double 0.000000e+00, double* %"arrayref13.5'de", align 8, !dbg !3169 %169 = load i64, i64* %"iv'ac", align 8, !dbg !3169 %_unwrap72 = add i64 %1, 6, !dbg !3169 %_unwrap73 = add i64 %_unwrap72, %_unwrap60, !dbg !3169 %"'ipg71_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap73, !dbg !3169 %170 = atomicrmw fadd double addrspace(13)* %"'ipg71_unwrap", double %168 monotonic, align 8, !dbg !3169 %171 = load double, double* %"'de70", align 8, !dbg !3212 store double 0.000000e+00, double* %"'de70", align 8, !dbg !3212 %172 = load double, double* %"'de76", align 8, !dbg !3212 %173 = fadd fast double %172, %171, !dbg !3212 store double %173, double* %"'de76", align 8, !dbg !3212 %174 = load double, double* %"arrayref13.4'de", align 8, !dbg !3212 %175 = fadd fast double %174, %171, !dbg !3212 store double %175, double* %"arrayref13.4'de", align 8, !dbg !3212 %176 = load double, double* %"arrayref13.4'de", align 8, !dbg !3169 store double 0.000000e+00, double* %"arrayref13.4'de", align 8, !dbg !3169 %177 = load i64, i64* %"iv'ac", align 8, !dbg !3169 %_unwrap78 = add i64 %1, 5, !dbg !3169 %_unwrap79 = add i64 %_unwrap78, %_unwrap60, !dbg !3169 %"'ipg77_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap79, !dbg !3169 %178 = atomicrmw fadd double addrspace(13)* %"'ipg77_unwrap", double %176 monotonic, align 8, !dbg !3169 %179 = load double, double* %"'de76", align 8, !dbg !3212 store double 0.000000e+00, double* %"'de76", align 8, !dbg !3212 %180 = load double, double* %"'de82", align 8, !dbg !3212 %181 = fadd fast double %180, %179, !dbg !3212 store double %181, double* %"'de82", align 8, !dbg !3212 %182 = load double, double* %"arrayref13.3'de", align 8, !dbg !3212 %183 = fadd fast double %182, %179, !dbg !3212 store double %183, double* %"arrayref13.3'de", align 8, !dbg !3212 %184 = load double, double* %"arrayref13.3'de", align 8, !dbg !3169 store double 0.000000e+00, double* %"arrayref13.3'de", align 8, !dbg !3169 %185 = load i64, i64* %"iv'ac", align 8, !dbg !3169 %_unwrap84 = add i64 %1, 4, !dbg !3169 %_unwrap85 = add i64 %_unwrap84, %_unwrap60, !dbg !3169 %"'ipg83_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap85, !dbg !3169 %186 = atomicrmw fadd double addrspace(13)* %"'ipg83_unwrap", double %184 monotonic, align 8, !dbg !3169 %187 = load double, double* %"'de82", align 8, !dbg !3212 store double 0.000000e+00, double* %"'de82", align 8, !dbg !3212 %188 = load double, double* %"'de88", align 8, !dbg !3212 %189 = fadd fast double %188, %187, !dbg !3212 store double %189, double* %"'de88", align 8, !dbg !3212 %190 = load double, double* %"arrayref13.2'de", align 8, !dbg !3212 %191 = fadd fast double %190, %187, !dbg !3212 store double %191, double* %"arrayref13.2'de", align 8, !dbg !3212 %192 = load double, double* %"arrayref13.2'de", align 8, !dbg !3169 store double 0.000000e+00, double* %"arrayref13.2'de", align 8, !dbg !3169 %193 = load i64, i64* %"iv'ac", align 8, !dbg !3169 %_unwrap90 = add i64 %1, 3, !dbg !3169 %_unwrap91 = add i64 %_unwrap90, %_unwrap60, !dbg !3169 %"'ipg89_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap91, !dbg !3169 %194 = atomicrmw fadd double addrspace(13)* %"'ipg89_unwrap", double %192 monotonic, align 8, !dbg !3169 %195 = load double, double* %"'de88", align 8, !dbg !3212 store double 0.000000e+00, double* %"'de88", align 8, !dbg !3212 %196 = load double, double* %"'de94", align 8, !dbg !3212 %197 = fadd fast double %196, %195, !dbg !3212 store double %197, double* %"'de94", align 8, !dbg !3212 %198 = load double, double* %"arrayref13.1'de", align 8, !dbg !3212 %199 = fadd fast double %198, %195, !dbg !3212 store double %199, double* %"arrayref13.1'de", align 8, !dbg !3212 %200 = load double, double* %"arrayref13.1'de", align 8, !dbg !3169 store double 0.000000e+00, double* %"arrayref13.1'de", align 8, !dbg !3169 %201 = load i64, i64* %"iv'ac", align 8, !dbg !3169 %_unwrap96 = add i64 %1, 2, !dbg !3169 %_unwrap97 = add i64 %_unwrap96, %_unwrap60, !dbg !3169 %"'ipg95_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap97, !dbg !3169 %202 = atomicrmw fadd double addrspace(13)* %"'ipg95_unwrap", double %200 monotonic, align 8, !dbg !3169 %203 = load double, double* %"'de94", align 8, !dbg !3212 store double 0.000000e+00, double* %"'de94", align 8, !dbg !3212 %204 = load double, double* %"value_phi831'de", align 8, !dbg !3212 %205 = fadd fast double %204, %203, !dbg !3212 store double %205, double* %"value_phi831'de", align 8, !dbg !3212 %206 = load double, double* %"arrayref13'de", align 8, !dbg !3212 %207 = fadd fast double %206, %203, !dbg !3212 store double %207, double* %"arrayref13'de", align 8, !dbg !3212 %208 = load double, double* %"arrayref13'de", align 8, !dbg !3169 store double 0.000000e+00, double* %"arrayref13'de", align 8, !dbg !3169 %209 = load i64, i64* %"iv'ac", align 8, !dbg !3169 %_unwrap101 = add i64 %1, 1, !dbg !3169 %_unwrap102 = add i64 %_unwrap60, %_unwrap101, !dbg !3169 %"'ipg100_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr327'ipl_unwrap", i64 %_unwrap102, !dbg !3169 %210 = atomicrmw fadd double addrspace(13)* %"'ipg100_unwrap", double %208 monotonic, align 8, !dbg !3169 %211 = load double, double* %"value_phi831'de", align 8 store double 0.000000e+00, double* %"value_phi831'de", align 8 %212 = load i64, i64* %"iv'ac", align 8 %213 = icmp eq i64 %212, 0 %214 = xor i1 %213, true %215 = select fast i1 %214, double %211, double 0.000000e+00 %216 = load double, double* %"'de", align 8 %217 = fadd fast double %216, %211 %218 = select fast i1 %213, double %216, double %217 store double %218, double* %"'de", align 8 %219 = select fast i1 %213, double %211, double 0.000000e+00 %220 = load double, double* %"'de7", align 8 %221 = fadd fast double %220, %211 %222 = select fast i1 %213, double %221, double %220 store double %222, double* %"'de7", align 8 br i1 %213, label %invertL32.lr.ph.new, label %incinvertL32 incinvertL32: ; preds = %invertL32 %223 = load i64, i64* %"iv'ac", align 8 %224 = add nsw i64 %223, -1 store i64 %224, i64* %"iv'ac", align 8 br label %invertL32 invertL59: ; preds = %invertcommon.ret %225 = load double, double* %"'de36", align 8, !dbg !3218 store double 0.000000e+00, double* %"'de36", align 8, !dbg !3218 %226 = load double, double* %"'de106", align 8, !dbg !3218 %227 = fadd fast double %226, %225, !dbg !3218 store double %227, double* %"'de106", align 8, !dbg !3218 %228 = load double, double* %"'de107", align 8, !dbg !3218 %229 = fadd fast double %228, %225, !dbg !3218 store double %229, double* %"'de107", align 8, !dbg !3218 %_unwrap108 = sub i64 %2, %1, !dbg !3210 %_unwrap109 = ashr i64 %_unwrap108, 1, !dbg !3210 %_unwrap110 = add i64 %_unwrap109, %1, !dbg !3210 %_unwrap111 = add i64 %_unwrap110, 1, !dbg !3210 %230 = load double, double* %"'de107", align 8, !dbg !3210 call fastcc void @diffejulia_mapreduce_impl_1464.25({} addrspace(10)* nocapture nofree readonly align 16 %0, {} addrspace(10)* nocapture nofree align 16 %"'", i64 signext %_unwrap111, i64 signext %2, double %230), !dbg !3210 store double 0.000000e+00, double* %"'de107", align 8, !dbg !3210 %231 = load double, double* %"'de106", align 8, !dbg !3208 %232 = load { {} addrspace(10)*, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)* }* %tapeld_cache, align 8, !dbg !3209, !invariant.group !3211 call fastcc void @diffejulia_mapreduce_impl_1464.28({} addrspace(10)* nocapture nofree readonly align 16 %0, {} addrspace(10)* nocapture nofree align 16 %"'", i64 signext %1, i64 signext %_unwrap110, double %231, { {} addrspace(10)*, {} addrspace(10)* } %232), !dbg !3208 store double 0.000000e+00, double* %"'de106", align 8, !dbg !3208 br label %invertL5 } ; Function Attrs: mustprogress nofree willreturn define internal fastcc void @diffejulia__mapreduce_1461({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* nocapture nofree align 16 "enzymejl_parmtype"="140151617005072" "enzymejl_parmtype_ref"="2" %"'", double %differeturn) unnamed_addr #37 !dbg !3037 { top: %"iv1'ac" = alloca i64, align 8 %"iv'ac" = alloca i64, align 8 %"common.ret.op'de" = alloca double, align 8 %1 = getelementptr double, double* %"common.ret.op'de", i64 0 store double 0.000000e+00, double* %1, align 8 %".lcssa.ph'de" = alloca double, align 8 %2 = getelementptr double, double* %".lcssa.ph'de", i64 0 store double 0.000000e+00, double* %2, align 8 %"'de" = alloca double, align 8 %3 = getelementptr double, double* %"'de", i64 0 store double 0.000000e+00, double* %3, align 8 %"value_phi30.unr'de" = alloca double, align 8 %4 = getelementptr double, double* %"value_phi30.unr'de", i64 0 store double 0.000000e+00, double* %4, align 8 %"'de4" = alloca double, align 8 %5 = getelementptr double, double* %"'de4", i64 0 store double 0.000000e+00, double* %5, align 8 %"'de7" = alloca double, align 8 %6 = getelementptr double, double* %"'de7", i64 0 store double 0.000000e+00, double* %6, align 8 %"value_phi30.epil'de" = alloca double, align 8 %7 = getelementptr double, double* %"value_phi30.epil'de", i64 0 store double 0.000000e+00, double* %7, align 8 %"arrayref14.epil'de" = alloca double, align 8 %8 = getelementptr double, double* %"arrayref14.epil'de", i64 0 store double 0.000000e+00, double* %8, align 8 %"'de20" = alloca double, align 8 %9 = getelementptr double, double* %"'de20", i64 0 store double 0.000000e+00, double* %9, align 8 %"arrayref'de" = alloca double, align 8 %10 = getelementptr double, double* %"arrayref'de", i64 0 store double 0.000000e+00, double* %10, align 8 %_cache = alloca i8, align 1 %_cache24 = alloca i8, align 1 %"arrayref7'de" = alloca double, align 8 %11 = getelementptr double, double* %"arrayref7'de", i64 0 store double 0.000000e+00, double* %11, align 8 %"arrayref10'de" = alloca double, align 8 %12 = getelementptr double, double* %"arrayref10'de", i64 0 store double 0.000000e+00, double* %12, align 8 %"'de34" = alloca double, align 8 %13 = getelementptr double, double* %"'de34", i64 0 store double 0.000000e+00, double* %13, align 8 %"arrayref14.7'de" = alloca double, align 8 %14 = getelementptr double, double* %"arrayref14.7'de", i64 0 store double 0.000000e+00, double* %14, align 8 %"'de43" = alloca double, align 8 %15 = getelementptr double, double* %"'de43", i64 0 store double 0.000000e+00, double* %15, align 8 %"arrayref14.6'de" = alloca double, align 8 %16 = getelementptr double, double* %"arrayref14.6'de", i64 0 store double 0.000000e+00, double* %16, align 8 %"'de48" = alloca double, align 8 %17 = getelementptr double, double* %"'de48", i64 0 store double 0.000000e+00, double* %17, align 8 %"arrayref14.5'de" = alloca double, align 8 %18 = getelementptr double, double* %"arrayref14.5'de", i64 0 store double 0.000000e+00, double* %18, align 8 %"'de53" = alloca double, align 8 %19 = getelementptr double, double* %"'de53", i64 0 store double 0.000000e+00, double* %19, align 8 %"arrayref14.4'de" = alloca double, align 8 %20 = getelementptr double, double* %"arrayref14.4'de", i64 0 store double 0.000000e+00, double* %20, align 8 %"'de58" = alloca double, align 8 %21 = getelementptr double, double* %"'de58", i64 0 store double 0.000000e+00, double* %21, align 8 %"arrayref14.3'de" = alloca double, align 8 %22 = getelementptr double, double* %"arrayref14.3'de", i64 0 store double 0.000000e+00, double* %22, align 8 %"'de63" = alloca double, align 8 %23 = getelementptr double, double* %"'de63", i64 0 store double 0.000000e+00, double* %23, align 8 %"arrayref14.2'de" = alloca double, align 8 %24 = getelementptr double, double* %"arrayref14.2'de", i64 0 store double 0.000000e+00, double* %24, align 8 %"'de68" = alloca double, align 8 %25 = getelementptr double, double* %"'de68", i64 0 store double 0.000000e+00, double* %25, align 8 %"arrayref14.1'de" = alloca double, align 8 %26 = getelementptr double, double* %"arrayref14.1'de", i64 0 store double 0.000000e+00, double* %26, align 8 %"value_phi30'de" = alloca double, align 8 %27 = getelementptr double, double* %"value_phi30'de", i64 0 store double 0.000000e+00, double* %27, align 8 %"arrayref14'de" = alloca double, align 8 %28 = getelementptr double, double* %"arrayref14'de", i64 0 store double 0.000000e+00, double* %28, align 8 %29 = call {}*** @julia.get_pgcstack() #39 %ptls_field22 = getelementptr inbounds {}**, {}*** %29, i64 2 %30 = bitcast {}*** %ptls_field22 to i64*** %ptls_load2324 = load i64**, i64*** %30, align 8, !tbaa !24, !alias.scope !3038, !noalias !3041 %31 = getelementptr inbounds i64*, i64** %ptls_load2324, i64 2 %safepoint = load i64*, i64** %31, align 8, !tbaa !28, !invariant.load !23, !alias.scope !3043, !noalias !3046 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint) #39, !dbg !3048 fence syncscope("singlethread") seq_cst %32 = addrspacecast {} addrspace(10)* %0 to {} addrspace(10)* addrspace(11)*, !dbg !3049 %arraysize_ptr = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %32, i64 3, !dbg !3049 %33 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr to i64 addrspace(11)*, !dbg !3049 %arraysize = load i64, i64 addrspace(11)* %33, align 8, !dbg !3049, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !3053, !noalias !3056 %arraysize_ptr2 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %32, i64 4, !dbg !3049 %34 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr2 to i64 addrspace(11)*, !dbg !3049 %arraysize3 = load i64, i64 addrspace(11)* %34, align 16, !dbg !3049, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !3053, !noalias !3056 %35 = mul i64 %arraysize3, %arraysize, !dbg !3058 store i8 5, i8* %_cache, align 1, !dbg !3062, !invariant.group !3063 store i8 1, i8* %_cache24, align 1, !dbg !3062, !invariant.group !3064 switch i64 %35, label %L15 [ i64 0, label %common.ret i64 1, label %L13 ], !dbg !3062 L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %L25 %36 = or i64 %unroll_iter, 2, !dbg !3065 br label %L20.common.ret.loopexit_crit_edge.unr-lcssa, !dbg !3065 L20.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %L25.lr.ph, %L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit %value_phi1131.unr = phi i64 [ 2, %L25.lr.ph ], [ %36, %L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit ] %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !3065 store i8 2, i8* %_cache, align 1, !dbg !3065, !invariant.group !3063 store i8 0, i8* %_cache24, align 1, !dbg !3065, !invariant.group !3064 br i1 %lcmp.mod.not, label %common.ret, label %L25.epil.preheader, !dbg !3065 L25.epil.preheader: ; preds = %L20.common.ret.loopexit_crit_edge.unr-lcssa %37 = add nsw i64 %xtraiter, -1, !dbg !3065 br label %L25.epil, !dbg !3065 L25.epil: ; preds = %L25.epil, %L25.epil.preheader %iv1 = phi i64 [ 0, %L25.epil.preheader ], [ %iv.next2, %L25.epil ] %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !3066 %38 = add nuw nsw i64 %value_phi1131.unr, %iv1, !dbg !3066 %"'ipg" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl", i64 %38, !dbg !3068 %epil.iter.cmp.not = icmp eq i64 %iv.next2, %xtraiter, !dbg !3065 br i1 %epil.iter.cmp.not, label %common.ret.loopexit, label %L25.epil, !dbg !3065, !llvm.loop !3069 common.ret.loopexit: ; preds = %L25.epil store i8 1, i8* %_cache, align 1, !dbg !3070, !invariant.group !3063 store i8 2, i8* %_cache24, align 1, !dbg !3070, !invariant.group !3064 br label %common.ret, !dbg !3070 common.ret: ; preds = %L30, %L17, %L13, %common.ret.loopexit, %L20.common.ret.loopexit_crit_edge.unr-lcssa, %top br label %invertcommon.ret, !dbg !3070 L13: ; preds = %top %"'ipc25" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3071 %"arrayptr26'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc25", align 16, !dbg !3071, !tbaa !28, !alias.scope !3073, !noalias !3074, !nonnull !23 store i8 3, i8* %_cache, align 1, !invariant.group !3063 store i8 5, i8* %_cache24, align 1, !invariant.group !3064 br label %common.ret L15: ; preds = %top %39 = icmp sgt i64 %35, 15, !dbg !3075 br i1 %39, label %L30, label %L17, !dbg !3076 L17: ; preds = %L15 %"'ipc" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3077 %"arrayptr627'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc", align 16, !dbg !3077, !tbaa !28, !alias.scope !3073, !noalias !3074, !nonnull !23, !invariant.group !3079 %"'ipg28" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl", i64 1, !dbg !3080 %.not2829 = icmp sgt i64 %35, 2, !dbg !3082 store i8 0, i8* %_cache, align 1, !dbg !3065, !invariant.group !3063 store i8 3, i8* %_cache24, align 1, !dbg !3065, !invariant.group !3064 br i1 %.not2829, label %L25.lr.ph, label %common.ret, !dbg !3065 L25.lr.ph: ; preds = %L17 %40 = add nsw i64 %35, -2, !dbg !3065 %41 = add nsw i64 %35, -3, !dbg !3065 %xtraiter = and i64 %40, 7, !dbg !3065 %42 = icmp ult i64 %41, 7, !dbg !3065 br i1 %42, label %L20.common.ret.loopexit_crit_edge.unr-lcssa, label %L25.lr.ph.new, !dbg !3065 L25.lr.ph.new: ; preds = %L25.lr.ph %unroll_iter = and i64 %40, -8, !dbg !3065 %43 = add i64 %unroll_iter, -8, !dbg !3065 %44 = lshr i64 %43, 3, !dbg !3065 br label %L25, !dbg !3065 L25: ; preds = %L25, %L25.lr.ph.new %iv = phi i64 [ %iv.next, %L25 ], [ 0, %L25.lr.ph.new ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !3066 %45 = shl nuw i64 %iv, 3, !dbg !3066 %46 = shl i64 %iv, 3, !dbg !3066 %47 = add nuw nsw i64 %46, 2, !dbg !3066 %48 = or i64 %47, 1, !dbg !3066 %"'ipg73" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl", i64 %47, !dbg !3068 %49 = add nuw nsw i64 %47, 2, !dbg !3066 %"'ipg69" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl", i64 %48, !dbg !3068 %50 = add nuw nsw i64 %47, 3, !dbg !3066 %"'ipg64" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl", i64 %49, !dbg !3068 %51 = add nuw nsw i64 %47, 4, !dbg !3066 %"'ipg59" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl", i64 %50, !dbg !3068 %52 = add nuw nsw i64 %47, 5, !dbg !3066 %"'ipg54" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl", i64 %51, !dbg !3068 %53 = add nuw nsw i64 %47, 6, !dbg !3066 %"'ipg49" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl", i64 %52, !dbg !3068 %54 = add nuw nsw i64 %47, 7, !dbg !3066 %"'ipg44" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl", i64 %53, !dbg !3068 %"'ipg35" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl", i64 %54, !dbg !3068 %niter.next.7 = add i64 %45, 8, !dbg !3065 %niter.ncmp.7.not = icmp eq i64 %niter.next.7, %unroll_iter, !dbg !3065 br i1 %niter.ncmp.7.not, label %L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit, label %L25, !dbg !3065 L30: ; preds = %L15 store i8 4, i8* %_cache, align 1, !invariant.group !3063 store i8 4, i8* %_cache24, align 1, !invariant.group !3064 br label %common.ret inverttop: ; preds = %invertL15, %invertL13, %invertcommon.ret fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertL20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %invertL20.common.ret.loopexit_crit_edge.unr-lcssa %_unwrap = add nsw i64 %35, -2 %unroll_iter_unwrap = and i64 %_unwrap, -8 %_unwrap1 = add i64 %unroll_iter_unwrap, -8 %_unwrap2 = lshr i64 %_unwrap1, 3 br label %mergeinvertL25_L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit mergeinvertL25_L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %invertL20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit store i64 %_unwrap2, i64* %"iv'ac", align 8 br label %invertL25 invertL20.common.ret.loopexit_crit_edge.unr-lcssa: ; preds = %invertcommon.ret, %invertL25.epil.preheader %55 = load double, double* %".lcssa.ph'de", align 8 store double 0.000000e+00, double* %".lcssa.ph'de", align 8 %_unwrap5 = add nsw i64 %35, -3 %_unwrap6 = icmp ult i64 %_unwrap5, 7 %56 = xor i1 %_unwrap6, true %57 = select fast i1 %56, double %55, double 0.000000e+00 %58 = load double, double* %"'de", align 8 %59 = fadd fast double %58, %55 %60 = select fast i1 %_unwrap6, double %58, double %59 store double %60, double* %"'de", align 8 %61 = load double, double* %"value_phi30.unr'de", align 8 store double 0.000000e+00, double* %"value_phi30.unr'de", align 8 %62 = select fast i1 %_unwrap6, double %61, double 0.000000e+00 %63 = load double, double* %"'de4", align 8 %64 = fadd fast double %63, %61 %65 = select fast i1 %_unwrap6, double %64, double %63 store double %65, double* %"'de4", align 8 %66 = select fast i1 %56, double %61, double 0.000000e+00 %67 = load double, double* %"'de", align 8 %68 = fadd fast double %67, %61 %69 = select fast i1 %_unwrap6, double %67, double %68 store double %69, double* %"'de", align 8 br i1 %_unwrap6, label %invertL25.lr.ph, label %invertL20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit invertL25.epil.preheader: ; preds = %invertL25.epil_phimerge br label %invertL20.common.ret.loopexit_crit_edge.unr-lcssa invertL25.epil: ; preds = %mergeinvertL25.epil_common.ret.loopexit, %incinvertL25.epil %70 = load double, double* %"'de7", align 8, !dbg !3083 store double 0.000000e+00, double* %"'de7", align 8, !dbg !3083 %71 = load double, double* %"value_phi30.epil'de", align 8, !dbg !3083 %72 = fadd fast double %71, %70, !dbg !3083 store double %72, double* %"value_phi30.epil'de", align 8, !dbg !3083 %73 = load double, double* %"arrayref14.epil'de", align 8, !dbg !3083 %74 = fadd fast double %73, %70, !dbg !3083 store double %74, double* %"arrayref14.epil'de", align 8, !dbg !3083 %75 = load double, double* %"arrayref14.epil'de", align 8, !dbg !3068 store double 0.000000e+00, double* %"arrayref14.epil'de", align 8, !dbg !3068 %76 = load i64, i64* %"iv1'ac", align 8, !dbg !3068 %"'ipc_unwrap" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3068 %"arrayptr627'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap", align 16, !dbg !3077, !tbaa !28, !alias.scope !3073, !noalias !3074, !nonnull !23 %_unwrap8 = add nsw i64 %35, -3, !dbg !3068 %_unwrap9 = icmp ult i64 %_unwrap8, 7, !dbg !3068 br i1 %_unwrap9, label %invertL25.epil_phirc, label %invertL25.epil_phirc10, !dbg !3068 invertL25.epil_phirc: ; preds = %invertL25.epil br label %invertL25.epil_phimerge invertL25.epil_phirc10: ; preds = %invertL25.epil %_unwrap11 = add nsw i64 %35, -2 %unroll_iter_unwrap12 = and i64 %_unwrap11, -8 %_unwrap13 = or i64 %unroll_iter_unwrap12, 2 br label %invertL25.epil_phimerge invertL25.epil_phimerge: ; preds = %invertL25.epil_phirc10, %invertL25.epil_phirc %77 = phi i64 [ 2, %invertL25.epil_phirc ], [ %_unwrap13, %invertL25.epil_phirc10 ], !dbg !3068 %_unwrap14 = add nuw nsw i64 %77, %76, !dbg !3068 %"'ipg_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'il_phi_unwrap", i64 %_unwrap14, !dbg !3068 %78 = atomicrmw fadd double addrspace(13)* %"'ipg_unwrap", double %75 monotonic, align 8, !dbg !3068 %79 = load double, double* %"value_phi30.epil'de", align 8 store double 0.000000e+00, double* %"value_phi30.epil'de", align 8 %80 = load i64, i64* %"iv1'ac", align 8 %81 = icmp eq i64 %80, 0 %82 = xor i1 %81, true %83 = select fast i1 %81, double %79, double 0.000000e+00 %84 = load double, double* %"value_phi30.unr'de", align 8 %85 = fadd fast double %84, %79 %86 = select fast i1 %81, double %85, double %84 store double %86, double* %"value_phi30.unr'de", align 8 %87 = select fast i1 %82, double %79, double 0.000000e+00 %88 = load double, double* %"'de7", align 8 %89 = fadd fast double %88, %79 %90 = select fast i1 %81, double %88, double %89 store double %90, double* %"'de7", align 8 br i1 %81, label %invertL25.epil.preheader, label %incinvertL25.epil incinvertL25.epil: ; preds = %invertL25.epil_phimerge %91 = load i64, i64* %"iv1'ac", align 8 %92 = add nsw i64 %91, -1 store i64 %92, i64* %"iv1'ac", align 8 br label %invertL25.epil invertcommon.ret.loopexit: ; preds = %invertcommon.ret %_unwrap17 = add nsw i64 %35, -2 %xtraiter_unwrap = and i64 %_unwrap17, 7 %_unwrap18 = add nsw i64 %xtraiter_unwrap, -1 br label %mergeinvertL25.epil_common.ret.loopexit mergeinvertL25.epil_common.ret.loopexit: ; preds = %invertcommon.ret.loopexit store i64 %_unwrap18, i64* %"iv1'ac", align 8 br label %invertL25.epil invertcommon.ret: ; preds = %common.ret store double %differeturn, double* %"common.ret.op'de", align 8 %93 = load double, double* %"common.ret.op'de", align 8 store double 0.000000e+00, double* %"common.ret.op'de", align 8 %94 = load i8, i8* %_cache, align 1, !invariant.group !3063 %95 = icmp eq i8 0, %94 %96 = icmp eq i8 1, %94 %97 = icmp eq i8 2, %94 %98 = icmp eq i8 3, %94 %99 = icmp eq i8 4, %94 %100 = select fast i1 %96, double %93, double 0.000000e+00 %101 = load double, double* %"'de7", align 8 %102 = fadd fast double %101, %93 %103 = select fast i1 %96, double %102, double %101 store double %103, double* %"'de7", align 8 %104 = select fast i1 %99, double %93, double 0.000000e+00 %105 = load double, double* %"'de20", align 8 %106 = fadd fast double %105, %93 %107 = select fast i1 %99, double %106, double %105 store double %107, double* %"'de20", align 8 %108 = select fast i1 %95, double %93, double 0.000000e+00 %109 = load double, double* %"'de4", align 8 %110 = fadd fast double %109, %93 %111 = select fast i1 %95, double %110, double %109 store double %111, double* %"'de4", align 8 %112 = select fast i1 %98, double %93, double 0.000000e+00 %113 = load double, double* %"arrayref'de", align 8 %114 = fadd fast double %113, %93 %115 = select fast i1 %98, double %114, double %113 store double %115, double* %"arrayref'de", align 8 %116 = select fast i1 %97, double %93, double 0.000000e+00 %117 = load double, double* %".lcssa.ph'de", align 8 %118 = fadd fast double %117, %93 %119 = select fast i1 %97, double %118, double %117 store double %119, double* %".lcssa.ph'de", align 8 %120 = load i8, i8* %_cache24, align 1, !invariant.group !3064 switch i8 %120, label %invertL13 [ i8 0, label %invertL20.common.ret.loopexit_crit_edge.unr-lcssa i8 1, label %inverttop i8 2, label %invertcommon.ret.loopexit i8 3, label %invertL17 i8 4, label %invertL30 ] invertL13: ; preds = %invertcommon.ret %121 = load double, double* %"arrayref'de", align 8, !dbg !3071 store double 0.000000e+00, double* %"arrayref'de", align 8, !dbg !3071 %"'ipc25_unwrap" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3071 %"arrayptr26'il_phi_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc25_unwrap", align 16, !dbg !3071, !tbaa !28, !alias.scope !3073, !noalias !3074, !nonnull !23 %122 = atomicrmw fadd double addrspace(13)* %"arrayptr26'il_phi_unwrap", double %121 monotonic, align 8, !dbg !3071 br label %inverttop invertL15: ; preds = %invertL30, %invertL17 br label %inverttop invertL17: ; preds = %invertL25.lr.ph, %invertcommon.ret %123 = load double, double* %"'de4", align 8, !dbg !3086 store double 0.000000e+00, double* %"'de4", align 8, !dbg !3086 %124 = load double, double* %"arrayref7'de", align 8, !dbg !3086 %125 = fadd fast double %124, %123, !dbg !3086 store double %125, double* %"arrayref7'de", align 8, !dbg !3086 %126 = load double, double* %"arrayref10'de", align 8, !dbg !3086 %127 = fadd fast double %126, %123, !dbg !3086 store double %127, double* %"arrayref10'de", align 8, !dbg !3086 %128 = load double, double* %"arrayref10'de", align 8, !dbg !3080 store double 0.000000e+00, double* %"arrayref10'de", align 8, !dbg !3080 %"'ipc_unwrap29" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3080 %"arrayptr627'il_phi_unwrap30" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap29", align 16, !dbg !3077, !tbaa !28, !alias.scope !3073, !noalias !3074, !nonnull !23 %"'ipg28_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'il_phi_unwrap30", i64 1, !dbg !3080 %129 = atomicrmw fadd double addrspace(13)* %"'ipg28_unwrap", double %128 monotonic, align 8, !dbg !3080 %130 = load double, double* %"arrayref7'de", align 8, !dbg !3077 store double 0.000000e+00, double* %"arrayref7'de", align 8, !dbg !3077 %131 = atomicrmw fadd double addrspace(13)* %"arrayptr627'il_phi_unwrap30", double %130 monotonic, align 8, !dbg !3077 br label %invertL15 invertL25.lr.ph: ; preds = %invertL25.lr.ph.new, %invertL20.common.ret.loopexit_crit_edge.unr-lcssa br label %invertL17 invertL25.lr.ph.new: ; preds = %invertL25 br label %invertL25.lr.ph invertL25: ; preds = %incinvertL25, %mergeinvertL25_L20.common.ret.loopexit_crit_edge.unr-lcssa.loopexit %132 = load double, double* %"'de", align 8, !dbg !3083 store double 0.000000e+00, double* %"'de", align 8, !dbg !3083 %133 = load double, double* %"'de34", align 8, !dbg !3083 %134 = fadd fast double %133, %132, !dbg !3083 store double %134, double* %"'de34", align 8, !dbg !3083 %135 = load double, double* %"arrayref14.7'de", align 8, !dbg !3083 %136 = fadd fast double %135, %132, !dbg !3083 store double %136, double* %"arrayref14.7'de", align 8, !dbg !3083 %137 = load double, double* %"arrayref14.7'de", align 8, !dbg !3068 store double 0.000000e+00, double* %"arrayref14.7'de", align 8, !dbg !3068 %138 = load i64, i64* %"iv'ac", align 8, !dbg !3068 %"'ipc_unwrap36" = addrspacecast {} addrspace(10)* %"'" to double addrspace(13)* addrspace(11)*, !dbg !3068 %"arrayptr627'ipl_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc_unwrap36", align 16, !dbg !3077, !tbaa !28, !alias.scope !3073, !noalias !3074, !nonnull !23, !invariant.group !3079 %_unwrap37 = shl i64 %138, 3, !dbg !3068 %_unwrap38 = add nuw nsw i64 %_unwrap37, 2, !dbg !3068 %_unwrap39 = add nuw nsw i64 %_unwrap38, 7, !dbg !3068 %"'ipg35_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl_unwrap", i64 %_unwrap39, !dbg !3068 %139 = atomicrmw fadd double addrspace(13)* %"'ipg35_unwrap", double %137 monotonic, align 8, !dbg !3068 %140 = load double, double* %"'de34", align 8, !dbg !3083 store double 0.000000e+00, double* %"'de34", align 8, !dbg !3083 %141 = load double, double* %"'de43", align 8, !dbg !3083 %142 = fadd fast double %141, %140, !dbg !3083 store double %142, double* %"'de43", align 8, !dbg !3083 %143 = load double, double* %"arrayref14.6'de", align 8, !dbg !3083 %144 = fadd fast double %143, %140, !dbg !3083 store double %144, double* %"arrayref14.6'de", align 8, !dbg !3083 %145 = load double, double* %"arrayref14.6'de", align 8, !dbg !3068 store double 0.000000e+00, double* %"arrayref14.6'de", align 8, !dbg !3068 %146 = load i64, i64* %"iv'ac", align 8, !dbg !3068 %_unwrap45 = add nuw nsw i64 %_unwrap38, 6, !dbg !3068 %"'ipg44_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl_unwrap", i64 %_unwrap45, !dbg !3068 %147 = atomicrmw fadd double addrspace(13)* %"'ipg44_unwrap", double %145 monotonic, align 8, !dbg !3068 %148 = load double, double* %"'de43", align 8, !dbg !3083 store double 0.000000e+00, double* %"'de43", align 8, !dbg !3083 %149 = load double, double* %"'de48", align 8, !dbg !3083 %150 = fadd fast double %149, %148, !dbg !3083 store double %150, double* %"'de48", align 8, !dbg !3083 %151 = load double, double* %"arrayref14.5'de", align 8, !dbg !3083 %152 = fadd fast double %151, %148, !dbg !3083 store double %152, double* %"arrayref14.5'de", align 8, !dbg !3083 %153 = load double, double* %"arrayref14.5'de", align 8, !dbg !3068 store double 0.000000e+00, double* %"arrayref14.5'de", align 8, !dbg !3068 %154 = load i64, i64* %"iv'ac", align 8, !dbg !3068 %_unwrap50 = add nuw nsw i64 %_unwrap38, 5, !dbg !3068 %"'ipg49_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl_unwrap", i64 %_unwrap50, !dbg !3068 %155 = atomicrmw fadd double addrspace(13)* %"'ipg49_unwrap", double %153 monotonic, align 8, !dbg !3068 %156 = load double, double* %"'de48", align 8, !dbg !3083 store double 0.000000e+00, double* %"'de48", align 8, !dbg !3083 %157 = load double, double* %"'de53", align 8, !dbg !3083 %158 = fadd fast double %157, %156, !dbg !3083 store double %158, double* %"'de53", align 8, !dbg !3083 %159 = load double, double* %"arrayref14.4'de", align 8, !dbg !3083 %160 = fadd fast double %159, %156, !dbg !3083 store double %160, double* %"arrayref14.4'de", align 8, !dbg !3083 %161 = load double, double* %"arrayref14.4'de", align 8, !dbg !3068 store double 0.000000e+00, double* %"arrayref14.4'de", align 8, !dbg !3068 %162 = load i64, i64* %"iv'ac", align 8, !dbg !3068 %_unwrap55 = add nuw nsw i64 %_unwrap38, 4, !dbg !3068 %"'ipg54_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl_unwrap", i64 %_unwrap55, !dbg !3068 %163 = atomicrmw fadd double addrspace(13)* %"'ipg54_unwrap", double %161 monotonic, align 8, !dbg !3068 %164 = load double, double* %"'de53", align 8, !dbg !3083 store double 0.000000e+00, double* %"'de53", align 8, !dbg !3083 %165 = load double, double* %"'de58", align 8, !dbg !3083 %166 = fadd fast double %165, %164, !dbg !3083 store double %166, double* %"'de58", align 8, !dbg !3083 %167 = load double, double* %"arrayref14.3'de", align 8, !dbg !3083 %168 = fadd fast double %167, %164, !dbg !3083 store double %168, double* %"arrayref14.3'de", align 8, !dbg !3083 %169 = load double, double* %"arrayref14.3'de", align 8, !dbg !3068 store double 0.000000e+00, double* %"arrayref14.3'de", align 8, !dbg !3068 %170 = load i64, i64* %"iv'ac", align 8, !dbg !3068 %_unwrap60 = add nuw nsw i64 %_unwrap38, 3, !dbg !3068 %"'ipg59_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl_unwrap", i64 %_unwrap60, !dbg !3068 %171 = atomicrmw fadd double addrspace(13)* %"'ipg59_unwrap", double %169 monotonic, align 8, !dbg !3068 %172 = load double, double* %"'de58", align 8, !dbg !3083 store double 0.000000e+00, double* %"'de58", align 8, !dbg !3083 %173 = load double, double* %"'de63", align 8, !dbg !3083 %174 = fadd fast double %173, %172, !dbg !3083 store double %174, double* %"'de63", align 8, !dbg !3083 %175 = load double, double* %"arrayref14.2'de", align 8, !dbg !3083 %176 = fadd fast double %175, %172, !dbg !3083 store double %176, double* %"arrayref14.2'de", align 8, !dbg !3083 %177 = load double, double* %"arrayref14.2'de", align 8, !dbg !3068 store double 0.000000e+00, double* %"arrayref14.2'de", align 8, !dbg !3068 %178 = load i64, i64* %"iv'ac", align 8, !dbg !3068 %_unwrap65 = add nuw nsw i64 %_unwrap38, 2, !dbg !3068 %"'ipg64_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl_unwrap", i64 %_unwrap65, !dbg !3068 %179 = atomicrmw fadd double addrspace(13)* %"'ipg64_unwrap", double %177 monotonic, align 8, !dbg !3068 %180 = load double, double* %"'de63", align 8, !dbg !3083 store double 0.000000e+00, double* %"'de63", align 8, !dbg !3083 %181 = load double, double* %"'de68", align 8, !dbg !3083 %182 = fadd fast double %181, %180, !dbg !3083 store double %182, double* %"'de68", align 8, !dbg !3083 %183 = load double, double* %"arrayref14.1'de", align 8, !dbg !3083 %184 = fadd fast double %183, %180, !dbg !3083 store double %184, double* %"arrayref14.1'de", align 8, !dbg !3083 %185 = load double, double* %"arrayref14.1'de", align 8, !dbg !3068 store double 0.000000e+00, double* %"arrayref14.1'de", align 8, !dbg !3068 %186 = load i64, i64* %"iv'ac", align 8, !dbg !3068 %_unwrap70 = or i64 %_unwrap38, 1, !dbg !3068 %"'ipg69_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl_unwrap", i64 %_unwrap70, !dbg !3068 %187 = atomicrmw fadd double addrspace(13)* %"'ipg69_unwrap", double %185 monotonic, align 8, !dbg !3068 %188 = load double, double* %"'de68", align 8, !dbg !3083 store double 0.000000e+00, double* %"'de68", align 8, !dbg !3083 %189 = load double, double* %"value_phi30'de", align 8, !dbg !3083 %190 = fadd fast double %189, %188, !dbg !3083 store double %190, double* %"value_phi30'de", align 8, !dbg !3083 %191 = load double, double* %"arrayref14'de", align 8, !dbg !3083 %192 = fadd fast double %191, %188, !dbg !3083 store double %192, double* %"arrayref14'de", align 8, !dbg !3083 %193 = load double, double* %"arrayref14'de", align 8, !dbg !3068 store double 0.000000e+00, double* %"arrayref14'de", align 8, !dbg !3068 %194 = load i64, i64* %"iv'ac", align 8, !dbg !3068 %"'ipg73_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr627'ipl_unwrap", i64 %_unwrap38, !dbg !3068 %195 = atomicrmw fadd double addrspace(13)* %"'ipg73_unwrap", double %193 monotonic, align 8, !dbg !3068 %196 = load double, double* %"value_phi30'de", align 8 store double 0.000000e+00, double* %"value_phi30'de", align 8 %197 = load i64, i64* %"iv'ac", align 8 %198 = icmp eq i64 %197, 0 %199 = xor i1 %198, true %200 = select fast i1 %199, double %196, double 0.000000e+00 %201 = load double, double* %"'de", align 8 %202 = fadd fast double %201, %196 %203 = select fast i1 %198, double %201, double %202 store double %203, double* %"'de", align 8 %204 = select fast i1 %198, double %196, double 0.000000e+00 %205 = load double, double* %"'de4", align 8 %206 = fadd fast double %205, %196 %207 = select fast i1 %198, double %206, double %205 store double %207, double* %"'de4", align 8 br i1 %198, label %invertL25.lr.ph.new, label %incinvertL25 incinvertL25: ; preds = %invertL25 %208 = load i64, i64* %"iv'ac", align 8 %209 = add nsw i64 %208, -1 store i64 %209, i64* %"iv'ac", align 8 br label %invertL25 invertL30: ; preds = %invertcommon.ret %210 = load double, double* %"'de20", align 8, !dbg !3089 call fastcc void @diffejulia_mapreduce_impl_1464({} addrspace(10)* nocapture nofree readonly align 16 %0, {} addrspace(10)* nocapture nofree align 16 %"'", i64 signext 1, i64 signext %35, double %210), !dbg !3089 store double 0.000000e+00, double* %"'de20", align 8, !dbg !3089 br label %invertL15 } ; Function Attrs: mustprogress willreturn define internal void @diffejulia_loss_1448_inner.1({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %"'", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %"'1", double %differeturn) local_unnamed_addr #25 !dbg !1262 { entry: %"iv'ac" = alloca i64, align 8 %"iv1'ac" = alloca i64, align 8 %"iv3'ac" = alloca i64, align 8 %"'de" = alloca double, align 8 %2 = getelementptr double, double* %"'de", i64 0 store double 0.000000e+00, double* %2, align 8 %_augmented_cache = alloca { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, align 8 store { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* } { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), { {} addrspace(10)*, i64*, i64*, i64 } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i64* undef, i64* undef, i64 undef }, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*) }, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*) }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %_augmented_cache, align 8 %_cache = alloca {} addrspace(10)*, align 8 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %_cache, align 8 %"'mi5_cache" = alloca {} addrspace(10)*, align 8 store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)** %"'mi5_cache", align 8 %_augmented12_cache = alloca { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }, align 8 store { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } { {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*), i64 undef, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151643058184 to {}*) to {} addrspace(10)*) }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }* %_augmented12_cache, align 8 %"'de20" = alloca double, align 8 %3 = getelementptr double, double* %"'de20", i64 0 store double 0.000000e+00, double* %3, align 8 %"arrayref.i.3'de" = alloca double, align 8 %4 = getelementptr double, double* %"arrayref.i.3'de", i64 0 store double 0.000000e+00, double* %4, align 8 %"arrayref101.i.3'de" = alloca double, align 8 %5 = getelementptr double, double* %"arrayref101.i.3'de", i64 0 store double 0.000000e+00, double* %5, align 8 %"'de39" = alloca double, align 8 %6 = getelementptr double, double* %"'de39", i64 0 store double 0.000000e+00, double* %6, align 8 %"arrayref.i.2'de" = alloca double, align 8 %7 = getelementptr double, double* %"arrayref.i.2'de", i64 0 store double 0.000000e+00, double* %7, align 8 %"arrayref101.i.2'de" = alloca double, align 8 %8 = getelementptr double, double* %"arrayref101.i.2'de", i64 0 store double 0.000000e+00, double* %8, align 8 %"'de49" = alloca double, align 8 %9 = getelementptr double, double* %"'de49", i64 0 store double 0.000000e+00, double* %9, align 8 %"arrayref.i.1'de" = alloca double, align 8 %10 = getelementptr double, double* %"arrayref.i.1'de", i64 0 store double 0.000000e+00, double* %10, align 8 %"arrayref101.i.1'de" = alloca double, align 8 %11 = getelementptr double, double* %"arrayref101.i.1'de", i64 0 store double 0.000000e+00, double* %11, align 8 %"'de58" = alloca double, align 8 %12 = getelementptr double, double* %"'de58", i64 0 store double 0.000000e+00, double* %12, align 8 %"arrayref.i'de" = alloca double, align 8 %13 = getelementptr double, double* %"arrayref.i'de", i64 0 store double 0.000000e+00, double* %13, align 8 %"arrayref101.i'de" = alloca double, align 8 %14 = getelementptr double, double* %"arrayref101.i'de", i64 0 store double 0.000000e+00, double* %14, align 8 %"'de81" = alloca double, align 8 %15 = getelementptr double, double* %"'de81", i64 0 store double 0.000000e+00, double* %15, align 8 %"arrayref.i.epil'de" = alloca double, align 8 %16 = getelementptr double, double* %"arrayref.i.epil'de", i64 0 store double 0.000000e+00, double* %16, align 8 %"arrayref101.i.epil'de" = alloca double, align 8 %17 = getelementptr double, double* %"arrayref101.i.epil'de", i64 0 store double 0.000000e+00, double* %17, align 8 %_cache106 = alloca i8*, align 8 %newstruct16.i = alloca [2 x [1 x i64]], align 8 %"'ipa10" = alloca { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, align 8 store { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } zeroinitializer, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'ipa10", align 8 %18 = alloca { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, align 8 %19 = alloca [1 x {} addrspace(10)*], align 8 %newstruct126.i = alloca [2 x [1 x i64]], align 8 %"'ipa9" = alloca { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, align 8, !dbg !1263 store { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } zeroinitializer, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'ipa9", align 8, !dbg !1263 %20 = alloca { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, align 8, !dbg !1263, !enzyme_type !294 %"'ipc" = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'ipa9" to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !1263 %21 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %20 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !1263 %.fca.0.extract3 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 0, !dbg !1263 %".fca.0.extract3'ipev" = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %"'", 0, !dbg !1263 %".fca.0.gep4'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'ipa9", i64 0, i32 0, !dbg !1263 %.fca.0.gep4 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %20, i64 0, i32 0, !dbg !1263 store {} addrspace(10)* %".fca.0.extract3'ipev", {} addrspace(10)** %".fca.0.gep4'ipg", align 8, !dbg !1263, !alias.scope !1264, !noalias !1267 store {} addrspace(10)* %.fca.0.extract3, {} addrspace(10)** %.fca.0.gep4, align 8, !dbg !1263, !alias.scope !1269, !noalias !1270 %.fca.1.0.0.extract5 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 0, 0, !dbg !1263 %".fca.1.0.0.gep6'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'ipa9", i64 0, i32 1, i64 0, i64 0, !dbg !1263 %.fca.1.0.0.gep6 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %20, i64 0, i32 1, i64 0, i64 0, !dbg !1263 store i64 %.fca.1.0.0.extract5, i64* %".fca.1.0.0.gep6'ipg", align 8, !dbg !1263, !alias.scope !1264, !noalias !1267 store i64 %.fca.1.0.0.extract5, i64* %.fca.1.0.0.gep6, align 8, !dbg !1263, !alias.scope !1269, !noalias !1270 %.fca.1.0.1.extract7 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 0, 1, !dbg !1263 %".fca.1.0.1.gep8'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'ipa9", i64 0, i32 1, i64 0, i64 1, !dbg !1263 %.fca.1.0.1.gep8 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %20, i64 0, i32 1, i64 0, i64 1, !dbg !1263 store i64 %.fca.1.0.1.extract7, i64* %".fca.1.0.1.gep8'ipg", align 8, !dbg !1263, !alias.scope !1264, !noalias !1267 store i64 %.fca.1.0.1.extract7, i64* %.fca.1.0.1.gep8, align 8, !dbg !1263, !alias.scope !1269, !noalias !1270 %.fca.1.1.0.extract = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 1, 0, !dbg !1263 %".fca.1.1.0.gep'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'ipa9", i64 0, i32 1, i64 1, i64 0, !dbg !1263 %.fca.1.1.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %20, i64 0, i32 1, i64 1, i64 0, !dbg !1263 store i64 %.fca.1.1.0.extract, i64* %".fca.1.1.0.gep'ipg", align 8, !dbg !1263, !alias.scope !1264, !noalias !1267 store i64 %.fca.1.1.0.extract, i64* %.fca.1.1.0.gep, align 8, !dbg !1263, !alias.scope !1269, !noalias !1270 %.fca.1.1.1.extract = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 1, 1, !dbg !1263 %".fca.1.1.1.gep'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'ipa9", i64 0, i32 1, i64 1, i64 1, !dbg !1263 %.fca.1.1.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %20, i64 0, i32 1, i64 1, i64 1, !dbg !1263 store i64 %.fca.1.1.1.extract, i64* %".fca.1.1.1.gep'ipg", align 8, !dbg !1263, !alias.scope !1264, !noalias !1267 store i64 %.fca.1.1.1.extract, i64* %.fca.1.1.1.gep, align 8, !dbg !1263, !alias.scope !1269, !noalias !1270 %.fca.2.extract9 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 2, !dbg !1263 %".fca.2.gep10'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'ipa9", i64 0, i32 2, !dbg !1263 %.fca.2.gep10 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %20, i64 0, i32 2, !dbg !1263 store i64 %.fca.2.extract9, i64* %".fca.2.gep10'ipg", align 8, !dbg !1263, !alias.scope !1264, !noalias !1267 store i64 %.fca.2.extract9, i64* %.fca.2.gep10, align 8, !dbg !1263, !alias.scope !1269, !noalias !1270 %.fca.3.extract11 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 3, !dbg !1263 %".fca.3.gep12'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'ipa9", i64 0, i32 3, !dbg !1263 %.fca.3.gep12 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %20, i64 0, i32 3, !dbg !1263 store i64 %.fca.3.extract11, i64* %".fca.3.gep12'ipg", align 8, !dbg !1263, !alias.scope !1264, !noalias !1267 store i64 %.fca.3.extract11, i64* %.fca.3.gep12, align 8, !dbg !1263, !alias.scope !1269, !noalias !1270 %"'ipa" = alloca { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, align 8, !dbg !1263 store { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } zeroinitializer, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'ipa", align 8, !dbg !1263 %22 = alloca { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, align 8, !dbg !1263, !enzyme_type !300 %"'ipc11" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'ipa" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !1263 %23 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %22 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !1263 %.fca.0.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 0, !dbg !1263 %".fca.0.extract'ipev" = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %"'1", 0, !dbg !1263 %".fca.0.gep'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'ipa", i64 0, i32 0, !dbg !1263 %.fca.0.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %22, i64 0, i32 0, !dbg !1263 store {} addrspace(10)* %".fca.0.extract'ipev", {} addrspace(10)** %".fca.0.gep'ipg", align 8, !dbg !1263, !alias.scope !1271, !noalias !1274 store {} addrspace(10)* %.fca.0.extract, {} addrspace(10)** %.fca.0.gep, align 8, !dbg !1263, !alias.scope !1276, !noalias !1277 %.fca.1.0.0.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 1, 0, 0, !dbg !1263 %".fca.1.0.0.gep'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'ipa", i64 0, i32 1, i64 0, i64 0, !dbg !1263 %.fca.1.0.0.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %22, i64 0, i32 1, i64 0, i64 0, !dbg !1263 store i64 %.fca.1.0.0.extract, i64* %".fca.1.0.0.gep'ipg", align 8, !dbg !1263, !alias.scope !1271, !noalias !1274 store i64 %.fca.1.0.0.extract, i64* %.fca.1.0.0.gep, align 8, !dbg !1263, !alias.scope !1276, !noalias !1277 %.fca.1.0.1.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 1, 0, 1, !dbg !1263 %".fca.1.0.1.gep'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'ipa", i64 0, i32 1, i64 0, i64 1, !dbg !1263 %.fca.1.0.1.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %22, i64 0, i32 1, i64 0, i64 1, !dbg !1263 store i64 %.fca.1.0.1.extract, i64* %".fca.1.0.1.gep'ipg", align 8, !dbg !1263, !alias.scope !1271, !noalias !1274 store i64 %.fca.1.0.1.extract, i64* %.fca.1.0.1.gep, align 8, !dbg !1263, !alias.scope !1276, !noalias !1277 %.fca.2.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 2, !dbg !1263 %".fca.2.gep'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'ipa", i64 0, i32 2, !dbg !1263 %.fca.2.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %22, i64 0, i32 2, !dbg !1263 store i64 %.fca.2.extract, i64* %".fca.2.gep'ipg", align 8, !dbg !1263, !alias.scope !1271, !noalias !1274 store i64 %.fca.2.extract, i64* %.fca.2.gep, align 8, !dbg !1263, !alias.scope !1276, !noalias !1277 %.fca.3.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 3, !dbg !1263 %".fca.3.gep'ipg" = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %"'ipa", i64 0, i32 3, !dbg !1263 %.fca.3.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %22, i64 0, i32 3, !dbg !1263 store i64 %.fca.3.extract, i64* %".fca.3.gep'ipg", align 8, !dbg !1263, !alias.scope !1271, !noalias !1274 store i64 %.fca.3.extract, i64* %.fca.3.gep, align 8, !dbg !1263, !alias.scope !1276, !noalias !1277 %24 = call {}*** @julia.get_pgcstack() #39 %ptls_field.i49 = getelementptr inbounds {}**, {}*** %24, i64 2 %25 = bitcast {}*** %ptls_field.i49 to i64*** %ptls_load.i5051 = load i64**, i64*** %25, align 8, !tbaa !24, !alias.scope !1278, !noalias !1281 %26 = getelementptr inbounds i64*, i64** %ptls_load.i5051, i64 2 %safepoint.i = load i64*, i64** %26, align 8, !tbaa !28, !invariant.load !23, !alias.scope !1283, !noalias !1286 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint.i) #39, !dbg !1288 fence syncscope("singlethread") seq_cst %unbox.i = load i64, i64* %.fca.1.0.1.gep8, align 8, !dbg !1290, !alias.scope !1299, !noalias !1300 %unbox2.i = load i64, i64* %.fca.1.0.0.gep6, align 8, !dbg !1290, !alias.scope !1299, !noalias !1300 %27 = add i64 %unbox.i, 1, !dbg !1290 %28 = sub i64 %27, %unbox2.i, !dbg !1301 %29 = call i64 @llvm.smax.i64(i64 %28, i64 noundef 0) #39, !dbg !1302 %unbox3.i = load i64, i64* %.fca.1.1.1.gep, align 8, !dbg !1307, !alias.scope !1299, !noalias !1300 %unbox4.i = load i64, i64* %.fca.1.1.0.gep, align 8, !dbg !1307, !alias.scope !1299, !noalias !1300 %30 = sub i64 %unbox3.i, %unbox4.i, !dbg !1307 %31 = add i64 %30, 1, !dbg !1311 %32 = call i64 @llvm.smax.i64(i64 %31, i64 noundef 0) #39, !dbg !1312 %unbox7.i = load i64, i64* %.fca.1.0.1.gep, align 8, !dbg !1290, !alias.scope !1317, !noalias !1318 %unbox8.i = load i64, i64* %.fca.1.0.0.gep, align 8, !dbg !1290, !alias.scope !1317, !noalias !1318 %33 = sub i64 %unbox7.i, %unbox8.i, !dbg !1290 %34 = add i64 %33, 1, !dbg !1301 %35 = call i64 @llvm.smax.i64(i64 %34, i64 noundef 0) #39, !dbg !1302 %36 = icmp eq i64 %35, %29, !dbg !1319 %37 = icmp eq i64 %29, 1, !dbg !1325 %value_phi.i = or i1 %37, %36, !dbg !1325 br i1 %value_phi.i, label %L47.i, label %L35.i, !dbg !1326 L35.i: ; preds = %entry %.not64 = icmp eq i64 %35, 1, !dbg !1325 br i1 %.not64, label %L47.i, label %L43.i, !dbg !1326 L43.i: ; preds = %L35.i %current_task1.i48 = getelementptr inbounds {}**, {}*** %24, i64 -14 %current_task1.i = bitcast {}*** %current_task1.i48 to {}** %38 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_box_int64(i64 signext %29) #40, !dbg !1326 %39 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_box_int64(i64 signext %35) #40, !dbg !1326 %40 = call nonnull {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151445231360 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151423430080 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151520884224 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %38, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151520884192 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %39) #41, !dbg !1326 %box.i = call noalias nonnull dereferenceable(8) "enzyme_inactive" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1.i, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151463803568 to {}*) to {} addrspace(10)*)) #42, !dbg !1326 %41 = bitcast {} addrspace(10)* %box.i to [1 x {} addrspace(10)*] addrspace(10)*, !dbg !1326 %42 = getelementptr [1 x {} addrspace(10)*], [1 x {} addrspace(10)*] addrspace(10)* %41, i64 0, i64 0, !dbg !1326 store {} addrspace(10)* %40, {} addrspace(10)* addrspace(10)* %42, align 8, !dbg !1326, !tbaa !106, !alias.scope !70, !noalias !1327 %43 = addrspacecast {} addrspace(10)* %box.i to {} addrspace(12)*, !dbg !1326 call void @ijl_throw({} addrspace(12)* %43) #43, !dbg !1326 unreachable L47.i: ; preds = %L35.i, %entry %.sroa.042.0 = phi i64 [ %35, %entry ], [ %29, %L35.i ] %memcpy_refined_dst.i = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct16.i, i64 0, i64 0, i64 0, !dbg !1330 store i64 %.sroa.042.0, i64* %memcpy_refined_dst.i, align 8, !dbg !1330, !tbaa !357, !alias.scope !359, !noalias !1331 %memcpy_refined_dst18.i = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct16.i, i64 0, i64 1, i64 0, !dbg !1330 store i64 %32, i64* %memcpy_refined_dst18.i, align 8, !dbg !1330, !tbaa !357, !alias.scope !359, !noalias !1331 %44 = call {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151617005072 to {}*) to {} addrspace(10)*), i64 %.sroa.042.0, i64 %32), !dbg !1332 %45 = bitcast {} addrspace(10)* %44 to <{ i8 addrspace(13)*, i64, i16, i16, i32, i64 }> addrspace(10)*, !dbg !1332 %46 = getelementptr inbounds <{ i8 addrspace(13)*, i64, i16, i16, i32, i64 }>, <{ i8 addrspace(13)*, i64, i16, i16, i32, i64 }> addrspace(10)* %45, i32 0, i32 1, !dbg !1332 %47 = load i64, i64 addrspace(10)* %46, align 8, !dbg !1332 %48 = mul i64 %47, 8, !dbg !1332 %49 = bitcast {} addrspace(10)* %44 to i8 addrspace(13)* addrspace(10)*, !dbg !1332 %50 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(10)* %49, align 8, !dbg !1332 call void @llvm.memset.p13i8.i64(i8 addrspace(13)* align 8 %50, i8 0, i64 %48, i1 false), !dbg !1332 %51 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151617005072 to {}*) to {} addrspace(10)*), i64 %.sroa.042.0, i64 %32) #40, !dbg !1332 %52 = addrspacecast {} addrspace(10)* %51 to {} addrspace(10)* addrspace(11)*, !dbg !1340 %arraysize_ptr.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %52, i64 3, !dbg !1340 %53 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr.i to i64 addrspace(11)*, !dbg !1340 %arraysize.i = load i64, i64 addrspace(11)* %53, align 8, !dbg !1340, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !1344, !noalias !1347 %arraysize_ptr23.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %52, i64 4, !dbg !1340 %54 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr23.i to i64 addrspace(11)*, !dbg !1340 %arraysize24.i = load i64, i64 addrspace(11)* %54, align 8, !dbg !1340, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !1344, !noalias !1347 %.not = icmp ne i64 %arraysize.i, %.sroa.042.0, !dbg !1349 %55 = icmp ne i64 %arraysize24.i, %32 %spec.select = select i1 %.not, i1 true, i1 %55, !dbg !1353 br i1 %spec.select, label %L395.i, label %L102.i, !dbg !1354 L102.i: ; preds = %L47.i %56 = addrspacecast {} addrspace(10)* %51 to {} addrspace(11)*, !dbg !1340 %57 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* %56) #44, !dbg !1355 %58 = bitcast {}* %57 to i8**, !dbg !1355 %arrayptr.i = load i8*, i8** %58, align 8, !dbg !1355, !tbaa !28, !invariant.load !23, !alias.scope !1344, !noalias !1347, !nonnull !23 %"getfield28.i'ipl" = load atomic {} addrspace(10)*, {} addrspace(10)** %".fca.0.gep4'ipg" unordered, align 8, !dbg !1365, !alias.scope !1367, !noalias !1368, !nonnull !23, !dereferenceable !129 %getfield28.i = load atomic {} addrspace(10)*, {} addrspace(10)** %.fca.0.gep4 unordered, align 8, !dbg !1365, !alias.scope !1299, !noalias !1300, !nonnull !23, !dereferenceable !129, !align !130 %59 = addrspacecast {} addrspace(10)* %getfield28.i to {} addrspace(11)*, !dbg !1369 %60 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %59) #44, !dbg !1369 %61 = bitcast {}* %60 to i8**, !dbg !1369 %arrayptr30.i = load i8*, i8** %61, align 8, !dbg !1369, !tbaa !28, !invariant.load !23, !alias.scope !1372, !noalias !1375, !nonnull !23 %.not52 = icmp eq i8* %arrayptr.i, %arrayptr30.i, !dbg !1377 br i1 %.not52, label %L111.i, label %L114.i, !dbg !1380 L111.i: ; preds = %L102.i %_augmented = call fastcc { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* } @augmented_julia_unaliascopy_1490.14({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" %18, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipa10", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" %19, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %21, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc"), !dbg !1380 store { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* } %_augmented, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %_augmented_cache, align 8, !dbg !1381, !invariant.group !1388 %"unbox148.i.fca.0.gep'ipg" = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %"'ipa10", i64 0, i32 0, !dbg !1381 %unbox148.i.fca.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %18, i64 0, i32 0, !dbg !1381 %"unbox148.i.fca.0.load'ipl" = load {} addrspace(10)*, {} addrspace(10)** %"unbox148.i.fca.0.gep'ipg", align 8, !dbg !1381, !tbaa !357, !alias.scope !1389, !noalias !1392 %unbox148.i.fca.0.load = load {} addrspace(10)*, {} addrspace(10)** %unbox148.i.fca.0.gep, align 8, !dbg !1381, !tbaa !357, !alias.scope !1394, !noalias !1395 %unbox148.i.fca.1.0.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %18, i64 0, i32 1, i64 0, i64 0, !dbg !1381 %unbox148.i.fca.1.0.0.load = load i64, i64* %unbox148.i.fca.1.0.0.gep, align 8, !dbg !1381, !tbaa !357, !alias.scope !1394, !noalias !1395 %unbox148.i.fca.1.0.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %18, i64 0, i32 1, i64 0, i64 1, !dbg !1381 %unbox148.i.fca.1.0.1.load = load i64, i64* %unbox148.i.fca.1.0.1.gep, align 8, !dbg !1381, !tbaa !357, !alias.scope !1394, !noalias !1395 %unbox148.i.fca.1.1.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %18, i64 0, i32 1, i64 1, i64 0, !dbg !1381 %unbox148.i.fca.1.1.0.load = load i64, i64* %unbox148.i.fca.1.1.0.gep, align 8, !dbg !1381, !tbaa !357, !alias.scope !1394, !noalias !1395 %unbox148.i.fca.1.1.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %18, i64 0, i32 1, i64 1, i64 1, !dbg !1381 %unbox148.i.fca.1.1.1.load = load i64, i64* %unbox148.i.fca.1.1.1.gep, align 8, !dbg !1381, !tbaa !357, !alias.scope !1394, !noalias !1395 br label %L114.i, !dbg !1381 L114.i: ; preds = %L111.i, %L102.i %62 = phi {} addrspace(10)* [ %"unbox148.i.fca.0.load'ipl", %L111.i ], [ %"getfield28.i'ipl", %L102.i ] %unbox148.i.fca.0.load.pn = phi {} addrspace(10)* [ %unbox148.i.fca.0.load, %L111.i ], [ %getfield28.i, %L102.i ] %unbox148.i.fca.1.0.0.load.pn = phi i64 [ %unbox148.i.fca.1.0.0.load, %L111.i ], [ %unbox2.i, %L102.i ] %unbox148.i.fca.1.0.1.load.pn = phi i64 [ %unbox148.i.fca.1.0.1.load, %L111.i ], [ %unbox.i, %L102.i ] %unbox148.i.fca.1.1.0.load.pn = phi i64 [ %unbox148.i.fca.1.1.0.load, %L111.i ], [ %unbox4.i, %L102.i ] %unbox148.i.fca.1.1.1.load.pn = phi i64 [ %unbox148.i.fca.1.1.1.load, %L111.i ], [ %unbox3.i, %L102.i ] %63 = sub i64 1, %unbox148.i.fca.1.0.0.load.pn, !dbg !1396 %64 = add i64 %63, %unbox148.i.fca.1.0.1.load.pn, !dbg !1403 %65 = call i64 @llvm.smax.i64(i64 %64, i64 noundef 0) #39, !dbg !1404 %66 = sub i64 1, %unbox148.i.fca.1.1.0.load.pn, !dbg !1409 %67 = add i64 %66, %unbox148.i.fca.1.1.1.load.pn, !dbg !1413 %68 = call i64 @llvm.smax.i64(i64 %67, i64 noundef 0) #39, !dbg !1414 %69 = icmp eq i64 %68, 1, !dbg !1419 %70 = icmp eq i64 %65, 1, !dbg !1424 %"getfield43.i'ipl" = load atomic {} addrspace(10)*, {} addrspace(10)** %".fca.0.gep'ipg" unordered, align 8, !dbg !1427, !alias.scope !1434, !noalias !1435, !nonnull !23, !dereferenceable !129 %getfield43.i = load atomic {} addrspace(10)*, {} addrspace(10)** %.fca.0.gep unordered, align 8, !dbg !1427, !alias.scope !1317, !noalias !1318, !nonnull !23, !dereferenceable !129, !align !130 %71 = addrspacecast {} addrspace(10)* %getfield43.i to {} addrspace(11)*, !dbg !1436 %72 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %71) #44, !dbg !1436 %73 = bitcast {}* %72 to i8**, !dbg !1436 %arrayptr45.i = load i8*, i8** %73, align 8, !dbg !1436, !tbaa !273, !alias.scope !1439, !noalias !1442, !nonnull !23 %.not53 = icmp eq i8* %arrayptr.i, %arrayptr45.i, !dbg !1444 br i1 %.not53, label %L147.i, label %L179.i, !dbg !1447 L147.i: ; preds = %L114.i %74 = call {} addrspace(10)* @ijl_alloc_array_1d({} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151416616992 to {}*) to {} addrspace(10)*), i64 %34), !dbg !1448 %75 = mul i64 %34, 8, !dbg !1448 %76 = bitcast {} addrspace(10)* %74 to i8 addrspace(13)* addrspace(10)*, !dbg !1448 %77 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(10)* %76, align 8, !dbg !1448 call void @llvm.memset.p13i8.i64(i8 addrspace(13)* align 8 %77, i8 0, i64 %75, i1 false), !dbg !1448 %78 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_1d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151416616992 to {}*) to {} addrspace(10)*), i64 %34) #40, !dbg !1448 store {} addrspace(10)* %78, {} addrspace(10)** %_cache, align 8, !dbg !1452, !invariant.group !1453 store {} addrspace(10)* %74, {} addrspace(10)** %"'mi5_cache", align 8, !dbg !1452, !invariant.group !1454 %_augmented12 = call fastcc { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } @augmented_julia_copyto__1477.23({} addrspace(10)* align 16 %78, {} addrspace(10)* align 16 %74, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %23, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc11"), !dbg !1452 store { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } %_augmented12, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }* %_augmented12_cache, align 8, !dbg !1455, !invariant.group !1465 %.not54 = icmp ugt i64 %33, 9223372036854775806, !dbg !1455 %.1 = select i1 %.not54, i64 0, i64 %35, !dbg !1381 %"'ipiv" = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } zeroinitializer, {} addrspace(10)* %74, 0, !dbg !1466 %79 = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } zeroinitializer, {} addrspace(10)* %78, 0, !dbg !1466 %"unbox55.i.fca.0.1.insert'ipiv" = insertvalue [1 x [2 x i64]] [[2 x i64] [i64 1, i64 poison]], i64 %.1, 0, 1, !dbg !1466 %unbox55.i.fca.0.1.insert = insertvalue [1 x [2 x i64]] [[2 x i64] [i64 1, i64 poison]], i64 %.1, 0, 1, !dbg !1466 %"'ipiv14" = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %"'ipiv", [1 x [2 x i64]] %"unbox55.i.fca.0.1.insert'ipiv", 1, !dbg !1466 %80 = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %79, [1 x [2 x i64]] %unbox55.i.fca.0.1.insert, 1, !dbg !1466 br label %L180.i, !dbg !1381 L179.i: ; preds = %L114.i %"unbox162.i.fca.0.insert'ipiv" = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } poison, {} addrspace(10)* %"getfield43.i'ipl", 0, !dbg !1381 %unbox162.i.fca.0.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } poison, {} addrspace(10)* %getfield43.i, 0, !dbg !1381 %"unbox162.i.fca.1.0.0.insert'ipiv" = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %"unbox162.i.fca.0.insert'ipiv", i64 %unbox8.i, 1, 0, 0, !dbg !1381 %unbox162.i.fca.1.0.0.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %unbox162.i.fca.0.insert, i64 %unbox8.i, 1, 0, 0, !dbg !1381 %"unbox162.i.fca.1.0.1.insert'ipiv" = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %"unbox162.i.fca.1.0.0.insert'ipiv", i64 %unbox7.i, 1, 0, 1, !dbg !1381 %unbox162.i.fca.1.0.1.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %unbox162.i.fca.1.0.0.insert, i64 %unbox7.i, 1, 0, 1, !dbg !1381 %unbox162.i.fca.2.load = load i64, i64* %.fca.2.gep, align 8, !dbg !1381, !alias.scope !1317, !noalias !1318 %phi.bo = add i64 %unbox162.i.fca.2.load, -1, !dbg !1381 br label %L180.i, !dbg !1381 L180.i: ; preds = %L179.i, %L147.i %81 = phi { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } [ %"'ipiv14", %L147.i ], [ %"unbox162.i.fca.1.0.1.insert'ipiv", %L179.i ] %.pn56 = phi { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } [ %80, %L147.i ], [ %unbox162.i.fca.1.0.1.insert, %L179.i ] %.pn57 = phi i64 [ -1, %L147.i ], [ %phi.bo, %L179.i ] %82 = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %.pn56, 1, !dbg !1467 %.fca.0.0.extract19 = extractvalue [1 x [2 x i64]] %82, 0, 0, !dbg !1467 %.fca.0.1.extract20 = extractvalue [1 x [2 x i64]] %82, 0, 1, !dbg !1467 %83 = sub i64 1, %.fca.0.0.extract19, !dbg !1471 %84 = add i64 %83, %.fca.0.1.extract20, !dbg !1475 %85 = call i64 @llvm.smax.i64(i64 %84, i64 noundef 0) #39, !dbg !1476 %86 = icmp eq i64 %85, 1, !dbg !1481 %.not58 = icmp ugt i64 %30, 9223372036854775806, !dbg !1485 br i1 %.not58, label %julia_loss_1448_inner.exit, label %L212.i.preheader, !dbg !1491 L212.i.preheader: ; preds = %L180.i %.not59 = icmp eq i64 %.sroa.042.0, 0 %87 = addrspacecast {} addrspace(10)* %unbox148.i.fca.0.load.pn to {} addrspace(10)* addrspace(11)* %arraysize_ptr90.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %87, i64 3 %88 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr90.i to i64 addrspace(11)* %89 = add i64 %unbox148.i.fca.1.1.0.load.pn, -1 %90 = add i64 %unbox148.i.fca.1.0.0.load.pn, -1 %"'ipc16" = addrspacecast {} addrspace(10)* %62 to double addrspace(13)* addrspace(11)* %91 = addrspacecast {} addrspace(10)* %unbox148.i.fca.0.load.pn to double addrspace(13)* addrspace(11)* %92 = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %.pn56, 0 %"'ipev" = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %81, 0 %"'ipc15" = addrspacecast {} addrspace(10)* %"'ipev" to double addrspace(13)* addrspace(11)* %93 = addrspacecast {} addrspace(10)* %92 to double addrspace(13)* addrspace(11)* %"'ipc13" = addrspacecast {} addrspace(10)* %44 to double addrspace(13)* addrspace(11)* %94 = addrspacecast {} addrspace(10)* %51 to double addrspace(13)* addrspace(11)* %95 = add nsw i64 %.sroa.042.0, -1, !dbg !1492 %xtraiter = and i64 %.sroa.042.0, 3 %96 = icmp ult i64 %95, 3 %unroll_iter = and i64 %.sroa.042.0, 9223372036854775804 %lcmp.mod.not = icmp eq i64 %xtraiter, 0 %97 = add nsw i64 %32, -1, !dbg !1492 %98 = add nuw nsw i64 %32, 1, !dbg !1492 %smax = call i64 @llvm.smax.i64(i64 %98, i64 2), !dbg !1492 %99 = add nsw i64 %smax, -2, !dbg !1492 %umin = call i64 @llvm.umin.i64(i64 %97, i64 %99), !dbg !1492 %100 = add nsw i64 %unroll_iter, -4, !dbg !1492 %101 = lshr i64 %100, 2, !dbg !1492 %102 = add nsw i64 %xtraiter, -1, !dbg !1492 %103 = add nuw i64 %umin, 1, !dbg !1492 %104 = mul nuw i64 %103, 1, !dbg !1492 %_malloccache = call noalias nonnull i8* @malloc(i64 %104), !dbg !1492, !enzyme_cache_alloc !1493 store i8* %_malloccache, i8** %_cache106, align 1, !dbg !1492, !invariant.group !1495 br label %L212.i, !dbg !1492 L212.i: ; preds = %L373.i, %L212.i.preheader %iv = phi i64 [ %iv.next, %L373.i ], [ 0, %L212.i.preheader ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !1492 %105 = load i8*, i8** %_cache106, align 8, !dbg !1492, !dereferenceable !1496, !invariant.group !1495 %106 = getelementptr inbounds i8, i8* %105, i64 %iv, !dbg !1492 store i8 2, i8* %106, align 1, !dbg !1492, !invariant.group !1497 br i1 %.not59, label %L373.i, label %L221.i.lr.ph, !dbg !1492 L221.i.lr.ph: ; preds = %L212.i %value_phi67.i.op = add nsw i64 %iv.next, -1 %107 = select i1 %69, i64 0, i64 %value_phi67.i.op %arraysize91.i = load i64, i64 addrspace(11)* %88, align 8, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !1498, !noalias !1501, !invariant.group !1503 %108 = add i64 %89, %107 %109 = mul i64 %arraysize91.i, %108 %"arrayptr93.i61'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc16", align 8, !tbaa !28, !alias.scope !1504, !noalias !1505, !nonnull !23, !invariant.group !1506 %arrayptr93.i61 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %91, align 8, !tbaa !28, !invariant.load !23, !alias.scope !1507, !noalias !1501, !nonnull !23 %"arrayptr100.i62'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc15", align 8, !tbaa !273, !alias.scope !1508, !noalias !1511, !nonnull !23, !invariant.group !1513 %arrayptr100.i62 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %93, align 8, !tbaa !273, !alias.scope !1514, !noalias !1515, !nonnull !23 %110 = mul i64 %value_phi67.i.op, %.sroa.042.0 %"arrayptr106.i63'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc13", align 8, !tbaa !28, !alias.scope !1516, !noalias !1517, !nonnull !23, !invariant.group !1518 %arrayptr106.i63 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %94, align 8, !tbaa !28, !invariant.load !23, !alias.scope !1519, !noalias !1347, !nonnull !23 br i1 %96, label %L218.i.L373.i.loopexit_crit_edge.unr-lcssa, label %L221.i.lr.ph.new, !dbg !1520 L221.i.lr.ph.new: ; preds = %L221.i.lr.ph %111 = add i64 %109, %90 br label %L221.i, !dbg !1520 L221.i: ; preds = %L221.i, %L221.i.lr.ph.new %iv1 = phi i64 [ %iv.next2, %L221.i ], [ 0, %L221.i.lr.ph.new ] %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !1521 %112 = shl nuw nsw i64 %iv1, 2, !dbg !1521 %113 = or i64 %112, 1, !dbg !1521 %114 = select i1 %70, i64 0, i64 %112, !dbg !1524 %115 = add i64 %111, %114, !dbg !1536 %"'ipg62" = getelementptr inbounds double, double addrspace(13)* %"arrayptr93.i61'ipl", i64 %115, !dbg !1536 %116 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %115, !dbg !1536 %arrayref.i = load double, double addrspace(13)* %116, align 8, !dbg !1536, !tbaa !67, !alias.scope !1537, !noalias !1540 %117 = select i1 %86, i64 1, i64 %113, !dbg !1542 %118 = add i64 %117, %.pn57, !dbg !1547 %"'ipg59" = getelementptr inbounds double, double addrspace(13)* %"arrayptr100.i62'ipl", i64 %118, !dbg !1547 %119 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %118, !dbg !1547 %arrayref101.i = load double, double addrspace(13)* %119, align 8, !dbg !1547, !tbaa !67, !alias.scope !1551, !noalias !1554 %120 = fadd double %arrayref.i, %arrayref101.i, !dbg !1556 %121 = add i64 %112, %110, !dbg !1559 %"'ipg56" = getelementptr inbounds double, double addrspace(13)* %"arrayptr106.i63'ipl", i64 %121, !dbg !1559 %122 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %121, !dbg !1559 store double %120, double addrspace(13)* %122, align 8, !dbg !1559, !tbaa !67, !alias.scope !1561, !noalias !1564 %123 = or i64 %112, 2, !dbg !1521 %124 = select i1 %70, i64 0, i64 %113, !dbg !1524 %125 = add i64 %111, %124, !dbg !1536 %"'ipg53" = getelementptr inbounds double, double addrspace(13)* %"arrayptr93.i61'ipl", i64 %125, !dbg !1536 %126 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %125, !dbg !1536 %arrayref.i.1 = load double, double addrspace(13)* %126, align 8, !dbg !1536, !tbaa !67, !alias.scope !1537, !noalias !1540 %127 = select i1 %86, i64 1, i64 %123, !dbg !1542 %128 = add i64 %127, %.pn57, !dbg !1547 %"'ipg50" = getelementptr inbounds double, double addrspace(13)* %"arrayptr100.i62'ipl", i64 %128, !dbg !1547 %129 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %128, !dbg !1547 %arrayref101.i.1 = load double, double addrspace(13)* %129, align 8, !dbg !1547, !tbaa !67, !alias.scope !1551, !noalias !1554 %130 = fadd double %arrayref.i.1, %arrayref101.i.1, !dbg !1556 %131 = add i64 %113, %110, !dbg !1559 %"'ipg46" = getelementptr inbounds double, double addrspace(13)* %"arrayptr106.i63'ipl", i64 %131, !dbg !1559 %132 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %131, !dbg !1559 store double %130, double addrspace(13)* %132, align 8, !dbg !1559, !tbaa !67, !alias.scope !1561, !noalias !1564 %133 = or i64 %112, 3, !dbg !1521 %134 = select i1 %70, i64 0, i64 %123, !dbg !1524 %135 = add i64 %111, %134, !dbg !1536 %"'ipg43" = getelementptr inbounds double, double addrspace(13)* %"arrayptr93.i61'ipl", i64 %135, !dbg !1536 %136 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %135, !dbg !1536 %arrayref.i.2 = load double, double addrspace(13)* %136, align 8, !dbg !1536, !tbaa !67, !alias.scope !1537, !noalias !1540 %137 = select i1 %86, i64 1, i64 %133, !dbg !1542 %138 = add i64 %137, %.pn57, !dbg !1547 %"'ipg40" = getelementptr inbounds double, double addrspace(13)* %"arrayptr100.i62'ipl", i64 %138, !dbg !1547 %139 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %138, !dbg !1547 %arrayref101.i.2 = load double, double addrspace(13)* %139, align 8, !dbg !1547, !tbaa !67, !alias.scope !1551, !noalias !1554 %140 = fadd double %arrayref.i.2, %arrayref101.i.2, !dbg !1556 %141 = add i64 %123, %110, !dbg !1559 %"'ipg36" = getelementptr inbounds double, double addrspace(13)* %"arrayptr106.i63'ipl", i64 %141, !dbg !1559 %142 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %141, !dbg !1559 store double %140, double addrspace(13)* %142, align 8, !dbg !1559, !tbaa !67, !alias.scope !1561, !noalias !1564 %143 = add nuw nsw i64 %112, 4, !dbg !1521 %144 = select i1 %70, i64 0, i64 %133, !dbg !1524 %145 = add i64 %111, %144, !dbg !1536 %"'ipg25" = getelementptr inbounds double, double addrspace(13)* %"arrayptr93.i61'ipl", i64 %145, !dbg !1536 %146 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %145, !dbg !1536 %arrayref.i.3 = load double, double addrspace(13)* %146, align 8, !dbg !1536, !tbaa !67, !alias.scope !1537, !noalias !1540 %147 = select i1 %86, i64 1, i64 %143, !dbg !1542 %148 = add i64 %147, %.pn57, !dbg !1547 %"'ipg21" = getelementptr inbounds double, double addrspace(13)* %"arrayptr100.i62'ipl", i64 %148, !dbg !1547 %149 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %148, !dbg !1547 %arrayref101.i.3 = load double, double addrspace(13)* %149, align 8, !dbg !1547, !tbaa !67, !alias.scope !1551, !noalias !1554 %150 = fadd double %arrayref.i.3, %arrayref101.i.3, !dbg !1556 %151 = add i64 %133, %110, !dbg !1559 %"'ipg" = getelementptr inbounds double, double addrspace(13)* %"arrayptr106.i63'ipl", i64 %151, !dbg !1559 %152 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %151, !dbg !1559 store double %150, double addrspace(13)* %152, align 8, !dbg !1559, !tbaa !67, !alias.scope !1561, !noalias !1564 %niter.ncmp.3.not = icmp eq i64 %143, %unroll_iter, !dbg !1520 br i1 %niter.ncmp.3.not, label %L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit, label %L221.i, !dbg !1520, !llvm.loop !1566 L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %L221.i br label %L218.i.L373.i.loopexit_crit_edge.unr-lcssa, !dbg !1520 L218.i.L373.i.loopexit_crit_edge.unr-lcssa: ; preds = %L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit, %L221.i.lr.ph %value_phi70.i67.unr = phi i64 [ 0, %L221.i.lr.ph ], [ %unroll_iter, %L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit ] %153 = load i8*, i8** %_cache106, align 8, !dbg !1520, !dereferenceable !1496, !invariant.group !1495 %154 = getelementptr inbounds i8, i8* %153, i64 %iv, !dbg !1520 store i8 0, i8* %154, align 1, !dbg !1520, !invariant.group !1497 br i1 %lcmp.mod.not, label %L373.i, label %L221.i.epil.preheader, !dbg !1520 L221.i.epil.preheader: ; preds = %L218.i.L373.i.loopexit_crit_edge.unr-lcssa %155 = add i64 %109, %90 br label %L221.i.epil, !dbg !1520 L221.i.epil: ; preds = %L221.i.epil, %L221.i.epil.preheader %iv3 = phi i64 [ %iv.next4, %L221.i.epil ], [ 0, %L221.i.epil.preheader ] %iv.next4 = add nuw nsw i64 %iv3, 1, !dbg !1521 %156 = add nuw nsw i64 %value_phi70.i67.unr, %iv3, !dbg !1521 %157 = add nuw nsw i64 %156, 1, !dbg !1521 %158 = select i1 %70, i64 0, i64 %156, !dbg !1524 %159 = add i64 %155, %158, !dbg !1536 %"'ipg89" = getelementptr inbounds double, double addrspace(13)* %"arrayptr93.i61'ipl", i64 %159, !dbg !1536 %160 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %159, !dbg !1536 %arrayref.i.epil = load double, double addrspace(13)* %160, align 8, !dbg !1536, !tbaa !67, !alias.scope !1537, !noalias !1540 %161 = select i1 %86, i64 1, i64 %157, !dbg !1542 %162 = add i64 %161, %.pn57, !dbg !1547 %"'ipg82" = getelementptr inbounds double, double addrspace(13)* %"arrayptr100.i62'ipl", i64 %162, !dbg !1547 %163 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %162, !dbg !1547 %arrayref101.i.epil = load double, double addrspace(13)* %163, align 8, !dbg !1547, !tbaa !67, !alias.scope !1551, !noalias !1554 %164 = fadd double %arrayref.i.epil, %arrayref101.i.epil, !dbg !1556 %165 = add i64 %156, %110, !dbg !1559 %"'ipg69" = getelementptr inbounds double, double addrspace(13)* %"arrayptr106.i63'ipl", i64 %165, !dbg !1559 %166 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %165, !dbg !1559 store double %164, double addrspace(13)* %166, align 8, !dbg !1559, !tbaa !67, !alias.scope !1561, !noalias !1564 %epil.iter.cmp.not = icmp eq i64 %iv.next4, %xtraiter, !dbg !1520 br i1 %epil.iter.cmp.not, label %L373.i.loopexit, label %L221.i.epil, !dbg !1520, !llvm.loop !1567 L373.i.loopexit: ; preds = %L221.i.epil %167 = load i8*, i8** %_cache106, align 8, !dbg !1568, !dereferenceable !1496, !invariant.group !1495 %168 = getelementptr inbounds i8, i8* %167, i64 %iv, !dbg !1568 store i8 1, i8* %168, align 1, !dbg !1568, !invariant.group !1497 br label %L373.i, !dbg !1568 L373.i: ; preds = %L373.i.loopexit, %L218.i.L373.i.loopexit_crit_edge.unr-lcssa, %L212.i %169 = add nuw i64 %iv.next, 1, !dbg !1568 %170 = icmp ult i64 %iv.next, 9223372036854775807, !dbg !1572 %171 = icmp sle i64 %169, %32, !dbg !1572 %172 = icmp ne i64 %iv.next, %32, !dbg !1576 %not. = and i1 %170, %171, !dbg !1576 %narrow = and i1 %172, %not., !dbg !1576 br i1 %narrow, label %L212.i, label %julia_loss_1448_inner.exit.loopexit, !dbg !1577 L395.i: ; preds = %L47.i %173 = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct126.i, i64 0, i64 0, i64 0, !dbg !1578 store i64 %arraysize.i, i64* %173, align 8, !dbg !1578, !tbaa !357, !alias.scope !359, !noalias !1331 %174 = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct126.i, i64 0, i64 1, i64 0, !dbg !1578 store i64 %arraysize24.i, i64* %174, align 8, !dbg !1578, !tbaa !357, !alias.scope !359, !noalias !1331 %175 = addrspacecast [2 x [1 x i64]]* %newstruct126.i to [2 x [1 x i64]] addrspace(11)*, !dbg !1354 %176 = addrspacecast [2 x [1 x i64]]* %newstruct16.i to [2 x [1 x i64]] addrspace(11)*, !dbg !1354 call fastcc void @julia_throwdm_1459([2 x [1 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %175, [2 x [1 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %176) #43, !dbg !1354 unreachable julia_loss_1448_inner.exit.loopexit: ; preds = %L373.i br label %julia_loss_1448_inner.exit, !dbg !1582 julia_loss_1448_inner.exit: ; preds = %julia_loss_1448_inner.exit.loopexit, %L180.i br label %invertjulia_loss_1448_inner.exit, !dbg !1263 invertentry: ; preds = %invertL47.i, %invertL35.i fence syncscope("singlethread") seq_cst fence syncscope("singlethread") seq_cst ret void invertL35.i: ; preds = %invertL47.i br label %invertentry invertL47.i: ; preds = %invertL102.i br i1 %value_phi.i, label %invertentry, label %invertL35.i invertL102.i: ; preds = %invertL114.i, %invertL111.i br label %invertL47.i invertL111.i: ; preds = %invertL114.i %177 = load { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %_augmented_cache, align 8, !dbg !1380, !invariant.group !1388 call fastcc void @diffejulia_unaliascopy_1490({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" undef, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipa10", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" undef, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %21, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc", { { {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, i64*, i64*, i64 }, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* } %177), !dbg !1380 br label %invertL102.i invertL114.i: ; preds = %invertL179.i, %invertL147.i br i1 %.not52, label %invertL111.i, label %invertL102.i invertL147.i: ; preds = %invertL180.i %178 = load {} addrspace(10)*, {} addrspace(10)** %_cache, align 8, !dbg !1452, !invariant.group !1453 %179 = load {} addrspace(10)*, {} addrspace(10)** %"'mi5_cache", align 8, !dbg !1452, !invariant.group !1454 %180 = load { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }, { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* }* %_augmented12_cache, align 8, !dbg !1452, !invariant.group !1465 call fastcc void @diffejulia_copyto__1477({} addrspace(10)* align 16 %178, {} addrspace(10)* align 16 %179, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree readonly align 8 %23, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree align 8 %"'ipc11", { {} addrspace(10)*, {} addrspace(10)*, i64, {} addrspace(10)* } %180), !dbg !1452 br label %invertL114.i invertL179.i: ; preds = %invertL180.i br label %invertL114.i invertL180.i: ; preds = %invertjulia_loss_1448_inner.exit, %invertL212.i.preheader call void inttoptr (i64 140146592647120 to void (i8*)*)(i8* getelementptr inbounds ([101964 x i8], [101964 x i8]* @0, i32 0, i32 0)) #45 br i1 %.not53, label %invertL147.i, label %invertL179.i invertL212.i.preheader: ; preds = %invertL212.i %181 = load i64, i64* %"iv'ac", align 8 %forfree = load i8*, i8** %_cache106, align 8, !dereferenceable !1591, !invariant.group !1495 call void @free(i8* nonnull %forfree), !dbg !1263, !enzyme_cache_free !1493 br label %invertL180.i invertL212.i: ; preds = %invertL373.i, %invertL221.i.lr.ph %182 = load i64, i64* %"iv'ac", align 8 %183 = icmp eq i64 %182, 0 %184 = xor i1 %183, true br i1 %183, label %invertL212.i.preheader, label %incinvertL212.i incinvertL212.i: ; preds = %invertL212.i %185 = load i64, i64* %"iv'ac", align 8 %186 = add nsw i64 %185, -1 store i64 %186, i64* %"iv'ac", align 8 br label %invertL373.i invertL221.i.lr.ph: ; preds = %invertL218.i.L373.i.loopexit_crit_edge.unr-lcssa, %invertL221.i.lr.ph.new br label %invertL212.i invertL221.i.lr.ph.new: ; preds = %invertL221.i br label %invertL221.i.lr.ph invertL221.i: ; preds = %mergeinvertL221.i_L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit, %incinvertL221.i %187 = load i64, i64* %"iv1'ac", align 8, !dbg !1559 %188 = load i64, i64* %"iv'ac", align 8, !dbg !1559 %"'ipc13_unwrap" = addrspacecast {} addrspace(10)* %44 to double addrspace(13)* addrspace(11)*, !dbg !1559 %"arrayptr106.i63'ipl_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc13_unwrap", align 8, !tbaa !28, !alias.scope !1516, !noalias !1517, !nonnull !23, !invariant.group !1518 %_unwrap = shl nuw nsw i64 %187, 2, !dbg !1559 %_unwrap17 = or i64 %_unwrap, 3, !dbg !1559 %iv.next_unwrap = add nuw nsw i64 %188, 1, !dbg !1559 %value_phi67.i.op_unwrap = add nsw i64 %iv.next_unwrap, -1, !dbg !1559 %_unwrap18 = mul i64 %value_phi67.i.op_unwrap, %.sroa.042.0, !dbg !1559 %_unwrap19 = add i64 %_unwrap17, %_unwrap18, !dbg !1559 %"'ipg_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr106.i63'ipl_unwrap", i64 %_unwrap19, !dbg !1559 %189 = load double, double addrspace(13)* %"'ipg_unwrap", align 8, !dbg !1559, !tbaa !67, !alias.scope !1592, !noalias !1593 store double 0.000000e+00, double addrspace(13)* %"'ipg_unwrap", align 8, !dbg !1559, !tbaa !67, !alias.scope !1592, !noalias !1593 %190 = load double, double* %"'de20", align 8, !dbg !1559 %191 = fadd fast double %190, %189, !dbg !1559 store double %191, double* %"'de20", align 8, !dbg !1559 %192 = load double, double* %"'de20", align 8, !dbg !1556 store double 0.000000e+00, double* %"'de20", align 8, !dbg !1556 %193 = load double, double* %"arrayref.i.3'de", align 8, !dbg !1556 %194 = fadd fast double %193, %192, !dbg !1556 store double %194, double* %"arrayref.i.3'de", align 8, !dbg !1556 %195 = load double, double* %"arrayref101.i.3'de", align 8, !dbg !1556 %196 = fadd fast double %195, %192, !dbg !1556 store double %196, double* %"arrayref101.i.3'de", align 8, !dbg !1556 %197 = load double, double* %"arrayref101.i.3'de", align 8, !dbg !1547 store double 0.000000e+00, double* %"arrayref101.i.3'de", align 8, !dbg !1547 %198 = load i64, i64* %"iv1'ac", align 8, !dbg !1547 %199 = load i64, i64* %"iv'ac", align 8, !dbg !1547 %"'ipev_unwrap" = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %81, 0, !dbg !1547 %"'ipc15_unwrap" = addrspacecast {} addrspace(10)* %"'ipev_unwrap" to double addrspace(13)* addrspace(11)*, !dbg !1547 %"arrayptr100.i62'ipl_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc15_unwrap", align 8, !tbaa !273, !alias.scope !1508, !noalias !1511, !nonnull !23, !invariant.group !1513 %_unwrap22 = add nuw nsw i64 %_unwrap, 4, !dbg !1547 %_unwrap23 = select i1 %86, i64 1, i64 %_unwrap22, !dbg !1547 %_unwrap24 = add i64 %_unwrap23, %.pn57, !dbg !1547 %"'ipg21_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr100.i62'ipl_unwrap", i64 %_unwrap24, !dbg !1547 %200 = atomicrmw fadd double addrspace(13)* %"'ipg21_unwrap", double %197 monotonic, align 8, !dbg !1547 %201 = load double, double* %"arrayref.i.3'de", align 8, !dbg !1536 store double 0.000000e+00, double* %"arrayref.i.3'de", align 8, !dbg !1536 %202 = load i64, i64* %"iv1'ac", align 8, !dbg !1536 %203 = load i64, i64* %"iv'ac", align 8, !dbg !1536 %"'ipc16_unwrap" = addrspacecast {} addrspace(10)* %62 to double addrspace(13)* addrspace(11)*, !dbg !1536 %"arrayptr93.i61'ipl_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc16_unwrap", align 8, !tbaa !28, !alias.scope !1504, !noalias !1505, !nonnull !23, !invariant.group !1506 %_unwrap26 = addrspacecast {} addrspace(10)* %unbox148.i.fca.0.load.pn to {} addrspace(10)* addrspace(11)*, !dbg !1536 %arraysize_ptr90.i_unwrap = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %_unwrap26, i64 3, !dbg !1536 %_unwrap27 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr90.i_unwrap to i64 addrspace(11)*, !dbg !1536 %arraysize91.i_unwrap = load i64, i64 addrspace(11)* %_unwrap27, align 8, !tbaa !28, !range !41, !alias.scope !1498, !noalias !1501, !invariant.group !1503 %_unwrap28 = add i64 %unbox148.i.fca.1.1.0.load.pn, -1, !dbg !1536 %_unwrap29 = select i1 %69, i64 0, i64 %value_phi67.i.op_unwrap, !dbg !1536 %_unwrap30 = add i64 %_unwrap28, %_unwrap29, !dbg !1536 %_unwrap31 = mul i64 %arraysize91.i_unwrap, %_unwrap30, !dbg !1536 %_unwrap32 = add i64 %unbox148.i.fca.1.0.0.load.pn, -1, !dbg !1536 %_unwrap33 = add i64 %_unwrap31, %_unwrap32, !dbg !1536 %_unwrap34 = select i1 %70, i64 0, i64 %_unwrap17, !dbg !1536 %_unwrap35 = add i64 %_unwrap33, %_unwrap34, !dbg !1536 %"'ipg25_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr93.i61'ipl_unwrap", i64 %_unwrap35, !dbg !1536 %204 = atomicrmw fadd double addrspace(13)* %"'ipg25_unwrap", double %201 monotonic, align 8, !dbg !1536 %205 = load i64, i64* %"iv1'ac", align 8, !dbg !1559 %206 = load i64, i64* %"iv'ac", align 8, !dbg !1559 %_unwrap37 = or i64 %_unwrap, 2, !dbg !1559 %_unwrap38 = add i64 %_unwrap37, %_unwrap18, !dbg !1559 %"'ipg36_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr106.i63'ipl_unwrap", i64 %_unwrap38, !dbg !1559 %207 = load double, double addrspace(13)* %"'ipg36_unwrap", align 8, !dbg !1559, !tbaa !67, !alias.scope !1592, !noalias !1593 store double 0.000000e+00, double addrspace(13)* %"'ipg36_unwrap", align 8, !dbg !1559, !tbaa !67, !alias.scope !1592, !noalias !1593 %208 = load double, double* %"'de39", align 8, !dbg !1559 %209 = fadd fast double %208, %207, !dbg !1559 store double %209, double* %"'de39", align 8, !dbg !1559 %210 = load double, double* %"'de39", align 8, !dbg !1556 store double 0.000000e+00, double* %"'de39", align 8, !dbg !1556 %211 = load double, double* %"arrayref.i.2'de", align 8, !dbg !1556 %212 = fadd fast double %211, %210, !dbg !1556 store double %212, double* %"arrayref.i.2'de", align 8, !dbg !1556 %213 = load double, double* %"arrayref101.i.2'de", align 8, !dbg !1556 %214 = fadd fast double %213, %210, !dbg !1556 store double %214, double* %"arrayref101.i.2'de", align 8, !dbg !1556 %215 = load double, double* %"arrayref101.i.2'de", align 8, !dbg !1547 store double 0.000000e+00, double* %"arrayref101.i.2'de", align 8, !dbg !1547 %216 = load i64, i64* %"iv1'ac", align 8, !dbg !1547 %217 = load i64, i64* %"iv'ac", align 8, !dbg !1547 %_unwrap41 = select i1 %86, i64 1, i64 %_unwrap17, !dbg !1547 %_unwrap42 = add i64 %_unwrap41, %.pn57, !dbg !1547 %"'ipg40_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr100.i62'ipl_unwrap", i64 %_unwrap42, !dbg !1547 %218 = atomicrmw fadd double addrspace(13)* %"'ipg40_unwrap", double %215 monotonic, align 8, !dbg !1547 %219 = load double, double* %"arrayref.i.2'de", align 8, !dbg !1536 store double 0.000000e+00, double* %"arrayref.i.2'de", align 8, !dbg !1536 %220 = load i64, i64* %"iv1'ac", align 8, !dbg !1536 %221 = load i64, i64* %"iv'ac", align 8, !dbg !1536 %_unwrap44 = select i1 %70, i64 0, i64 %_unwrap37, !dbg !1536 %_unwrap45 = add i64 %_unwrap33, %_unwrap44, !dbg !1536 %"'ipg43_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr93.i61'ipl_unwrap", i64 %_unwrap45, !dbg !1536 %222 = atomicrmw fadd double addrspace(13)* %"'ipg43_unwrap", double %219 monotonic, align 8, !dbg !1536 %223 = load i64, i64* %"iv1'ac", align 8, !dbg !1559 %224 = load i64, i64* %"iv'ac", align 8, !dbg !1559 %_unwrap47 = or i64 %_unwrap, 1, !dbg !1559 %_unwrap48 = add i64 %_unwrap47, %_unwrap18, !dbg !1559 %"'ipg46_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr106.i63'ipl_unwrap", i64 %_unwrap48, !dbg !1559 %225 = load double, double addrspace(13)* %"'ipg46_unwrap", align 8, !dbg !1559, !tbaa !67, !alias.scope !1592, !noalias !1593 store double 0.000000e+00, double addrspace(13)* %"'ipg46_unwrap", align 8, !dbg !1559, !tbaa !67, !alias.scope !1592, !noalias !1593 %226 = load double, double* %"'de49", align 8, !dbg !1559 %227 = fadd fast double %226, %225, !dbg !1559 store double %227, double* %"'de49", align 8, !dbg !1559 %228 = load double, double* %"'de49", align 8, !dbg !1556 store double 0.000000e+00, double* %"'de49", align 8, !dbg !1556 %229 = load double, double* %"arrayref.i.1'de", align 8, !dbg !1556 %230 = fadd fast double %229, %228, !dbg !1556 store double %230, double* %"arrayref.i.1'de", align 8, !dbg !1556 %231 = load double, double* %"arrayref101.i.1'de", align 8, !dbg !1556 %232 = fadd fast double %231, %228, !dbg !1556 store double %232, double* %"arrayref101.i.1'de", align 8, !dbg !1556 %233 = load double, double* %"arrayref101.i.1'de", align 8, !dbg !1547 store double 0.000000e+00, double* %"arrayref101.i.1'de", align 8, !dbg !1547 %234 = load i64, i64* %"iv1'ac", align 8, !dbg !1547 %235 = load i64, i64* %"iv'ac", align 8, !dbg !1547 %_unwrap51 = select i1 %86, i64 1, i64 %_unwrap37, !dbg !1547 %_unwrap52 = add i64 %_unwrap51, %.pn57, !dbg !1547 %"'ipg50_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr100.i62'ipl_unwrap", i64 %_unwrap52, !dbg !1547 %236 = atomicrmw fadd double addrspace(13)* %"'ipg50_unwrap", double %233 monotonic, align 8, !dbg !1547 %237 = load double, double* %"arrayref.i.1'de", align 8, !dbg !1536 store double 0.000000e+00, double* %"arrayref.i.1'de", align 8, !dbg !1536 %238 = load i64, i64* %"iv1'ac", align 8, !dbg !1536 %239 = load i64, i64* %"iv'ac", align 8, !dbg !1536 %_unwrap54 = select i1 %70, i64 0, i64 %_unwrap47, !dbg !1536 %_unwrap55 = add i64 %_unwrap33, %_unwrap54, !dbg !1536 %"'ipg53_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr93.i61'ipl_unwrap", i64 %_unwrap55, !dbg !1536 %240 = atomicrmw fadd double addrspace(13)* %"'ipg53_unwrap", double %237 monotonic, align 8, !dbg !1536 %241 = load i64, i64* %"iv1'ac", align 8, !dbg !1559 %242 = load i64, i64* %"iv'ac", align 8, !dbg !1559 %_unwrap57 = add i64 %_unwrap, %_unwrap18, !dbg !1559 %"'ipg56_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr106.i63'ipl_unwrap", i64 %_unwrap57, !dbg !1559 %243 = load double, double addrspace(13)* %"'ipg56_unwrap", align 8, !dbg !1559, !tbaa !67, !alias.scope !1592, !noalias !1593 store double 0.000000e+00, double addrspace(13)* %"'ipg56_unwrap", align 8, !dbg !1559, !tbaa !67, !alias.scope !1592, !noalias !1593 %244 = load double, double* %"'de58", align 8, !dbg !1559 %245 = fadd fast double %244, %243, !dbg !1559 store double %245, double* %"'de58", align 8, !dbg !1559 %246 = load double, double* %"'de58", align 8, !dbg !1556 store double 0.000000e+00, double* %"'de58", align 8, !dbg !1556 %247 = load double, double* %"arrayref.i'de", align 8, !dbg !1556 %248 = fadd fast double %247, %246, !dbg !1556 store double %248, double* %"arrayref.i'de", align 8, !dbg !1556 %249 = load double, double* %"arrayref101.i'de", align 8, !dbg !1556 %250 = fadd fast double %249, %246, !dbg !1556 store double %250, double* %"arrayref101.i'de", align 8, !dbg !1556 %251 = load double, double* %"arrayref101.i'de", align 8, !dbg !1547 store double 0.000000e+00, double* %"arrayref101.i'de", align 8, !dbg !1547 %252 = load i64, i64* %"iv1'ac", align 8, !dbg !1547 %253 = load i64, i64* %"iv'ac", align 8, !dbg !1547 %_unwrap60 = select i1 %86, i64 1, i64 %_unwrap47, !dbg !1547 %_unwrap61 = add i64 %_unwrap60, %.pn57, !dbg !1547 %"'ipg59_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr100.i62'ipl_unwrap", i64 %_unwrap61, !dbg !1547 %254 = atomicrmw fadd double addrspace(13)* %"'ipg59_unwrap", double %251 monotonic, align 8, !dbg !1547 %255 = load double, double* %"arrayref.i'de", align 8, !dbg !1536 store double 0.000000e+00, double* %"arrayref.i'de", align 8, !dbg !1536 %256 = load i64, i64* %"iv1'ac", align 8, !dbg !1536 %257 = load i64, i64* %"iv'ac", align 8, !dbg !1536 %_unwrap63 = select i1 %70, i64 0, i64 %_unwrap, !dbg !1536 %_unwrap64 = add i64 %_unwrap33, %_unwrap63, !dbg !1536 %"'ipg62_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr93.i61'ipl_unwrap", i64 %_unwrap64, !dbg !1536 %258 = atomicrmw fadd double addrspace(13)* %"'ipg62_unwrap", double %255 monotonic, align 8, !dbg !1536 %259 = load i64, i64* %"iv1'ac", align 8 %260 = icmp eq i64 %259, 0 %261 = xor i1 %260, true br i1 %260, label %invertL221.i.lr.ph.new, label %incinvertL221.i incinvertL221.i: ; preds = %invertL221.i %262 = load i64, i64* %"iv1'ac", align 8 %263 = add nsw i64 %262, -1 store i64 %263, i64* %"iv1'ac", align 8 br label %invertL221.i invertL218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %invertL218.i.L373.i.loopexit_crit_edge.unr-lcssa %264 = load i64, i64* %"iv'ac", align 8 %unroll_iter_unwrap = and i64 %.sroa.042.0, 9223372036854775804 %_unwrap65 = add nsw i64 %unroll_iter_unwrap, -4 %_unwrap66 = lshr i64 %_unwrap65, 2 br label %mergeinvertL221.i_L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit mergeinvertL221.i_L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %invertL218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit store i64 %_unwrap66, i64* %"iv1'ac", align 8 br label %invertL221.i invertL218.i.L373.i.loopexit_crit_edge.unr-lcssa: ; preds = %invertL373.i, %invertL221.i.epil.preheader %265 = load i64, i64* %"iv'ac", align 8 %_unwrap67 = add nsw i64 %.sroa.042.0, -1 %_unwrap68 = icmp ult i64 %_unwrap67, 3 br i1 %_unwrap68, label %invertL221.i.lr.ph, label %invertL218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit invertL221.i.epil.preheader: ; preds = %invertL221.i.epil br label %invertL218.i.L373.i.loopexit_crit_edge.unr-lcssa invertL221.i.epil: ; preds = %mergeinvertL221.i.epil_L373.i.loopexit, %incinvertL221.i.epil %266 = load i64, i64* %"iv3'ac", align 8, !dbg !1559 %267 = load i64, i64* %"iv'ac", align 8, !dbg !1559 %"'ipc13_unwrap70" = addrspacecast {} addrspace(10)* %44 to double addrspace(13)* addrspace(11)*, !dbg !1559 %"arrayptr106.i63'ipl_unwrap71" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc13_unwrap70", align 8, !tbaa !28, !alias.scope !1516, !noalias !1517, !nonnull !23, !invariant.group !1518 %_unwrap72 = add nsw i64 %.sroa.042.0, -1, !dbg !1559 %_unwrap73 = icmp ult i64 %_unwrap72, 3, !dbg !1559 %unroll_iter_unwrap75 = and i64 %.sroa.042.0, 9223372036854775804, !dbg !1559 %value_phi70.i67.unr_unwrap = select i1 %_unwrap73, i64 0, i64 %unroll_iter_unwrap75, !dbg !1559 %_unwrap76 = add nuw nsw i64 %value_phi70.i67.unr_unwrap, %266, !dbg !1559 %iv.next_unwrap77 = add nuw nsw i64 %267, 1, !dbg !1559 %value_phi67.i.op_unwrap78 = add nsw i64 %iv.next_unwrap77, -1, !dbg !1559 %_unwrap79 = mul i64 %value_phi67.i.op_unwrap78, %.sroa.042.0, !dbg !1559 %_unwrap80 = add i64 %_unwrap76, %_unwrap79, !dbg !1559 %"'ipg69_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr106.i63'ipl_unwrap71", i64 %_unwrap80, !dbg !1559 %268 = load double, double addrspace(13)* %"'ipg69_unwrap", align 8, !dbg !1559, !tbaa !67, !alias.scope !1592, !noalias !1593 store double 0.000000e+00, double addrspace(13)* %"'ipg69_unwrap", align 8, !dbg !1559, !tbaa !67, !alias.scope !1592, !noalias !1593 %269 = load double, double* %"'de81", align 8, !dbg !1559 %270 = fadd fast double %269, %268, !dbg !1559 store double %270, double* %"'de81", align 8, !dbg !1559 %271 = load double, double* %"'de81", align 8, !dbg !1556 store double 0.000000e+00, double* %"'de81", align 8, !dbg !1556 %272 = load double, double* %"arrayref.i.epil'de", align 8, !dbg !1556 %273 = fadd fast double %272, %271, !dbg !1556 store double %273, double* %"arrayref.i.epil'de", align 8, !dbg !1556 %274 = load double, double* %"arrayref101.i.epil'de", align 8, !dbg !1556 %275 = fadd fast double %274, %271, !dbg !1556 store double %275, double* %"arrayref101.i.epil'de", align 8, !dbg !1556 %276 = load double, double* %"arrayref101.i.epil'de", align 8, !dbg !1547 store double 0.000000e+00, double* %"arrayref101.i.epil'de", align 8, !dbg !1547 %277 = load i64, i64* %"iv3'ac", align 8, !dbg !1547 %278 = load i64, i64* %"iv'ac", align 8, !dbg !1547 %"'ipev_unwrap83" = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %81, 0, !dbg !1547 %"'ipc15_unwrap84" = addrspacecast {} addrspace(10)* %"'ipev_unwrap83" to double addrspace(13)* addrspace(11)*, !dbg !1547 %"arrayptr100.i62'ipl_unwrap85" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc15_unwrap84", align 8, !tbaa !273, !alias.scope !1508, !noalias !1511, !nonnull !23, !invariant.group !1513 %_unwrap86 = add nuw nsw i64 %_unwrap76, 1, !dbg !1547 %_unwrap87 = select i1 %86, i64 1, i64 %_unwrap86, !dbg !1547 %_unwrap88 = add i64 %_unwrap87, %.pn57, !dbg !1547 %"'ipg82_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr100.i62'ipl_unwrap85", i64 %_unwrap88, !dbg !1547 %279 = atomicrmw fadd double addrspace(13)* %"'ipg82_unwrap", double %276 monotonic, align 8, !dbg !1547 %280 = load double, double* %"arrayref.i.epil'de", align 8, !dbg !1536 store double 0.000000e+00, double* %"arrayref.i.epil'de", align 8, !dbg !1536 %281 = load i64, i64* %"iv3'ac", align 8, !dbg !1536 %282 = load i64, i64* %"iv'ac", align 8, !dbg !1536 %"'ipc16_unwrap90" = addrspacecast {} addrspace(10)* %62 to double addrspace(13)* addrspace(11)*, !dbg !1536 %"arrayptr93.i61'ipl_unwrap91" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc16_unwrap90", align 8, !tbaa !28, !alias.scope !1504, !noalias !1505, !nonnull !23, !invariant.group !1506 %_unwrap92 = addrspacecast {} addrspace(10)* %unbox148.i.fca.0.load.pn to {} addrspace(10)* addrspace(11)*, !dbg !1536 %arraysize_ptr90.i_unwrap93 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %_unwrap92, i64 3, !dbg !1536 %_unwrap94 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr90.i_unwrap93 to i64 addrspace(11)*, !dbg !1536 %arraysize91.i_unwrap95 = load i64, i64 addrspace(11)* %_unwrap94, align 8, !tbaa !28, !range !41, !alias.scope !1498, !noalias !1501, !invariant.group !1503 %_unwrap96 = add i64 %unbox148.i.fca.1.1.0.load.pn, -1, !dbg !1536 %_unwrap97 = select i1 %69, i64 0, i64 %value_phi67.i.op_unwrap78, !dbg !1536 %_unwrap98 = add i64 %_unwrap96, %_unwrap97, !dbg !1536 %_unwrap99 = mul i64 %arraysize91.i_unwrap95, %_unwrap98, !dbg !1536 %_unwrap100 = add i64 %unbox148.i.fca.1.0.0.load.pn, -1, !dbg !1536 %_unwrap101 = add i64 %_unwrap99, %_unwrap100, !dbg !1536 %_unwrap102 = select i1 %70, i64 0, i64 %_unwrap76, !dbg !1536 %_unwrap103 = add i64 %_unwrap101, %_unwrap102, !dbg !1536 %"'ipg89_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr93.i61'ipl_unwrap91", i64 %_unwrap103, !dbg !1536 %283 = atomicrmw fadd double addrspace(13)* %"'ipg89_unwrap", double %280 monotonic, align 8, !dbg !1536 %284 = load i64, i64* %"iv3'ac", align 8 %285 = icmp eq i64 %284, 0 %286 = xor i1 %285, true br i1 %285, label %invertL221.i.epil.preheader, label %incinvertL221.i.epil incinvertL221.i.epil: ; preds = %invertL221.i.epil %287 = load i64, i64* %"iv3'ac", align 8 %288 = add nsw i64 %287, -1 store i64 %288, i64* %"iv3'ac", align 8 br label %invertL221.i.epil invertL373.i.loopexit: ; preds = %invertL373.i %289 = load i64, i64* %"iv'ac", align 8 %xtraiter_unwrap = and i64 %.sroa.042.0, 3 %_unwrap104 = add nsw i64 %xtraiter_unwrap, -1 br label %mergeinvertL221.i.epil_L373.i.loopexit mergeinvertL221.i.epil_L373.i.loopexit: ; preds = %invertL373.i.loopexit store i64 %_unwrap104, i64* %"iv3'ac", align 8 br label %invertL221.i.epil invertL373.i: ; preds = %mergeinvertL212.i_julia_loss_1448_inner.exit.loopexit, %incinvertL212.i %.fca.1.1.1.gep_unwrap = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %20, i64 0, i32 1, i64 1, i64 1 %unbox3.i_unwrap = load i64, i64* %.fca.1.1.1.gep_unwrap, align 8, !dbg !1307, !alias.scope !1299, !noalias !1300 %.fca.1.1.0.gep_unwrap = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %20, i64 0, i32 1, i64 1, i64 0 %unbox4.i_unwrap = load i64, i64* %.fca.1.1.0.gep_unwrap, align 8, !dbg !1307, !alias.scope !1299, !noalias !1300 %_unwrap110 = sub i64 %unbox3.i_unwrap, %unbox4.i_unwrap %_unwrap111 = add i64 %_unwrap110, 1 %290 = call i64 @llvm.smax.i64(i64 %_unwrap111, i64 noundef 0) #39, !dbg !1312 %_unwrap112 = add nsw i64 %290, -1 %_unwrap113 = add nuw nsw i64 %290, 1 %291 = call i64 @llvm.smax.i64(i64 %_unwrap113, i64 2), !dbg !1492 %_unwrap114 = add nsw i64 %291, -2 %292 = call i64 @llvm.umin.i64(i64 %_unwrap112, i64 %_unwrap114), !dbg !1492 %293 = add nuw i64 %292, 1 %294 = load i8*, i8** %_cache106, align 8, !dereferenceable !1496, !invariant.group !1495 %295 = load i64, i64* %"iv'ac", align 8 %296 = getelementptr inbounds i8, i8* %294, i64 %295 %297 = load i8, i8* %296, align 1, !invariant.group !1497 switch i8 %297, label %invertL212.i [ i8 0, label %invertL218.i.L373.i.loopexit_crit_edge.unr-lcssa i8 1, label %invertL373.i.loopexit ] invertjulia_loss_1448_inner.exit.loopexit: ; preds = %invertjulia_loss_1448_inner.exit %_unwrap116 = add nsw i64 %32, -1 %_unwrap117 = add nuw nsw i64 %32, 1 %298 = call i64 @llvm.smax.i64(i64 %_unwrap117, i64 2), !dbg !1492 %_unwrap118 = add nsw i64 %298, -2 %299 = call i64 @llvm.umin.i64(i64 %_unwrap116, i64 %_unwrap118), !dbg !1492 br label %mergeinvertL212.i_julia_loss_1448_inner.exit.loopexit mergeinvertL212.i_julia_loss_1448_inner.exit.loopexit: ; preds = %invertjulia_loss_1448_inner.exit.loopexit store i64 %299, i64* %"iv'ac", align 8 br label %invertL373.i invertjulia_loss_1448_inner.exit: ; preds = %julia_loss_1448_inner.exit store double %differeturn, double* %"'de", align 8 %300 = load double, double* %"'de", align 8, !dbg !1582 call fastcc void @diffejulia__mapreduce_1461({} addrspace(10)* nocapture nofree readonly align 16 %51, {} addrspace(10)* nocapture nofree align 16 %44, double %300), !dbg !1582 store double 0.000000e+00, double* %"'de", align 8, !dbg !1582 br i1 %.not58, label %invertL180.i, label %invertjulia_loss_1448_inner.exit.loopexit } ERROR: LoadError: Enzyme execution failed. Enzyme cannot deduce type Current scope: ; Function Attrs: mustprogress willreturn define double @preprocess_julia_loss_1448_inner.1({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1) local_unnamed_addr #25 !dbg !1030 { entry: %newstruct16.i = alloca [2 x [1 x i64]], align 8 %2 = alloca { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, align 8 %3 = alloca [1 x {} addrspace(10)*], align 8 %newstruct126.i = alloca [2 x [1 x i64]], align 8 %4 = alloca { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, align 8, !dbg !1031, !enzyme_type !294 %5 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !1031 %.fca.0.extract3 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 0, !dbg !1031 %.fca.0.gep4 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 0, !dbg !1031 store {} addrspace(10)* %.fca.0.extract3, {} addrspace(10)** %.fca.0.gep4, align 8, !dbg !1031, !noalias !1032 %.fca.1.0.0.extract5 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 0, 0, !dbg !1031 %.fca.1.0.0.gep6 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 0, i64 0, !dbg !1031 store i64 %.fca.1.0.0.extract5, i64* %.fca.1.0.0.gep6, align 8, !dbg !1031, !noalias !1032 %.fca.1.0.1.extract7 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 0, 1, !dbg !1031 %.fca.1.0.1.gep8 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 0, i64 1, !dbg !1031 store i64 %.fca.1.0.1.extract7, i64* %.fca.1.0.1.gep8, align 8, !dbg !1031, !noalias !1032 %.fca.1.1.0.extract = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 1, 0, !dbg !1031 %.fca.1.1.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 1, i64 0, !dbg !1031 store i64 %.fca.1.1.0.extract, i64* %.fca.1.1.0.gep, align 8, !dbg !1031, !noalias !1032 %.fca.1.1.1.extract = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 1, 1, !dbg !1031 %.fca.1.1.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 1, i64 1, !dbg !1031 store i64 %.fca.1.1.1.extract, i64* %.fca.1.1.1.gep, align 8, !dbg !1031, !noalias !1032 %.fca.2.extract9 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 2, !dbg !1031 %.fca.2.gep10 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 2, !dbg !1031 store i64 %.fca.2.extract9, i64* %.fca.2.gep10, align 8, !dbg !1031, !noalias !1032 %.fca.3.extract11 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 3, !dbg !1031 %.fca.3.gep12 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 3, !dbg !1031 store i64 %.fca.3.extract11, i64* %.fca.3.gep12, align 8, !dbg !1031, !noalias !1032 %6 = alloca { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, align 8, !dbg !1031, !enzyme_type !300 %7 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !1031 %.fca.0.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 0, !dbg !1031 %.fca.0.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 0, !dbg !1031 store {} addrspace(10)* %.fca.0.extract, {} addrspace(10)** %.fca.0.gep, align 8, !dbg !1031, !noalias !1032 %.fca.1.0.0.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 1, 0, 0, !dbg !1031 %.fca.1.0.0.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 1, i64 0, i64 0, !dbg !1031 store i64 %.fca.1.0.0.extract, i64* %.fca.1.0.0.gep, align 8, !dbg !1031, !noalias !1032 %.fca.1.0.1.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 1, 0, 1, !dbg !1031 %.fca.1.0.1.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 1, i64 0, i64 1, !dbg !1031 store i64 %.fca.1.0.1.extract, i64* %.fca.1.0.1.gep, align 8, !dbg !1031, !noalias !1032 %.fca.2.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 2, !dbg !1031 %.fca.2.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 2, !dbg !1031 store i64 %.fca.2.extract, i64* %.fca.2.gep, align 8, !dbg !1031, !noalias !1032 %.fca.3.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 3, !dbg !1031 %.fca.3.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 3, !dbg !1031 store i64 %.fca.3.extract, i64* %.fca.3.gep, align 8, !dbg !1031, !noalias !1032 %8 = bitcast [2 x [1 x i64]]* %newstruct16.i to i8* %9 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2 to i8* call void @llvm.lifetime.start.p0i8(i64 noundef 56, i8* noundef nonnull align 8 dereferenceable(56) %9) #37 %10 = bitcast [1 x {} addrspace(10)*]* %3 to i8* call void @llvm.lifetime.start.p0i8(i64 noundef 8, i8* noundef nonnull align 8 dereferenceable(8) %10) #37 %11 = bitcast [2 x [1 x i64]]* %newstruct126.i to i8* %12 = call {}*** @julia.get_pgcstack() #37 %ptls_field.i49 = getelementptr inbounds {}**, {}*** %12, i64 2 %13 = bitcast {}*** %ptls_field.i49 to i64*** %ptls_load.i5051 = load i64**, i64*** %13, align 8, !tbaa !24 %14 = getelementptr inbounds i64*, i64** %ptls_load.i5051, i64 2 %safepoint.i = load i64*, i64** %14, align 8, !tbaa !28, !invariant.load !23 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint.i) #37, !dbg !1035 fence syncscope("singlethread") seq_cst %unbox.i = load i64, i64* %.fca.1.0.1.gep8, align 8, !dbg !1037, !alias.scope !42, !noalias !45 %unbox2.i = load i64, i64* %.fca.1.0.0.gep6, align 8, !dbg !1037, !alias.scope !42, !noalias !45 %15 = add i64 %unbox.i, 1, !dbg !1037 %16 = sub i64 %15, %unbox2.i, !dbg !1046 %17 = call i64 @llvm.smax.i64(i64 %16, i64 noundef 0) #37, !dbg !1047 %unbox3.i = load i64, i64* %.fca.1.1.1.gep, align 8, !dbg !1052, !alias.scope !42, !noalias !45 %unbox4.i = load i64, i64* %.fca.1.1.0.gep, align 8, !dbg !1052, !alias.scope !42, !noalias !45 %18 = sub i64 %unbox3.i, %unbox4.i, !dbg !1052 %19 = add i64 %18, 1, !dbg !1056 %20 = call i64 @llvm.smax.i64(i64 %19, i64 noundef 0) #37, !dbg !1057 %unbox7.i = load i64, i64* %.fca.1.0.1.gep, align 8, !dbg !1037, !alias.scope !42, !noalias !45 %unbox8.i = load i64, i64* %.fca.1.0.0.gep, align 8, !dbg !1037, !alias.scope !42, !noalias !45 %21 = sub i64 %unbox7.i, %unbox8.i, !dbg !1037 %22 = add i64 %21, 1, !dbg !1046 %23 = call i64 @llvm.smax.i64(i64 %22, i64 noundef 0) #37, !dbg !1047 %24 = icmp eq i64 %23, %17, !dbg !1062 %25 = icmp eq i64 %17, 1, !dbg !1068 %value_phi.i = or i1 %25, %24, !dbg !1068 br i1 %value_phi.i, label %L47.i, label %L35.i, !dbg !1069 L35.i: ; preds = %entry %.not64 = icmp eq i64 %23, 1, !dbg !1068 br i1 %.not64, label %L47.i, label %L43.i, !dbg !1069 L43.i: ; preds = %L35.i %current_task1.i48 = getelementptr inbounds {}**, {}*** %12, i64 -14 %current_task1.i = bitcast {}*** %current_task1.i48 to {}** %26 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_box_int64(i64 signext %17) #38, !dbg !1069 %27 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_box_int64(i64 signext %23) #38, !dbg !1069 %28 = call nonnull {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151445231360 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151423430080 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151520884224 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %26, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151520884192 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %27) #39, !dbg !1069 %box.i = call noalias nonnull dereferenceable(8) "enzyme_inactive" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1.i, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151463803568 to {}*) to {} addrspace(10)*)) #40, !dbg !1069 %29 = bitcast {} addrspace(10)* %box.i to [1 x {} addrspace(10)*] addrspace(10)*, !dbg !1069 %30 = getelementptr [1 x {} addrspace(10)*], [1 x {} addrspace(10)*] addrspace(10)* %29, i64 0, i64 0, !dbg !1069 store {} addrspace(10)* %28, {} addrspace(10)* addrspace(10)* %30, align 8, !dbg !1069, !tbaa !106, !alias.scope !70, !noalias !1070 %31 = addrspacecast {} addrspace(10)* %box.i to {} addrspace(12)*, !dbg !1069 call void @ijl_throw({} addrspace(12)* %31) #41, !dbg !1069 unreachable, !dbg !1069 L47.i: ; preds = %L35.i, %entry %.sroa.042.0 = phi i64 [ %23, %entry ], [ %17, %L35.i ] %memcpy_refined_dst.i = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct16.i, i64 0, i64 0, i64 0, !dbg !1071 store i64 %.sroa.042.0, i64* %memcpy_refined_dst.i, align 8, !dbg !1071, !tbaa !357, !alias.scope !359, !noalias !1072 %memcpy_refined_dst18.i = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct16.i, i64 0, i64 1, i64 0, !dbg !1071 store i64 %20, i64* %memcpy_refined_dst18.i, align 8, !dbg !1071, !tbaa !357, !alias.scope !359, !noalias !1072 %32 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151617005072 to {}*) to {} addrspace(10)*), i64 %.sroa.042.0, i64 %20) #38, !dbg !1073 %33 = addrspacecast {} addrspace(10)* %32 to {} addrspace(10)* addrspace(11)*, !dbg !1081 %arraysize_ptr.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %33, i64 3, !dbg !1081 %34 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr.i to i64 addrspace(11)*, !dbg !1081 %arraysize.i = load i64, i64 addrspace(11)* %34, align 8, !dbg !1081, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !42, !noalias !45 %arraysize_ptr23.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %33, i64 4, !dbg !1081 %35 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr23.i to i64 addrspace(11)*, !dbg !1081 %arraysize24.i = load i64, i64 addrspace(11)* %35, align 8, !dbg !1081, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !42, !noalias !45 %.not = icmp ne i64 %arraysize.i, %.sroa.042.0, !dbg !1085 %36 = icmp ne i64 %arraysize24.i, %20 %spec.select = select i1 %.not, i1 true, i1 %36, !dbg !1089 br i1 %spec.select, label %L395.i, label %L102.i, !dbg !1090 L102.i: ; preds = %L47.i %37 = addrspacecast {} addrspace(10)* %32 to {} addrspace(11)*, !dbg !1081 %38 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* %37) #42, !dbg !1091 %39 = bitcast {}* %38 to i8**, !dbg !1091 %arrayptr.i = load i8*, i8** %39, align 8, !dbg !1091, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45, !nonnull !23 %getfield28.i = load atomic {} addrspace(10)*, {} addrspace(10)** %.fca.0.gep4 unordered, align 8, !dbg !1101, !alias.scope !42, !noalias !45, !nonnull !23, !dereferenceable !129, !align !130 %40 = addrspacecast {} addrspace(10)* %getfield28.i to {} addrspace(11)*, !dbg !1103 %41 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %40) #42, !dbg !1103 %42 = bitcast {}* %41 to i8**, !dbg !1103 %arrayptr30.i = load i8*, i8** %42, align 8, !dbg !1103, !tbaa !28, !invariant.load !23, !alias.scope !42, !noalias !45, !nonnull !23 %.not52 = icmp eq i8* %arrayptr.i, %arrayptr30.i, !dbg !1106 br i1 %.not52, label %L111.i, label %L114.i, !dbg !1109 L111.i: ; preds = %L102.i call fastcc void @julia_unaliascopy_1490({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }) align 8 dereferenceable(56) %2, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzymejl_returnRoots" %3, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) %5) #37, !dbg !1109 %unbox148.i.fca.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 0, !dbg !1110 %unbox148.i.fca.0.load = load {} addrspace(10)*, {} addrspace(10)** %unbox148.i.fca.0.gep, align 8, !dbg !1110, !tbaa !357, !alias.scope !359, !noalias !432 %unbox148.i.fca.1.0.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 0, i64 0, !dbg !1110 %unbox148.i.fca.1.0.0.load = load i64, i64* %unbox148.i.fca.1.0.0.gep, align 8, !dbg !1110, !tbaa !357, !alias.scope !359, !noalias !432 %unbox148.i.fca.1.0.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 0, i64 1, !dbg !1110 %unbox148.i.fca.1.0.1.load = load i64, i64* %unbox148.i.fca.1.0.1.gep, align 8, !dbg !1110, !tbaa !357, !alias.scope !359, !noalias !432 %unbox148.i.fca.1.1.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 1, i64 0, !dbg !1110 %unbox148.i.fca.1.1.0.load = load i64, i64* %unbox148.i.fca.1.1.0.gep, align 8, !dbg !1110, !tbaa !357, !alias.scope !359, !noalias !432 %unbox148.i.fca.1.1.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 1, i64 1, !dbg !1110 %unbox148.i.fca.1.1.1.load = load i64, i64* %unbox148.i.fca.1.1.1.gep, align 8, !dbg !1110, !tbaa !357, !alias.scope !359, !noalias !432 br label %L114.i, !dbg !1110 L114.i: ; preds = %L111.i, %L102.i %unbox148.i.fca.0.load.pn = phi {} addrspace(10)* [ %unbox148.i.fca.0.load, %L111.i ], [ %getfield28.i, %L102.i ] %unbox148.i.fca.1.0.0.load.pn = phi i64 [ %unbox148.i.fca.1.0.0.load, %L111.i ], [ %unbox2.i, %L102.i ] %unbox148.i.fca.1.0.1.load.pn = phi i64 [ %unbox148.i.fca.1.0.1.load, %L111.i ], [ %unbox.i, %L102.i ] %unbox148.i.fca.1.1.0.load.pn = phi i64 [ %unbox148.i.fca.1.1.0.load, %L111.i ], [ %unbox4.i, %L102.i ] %unbox148.i.fca.1.1.1.load.pn = phi i64 [ %unbox148.i.fca.1.1.1.load, %L111.i ], [ %unbox3.i, %L102.i ] %43 = sub i64 1, %unbox148.i.fca.1.0.0.load.pn, !dbg !1117 %44 = add i64 %43, %unbox148.i.fca.1.0.1.load.pn, !dbg !1124 %45 = call i64 @llvm.smax.i64(i64 %44, i64 noundef 0) #37, !dbg !1125 %46 = sub i64 1, %unbox148.i.fca.1.1.0.load.pn, !dbg !1130 %47 = add i64 %46, %unbox148.i.fca.1.1.1.load.pn, !dbg !1134 %48 = call i64 @llvm.smax.i64(i64 %47, i64 noundef 0) #37, !dbg !1135 %49 = icmp eq i64 %48, 1, !dbg !1140 %50 = icmp eq i64 %45, 1, !dbg !1145 %getfield43.i = load atomic {} addrspace(10)*, {} addrspace(10)** %.fca.0.gep unordered, align 8, !dbg !1148, !alias.scope !42, !noalias !45, !nonnull !23, !dereferenceable !129, !align !130 %51 = addrspacecast {} addrspace(10)* %getfield43.i to {} addrspace(11)*, !dbg !1155 %52 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %51) #42, !dbg !1155 %53 = bitcast {}* %52 to i8**, !dbg !1155 %arrayptr45.i = load i8*, i8** %53, align 8, !dbg !1155, !tbaa !273, !alias.scope !276, !noalias !277, !nonnull !23 %.not53 = icmp eq i8* %arrayptr.i, %arrayptr45.i, !dbg !1158 br i1 %.not53, label %L147.i, label %L179.i, !dbg !1161 L147.i: ; preds = %L114.i %54 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_1d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151416616992 to {}*) to {} addrspace(10)*), i64 %22) #38, !dbg !1162 call fastcc void @julia_copyto__1477({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %54, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %7) #37, !dbg !1166 %.not54 = icmp ugt i64 %21, 9223372036854775806, !dbg !1167 %.1 = select i1 %.not54, i64 0, i64 %23, !dbg !1110 %55 = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } zeroinitializer, {} addrspace(10)* %54, 0, !dbg !1177 %unbox55.i.fca.0.1.insert = insertvalue [1 x [2 x i64]] [[2 x i64] [i64 1, i64 poison]], i64 %.1, 0, 1, !dbg !1177 %56 = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %55, [1 x [2 x i64]] %unbox55.i.fca.0.1.insert, 1, !dbg !1177 br label %L180.i, !dbg !1110 L179.i: ; preds = %L114.i %unbox162.i.fca.0.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } poison, {} addrspace(10)* %getfield43.i, 0, !dbg !1110 %unbox162.i.fca.1.0.0.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %unbox162.i.fca.0.insert, i64 %unbox8.i, 1, 0, 0, !dbg !1110 %unbox162.i.fca.1.0.1.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %unbox162.i.fca.1.0.0.insert, i64 %unbox7.i, 1, 0, 1, !dbg !1110 %unbox162.i.fca.2.load = load i64, i64* %.fca.2.gep, align 8, !dbg !1110, !alias.scope !42, !noalias !45 %phi.bo = add i64 %unbox162.i.fca.2.load, -1, !dbg !1110 br label %L180.i, !dbg !1110 L180.i: ; preds = %L179.i, %L147.i %.pn56 = phi { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } [ %56, %L147.i ], [ %unbox162.i.fca.1.0.1.insert, %L179.i ] %.pn57 = phi i64 [ -1, %L147.i ], [ %phi.bo, %L179.i ] %57 = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %.pn56, 1, !dbg !1178 %.fca.0.0.extract19 = extractvalue [1 x [2 x i64]] %57, 0, 0, !dbg !1178 %.fca.0.1.extract20 = extractvalue [1 x [2 x i64]] %57, 0, 1, !dbg !1178 %58 = sub i64 1, %.fca.0.0.extract19, !dbg !1182 %59 = add i64 %58, %.fca.0.1.extract20, !dbg !1186 %60 = call i64 @llvm.smax.i64(i64 %59, i64 noundef 0) #37, !dbg !1187 %61 = icmp eq i64 %60, 1, !dbg !1192 %.not58 = icmp ugt i64 %18, 9223372036854775806, !dbg !1196 br i1 %.not58, label %julia_loss_1448_inner.exit, label %L212.i.preheader, !dbg !1202 L212.i.preheader: ; preds = %L180.i %.not59 = icmp eq i64 %.sroa.042.0, 0 %62 = addrspacecast {} addrspace(10)* %unbox148.i.fca.0.load.pn to {} addrspace(10)* addrspace(11)* %arraysize_ptr90.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %62, i64 3 %63 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr90.i to i64 addrspace(11)* %64 = add i64 %unbox148.i.fca.1.1.0.load.pn, -1 %65 = add i64 %unbox148.i.fca.1.0.0.load.pn, -1 %66 = addrspacecast {} addrspace(10)* %unbox148.i.fca.0.load.pn to double addrspace(13)* addrspace(11)* %67 = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %.pn56, 0 %68 = addrspacecast {} addrspace(10)* %67 to double addrspace(13)* addrspace(11)* %69 = addrspacecast {} addrspace(10)* %32 to double addrspace(13)* addrspace(11)* %70 = add nsw i64 %.sroa.042.0, -1, !dbg !1203 %xtraiter = and i64 %.sroa.042.0, 3 %71 = icmp ult i64 %70, 3 %unroll_iter = and i64 %.sroa.042.0, 9223372036854775804 %lcmp.mod.not = icmp eq i64 %xtraiter, 0 br label %L212.i, !dbg !1203 L212.i: ; preds = %L373.i, %L212.i.preheader %iv = phi i64 [ %iv.next, %L373.i ], [ 0, %L212.i.preheader ] %iv.next = add nuw nsw i64 %iv, 1, !dbg !1203 br i1 %.not59, label %L373.i, label %L221.i.lr.ph, !dbg !1203 L221.i.lr.ph: ; preds = %L212.i %value_phi67.i.op = add nsw i64 %iv.next, -1 %72 = select i1 %49, i64 0, i64 %value_phi67.i.op %arraysize91.i = load i64, i64 addrspace(11)* %63, align 8, !tbaa !28, !range !41, !invariant.load !23, !alias.scope !42, !noalias !45 %73 = add i64 %64, %72 %74 = mul i64 %arraysize91.i, %73 %arrayptr93.i61 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %66, align 8, !tbaa !28, !invariant.load !23, !alias.scope !1204, !noalias !45, !nonnull !23 %arrayptr100.i62 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %68, align 8, !tbaa !273, !alias.scope !1205, !noalias !277, !nonnull !23 %75 = mul i64 %value_phi67.i.op, %.sroa.042.0 %arrayptr106.i63 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %69, align 8, !tbaa !28, !invariant.load !23, !alias.scope !1204, !noalias !45, !nonnull !23 br i1 %71, label %L218.i.L373.i.loopexit_crit_edge.unr-lcssa, label %L221.i.lr.ph.new, !dbg !1206 L221.i.lr.ph.new: ; preds = %L221.i.lr.ph %76 = add i64 %74, %65 br label %L221.i, !dbg !1206 L221.i: ; preds = %L221.i, %L221.i.lr.ph.new %iv1 = phi i64 [ %iv.next2, %L221.i ], [ 0, %L221.i.lr.ph.new ] %77 = shl nuw nsw i64 %iv1, 2, !dbg !1207 %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !1207 %78 = or i64 %77, 1, !dbg !1207 %79 = select i1 %50, i64 0, i64 %77, !dbg !1210 %80 = add i64 %76, %79, !dbg !1222 %81 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %80, !dbg !1222 %arrayref.i = load double, double addrspace(13)* %81, align 8, !dbg !1222, !tbaa !67, !alias.scope !70, !noalias !71 %82 = select i1 %61, i64 1, i64 %78, !dbg !1223 %83 = add i64 %82, %.pn57, !dbg !1228 %84 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %83, !dbg !1228 %arrayref101.i = load double, double addrspace(13)* %84, align 8, !dbg !1228, !tbaa !67, !alias.scope !70, !noalias !71 %85 = fadd double %arrayref.i, %arrayref101.i, !dbg !1232 %86 = add i64 %77, %75, !dbg !1235 %87 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %86, !dbg !1235 store double %85, double addrspace(13)* %87, align 8, !dbg !1235, !tbaa !67, !alias.scope !70, !noalias !1070 %88 = or i64 %77, 2, !dbg !1207 %89 = select i1 %50, i64 0, i64 %78, !dbg !1210 %90 = add i64 %76, %89, !dbg !1222 %91 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %90, !dbg !1222 %arrayref.i.1 = load double, double addrspace(13)* %91, align 8, !dbg !1222, !tbaa !67, !alias.scope !70, !noalias !71 %92 = select i1 %61, i64 1, i64 %88, !dbg !1223 %93 = add i64 %92, %.pn57, !dbg !1228 %94 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %93, !dbg !1228 %arrayref101.i.1 = load double, double addrspace(13)* %94, align 8, !dbg !1228, !tbaa !67, !alias.scope !70, !noalias !71 %95 = fadd double %arrayref.i.1, %arrayref101.i.1, !dbg !1232 %96 = add i64 %78, %75, !dbg !1235 %97 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %96, !dbg !1235 store double %95, double addrspace(13)* %97, align 8, !dbg !1235, !tbaa !67, !alias.scope !70, !noalias !1070 %98 = or i64 %77, 3, !dbg !1207 %99 = select i1 %50, i64 0, i64 %88, !dbg !1210 %100 = add i64 %76, %99, !dbg !1222 %101 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %100, !dbg !1222 %arrayref.i.2 = load double, double addrspace(13)* %101, align 8, !dbg !1222, !tbaa !67, !alias.scope !70, !noalias !71 %102 = select i1 %61, i64 1, i64 %98, !dbg !1223 %103 = add i64 %102, %.pn57, !dbg !1228 %104 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %103, !dbg !1228 %arrayref101.i.2 = load double, double addrspace(13)* %104, align 8, !dbg !1228, !tbaa !67, !alias.scope !70, !noalias !71 %105 = fadd double %arrayref.i.2, %arrayref101.i.2, !dbg !1232 %106 = add i64 %88, %75, !dbg !1235 %107 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %106, !dbg !1235 store double %105, double addrspace(13)* %107, align 8, !dbg !1235, !tbaa !67, !alias.scope !70, !noalias !1070 %108 = add nuw nsw i64 %77, 4, !dbg !1207 %109 = select i1 %50, i64 0, i64 %98, !dbg !1210 %110 = add i64 %76, %109, !dbg !1222 %111 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %110, !dbg !1222 %arrayref.i.3 = load double, double addrspace(13)* %111, align 8, !dbg !1222, !tbaa !67, !alias.scope !70, !noalias !71 %112 = select i1 %61, i64 1, i64 %108, !dbg !1223 %113 = add i64 %112, %.pn57, !dbg !1228 %114 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %113, !dbg !1228 %arrayref101.i.3 = load double, double addrspace(13)* %114, align 8, !dbg !1228, !tbaa !67, !alias.scope !70, !noalias !71 %115 = fadd double %arrayref.i.3, %arrayref101.i.3, !dbg !1232 %116 = add i64 %98, %75, !dbg !1235 %117 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %116, !dbg !1235 store double %115, double addrspace(13)* %117, align 8, !dbg !1235, !tbaa !67, !alias.scope !70, !noalias !1070 %niter.ncmp.3.not = icmp eq i64 %108, %unroll_iter, !dbg !1206 br i1 %niter.ncmp.3.not, label %L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit, label %L221.i, !dbg !1206, !llvm.loop !1237 L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit: ; preds = %L221.i br label %L218.i.L373.i.loopexit_crit_edge.unr-lcssa, !dbg !1206 L218.i.L373.i.loopexit_crit_edge.unr-lcssa: ; preds = %L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit, %L221.i.lr.ph %value_phi70.i67.unr = phi i64 [ 0, %L221.i.lr.ph ], [ %unroll_iter, %L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit ] br i1 %lcmp.mod.not, label %L373.i, label %L221.i.epil.preheader, !dbg !1206 L221.i.epil.preheader: ; preds = %L218.i.L373.i.loopexit_crit_edge.unr-lcssa %118 = add i64 %74, %65 br label %L221.i.epil, !dbg !1206 L221.i.epil: ; preds = %L221.i.epil, %L221.i.epil.preheader %iv3 = phi i64 [ %iv.next4, %L221.i.epil ], [ 0, %L221.i.epil.preheader ] %119 = add nuw nsw i64 %value_phi70.i67.unr, %iv3, !dbg !1207 %iv.next4 = add nuw nsw i64 %iv3, 1, !dbg !1207 %120 = add nuw nsw i64 %119, 1, !dbg !1207 %121 = select i1 %50, i64 0, i64 %119, !dbg !1210 %122 = add i64 %118, %121, !dbg !1222 %123 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %122, !dbg !1222 %arrayref.i.epil = load double, double addrspace(13)* %123, align 8, !dbg !1222, !tbaa !67, !alias.scope !70, !noalias !71 %124 = select i1 %61, i64 1, i64 %120, !dbg !1223 %125 = add i64 %124, %.pn57, !dbg !1228 %126 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %125, !dbg !1228 %arrayref101.i.epil = load double, double addrspace(13)* %126, align 8, !dbg !1228, !tbaa !67, !alias.scope !70, !noalias !71 %127 = fadd double %arrayref.i.epil, %arrayref101.i.epil, !dbg !1232 %128 = add i64 %119, %75, !dbg !1235 %129 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %128, !dbg !1235 store double %127, double addrspace(13)* %129, align 8, !dbg !1235, !tbaa !67, !alias.scope !70, !noalias !1070 %epil.iter.cmp.not = icmp eq i64 %iv.next4, %xtraiter, !dbg !1206 br i1 %epil.iter.cmp.not, label %L373.i.loopexit, label %L221.i.epil, !dbg !1206, !llvm.loop !1238 L373.i.loopexit: ; preds = %L221.i.epil br label %L373.i, !dbg !1239 L373.i: ; preds = %L373.i.loopexit, %L218.i.L373.i.loopexit_crit_edge.unr-lcssa, %L212.i %130 = add nuw i64 %iv.next, 1, !dbg !1239 %131 = icmp ult i64 %iv.next, 9223372036854775807, !dbg !1243 %132 = icmp sle i64 %130, %20, !dbg !1243 %133 = icmp ne i64 %iv.next, %20, !dbg !1247 %not. = and i1 %131, %132, !dbg !1247 %narrow = and i1 %133, %not., !dbg !1247 br i1 %narrow, label %L212.i, label %julia_loss_1448_inner.exit.loopexit, !dbg !1248 L395.i: ; preds = %L47.i %134 = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct126.i, i64 0, i64 0, i64 0, !dbg !1249 store i64 %arraysize.i, i64* %134, align 8, !dbg !1249, !tbaa !357, !alias.scope !359, !noalias !1072 %135 = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct126.i, i64 0, i64 1, i64 0, !dbg !1249 store i64 %arraysize24.i, i64* %135, align 8, !dbg !1249, !tbaa !357, !alias.scope !359, !noalias !1072 %136 = addrspacecast [2 x [1 x i64]]* %newstruct126.i to [2 x [1 x i64]] addrspace(11)*, !dbg !1090 %137 = addrspacecast [2 x [1 x i64]]* %newstruct16.i to [2 x [1 x i64]] addrspace(11)*, !dbg !1090 call fastcc void @julia_throwdm_1459([2 x [1 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %136, [2 x [1 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %137) #41, !dbg !1090 unreachable, !dbg !1090 julia_loss_1448_inner.exit.loopexit: ; preds = %L373.i br label %julia_loss_1448_inner.exit, !dbg !1253 julia_loss_1448_inner.exit: ; preds = %julia_loss_1448_inner.exit.loopexit, %L180.i %138 = call fastcc double @julia__mapreduce_1461({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) %32) #37, !dbg !1253 call void @llvm.lifetime.end.p0i8(i64 noundef 16, i8* noundef nonnull %8) #37, !dbg !1253 call void @llvm.lifetime.end.p0i8(i64 noundef 56, i8* noundef nonnull %9) #37, !dbg !1253 call void @llvm.lifetime.end.p0i8(i64 noundef 8, i8* noundef nonnull %10) #37, !dbg !1253 call void @llvm.lifetime.end.p0i8(i64 noundef 16, i8* noundef nonnull %11) #37, !dbg !1253 ret double %138, !dbg !1031 } Type analysis state: %box.i = call noalias nonnull dereferenceable(8) "enzyme_inactive" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1.i, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151463803568 to {}*) to {} addrspace(10)*)) #40, !dbg !109: {[-1,-1]:Pointer}, intvals: {} %13 = bitcast {}*** %ptls_field.i49 to i64***: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {} %121 = select i1 %50, i64 0, i64 %119, !dbg !322: {[-1]:Anything}, intvals: {} %45 = call i64 @llvm.smax.i64(i64 %44, i64 noundef 0) #37, !dbg !214: {[-1]:Integer}, intvals: {} %arraysize24.i = load i64, i64 addrspace(11)* %35, align 8, !dbg !135, !tbaa !40, !range !143, !invariant.load !23, !alias.scope !65, !noalias !68: {[-1]:Integer}, intvals: {} %111 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %110, !dbg !343: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %53 = bitcast {}* %52 to i8**, !dbg !246: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %newstruct126.i = alloca [2 x [1 x i64]], align 8: {[-1]:Pointer}, intvals: {} %47 = add i64 %46, %unbox148.i.fca.1.1.1.load.pn, !dbg !223: {[-1]:Integer}, intvals: {} i64 9223372036854775806: {[-1]:Anything}, intvals: {9223372036854775806,} %.fca.3.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 3, !dbg !24: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %73 = add i64 %64, %72: {[-1]:Integer}, intvals: {} %arrayptr.i = load i8*, i8** %39, align 8, !dbg !153, !tbaa !40, !invariant.load !23, !alias.scope !65, !noalias !68, !nonnull !23: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %.pn56 = phi { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } [ %56, %L147.i ], [ %unbox162.i.fca.1.0.1.insert, %L179.i ]: {[0]:Pointer, [0,0]:Pointer, [0,0,-1]:Float@double, [0,8]:Integer, [0,9]:Integer, [0,10]:Integer, [0,11]:Integer, [0,12]:Integer, [0,13]:Integer, [0,14]:Integer, [0,15]:Integer, [0,16]:Integer, [0,17]:Integer, [0,18]:Integer, [0,19]:Integer, [0,20]:Integer, [0,21]:Integer, [0,22]:Integer, [0,23]:Integer, [0,24]:Integer, [0,25]:Integer, [0,26]:Integer, [0,27]:Integer, [0,28]:Integer, [0,29]:Integer, [0,30]:Integer, [0,31]:Integer, [0,32]:Integer, [0,33]:Integer, [0,34]:Integer, [0,35]:Integer, [0,36]:Integer, [0,37]:Integer, [0,38]:Integer, [0,39]:Integer, [8]:Integer, [9]:Integer, [10]:Integer, [11]:Integer, [12]:Integer, [13]:Integer, [14]:Integer, [15]:Integer, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything, [32]:Anything, [33]:Anything, [34]:Anything, [35]:Anything, [36]:Anything, [37]:Anything, [38]:Anything, [39]:Anything}, intvals: {} %unbox148.i.fca.1.0.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 0, i64 0, !dbg !189: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %getfield43.i = load atomic {} addrspace(10)*, {} addrspace(10)** %.fca.0.gep unordered, align 8, !dbg !239, !alias.scope !65, !noalias !68, !nonnull !23, !dereferenceable !177, !align !178: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %100 = add i64 %76, %99, !dbg !343: {[-1]:Integer}, intvals: {} %not. = and i1 %131, %132, !dbg !382: {[-1]:Integer}, intvals: {} %18 = sub i64 %unbox3.i, %unbox4.i, !dbg !86: {[-1]:Integer}, intvals: {} %unbox7.i = load i64, i64* %.fca.1.0.1.gep, align 8, !dbg !44, !alias.scope !65, !noalias !68: {[-1]:Integer}, intvals: {} %value_phi70.i67.unr = phi i64 [ 0, %L221.i.lr.ph ], [ %unroll_iter, %L218.i.L373.i.loopexit_crit_edge.unr-lcssa.loopexit ]: {[-1]:Anything}, intvals: {0,} %71 = icmp ult i64 %70, 3: {[-1]:Integer}, intvals: {} %66 = addrspacecast {} addrspace(10)* %unbox148.i.fca.0.load.pn to double addrspace(13)* addrspace(11)*: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %.fca.0.gep4 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 0, !dbg !24: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer}, intvals: {} call fastcc void @julia_unaliascopy_1490({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }) align 8 dereferenceable(56) %2, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzymejl_returnRoots" %3, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(56) %5) #37, !dbg !188: {}, intvals: {} %117 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %116, !dbg !365: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %10 = bitcast [1 x {} addrspace(10)*]* %3 to i8*: {[-1]:Pointer, [-1,-1]:Pointer}, intvals: {} {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151520884192 to {}*) to {} addrspace(10)*): {[-1]:Anything}, intvals: {} i64 3: {[-1]:Integer}, intvals: {3,} i64 2: {[-1]:Integer}, intvals: {2,} {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151463803568 to {}*) to {} addrspace(10)*): {[-1]:Anything}, intvals: {} %15 = add i64 %unbox.i, 1, !dbg !44: {[-1]:Integer}, intvals: {} %80 = add i64 %76, %79, !dbg !343: {[-1]:Integer}, intvals: {} %34 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr.i to i64 addrspace(11)*, !dbg !135: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer}, intvals: {} %27 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_box_int64(i64 signext %23) #38, !dbg !109: {}, intvals: {} %.1 = select i1 %.not54, i64 0, i64 %23, !dbg !189: {}, intvals: {} %unbox162.i.fca.1.0.1.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %unbox162.i.fca.1.0.0.insert, i64 %unbox7.i, 1, 0, 1, !dbg !189: {[0]:Pointer, [0,0]:Pointer, [0,0,-1]:Float@double, [0,8]:Integer, [0,9]:Integer, [0,10]:Integer, [0,11]:Integer, [0,12]:Integer, [0,13]:Integer, [0,14]:Integer, [0,15]:Integer, [0,16]:Integer, [0,17]:Integer, [0,18]:Integer, [0,19]:Integer, [0,20]:Integer, [0,21]:Integer, [0,22]:Integer, [0,23]:Integer, [0,24]:Integer, [0,25]:Integer, [0,26]:Integer, [0,27]:Integer, [0,28]:Integer, [0,29]:Integer, [0,30]:Integer, [0,31]:Integer, [0,32]:Integer, [0,33]:Integer, [0,34]:Integer, [0,35]:Integer, [0,36]:Integer, [0,37]:Integer, [0,38]:Integer, [0,39]:Integer, [8]:Integer, [9]:Integer, [10]:Integer, [11]:Integer, [12]:Integer, [13]:Integer, [14]:Integer, [15]:Integer, [16]:Integer, [17]:Integer, [18]:Integer, [19]:Integer, [20]:Integer, [21]:Integer, [22]:Integer, [23]:Integer, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything, [32]:Anything, [33]:Anything, [34]:Anything, [35]:Anything, [36]:Anything, [37]:Anything, [38]:Anything, [39]:Anything}, intvals: {} %33 = addrspacecast {} addrspace(10)* %32 to {} addrspace(10)* addrspace(11)*, !dbg !135: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %.fca.1.1.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 1, i64 1, !dbg !24: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %62 = addrspacecast {} addrspace(10)* %unbox148.i.fca.0.load.pn to {} addrspace(10)* addrspace(11)*: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %134 = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct126.i, i64 0, i64 0, i64 0, !dbg !384: {}, intvals: {} %ptls_load.i5051 = load i64**, i64*** %13, align 8, !tbaa !36: {[-1]:Pointer}, intvals: {} %unbox148.i.fca.1.0.0.load = load i64, i64* %unbox148.i.fca.1.0.0.gep, align 8, !dbg !189, !tbaa !117, !alias.scope !119, !noalias !203: {[-1]:Integer}, intvals: {} %120 = add nuw nsw i64 %119, 1, !dbg !318: {[-1]:Anything}, intvals: {1,} %spec.select = select i1 %.not, i1 true, i1 %36, !dbg !151: {[-1]:Integer}, intvals: {} %unbox148.i.fca.1.1.0.load.pn = phi i64 [ %unbox148.i.fca.1.1.0.load, %L111.i ], [ %unbox4.i, %L102.i ]: {[-1]:Integer}, intvals: {} %arrayref101.i = load double, double addrspace(13)* %84, align 8, !dbg !355, !tbaa !345, !alias.scope !114, !noalias !347: {[-1]:Float@double}, intvals: {} %.fca.0.1.extract20 = extractvalue [1 x [2 x i64]] %57, 0, 1, !dbg !284: {}, intvals: {} %112 = select i1 %61, i64 1, i64 %108, !dbg !348: {[-1]:Integer}, intvals: {} %unbox148.i.fca.1.0.1.load.pn = phi i64 [ %unbox148.i.fca.1.0.1.load, %L111.i ], [ %unbox.i, %L102.i ]: {[-1]:Integer}, intvals: {} %88 = or i64 %77, 2, !dbg !318: {[-1]:Integer}, intvals: {} %arraysize_ptr23.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %33, i64 4, !dbg !135: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %36 = icmp ne i64 %arraysize24.i, %20: {[-1]:Integer}, intvals: {} %arraysize_ptr.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %33, i64 3, !dbg !135: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer}, intvals: {} %.not52 = icmp eq i8* %arrayptr.i, %arrayptr30.i, !dbg !182: {[-1]:Integer}, intvals: {} {}* inttoptr (i64 140151463803568 to {}*): {[-1]:Anything}, intvals: {} %2 = alloca { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, align 8: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer, [-1,48]:Integer, [-1,49]:Integer, [-1,50]:Integer, [-1,51]:Integer, [-1,52]:Integer, [-1,53]:Integer, [-1,54]:Integer, [-1,55]:Integer}, intvals: {} %arraysize.i = load i64, i64 addrspace(11)* %34, align 8, !dbg !135, !tbaa !40, !range !143, !invariant.load !23, !alias.scope !65, !noalias !68: {[-1]:Integer}, intvals: {} i64 poison: {[-1]:Anything}, intvals: {} %24 = icmp eq i64 %23, %17, !dbg !96: {[-1]:Integer}, intvals: {} %unbox3.i = load i64, i64* %.fca.1.1.1.gep, align 8, !dbg !86, !alias.scope !65, !noalias !68: {[-1]:Integer}, intvals: {} %11 = bitcast [2 x [1 x i64]]* %newstruct126.i to i8*: {[-1]:Pointer}, intvals: {} %.not54 = icmp ugt i64 %21, 9223372036854775806, !dbg !264: {[-1]:Integer}, intvals: {} %59 = add i64 %58, %.fca.0.1.extract20, !dbg !292: {}, intvals: {} %131 = icmp ult i64 %iv.next, 9223372036854775807, !dbg !377: {[-1]:Integer}, intvals: {} %70 = add nsw i64 %.sroa.042.0, -1, !dbg !314: {[-1]:Integer}, intvals: {} %132 = icmp sle i64 %130, %20, !dbg !377: {[-1]:Integer}, intvals: {} %94 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %93, !dbg !355: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %23 = call i64 @llvm.smax.i64(i64 %22, i64 noundef 0) #37, !dbg !75: {[-1]:Integer}, intvals: {} i64 8: {[-1]:Integer}, intvals: {8,} %128 = add i64 %119, %75, !dbg !365: {[-1]:Integer}, intvals: {0,} %29 = bitcast {} addrspace(10)* %box.i to [1 x {} addrspace(10)*] addrspace(10)*, !dbg !109: {}, intvals: {} %79 = select i1 %50, i64 0, i64 %77, !dbg !322: {[-1]:Integer}, intvals: {} %39 = bitcast {}* %38 to i8**, !dbg !153: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %110 = add i64 %76, %109, !dbg !343: {[-1]:Integer}, intvals: {} %9 = bitcast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2 to i8*: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer, [-1,48]:Integer, [-1,49]:Integer, [-1,50]:Integer, [-1,51]:Integer, [-1,52]:Integer, [-1,53]:Integer, [-1,54]:Integer, [-1,55]:Integer}, intvals: {} %43 = sub i64 1, %unbox148.i.fca.1.0.0.load.pn, !dbg !204: {[-1]:Integer}, intvals: {} %iv.next = add nuw nsw i64 %iv, 1, !dbg !314: {[-1]:Integer}, intvals: {1,} %unbox148.i.fca.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 0, !dbg !189: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer}, intvals: {} %value_phi.i = or i1 %25, %24, !dbg !108: {[-1]:Integer}, intvals: {} %3 = alloca [1 x {} addrspace(10)*], align 8: {[-1]:Pointer, [-1,-1]:Pointer}, intvals: {} %105 = fadd double %arrayref.i.2, %arrayref101.i.2, !dbg !359: {[-1]:Float@double}, intvals: {} %.fca.1.1.1.extract = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 1, 1, !dbg !24: {[-1]:Integer}, intvals: {} %17 = call i64 @llvm.smax.i64(i64 %16, i64 noundef 0) #37, !dbg !75: {[-1]:Integer}, intvals: {} %.not = icmp ne i64 %arraysize.i, %.sroa.042.0, !dbg !144: {[-1]:Integer}, intvals: {} %5 = addrspacecast { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4 to { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !24: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer, [-1,48]:Integer, [-1,49]:Integer, [-1,50]:Integer, [-1,51]:Integer, [-1,52]:Integer, [-1,53]:Integer, [-1,54]:Integer, [-1,55]:Integer}, intvals: {} %arrayref101.i.1 = load double, double addrspace(13)* %94, align 8, !dbg !355, !tbaa !345, !alias.scope !114, !noalias !347: {[-1]:Float@double}, intvals: {} %57 = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %.pn56, 1, !dbg !284: {[0]:Integer, [1]:Integer, [2]:Integer, [3]:Integer, [4]:Integer, [5]:Integer, [6]:Integer, [7]:Integer}, intvals: {} %124 = select i1 %61, i64 1, i64 %120, !dbg !348: {[-1]:Integer}, intvals: {} %.fca.0.extract3 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 0, !dbg !24: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %unbox148.i.fca.1.1.1.load.pn = phi i64 [ %unbox148.i.fca.1.1.1.load, %L111.i ], [ %unbox3.i, %L102.i ]: {[-1]:Integer}, intvals: {} {}* inttoptr (i64 140151520884224 to {}*): {[-1]:Anything}, intvals: {} {}* inttoptr (i64 140151520884192 to {}*): {[-1]:Anything}, intvals: {} %unbox162.i.fca.1.0.0.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %unbox162.i.fca.0.insert, i64 %unbox8.i, 1, 0, 0, !dbg !189: {[0]:Pointer, [0,0]:Pointer, [0,0,-1]:Float@double, [0,8]:Integer, [0,9]:Integer, [0,10]:Integer, [0,11]:Integer, [0,12]:Integer, [0,13]:Integer, [0,14]:Integer, [0,15]:Integer, [0,16]:Integer, [0,17]:Integer, [0,18]:Integer, [0,19]:Integer, [0,20]:Integer, [0,21]:Integer, [0,22]:Integer, [0,23]:Integer, [0,24]:Integer, [0,25]:Integer, [0,26]:Integer, [0,27]:Integer, [0,28]:Integer, [0,29]:Integer, [0,30]:Integer, [0,31]:Integer, [0,32]:Integer, [0,33]:Integer, [0,34]:Integer, [0,35]:Integer, [0,36]:Integer, [0,37]:Integer, [0,38]:Integer, [0,39]:Integer, [8]:Integer, [9]:Integer, [10]:Integer, [11]:Integer, [12]:Integer, [13]:Integer, [14]:Integer, [15]:Integer, [16]:Anything, [17]:Anything, [18]:Anything, [19]:Anything, [20]:Anything, [21]:Anything, [22]:Anything, [23]:Anything, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything, [32]:Anything, [33]:Anything, [34]:Anything, [35]:Anything, [36]:Anything, [37]:Anything, [38]:Anything, [39]:Anything}, intvals: {} %64 = add i64 %unbox148.i.fca.1.1.0.load.pn, -1: {[-1]:Integer}, intvals: {} %135 = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct126.i, i64 0, i64 1, i64 0, !dbg !384: {}, intvals: {} %93 = add i64 %92, %.pn57, !dbg !355: {[-1]:Integer}, intvals: {} [2 x i64] [i64 1, i64 poison]: {[-1]:Anything}, intvals: {} %unbox148.i.fca.1.1.0.load = load i64, i64* %unbox148.i.fca.1.1.0.gep, align 8, !dbg !189, !tbaa !117, !alias.scope !119, !noalias !203: {[-1]:Integer}, intvals: {} %85 = fadd double %arrayref.i, %arrayref101.i, !dbg !359: {[-1]:Float@double}, intvals: {} %.fca.1.1.0.extract = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 1, 0, !dbg !24: {[-1]:Integer}, intvals: {} %unbox148.i.fca.1.0.0.load.pn = phi i64 [ %unbox148.i.fca.1.0.0.load, %L111.i ], [ %unbox2.i, %L102.i ]: {[-1]:Integer}, intvals: {} %.fca.1.0.0.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 1, i64 0, i64 0, !dbg !24: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %.fca.2.gep10 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 2, !dbg !24: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %unbox148.i.fca.1.0.1.load = load i64, i64* %unbox148.i.fca.1.0.1.gep, align 8, !dbg !189, !tbaa !117, !alias.scope !119, !noalias !203: {[-1]:Integer}, intvals: {} %35 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr23.i to i64 addrspace(11)*, !dbg !135: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %unbox162.i.fca.0.insert = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } poison, {} addrspace(10)* %getfield43.i, 0, !dbg !189: {[0]:Pointer, [0,0]:Pointer, [0,0,-1]:Float@double, [0,8]:Integer, [0,9]:Integer, [0,10]:Integer, [0,11]:Integer, [0,12]:Integer, [0,13]:Integer, [0,14]:Integer, [0,15]:Integer, [0,16]:Integer, [0,17]:Integer, [0,18]:Integer, [0,19]:Integer, [0,20]:Integer, [0,21]:Integer, [0,22]:Integer, [0,23]:Integer, [0,24]:Integer, [0,25]:Integer, [0,26]:Integer, [0,27]:Integer, [0,28]:Integer, [0,29]:Integer, [0,30]:Integer, [0,31]:Integer, [0,32]:Integer, [0,33]:Integer, [0,34]:Integer, [0,35]:Integer, [0,36]:Integer, [0,37]:Integer, [0,38]:Integer, [0,39]:Integer, [8]:Anything, [9]:Anything, [10]:Anything, [11]:Anything, [12]:Anything, [13]:Anything, [14]:Anything, [15]:Anything, [16]:Anything, [17]:Anything, [18]:Anything, [19]:Anything, [20]:Anything, [21]:Anything, [22]:Anything, [23]:Anything, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything, [32]:Anything, [33]:Anything, [34]:Anything, [35]:Anything, [36]:Anything, [37]:Anything, [38]:Anything, [39]:Anything}, intvals: {} %.fca.1.0.0.extract5 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 0, 0, !dbg !24: {[-1]:Integer}, intvals: {} %.fca.0.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 0, !dbg !24: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151617005072 to {}*) to {} addrspace(10)*): {[-1]:Anything}, intvals: {} %unbox55.i.fca.0.1.insert = insertvalue [1 x [2 x i64]] [[2 x i64] [i64 1, i64 poison]], i64 %.1, 0, 1, !dbg !282: {[0]:Anything, [1]:Anything, [2]:Anything, [3]:Anything, [4]:Anything, [5]:Anything, [6]:Anything, [7]:Anything}, intvals: {} %arrayref101.i.3 = load double, double addrspace(13)* %114, align 8, !dbg !355, !tbaa !345, !alias.scope !114, !noalias !347: {[-1]:Float@double}, intvals: {} %103 = add i64 %102, %.pn57, !dbg !355: {[-1]:Integer}, intvals: {} %90 = add i64 %76, %89, !dbg !343: {[-1]:Integer}, intvals: {} %arrayref.i = load double, double addrspace(13)* %81, align 8, !dbg !343, !tbaa !345, !alias.scope !114, !noalias !347: {[-1]:Float@double}, intvals: {} %arrayref101.i.epil = load double, double addrspace(13)* %126, align 8, !dbg !355, !tbaa !345, !alias.scope !114, !noalias !347: {[-1]:Float@double}, intvals: {} %41 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %40) #42, !dbg !179: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %51 = addrspacecast {} addrspace(10)* %getfield43.i to {} addrspace(11)*, !dbg !246: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %arrayptr45.i = load i8*, i8** %53, align 8, !dbg !246, !tbaa !249, !alias.scope !252, !noalias !253, !nonnull !23: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %unbox2.i = load i64, i64* %.fca.1.0.0.gep6, align 8, !dbg !44, !alias.scope !65, !noalias !68: {[-1]:Integer}, intvals: {} %safepoint.i = load i64*, i64** %14, align 8, !tbaa !40, !invariant.load !23: {}, intvals: {} %95 = fadd double %arrayref.i.1, %arrayref101.i.1, !dbg !359: {[-1]:Float@double}, intvals: {} %109 = select i1 %50, i64 0, i64 %98, !dbg !322: {[-1]:Integer}, intvals: {} %72 = select i1 %49, i64 0, i64 %value_phi67.i.op: {[-1]:Integer}, intvals: {} %113 = add i64 %112, %.pn57, !dbg !355: {[-1]:Integer}, intvals: {} %89 = select i1 %50, i64 0, i64 %78, !dbg !322: {[-1]:Integer}, intvals: {} %123 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %122, !dbg !343: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %82 = select i1 %61, i64 1, i64 %78, !dbg !348: {[-1]:Integer}, intvals: {} %unbox148.i.fca.1.1.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 1, i64 1, !dbg !189: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %127 = fadd double %arrayref.i.epil, %arrayref101.i.epil, !dbg !359: {[-1]:Float@double}, intvals: {} { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } zeroinitializer: {[-1]:Anything}, intvals: {} %value_phi67.i.op = add nsw i64 %iv.next, -1: {[-1]:Integer}, intvals: {0,} %48 = call i64 @llvm.smax.i64(i64 %47, i64 noundef 0) #37, !dbg !224: {[-1]:Integer}, intvals: {} %32 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151617005072 to {}*) to {} addrspace(10)*), i64 %.sroa.042.0, i64 %20) #38, !dbg !121: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %30 = getelementptr [1 x {} addrspace(10)*], [1 x {} addrspace(10)*] addrspace(10)* %29, i64 0, i64 0, !dbg !109: {}, intvals: {} %niter.ncmp.3.not = icmp eq i64 %108, %unroll_iter, !dbg !317: {[-1]:Integer}, intvals: {} %xtraiter = and i64 %.sroa.042.0, 3: {[-1]:Integer}, intvals: {} %.fca.1.0.0.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 1, 0, 0, !dbg !24: {[-1]:Integer}, intvals: {} {}* inttoptr (i64 140151445231360 to {}*): {[-1]:Anything}, intvals: {} %arrayref.i.3 = load double, double addrspace(13)* %111, align 8, !dbg !343, !tbaa !345, !alias.scope !114, !noalias !347: {[-1]:Float@double}, intvals: {} %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !318: {[-1]:Integer}, intvals: {1,} %unbox8.i = load i64, i64* %.fca.1.0.0.gep, align 8, !dbg !44, !alias.scope !65, !noalias !68: {[-1]:Integer}, intvals: {} %68 = addrspacecast {} addrspace(10)* %67 to double addrspace(13)* addrspace(11)*: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %unbox148.i.fca.1.0.1.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 0, i64 1, !dbg !189: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %.fca.2.extract9 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 2, !dbg !24: {[-1]:Integer}, intvals: {} %77 = shl nuw nsw i64 %iv1, 2, !dbg !318: {[-1]:Integer}, intvals: {0,} %65 = add i64 %unbox148.i.fca.1.0.0.load.pn, -1: {[-1]:Integer}, intvals: {} %iv1 = phi i64 [ %iv.next2, %L221.i ], [ 0, %L221.i.lr.ph.new ]: {[-1]:Integer}, intvals: {0,} {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151520884224 to {}*) to {} addrspace(10)*): {[-1]:Anything}, intvals: {} %arrayptr106.i63 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %69, align 8, !tbaa !40, !invariant.load !23, !alias.scope !315, !noalias !68, !nonnull !23: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %.fca.1.0.1.extract7 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 1, 0, 1, !dbg !24: {[-1]:Integer}, intvals: {} %.not58 = icmp ugt i64 %18, 9223372036854775806, !dbg !302: {[-1]:Integer}, intvals: {} %7 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*, !dbg !24: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %92 = select i1 %61, i64 1, i64 %88, !dbg !348: {[-1]:Integer}, intvals: {} %50 = icmp eq i64 %45, 1, !dbg !236: {[-1]:Integer}, intvals: {} {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151416616992 to {}*) to {} addrspace(10)*): {[-1]:Anything}, intvals: {} {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151423430080 to {}*) to {} addrspace(10)*): {[-1]:Anything}, intvals: {} i64 9223372036854775807: {[-1]:Anything}, intvals: {9223372036854775807,} {}* inttoptr (i64 140151416616992 to {}*): {[-1]:Anything}, intvals: {} %arrayptr100.i62 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %68, align 8, !tbaa !249, !alias.scope !316, !noalias !253, !nonnull !23: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %.not64 = icmp eq i64 %23, 1, !dbg !108: {[-1]:Integer}, intvals: {} %96 = add i64 %78, %75, !dbg !365: {[-1]:Integer}, intvals: {} %19 = add i64 %18, 1, !dbg !90: {[-1]:Integer}, intvals: {} %102 = select i1 %61, i64 1, i64 %98, !dbg !348: {[-1]:Integer}, intvals: {} %unbox148.i.fca.0.load.pn = phi {} addrspace(10)* [ %unbox148.i.fca.0.load, %L111.i ], [ %getfield28.i, %L102.i ]: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0: {[0]:Pointer, [0,0]:Pointer, [0,0,-1]:Float@double, [0,8]:Integer, [0,9]:Integer, [0,10]:Integer, [0,11]:Integer, [0,12]:Integer, [0,13]:Integer, [0,14]:Integer, [0,15]:Integer, [0,16]:Integer, [0,17]:Integer, [0,18]:Integer, [0,19]:Integer, [0,20]:Integer, [0,21]:Integer, [0,22]:Integer, [0,23]:Integer, [0,24]:Integer, [0,25]:Integer, [0,26]:Integer, [0,27]:Integer, [0,28]:Integer, [0,29]:Integer, [0,30]:Integer, [0,31]:Integer, [0,32]:Integer, [0,33]:Integer, [0,34]:Integer, [0,35]:Integer, [0,36]:Integer, [0,37]:Integer, [0,38]:Integer, [0,39]:Integer, [8]:Integer, [9]:Integer, [10]:Integer, [11]:Integer, [12]:Integer, [13]:Integer, [14]:Integer, [15]:Integer, [16]:Integer, [17]:Integer, [18]:Integer, [19]:Integer, [20]:Integer, [21]:Integer, [22]:Integer, [23]:Integer, [24]:Integer, [25]:Integer, [26]:Integer, [27]:Integer, [28]:Integer, [29]:Integer, [30]:Integer, [31]:Integer, [32]:Integer, [33]:Integer, [34]:Integer, [35]:Integer, [36]:Integer, [37]:Integer, [38]:Integer, [39]:Integer, [40]:Integer, [41]:Integer, [42]:Integer, [43]:Integer, [44]:Integer, [45]:Integer, [46]:Integer, [47]:Integer, [48]:Integer, [49]:Integer, [50]:Integer, [51]:Integer, [52]:Integer, [53]:Integer, [54]:Integer, [55]:Integer}, intvals: {} { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1: {[0]:Pointer, [0,0]:Pointer, [0,0,-1]:Float@double, [0,8]:Integer, [0,9]:Integer, [0,10]:Integer, [0,11]:Integer, [0,12]:Integer, [0,13]:Integer, [0,14]:Integer, [0,15]:Integer, [0,16]:Integer, [0,17]:Integer, [0,18]:Integer, [0,19]:Integer, [0,20]:Integer, [0,21]:Integer, [0,22]:Integer, [0,23]:Integer, [0,24]:Integer, [0,25]:Integer, [0,26]:Integer, [0,27]:Integer, [0,28]:Integer, [0,29]:Integer, [0,30]:Integer, [0,31]:Integer, [0,32]:Integer, [0,33]:Integer, [0,34]:Integer, [0,35]:Integer, [0,36]:Integer, [0,37]:Integer, [0,38]:Integer, [0,39]:Integer, [8]:Integer, [9]:Integer, [10]:Integer, [11]:Integer, [12]:Integer, [13]:Integer, [14]:Integer, [15]:Integer, [16]:Integer, [17]:Integer, [18]:Integer, [19]:Integer, [20]:Integer, [21]:Integer, [22]:Integer, [23]:Integer, [24]:Integer, [25]:Integer, [26]:Integer, [27]:Integer, [28]:Integer, [29]:Integer, [30]:Integer, [31]:Integer, [32]:Integer, [33]:Integer, [34]:Integer, [35]:Integer, [36]:Integer, [37]:Integer, [38]:Integer, [39]:Integer}, intvals: {} %75 = mul i64 %value_phi67.i.op, %.sroa.042.0: {[-1]:Integer}, intvals: {0,} %81 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %80, !dbg !343: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %.fca.1.1.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 1, i64 0, !dbg !24: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %133 = icmp ne i64 %iv.next, %20, !dbg !382: {[-1]:Integer}, intvals: {} %42 = bitcast {}* %41 to i8**, !dbg !179: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %14 = getelementptr inbounds i64*, i64** %ptls_load.i5051, i64 2: {[-1]:Pointer}, intvals: {} %lcmp.mod.not = icmp eq i64 %xtraiter, 0: {[-1]:Integer}, intvals: {} %126 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %125, !dbg !355: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %.fca.3.extract11 = extractvalue { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 } %0, 3, !dbg !24: {[-1]:Integer}, intvals: {} %unbox148.i.fca.1.1.1.load = load i64, i64* %unbox148.i.fca.1.1.1.gep, align 8, !dbg !189, !tbaa !117, !alias.scope !119, !noalias !203: {[-1]:Integer}, intvals: {} i64 4: {[-1]:Integer}, intvals: {4,} %106 = add i64 %88, %75, !dbg !365: {[-1]:Integer}, intvals: {} %.fca.1.0.1.gep8 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 0, i64 1, !dbg !24: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %iv.next4 = add nuw nsw i64 %iv3, 1, !dbg !318: {[-1]:Integer}, intvals: {1,} %.not53 = icmp eq i8* %arrayptr.i, %arrayptr45.i, !dbg !254: {[-1]:Integer}, intvals: {} %31 = addrspacecast {} addrspace(10)* %box.i to {} addrspace(12)*, !dbg !109: {}, intvals: {} %.fca.0.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 0, !dbg !24: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer}, intvals: {} %38 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* %37) #42, !dbg !153: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %getfield28.i = load atomic {} addrspace(10)*, {} addrspace(10)** %.fca.0.gep4 unordered, align 8, !dbg !172, !alias.scope !65, !noalias !68, !nonnull !23, !dereferenceable !177, !align !178: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %54 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_1d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151416616992 to {}*) to {} addrspace(10)*), i64 %22) #38, !dbg !258: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %iv = phi i64 [ %iv.next, %L373.i ], [ 0, %L212.i.preheader ]: {[-1]:Integer}, intvals: {0,} %52 = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* noundef %51) #42, !dbg !246: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %memcpy_refined_dst.i = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct16.i, i64 0, i64 0, i64 0, !dbg !116: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {} %.fca.1.0.1.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 1, i64 0, i64 1, !dbg !24: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %86 = add i64 %77, %75, !dbg !365: {[-1]:Integer}, intvals: {0,} %78 = or i64 %77, 1, !dbg !318: {[-1]:Integer}, intvals: {} %129 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %128, !dbg !365: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} [1 x [2 x i64]] [[2 x i64] [i64 1, i64 poison]]: {[-1]:Anything}, intvals: {} call fastcc void @julia_copyto__1477({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %54, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(40) %7) #37, !dbg !263: {}, intvals: {} %55 = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } zeroinitializer, {} addrspace(10)* %54, 0, !dbg !282: {[0]:Pointer, [0,0]:Pointer, [0,0,-1]:Float@double, [0,8]:Integer, [0,9]:Integer, [0,10]:Integer, [0,11]:Integer, [0,12]:Integer, [0,13]:Integer, [0,14]:Integer, [0,15]:Integer, [0,16]:Integer, [0,17]:Integer, [0,18]:Integer, [0,19]:Integer, [0,20]:Integer, [0,21]:Integer, [0,22]:Integer, [0,23]:Integer, [0,24]:Integer, [0,25]:Integer, [0,26]:Integer, [0,27]:Integer, [0,28]:Integer, [0,29]:Integer, [0,30]:Integer, [0,31]:Integer, [0,32]:Integer, [0,33]:Integer, [0,34]:Integer, [0,35]:Integer, [0,36]:Integer, [0,37]:Integer, [0,38]:Integer, [0,39]:Integer, [8]:Anything, [9]:Anything, [10]:Anything, [11]:Anything, [12]:Anything, [13]:Anything, [14]:Anything, [15]:Anything, [16]:Anything, [17]:Anything, [18]:Anything, [19]:Anything, [20]:Anything, [21]:Anything, [22]:Anything, [23]:Anything, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything, [32]:Anything, [33]:Anything, [34]:Anything, [35]:Anything, [36]:Anything, [37]:Anything, [38]:Anything, [39]:Anything}, intvals: {} %25 = icmp eq i64 %17, 1, !dbg !108: {[-1]:Integer}, intvals: {} %arrayref.i.epil = load double, double addrspace(13)* %123, align 8, !dbg !343, !tbaa !345, !alias.scope !114, !noalias !347: {[-1]:Float@double}, intvals: {} { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } poison: {[-1]:Anything}, intvals: {} %40 = addrspacecast {} addrspace(10)* %getfield28.i to {} addrspace(11)*, !dbg !179: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %84 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %83, !dbg !355: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %20 = call i64 @llvm.smax.i64(i64 %19, i64 noundef 0) #37, !dbg !91: {[-1]:Integer}, intvals: {} i64 0: {[-1]:Anything}, intvals: {0,} i64 9223372036854775804: {[-1]:Anything}, intvals: {9223372036854775804,} %.fca.2.gep = getelementptr inbounds { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* %6, i64 0, i32 2, !dbg !24: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %130 = add nuw i64 %iv.next, 1, !dbg !372: {[-1]:Integer}, intvals: {2,} %91 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %90, !dbg !343: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %44 = add i64 %43, %unbox148.i.fca.1.0.1.load.pn, !dbg !213: {[-1]:Integer}, intvals: {} %101 = getelementptr inbounds double, double addrspace(13)* %arrayptr93.i61, i64 %100, !dbg !343: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %phi.bo = add i64 %unbox162.i.fca.2.load, -1, !dbg !189: {[-1]:Integer}, intvals: {} %67 = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %.pn56, 0: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %6 = alloca { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, align 8, !dbg !24, !enzyme_type !34: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %83 = add i64 %82, %.pn57, !dbg !355: {[-1]:Integer}, intvals: {} {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151445231360 to {}*) to {} addrspace(10)*): {[-1]:Anything}, intvals: {} %arrayptr30.i = load i8*, i8** %42, align 8, !dbg !179, !tbaa !40, !invariant.load !23, !alias.scope !65, !noalias !68, !nonnull !23: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %.pn57 = phi i64 [ -1, %L147.i ], [ %phi.bo, %L179.i ]: {[-1]:Integer}, intvals: {-1,} %8 = bitcast [2 x [1 x i64]]* %newstruct16.i to i8*: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {} %21 = sub i64 %unbox7.i, %unbox8.i, !dbg !44: {[-1]:Integer}, intvals: {} %arrayref101.i.2 = load double, double addrspace(13)* %104, align 8, !dbg !355, !tbaa !345, !alias.scope !114, !noalias !347: {[-1]:Float@double}, intvals: {} %.not59 = icmp eq i64 %.sroa.042.0, 0: {[-1]:Integer}, intvals: {} %unbox.i = load i64, i64* %.fca.1.0.1.gep8, align 8, !dbg !44, !alias.scope !65, !noalias !68: {[-1]:Integer}, intvals: {} %116 = add i64 %98, %75, !dbg !365: {[-1]:Integer}, intvals: {} %74 = mul i64 %arraysize91.i, %73: {[-1]:Integer}, intvals: {} %118 = add i64 %74, %65: {[-1]:Integer}, intvals: {} %97 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %96, !dbg !365: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %.fca.1.0.0.gep6 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 1, i64 0, i64 0, !dbg !24: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %63 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr90.i to i64 addrspace(11)*: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer}, intvals: {} %16 = sub i64 %15, %unbox2.i, !dbg !73: {[-1]:Integer}, intvals: {} %137 = addrspacecast [2 x [1 x i64]]* %newstruct16.i to [2 x [1 x i64]] addrspace(11)*, !dbg !152: {}, intvals: {} %.fca.2.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 2, !dbg !24: {[-1]:Integer}, intvals: {} %107 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %106, !dbg !365: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %122 = add i64 %118, %121, !dbg !343: {[-1]:Integer}, intvals: {} %arrayref.i.1 = load double, double addrspace(13)* %91, align 8, !dbg !343, !tbaa !345, !alias.scope !114, !noalias !347: {[-1]:Float@double}, intvals: {} %26 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_box_int64(i64 signext %17) #38, !dbg !109: {}, intvals: {} %87 = getelementptr inbounds double, double addrspace(13)* %arrayptr106.i63, i64 %86, !dbg !365: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} {}* inttoptr (i64 140151423430080 to {}*): {[-1]:Anything}, intvals: {} i64 1: {[-1]:Integer}, intvals: {1,} %unbox148.i.fca.0.load = load {} addrspace(10)*, {} addrspace(10)** %unbox148.i.fca.0.gep, align 8, !dbg !189, !tbaa !117, !alias.scope !119, !noalias !203: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %unroll_iter = and i64 %.sroa.042.0, 9223372036854775804: {[-1]:Anything}, intvals: {} %98 = or i64 %77, 3, !dbg !318: {[-1]:Integer}, intvals: {} %.fca.3.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 3, !dbg !24: {[-1]:Integer}, intvals: {} %memcpy_refined_dst18.i = getelementptr inbounds [2 x [1 x i64]], [2 x [1 x i64]]* %newstruct16.i, i64 0, i64 1, i64 0, !dbg !116: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {} %58 = sub i64 1, %.fca.0.0.extract19, !dbg !288: {[-1]:Integer}, intvals: {} %22 = add i64 %21, 1, !dbg !73: {[-1]:Integer}, intvals: {} %iv3 = phi i64 [ %iv.next4, %L221.i.epil ], [ 0, %L221.i.epil.preheader ]: {[-1]:Integer}, intvals: {0,} i64 -1: {[-1]:Anything}, intvals: {-1,} %115 = fadd double %arrayref.i.3, %arrayref101.i.3, !dbg !359: {[-1]:Float@double}, intvals: {} %.sroa.042.0 = phi i64 [ %23, %entry ], [ %17, %L35.i ]: {[-1]:Integer}, intvals: {} %12 = call {}*** @julia.get_pgcstack() #37: {[-1]:Pointer, [-1,16]:Pointer}, intvals: {} %104 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %103, !dbg !355: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %epil.iter.cmp.not = icmp eq i64 %iv.next4, %xtraiter, !dbg !317: {[-1]:Integer}, intvals: {} {}* inttoptr (i64 140151617005072 to {}*): {[-1]:Anything}, intvals: {} %current_task1.i = bitcast {}*** %current_task1.i48 to {}**: {}, intvals: {} %ptls_field.i49 = getelementptr inbounds {}**, {}*** %12, i64 2: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {} %arraysize91.i = load i64, i64 addrspace(11)* %63, align 8, !tbaa !40, !range !143, !invariant.load !23, !alias.scope !65, !noalias !68: {[-1]:Integer}, intvals: {} %4 = alloca { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, align 8, !dbg !24, !enzyme_type !25: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer, [-1,48]:Integer, [-1,49]:Integer, [-1,50]:Integer, [-1,51]:Integer, [-1,52]:Integer, [-1,53]:Integer, [-1,54]:Integer, [-1,55]:Integer}, intvals: {} %current_task1.i48 = getelementptr inbounds {}**, {}*** %12, i64 -14: {}, intvals: {} %99 = select i1 %50, i64 0, i64 %88, !dbg !322: {[-1]:Integer}, intvals: {} %unbox162.i.fca.2.load = load i64, i64* %.fca.2.gep, align 8, !dbg !189, !alias.scope !65, !noalias !68: {[-1]:Integer}, intvals: {} %136 = addrspacecast [2 x [1 x i64]]* %newstruct126.i to [2 x [1 x i64]] addrspace(11)*, !dbg !152: {}, intvals: {} %.fca.0.0.extract19 = extractvalue [1 x [2 x i64]] %57, 0, 0, !dbg !284: {[-1]:Integer}, intvals: {} %.fca.1.0.1.extract = extractvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %1, 1, 0, 1, !dbg !24: {[-1]:Integer}, intvals: {} %138 = call fastcc double @julia__mapreduce_1461({} addrspace(10)* nocapture nofree noundef nonnull readonly align 16 dereferenceable(40) %32) #37, !dbg !388: {[-1]:Float@double}, intvals: {} %28 = call nonnull {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151445231360 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 140151423430080 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151520884224 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %26, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140151520884192 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %27) #39, !dbg !109: {}, intvals: {} %37 = addrspacecast {} addrspace(10)* %32 to {} addrspace(11)*, !dbg !135: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %unbox4.i = load i64, i64* %.fca.1.1.0.gep, align 8, !dbg !86, !alias.scope !65, !noalias !68: {[-1]:Integer}, intvals: {} %49 = icmp eq i64 %48, 1, !dbg !229: {[-1]:Integer}, intvals: {} %46 = sub i64 1, %unbox148.i.fca.1.1.0.load.pn, !dbg !219: {[-1]:Integer}, intvals: {} %114 = getelementptr inbounds double, double addrspace(13)* %arrayptr100.i62, i64 %113, !dbg !355: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %108 = add nuw nsw i64 %77, 4, !dbg !318: {[-1]:Integer}, intvals: {4,} %.fca.3.gep12 = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %4, i64 0, i32 3, !dbg !24: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %61 = icmp eq i64 %60, 1, !dbg !298: {[-1]:Integer}, intvals: {} %arraysize_ptr90.i = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %62, i64 3: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer}, intvals: {} %newstruct16.i = alloca [2 x [1 x i64]], align 8: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {} %narrow = and i1 %133, %not., !dbg !382: {[-1]:Integer}, intvals: {} %arrayref.i.2 = load double, double addrspace(13)* %101, align 8, !dbg !343, !tbaa !345, !alias.scope !114, !noalias !347: {[-1]:Float@double}, intvals: {} %125 = add i64 %124, %.pn57, !dbg !355: {[-1]:Integer}, intvals: {} %unbox148.i.fca.1.1.0.gep = getelementptr inbounds { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [2 x [2 x i64]], i64, i64 }* %2, i64 0, i32 1, i64 1, i64 0, !dbg !189: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %arrayptr93.i61 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %66, align 8, !tbaa !40, !invariant.load !23, !alias.scope !315, !noalias !68, !nonnull !23: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {} %69 = addrspacecast {} addrspace(10)* %32 to double addrspace(13)* addrspace(11)*: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {} %56 = insertvalue { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } %55, [1 x [2 x i64]] %unbox55.i.fca.0.1.insert, 1, !dbg !282: {[0]:Pointer, [0,0]:Pointer, [0,0,-1]:Float@double, [0,8]:Integer, [0,9]:Integer, [0,10]:Integer, [0,11]:Integer, [0,12]:Integer, [0,13]:Integer, [0,14]:Integer, [0,15]:Integer, [0,16]:Integer, [0,17]:Integer, [0,18]:Integer, [0,19]:Integer, [0,20]:Integer, [0,21]:Integer, [0,22]:Integer, [0,23]:Integer, [0,24]:Integer, [0,25]:Integer, [0,26]:Integer, [0,27]:Integer, [0,28]:Integer, [0,29]:Integer, [0,30]:Integer, [0,31]:Integer, [0,32]:Integer, [0,33]:Integer, [0,34]:Integer, [0,35]:Integer, [0,36]:Integer, [0,37]:Integer, [0,38]:Integer, [0,39]:Integer, [8]:Anything, [9]:Anything, [10]:Anything, [11]:Anything, [12]:Anything, [13]:Anything, [14]:Anything, [15]:Anything, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything, [32]:Anything, [33]:Anything, [34]:Anything, [35]:Anything, [36]:Anything, [37]:Anything, [38]:Anything, [39]:Anything}, intvals: {} %119 = add nuw nsw i64 %value_phi70.i67.unr, %iv3, !dbg !318: {[-1]:Anything}, intvals: {0,} %60 = call i64 @llvm.smax.i64(i64 %59, i64 noundef 0) #37, !dbg !293: {[-1]:Integer}, intvals: {} %76 = add i64 %74, %65: {[-1]:Integer}, intvals: {} Cannot deduce type of phi %.pn56 = phi { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } [ %56, %L147.i ], [ %unbox162.i.fca.1.0.1.insert, %L179.i ]{[0]:Pointer, [0,0]:Pointer, [0,0,-1]:Float@double, [0,8]:Integer, [0,9]:Integer, [0,10]:Integer, [0,11]:Integer, [0,12]:Integer, [0,13]:Integer, [0,14]:Integer, [0,15]:Integer, [0,16]:Integer, [0,17]:Integer, [0,18]:Integer, [0,19]:Integer, [0,20]:Integer, [0,21]:Integer, [0,22]:Integer, [0,23]:Integer, [0,24]:Integer, [0,25]:Integer, [0,26]:Integer, [0,27]:Integer, [0,28]:Integer, [0,29]:Integer, [0,30]:Integer, [0,31]:Integer, [0,32]:Integer, [0,33]:Integer, [0,34]:Integer, [0,35]:Integer, [0,36]:Integer, [0,37]:Integer, [0,38]:Integer, [0,39]:Integer, [8]:Integer, [9]:Integer, [10]:Integer, [11]:Integer, [12]:Integer, [13]:Integer, [14]:Integer, [15]:Integer, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything, [32]:Anything, [33]:Anything, [34]:Anything, [35]:Anything, [36]:Anything, [37]:Anything, [38]:Anything, [39]:Anything} sz: 40 Caused by: Stacktrace: [1] getproperty @ ./Base.jl:37 [2] axes @ ./subarray.jl:490 [3] newindexer @ ./broadcast.jl:625 [4] extrude @ ./broadcast.jl:676 [5] preprocess @ ./broadcast.jl:984 [6] preprocess_args @ ./broadcast.jl:987 [7] preprocess_args @ ./broadcast.jl:986 [8] preprocess @ ./broadcast.jl:983 [9] copyto! @ ./broadcast.jl:1000 [10] copyto! @ ./broadcast.jl:956 [11] copy @ ./broadcast.jl:928 [12] materialize @ ./broadcast.jl:903 [13] loss @ ~/dms/molly_dev/enzyme_err37.jl:8 [14] loss @ ~/dms/molly_dev/enzyme_err37.jl:0 Stacktrace: [1] throwerr(cstr::Cstring) @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:1289 [2] diffejulia_loss_1448_inner_1wrap @ ./essentials.jl:0 [3] macro expansion @ ~/.julia/dev/Enzyme/src/compiler.jl:5440 [inlined] [4] enzyme_call(::Val{false}, ::Ptr{Nothing}, ::Type{Enzyme.Compiler.CombinedAdjointThunk}, ::Type{Val{1}}, ::Val{false}, ::Type{Tuple{Duplicated{SubArray{Float64, 2, Matrix{Float64}, Tuple{UnitRange{Int64}, UnitRange{Int64}}, false}}, Duplicated{SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}}}}, ::Type{Active{Float64}}, ::Const{typeof(loss)}, ::Type{Nothing}, ::Duplicated{SubArray{Float64, 2, Matrix{Float64}, Tuple{UnitRange{Int64}, UnitRange{Int64}}, false}}, ::Duplicated{SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}}, ::Float64) @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:5118 [5] (::Enzyme.Compiler.CombinedAdjointThunk{Ptr{Nothing}, Const{typeof(loss)}, Active{Float64}, Tuple{Duplicated{SubArray{Float64, 2, Matrix{Float64}, Tuple{UnitRange{Int64}, UnitRange{Int64}}, false}}, Duplicated{SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}}}, Val{1}, Val{false}()})(::Const{typeof(loss)}, ::Duplicated{SubArray{Float64, 2, Matrix{Float64}, Tuple{UnitRange{Int64}, UnitRange{Int64}}, false}}, ::Vararg{Any}) @ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:5000 [6] autodiff @ ~/.julia/dev/Enzyme/src/Enzyme.jl:275 [inlined] [7] autodiff(::ReverseMode{false, FFIABI, false}, ::typeof(loss), ::Type{Active}, ::Duplicated{SubArray{Float64, 2, Matrix{Float64}, Tuple{UnitRange{Int64}, UnitRange{Int64}}, false}}, ::Duplicated{SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}}) @ Enzyme ~/.julia/dev/Enzyme/src/Enzyme.jl:287