; LLVM IR from stan-dev/math :: lib/sundials_6.1.1/src/sunlinsol/spgmr (sunlinsol_spgmr)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct._generic_SUNLinearSolver = type { ptr, ptr, ptr }
%struct._SUNLinearSolverContent_SPGMR = type { i32, i32, i32, i32, i32, i32, double, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr }

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nounwind uwtable
define dso_local i32 @SUNLinSolSolve_SPGMR(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, double noundef %4) #1 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca double, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store double %4, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  store i32 0, ptr %36, align 4, !tbaa !11
  store i32 0, ptr %38, align 4, !tbaa !11
  %51 = load ptr, ptr %7, align 8, !tbaa !5
  %52 = icmp eq ptr %51, null
  br i1 %52, label %53, label %54

53:                                               ; preds = %5
  store i32 -801, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

54:                                               ; preds = %5
  %55 = load ptr, ptr %7, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %55, i32 0, i32 0
  %57 = load ptr, ptr %56, align 8, !tbaa !13
  %58 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %57, i32 0, i32 0
  %59 = load i32, ptr %58, align 8, !tbaa !15
  store i32 %59, ptr %37, align 4, !tbaa !11
  %60 = load ptr, ptr %7, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %60, i32 0, i32 0
  %62 = load ptr, ptr %61, align 8, !tbaa !13
  %63 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %62, i32 0, i32 3
  %64 = load i32, ptr %63, align 4, !tbaa !17
  store i32 %64, ptr %41, align 4, !tbaa !11
  %65 = load ptr, ptr %7, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %65, i32 0, i32 0
  %67 = load ptr, ptr %66, align 8, !tbaa !13
  %68 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %67, i32 0, i32 2
  %69 = load i32, ptr %68, align 8, !tbaa !18
  store i32 %69, ptr %42, align 4, !tbaa !11
  %70 = load ptr, ptr %7, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %70, i32 0, i32 0
  %72 = load ptr, ptr %71, align 8, !tbaa !13
  %73 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %72, i32 0, i32 15
  %74 = load ptr, ptr %73, align 8, !tbaa !19
  store ptr %74, ptr %12, align 8, !tbaa !5
  %75 = load ptr, ptr %7, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %75, i32 0, i32 0
  %77 = load ptr, ptr %76, align 8, !tbaa !13
  %78 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %77, i32 0, i32 16
  %79 = load ptr, ptr %78, align 8, !tbaa !20
  store ptr %79, ptr %17, align 8, !tbaa !5
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %80, i32 0, i32 0
  %82 = load ptr, ptr %81, align 8, !tbaa !13
  %83 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %82, i32 0, i32 17
  %84 = load ptr, ptr %83, align 8, !tbaa !21
  store ptr %84, ptr %18, align 8, !tbaa !5
  %85 = load ptr, ptr %7, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %85, i32 0, i32 0
  %87 = load ptr, ptr %86, align 8, !tbaa !13
  %88 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %87, i32 0, i32 18
  %89 = load ptr, ptr %88, align 8, !tbaa !22
  store ptr %89, ptr %13, align 8, !tbaa !5
  %90 = load ptr, ptr %7, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %90, i32 0, i32 0
  %92 = load ptr, ptr %91, align 8, !tbaa !13
  %93 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %92, i32 0, i32 19
  %94 = load ptr, ptr %93, align 8, !tbaa !23
  store ptr %94, ptr %19, align 8, !tbaa !5
  %95 = load ptr, ptr %7, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %95, i32 0, i32 0
  %97 = load ptr, ptr %96, align 8, !tbaa !13
  %98 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %97, i32 0, i32 20
  %99 = load ptr, ptr %98, align 8, !tbaa !24
  store ptr %99, ptr %14, align 8, !tbaa !5
  %100 = load ptr, ptr %7, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %100, i32 0, i32 0
  %102 = load ptr, ptr %101, align 8, !tbaa !13
  %103 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %102, i32 0, i32 13
  %104 = load ptr, ptr %103, align 8, !tbaa !25
  store ptr %104, ptr %15, align 8, !tbaa !5
  %105 = load ptr, ptr %7, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %105, i32 0, i32 0
  %107 = load ptr, ptr %106, align 8, !tbaa !13
  %108 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %107, i32 0, i32 14
  %109 = load ptr, ptr %108, align 8, !tbaa !26
  store ptr %109, ptr %16, align 8, !tbaa !5
  %110 = load ptr, ptr %7, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %110, i32 0, i32 0
  %112 = load ptr, ptr %111, align 8, !tbaa !13
  %113 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %112, i32 0, i32 9
  %114 = load ptr, ptr %113, align 8, !tbaa !27
  store ptr %114, ptr %44, align 8, !tbaa !5
  %115 = load ptr, ptr %7, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %115, i32 0, i32 0
  %117 = load ptr, ptr %116, align 8, !tbaa !13
  %118 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %117, i32 0, i32 12
  %119 = load ptr, ptr %118, align 8, !tbaa !28
  store ptr %119, ptr %45, align 8, !tbaa !5
  %120 = load ptr, ptr %7, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %120, i32 0, i32 0
  %122 = load ptr, ptr %121, align 8, !tbaa !13
  %123 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %122, i32 0, i32 8
  %124 = load ptr, ptr %123, align 8, !tbaa !29
  store ptr %124, ptr %46, align 8, !tbaa !5
  %125 = load ptr, ptr %7, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %125, i32 0, i32 0
  %127 = load ptr, ptr %126, align 8, !tbaa !13
  %128 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %127, i32 0, i32 11
  %129 = load ptr, ptr %128, align 8, !tbaa !30
  store ptr %129, ptr %47, align 8, !tbaa !5
  %130 = load ptr, ptr %7, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %130, i32 0, i32 0
  %132 = load ptr, ptr %131, align 8, !tbaa !13
  %133 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %132, i32 0, i32 4
  store ptr %133, ptr %31, align 8, !tbaa !5
  %134 = load ptr, ptr %7, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %134, i32 0, i32 0
  %136 = load ptr, ptr %135, align 8, !tbaa !13
  %137 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %136, i32 0, i32 5
  store ptr %137, ptr %43, align 8, !tbaa !5
  %138 = load ptr, ptr %7, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %138, i32 0, i32 0
  %140 = load ptr, ptr %139, align 8, !tbaa !13
  %141 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %140, i32 0, i32 6
  store ptr %141, ptr %20, align 8, !tbaa !5
  %142 = load ptr, ptr %7, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %142, i32 0, i32 0
  %144 = load ptr, ptr %143, align 8, !tbaa !13
  %145 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %144, i32 0, i32 21
  %146 = load ptr, ptr %145, align 8, !tbaa !31
  store ptr %146, ptr %48, align 8, !tbaa !5
  %147 = load ptr, ptr %7, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %147, i32 0, i32 0
  %149 = load ptr, ptr %148, align 8, !tbaa !13
  %150 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %149, i32 0, i32 22
  %151 = load ptr, ptr %150, align 8, !tbaa !32
  store ptr %151, ptr %49, align 8, !tbaa !5
  %152 = load ptr, ptr %43, align 8, !tbaa !5
  store i32 0, ptr %152, align 4, !tbaa !11
  store i32 0, ptr %30, align 4, !tbaa !11
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %153, i32 0, i32 0
  %155 = load ptr, ptr %154, align 8, !tbaa !13
  %156 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %155, i32 0, i32 1
  %157 = load i32, ptr %156, align 4, !tbaa !33
  %158 = icmp eq i32 %157, 1
  br i1 %158, label %166, label %159

159:                                              ; preds = %54
  %160 = load ptr, ptr %7, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %160, i32 0, i32 0
  %162 = load ptr, ptr %161, align 8, !tbaa !13
  %163 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %162, i32 0, i32 1
  %164 = load i32, ptr %163, align 4, !tbaa !33
  %165 = icmp eq i32 %164, 3
  br label %166

166:                                              ; preds = %159, %54
  %167 = phi i1 [ true, %54 ], [ %165, %159 ]
  %168 = zext i1 %167 to i32
  store i32 %168, ptr %26, align 4, !tbaa !11
  %169 = load ptr, ptr %7, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %169, i32 0, i32 0
  %171 = load ptr, ptr %170, align 8, !tbaa !13
  %172 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %171, i32 0, i32 1
  %173 = load i32, ptr %172, align 4, !tbaa !33
  %174 = icmp eq i32 %173, 2
  br i1 %174, label %182, label %175

175:                                              ; preds = %166
  %176 = load ptr, ptr %7, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %176, i32 0, i32 0
  %178 = load ptr, ptr %177, align 8, !tbaa !13
  %179 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %178, i32 0, i32 1
  %180 = load i32, ptr %179, align 4, !tbaa !33
  %181 = icmp eq i32 %180, 3
  br label %182

182:                                              ; preds = %175, %166
  %183 = phi i1 [ true, %166 ], [ %181, %175 ]
  %184 = zext i1 %183 to i32
  store i32 %184, ptr %27, align 4, !tbaa !11
  %185 = load ptr, ptr %15, align 8, !tbaa !5
  %186 = icmp ne ptr %185, null
  %187 = zext i1 %186 to i32
  store i32 %187, ptr %29, align 4, !tbaa !11
  %188 = load ptr, ptr %16, align 8, !tbaa !5
  %189 = icmp ne ptr %188, null
  %190 = zext i1 %189 to i32
  store i32 %190, ptr %28, align 4, !tbaa !11
  %191 = load ptr, ptr %46, align 8, !tbaa !5
  %192 = icmp eq ptr %191, null
  br i1 %192, label %193, label %204

193:                                              ; preds = %182
  %194 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %194, align 4, !tbaa !11
  %195 = load ptr, ptr %7, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %195, i32 0, i32 0
  %197 = load ptr, ptr %196, align 8, !tbaa !13
  %198 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %197, i32 0, i32 7
  store i32 -804, ptr %198, align 8, !tbaa !34
  %199 = load ptr, ptr %7, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %199, i32 0, i32 0
  %201 = load ptr, ptr %200, align 8, !tbaa !13
  %202 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %201, i32 0, i32 7
  %203 = load i32, ptr %202, align 8, !tbaa !34
  store i32 %203, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

204:                                              ; preds = %182
  %205 = load i32, ptr %26, align 4, !tbaa !11
  %206 = icmp ne i32 %205, 0
  br i1 %206, label %210, label %207

207:                                              ; preds = %204
  %208 = load i32, ptr %27, align 4, !tbaa !11
  %209 = icmp ne i32 %208, 0
  br i1 %209, label %210, label %224

210:                                              ; preds = %207, %204
  %211 = load ptr, ptr %47, align 8, !tbaa !5
  %212 = icmp eq ptr %211, null
  br i1 %212, label %213, label %224

213:                                              ; preds = %210
  %214 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %214, align 4, !tbaa !11
  %215 = load ptr, ptr %7, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %215, i32 0, i32 0
  %217 = load ptr, ptr %216, align 8, !tbaa !13
  %218 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %217, i32 0, i32 7
  store i32 -807, ptr %218, align 8, !tbaa !34
  %219 = load ptr, ptr %7, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %219, i32 0, i32 0
  %221 = load ptr, ptr %220, align 8, !tbaa !13
  %222 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %221, i32 0, i32 7
  %223 = load i32, ptr %222, align 8, !tbaa !34
  store i32 %223, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

224:                                              ; preds = %210, %207
  %225 = load ptr, ptr %31, align 8, !tbaa !5
  %226 = load i32, ptr %225, align 4, !tbaa !11
  %227 = icmp ne i32 %226, 0
  br i1 %227, label %228, label %231

228:                                              ; preds = %224
  %229 = load ptr, ptr %10, align 8, !tbaa !5
  %230 = load ptr, ptr %14, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %229, ptr noundef %230)
  br label %258

231:                                              ; preds = %224
  %232 = load ptr, ptr %46, align 8, !tbaa !5
  %233 = load ptr, ptr %44, align 8, !tbaa !5
  %234 = load ptr, ptr %9, align 8, !tbaa !5
  %235 = load ptr, ptr %14, align 8, !tbaa !5
  %236 = call i32 %232(ptr noundef %233, ptr noundef %234, ptr noundef %235)
  store i32 %236, ptr %39, align 4, !tbaa !11
  %237 = load i32, ptr %39, align 4, !tbaa !11
  %238 = icmp ne i32 %237, 0
  br i1 %238, label %239, label %254

239:                                              ; preds = %231
  %240 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %240, align 4, !tbaa !11
  %241 = load i32, ptr %39, align 4, !tbaa !11
  %242 = icmp slt i32 %241, 0
  %243 = zext i1 %242 to i64
  %244 = select i1 %242, i32 -805, i32 803
  %245 = load ptr, ptr %7, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %245, i32 0, i32 0
  %247 = load ptr, ptr %246, align 8, !tbaa !13
  %248 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %247, i32 0, i32 7
  store i32 %244, ptr %248, align 8, !tbaa !34
  %249 = load ptr, ptr %7, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %249, i32 0, i32 0
  %251 = load ptr, ptr %250, align 8, !tbaa !13
  %252 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %251, i32 0, i32 7
  %253 = load i32, ptr %252, align 8, !tbaa !34
  store i32 %253, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

254:                                              ; preds = %231
  %255 = load ptr, ptr %10, align 8, !tbaa !5
  %256 = load ptr, ptr %14, align 8, !tbaa !5
  %257 = load ptr, ptr %14, align 8, !tbaa !5
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %255, double noundef -1.000000e+00, ptr noundef %256, ptr noundef %257)
  br label %258

258:                                              ; preds = %254, %228
  %259 = load ptr, ptr %14, align 8, !tbaa !5
  %260 = load ptr, ptr %12, align 8, !tbaa !5
  %261 = getelementptr inbounds ptr, ptr %260, i64 0
  %262 = load ptr, ptr %261, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %259, ptr noundef %262)
  %263 = load i32, ptr %26, align 4, !tbaa !11
  %264 = icmp ne i32 %263, 0
  br i1 %264, label %265, label %292

265:                                              ; preds = %258
  %266 = load ptr, ptr %47, align 8, !tbaa !5
  %267 = load ptr, ptr %45, align 8, !tbaa !5
  %268 = load ptr, ptr %12, align 8, !tbaa !5
  %269 = getelementptr inbounds ptr, ptr %268, i64 0
  %270 = load ptr, ptr %269, align 8, !tbaa !5
  %271 = load ptr, ptr %14, align 8, !tbaa !5
  %272 = load double, ptr %11, align 8, !tbaa !9
  %273 = call i32 %266(ptr noundef %267, ptr noundef %270, ptr noundef %271, double noundef %272, i32 noundef 1)
  store i32 %273, ptr %39, align 4, !tbaa !11
  %274 = load i32, ptr %39, align 4, !tbaa !11
  %275 = icmp ne i32 %274, 0
  br i1 %275, label %276, label %291

276:                                              ; preds = %265
  %277 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %277, align 4, !tbaa !11
  %278 = load i32, ptr %39, align 4, !tbaa !11
  %279 = icmp slt i32 %278, 0
  %280 = zext i1 %279 to i64
  %281 = select i1 %279, i32 -808, i32 805
  %282 = load ptr, ptr %7, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %282, i32 0, i32 0
  %284 = load ptr, ptr %283, align 8, !tbaa !13
  %285 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %284, i32 0, i32 7
  store i32 %281, ptr %285, align 8, !tbaa !34
  %286 = load ptr, ptr %7, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %286, i32 0, i32 0
  %288 = load ptr, ptr %287, align 8, !tbaa !13
  %289 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %288, i32 0, i32 7
  %290 = load i32, ptr %289, align 8, !tbaa !34
  store i32 %290, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

291:                                              ; preds = %265
  br label %297

292:                                              ; preds = %258
  %293 = load ptr, ptr %12, align 8, !tbaa !5
  %294 = getelementptr inbounds ptr, ptr %293, i64 0
  %295 = load ptr, ptr %294, align 8, !tbaa !5
  %296 = load ptr, ptr %14, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %295, ptr noundef %296)
  br label %297

297:                                              ; preds = %292, %291
  %298 = load i32, ptr %29, align 4, !tbaa !11
  %299 = icmp ne i32 %298, 0
  br i1 %299, label %300, label %306

300:                                              ; preds = %297
  %301 = load ptr, ptr %15, align 8, !tbaa !5
  %302 = load ptr, ptr %14, align 8, !tbaa !5
  %303 = load ptr, ptr %12, align 8, !tbaa !5
  %304 = getelementptr inbounds ptr, ptr %303, i64 0
  %305 = load ptr, ptr %304, align 8, !tbaa !5
  call void @N_VProd(ptr noundef %301, ptr noundef %302, ptr noundef %305)
  br label %311

306:                                              ; preds = %297
  %307 = load ptr, ptr %14, align 8, !tbaa !5
  %308 = load ptr, ptr %12, align 8, !tbaa !5
  %309 = getelementptr inbounds ptr, ptr %308, i64 0
  %310 = load ptr, ptr %309, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %307, ptr noundef %310)
  br label %311

311:                                              ; preds = %306, %300
  %312 = load ptr, ptr %12, align 8, !tbaa !5
  %313 = getelementptr inbounds ptr, ptr %312, i64 0
  %314 = load ptr, ptr %313, align 8, !tbaa !5
  %315 = load ptr, ptr %12, align 8, !tbaa !5
  %316 = getelementptr inbounds ptr, ptr %315, i64 0
  %317 = load ptr, ptr %316, align 8, !tbaa !5
  %318 = call double @N_VDotProd(ptr noundef %314, ptr noundef %317)
  %319 = fcmp ole double %318, 0.000000e+00
  br i1 %319, label %320, label %321

320:                                              ; preds = %311
  br label %330

321:                                              ; preds = %311
  %322 = load ptr, ptr %12, align 8, !tbaa !5
  %323 = getelementptr inbounds ptr, ptr %322, i64 0
  %324 = load ptr, ptr %323, align 8, !tbaa !5
  %325 = load ptr, ptr %12, align 8, !tbaa !5
  %326 = getelementptr inbounds ptr, ptr %325, i64 0
  %327 = load ptr, ptr %326, align 8, !tbaa !5
  %328 = call double @N_VDotProd(ptr noundef %324, ptr noundef %327)
  %329 = call double @sqrt(double noundef %328) #5
  br label %330

330:                                              ; preds = %321, %320
  %331 = phi double [ 0.000000e+00, %320 ], [ %329, %321 ]
  store double %331, ptr %21, align 8, !tbaa !9
  store double %331, ptr %23, align 8, !tbaa !9
  %332 = load ptr, ptr %20, align 8, !tbaa !5
  store double %331, ptr %332, align 8, !tbaa !9
  %333 = load double, ptr %23, align 8, !tbaa !9
  %334 = load double, ptr %11, align 8, !tbaa !9
  %335 = fcmp ole double %333, %334
  br i1 %335, label %336, label %347

336:                                              ; preds = %330
  %337 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %337, align 4, !tbaa !11
  %338 = load ptr, ptr %7, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %338, i32 0, i32 0
  %340 = load ptr, ptr %339, align 8, !tbaa !13
  %341 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %340, i32 0, i32 7
  store i32 0, ptr %341, align 8, !tbaa !34
  %342 = load ptr, ptr %7, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %342, i32 0, i32 0
  %344 = load ptr, ptr %343, align 8, !tbaa !13
  %345 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %344, i32 0, i32 7
  %346 = load i32, ptr %345, align 8, !tbaa !34
  store i32 %346, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

347:                                              ; preds = %330
  %348 = load double, ptr %21, align 8, !tbaa !9
  store double %348, ptr %25, align 8, !tbaa !9
  %349 = load ptr, ptr %13, align 8, !tbaa !5
  call void @N_VConst(double noundef 0.000000e+00, ptr noundef %349)
  store i32 0, ptr %40, align 4, !tbaa !11
  br label %350

350:                                              ; preds = %909, %347
  %351 = load i32, ptr %40, align 4, !tbaa !11
  %352 = load i32, ptr %41, align 4, !tbaa !11
  %353 = icmp sle i32 %351, %352
  br i1 %353, label %354, label %912

354:                                              ; preds = %350
  store i32 0, ptr %32, align 4, !tbaa !11
  br label %355

355:                                              ; preds = %377, %354
  %356 = load i32, ptr %32, align 4, !tbaa !11
  %357 = load i32, ptr %37, align 4, !tbaa !11
  %358 = icmp sle i32 %356, %357
  br i1 %358, label %359, label %380

359:                                              ; preds = %355
  store i32 0, ptr %33, align 4, !tbaa !11
  br label %360

360:                                              ; preds = %373, %359
  %361 = load i32, ptr %33, align 4, !tbaa !11
  %362 = load i32, ptr %37, align 4, !tbaa !11
  %363 = icmp slt i32 %361, %362
  br i1 %363, label %364, label %376

364:                                              ; preds = %360
  %365 = load ptr, ptr %17, align 8, !tbaa !5
  %366 = load i32, ptr %32, align 4, !tbaa !11
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds ptr, ptr %365, i64 %367
  %369 = load ptr, ptr %368, align 8, !tbaa !5
  %370 = load i32, ptr %33, align 4, !tbaa !11
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds double, ptr %369, i64 %371
  store double 0.000000e+00, ptr %372, align 8, !tbaa !9
  br label %373

373:                                              ; preds = %364
  %374 = load i32, ptr %33, align 4, !tbaa !11
  %375 = add nsw i32 %374, 1
  store i32 %375, ptr %33, align 4, !tbaa !11
  br label %360, !llvm.loop !35

376:                                              ; preds = %360
  br label %377

377:                                              ; preds = %376
  %378 = load i32, ptr %32, align 4, !tbaa !11
  %379 = add nsw i32 %378, 1
  store i32 %379, ptr %32, align 4, !tbaa !11
  br label %355, !llvm.loop !37

380:                                              ; preds = %355
  store double 1.000000e+00, ptr %22, align 8, !tbaa !9
  %381 = load double, ptr %23, align 8, !tbaa !9
  %382 = fdiv double 1.000000e+00, %381
  %383 = load ptr, ptr %12, align 8, !tbaa !5
  %384 = getelementptr inbounds ptr, ptr %383, i64 0
  %385 = load ptr, ptr %384, align 8, !tbaa !5
  %386 = load ptr, ptr %12, align 8, !tbaa !5
  %387 = getelementptr inbounds ptr, ptr %386, i64 0
  %388 = load ptr, ptr %387, align 8, !tbaa !5
  call void @N_VScale(double noundef %382, ptr noundef %385, ptr noundef %388)
  store i32 0, ptr %35, align 4, !tbaa !11
  br label %389

389:                                              ; preds = %655, %380
  %390 = load i32, ptr %35, align 4, !tbaa !11
  %391 = load i32, ptr %37, align 4, !tbaa !11
  %392 = icmp slt i32 %390, %391
  br i1 %392, label %393, label %658

393:                                              ; preds = %389
  %394 = load ptr, ptr %43, align 8, !tbaa !5
  %395 = load i32, ptr %394, align 4, !tbaa !11
  %396 = add nsw i32 %395, 1
  store i32 %396, ptr %394, align 4, !tbaa !11
  %397 = load i32, ptr %35, align 4, !tbaa !11
  %398 = add nsw i32 %397, 1
  store i32 %398, ptr %36, align 4, !tbaa !11
  store i32 %398, ptr %38, align 4, !tbaa !11
  %399 = load i32, ptr %28, align 4, !tbaa !11
  %400 = icmp ne i32 %399, 0
  br i1 %400, label %401, label %409

401:                                              ; preds = %393
  %402 = load ptr, ptr %12, align 8, !tbaa !5
  %403 = load i32, ptr %35, align 4, !tbaa !11
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds ptr, ptr %402, i64 %404
  %406 = load ptr, ptr %405, align 8, !tbaa !5
  %407 = load ptr, ptr %16, align 8, !tbaa !5
  %408 = load ptr, ptr %14, align 8, !tbaa !5
  call void @N_VDiv(ptr noundef %406, ptr noundef %407, ptr noundef %408)
  br label %416

409:                                              ; preds = %393
  %410 = load ptr, ptr %12, align 8, !tbaa !5
  %411 = load i32, ptr %35, align 4, !tbaa !11
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds ptr, ptr %410, i64 %412
  %414 = load ptr, ptr %413, align 8, !tbaa !5
  %415 = load ptr, ptr %14, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %414, ptr noundef %415)
  br label %416

416:                                              ; preds = %409, %401
  %417 = load i32, ptr %27, align 4, !tbaa !11
  %418 = icmp ne i32 %417, 0
  br i1 %418, label %419, label %454

419:                                              ; preds = %416
  %420 = load ptr, ptr %14, align 8, !tbaa !5
  %421 = load ptr, ptr %12, align 8, !tbaa !5
  %422 = load i32, ptr %36, align 4, !tbaa !11
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds ptr, ptr %421, i64 %423
  %425 = load ptr, ptr %424, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %420, ptr noundef %425)
  %426 = load ptr, ptr %47, align 8, !tbaa !5
  %427 = load ptr, ptr %45, align 8, !tbaa !5
  %428 = load ptr, ptr %12, align 8, !tbaa !5
  %429 = load i32, ptr %36, align 4, !tbaa !11
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds ptr, ptr %428, i64 %430
  %432 = load ptr, ptr %431, align 8, !tbaa !5
  %433 = load ptr, ptr %14, align 8, !tbaa !5
  %434 = load double, ptr %11, align 8, !tbaa !9
  %435 = call i32 %426(ptr noundef %427, ptr noundef %432, ptr noundef %433, double noundef %434, i32 noundef 2)
  store i32 %435, ptr %39, align 4, !tbaa !11
  %436 = load i32, ptr %39, align 4, !tbaa !11
  %437 = icmp ne i32 %436, 0
  br i1 %437, label %438, label %453

438:                                              ; preds = %419
  %439 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %439, align 4, !tbaa !11
  %440 = load i32, ptr %39, align 4, !tbaa !11
  %441 = icmp slt i32 %440, 0
  %442 = zext i1 %441 to i64
  %443 = select i1 %441, i32 -808, i32 805
  %444 = load ptr, ptr %7, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %444, i32 0, i32 0
  %446 = load ptr, ptr %445, align 8, !tbaa !13
  %447 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %446, i32 0, i32 7
  store i32 %443, ptr %447, align 8, !tbaa !34
  %448 = load ptr, ptr %7, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %448, i32 0, i32 0
  %450 = load ptr, ptr %449, align 8, !tbaa !13
  %451 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %450, i32 0, i32 7
  %452 = load i32, ptr %451, align 8, !tbaa !34
  store i32 %452, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

453:                                              ; preds = %419
  br label %454

454:                                              ; preds = %453, %416
  %455 = load ptr, ptr %46, align 8, !tbaa !5
  %456 = load ptr, ptr %44, align 8, !tbaa !5
  %457 = load ptr, ptr %14, align 8, !tbaa !5
  %458 = load ptr, ptr %12, align 8, !tbaa !5
  %459 = load i32, ptr %36, align 4, !tbaa !11
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds ptr, ptr %458, i64 %460
  %462 = load ptr, ptr %461, align 8, !tbaa !5
  %463 = call i32 %455(ptr noundef %456, ptr noundef %457, ptr noundef %462)
  store i32 %463, ptr %39, align 4, !tbaa !11
  %464 = load i32, ptr %39, align 4, !tbaa !11
  %465 = icmp ne i32 %464, 0
  br i1 %465, label %466, label %481

466:                                              ; preds = %454
  %467 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %467, align 4, !tbaa !11
  %468 = load i32, ptr %39, align 4, !tbaa !11
  %469 = icmp slt i32 %468, 0
  %470 = zext i1 %469 to i64
  %471 = select i1 %469, i32 -805, i32 803
  %472 = load ptr, ptr %7, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %472, i32 0, i32 0
  %474 = load ptr, ptr %473, align 8, !tbaa !13
  %475 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %474, i32 0, i32 7
  store i32 %471, ptr %475, align 8, !tbaa !34
  %476 = load ptr, ptr %7, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %476, i32 0, i32 0
  %478 = load ptr, ptr %477, align 8, !tbaa !13
  %479 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %478, i32 0, i32 7
  %480 = load i32, ptr %479, align 8, !tbaa !34
  store i32 %480, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

481:                                              ; preds = %454
  %482 = load i32, ptr %26, align 4, !tbaa !11
  %483 = icmp ne i32 %482, 0
  br i1 %483, label %484, label %513

484:                                              ; preds = %481
  %485 = load ptr, ptr %47, align 8, !tbaa !5
  %486 = load ptr, ptr %45, align 8, !tbaa !5
  %487 = load ptr, ptr %12, align 8, !tbaa !5
  %488 = load i32, ptr %36, align 4, !tbaa !11
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds ptr, ptr %487, i64 %489
  %491 = load ptr, ptr %490, align 8, !tbaa !5
  %492 = load ptr, ptr %14, align 8, !tbaa !5
  %493 = load double, ptr %11, align 8, !tbaa !9
  %494 = call i32 %485(ptr noundef %486, ptr noundef %491, ptr noundef %492, double noundef %493, i32 noundef 1)
  store i32 %494, ptr %39, align 4, !tbaa !11
  %495 = load i32, ptr %39, align 4, !tbaa !11
  %496 = icmp ne i32 %495, 0
  br i1 %496, label %497, label %512

497:                                              ; preds = %484
  %498 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %498, align 4, !tbaa !11
  %499 = load i32, ptr %39, align 4, !tbaa !11
  %500 = icmp slt i32 %499, 0
  %501 = zext i1 %500 to i64
  %502 = select i1 %500, i32 -808, i32 805
  %503 = load ptr, ptr %7, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %503, i32 0, i32 0
  %505 = load ptr, ptr %504, align 8, !tbaa !13
  %506 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %505, i32 0, i32 7
  store i32 %502, ptr %506, align 8, !tbaa !34
  %507 = load ptr, ptr %7, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %507, i32 0, i32 0
  %509 = load ptr, ptr %508, align 8, !tbaa !13
  %510 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %509, i32 0, i32 7
  %511 = load i32, ptr %510, align 8, !tbaa !34
  store i32 %511, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

512:                                              ; preds = %484
  br label %520

513:                                              ; preds = %481
  %514 = load ptr, ptr %12, align 8, !tbaa !5
  %515 = load i32, ptr %36, align 4, !tbaa !11
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds ptr, ptr %514, i64 %516
  %518 = load ptr, ptr %517, align 8, !tbaa !5
  %519 = load ptr, ptr %14, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %518, ptr noundef %519)
  br label %520

520:                                              ; preds = %513, %512
  %521 = load i32, ptr %29, align 4, !tbaa !11
  %522 = icmp ne i32 %521, 0
  br i1 %522, label %523, label %531

523:                                              ; preds = %520
  %524 = load ptr, ptr %15, align 8, !tbaa !5
  %525 = load ptr, ptr %14, align 8, !tbaa !5
  %526 = load ptr, ptr %12, align 8, !tbaa !5
  %527 = load i32, ptr %36, align 4, !tbaa !11
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds ptr, ptr %526, i64 %528
  %530 = load ptr, ptr %529, align 8, !tbaa !5
  call void @N_VProd(ptr noundef %524, ptr noundef %525, ptr noundef %530)
  br label %538

531:                                              ; preds = %520
  %532 = load ptr, ptr %14, align 8, !tbaa !5
  %533 = load ptr, ptr %12, align 8, !tbaa !5
  %534 = load i32, ptr %36, align 4, !tbaa !11
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds ptr, ptr %533, i64 %535
  %537 = load ptr, ptr %536, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %532, ptr noundef %537)
  br label %538

538:                                              ; preds = %531, %523
  %539 = load i32, ptr %42, align 4, !tbaa !11
  %540 = icmp eq i32 %539, 2
  br i1 %540, label %541, label %570

541:                                              ; preds = %538
  %542 = load ptr, ptr %12, align 8, !tbaa !5
  %543 = load ptr, ptr %17, align 8, !tbaa !5
  %544 = load i32, ptr %36, align 4, !tbaa !11
  %545 = load i32, ptr %37, align 4, !tbaa !11
  %546 = load ptr, ptr %17, align 8, !tbaa !5
  %547 = load i32, ptr %36, align 4, !tbaa !11
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds ptr, ptr %546, i64 %548
  %550 = load ptr, ptr %549, align 8, !tbaa !5
  %551 = load i32, ptr %35, align 4, !tbaa !11
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds double, ptr %550, i64 %552
  %554 = load ptr, ptr %48, align 8, !tbaa !5
  %555 = load ptr, ptr %49, align 8, !tbaa !5
  %556 = call i32 @SUNClassicalGS(ptr noundef %542, ptr noundef %543, i32 noundef %544, i32 noundef %545, ptr noundef %553, ptr noundef %554, ptr noundef %555)
  %557 = icmp ne i32 %556, 0
  br i1 %557, label %558, label %569

558:                                              ; preds = %541
  %559 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %559, align 4, !tbaa !11
  %560 = load ptr, ptr %7, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %560, i32 0, i32 0
  %562 = load ptr, ptr %561, align 8, !tbaa !13
  %563 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %562, i32 0, i32 7
  store i32 -810, ptr %563, align 8, !tbaa !34
  %564 = load ptr, ptr %7, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %564, i32 0, i32 0
  %566 = load ptr, ptr %565, align 8, !tbaa !13
  %567 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %566, i32 0, i32 7
  %568 = load i32, ptr %567, align 8, !tbaa !34
  store i32 %568, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

569:                                              ; preds = %541
  br label %597

570:                                              ; preds = %538
  %571 = load ptr, ptr %12, align 8, !tbaa !5
  %572 = load ptr, ptr %17, align 8, !tbaa !5
  %573 = load i32, ptr %36, align 4, !tbaa !11
  %574 = load i32, ptr %37, align 4, !tbaa !11
  %575 = load ptr, ptr %17, align 8, !tbaa !5
  %576 = load i32, ptr %36, align 4, !tbaa !11
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds ptr, ptr %575, i64 %577
  %579 = load ptr, ptr %578, align 8, !tbaa !5
  %580 = load i32, ptr %35, align 4, !tbaa !11
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds double, ptr %579, i64 %581
  %583 = call i32 @SUNModifiedGS(ptr noundef %571, ptr noundef %572, i32 noundef %573, i32 noundef %574, ptr noundef %582)
  %584 = icmp ne i32 %583, 0
  br i1 %584, label %585, label %596

585:                                              ; preds = %570
  %586 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %586, align 4, !tbaa !11
  %587 = load ptr, ptr %7, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %587, i32 0, i32 0
  %589 = load ptr, ptr %588, align 8, !tbaa !13
  %590 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %589, i32 0, i32 7
  store i32 -810, ptr %590, align 8, !tbaa !34
  %591 = load ptr, ptr %7, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %591, i32 0, i32 0
  %593 = load ptr, ptr %592, align 8, !tbaa !13
  %594 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %593, i32 0, i32 7
  %595 = load i32, ptr %594, align 8, !tbaa !34
  store i32 %595, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

596:                                              ; preds = %570
  br label %597

597:                                              ; preds = %596, %569
  %598 = load i32, ptr %38, align 4, !tbaa !11
  %599 = load ptr, ptr %17, align 8, !tbaa !5
  %600 = load ptr, ptr %18, align 8, !tbaa !5
  %601 = load i32, ptr %35, align 4, !tbaa !11
  %602 = call i32 @SUNQRfact(i32 noundef %598, ptr noundef %599, ptr noundef %600, i32 noundef %601)
  %603 = icmp ne i32 %602, 0
  br i1 %603, label %604, label %615

604:                                              ; preds = %597
  %605 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %605, align 4, !tbaa !11
  %606 = load ptr, ptr %7, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %606, i32 0, i32 0
  %608 = load ptr, ptr %607, align 8, !tbaa !13
  %609 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %608, i32 0, i32 7
  store i32 807, ptr %609, align 8, !tbaa !34
  %610 = load ptr, ptr %7, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %610, i32 0, i32 0
  %612 = load ptr, ptr %611, align 8, !tbaa !13
  %613 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %612, i32 0, i32 7
  %614 = load i32, ptr %613, align 8, !tbaa !34
  store i32 %614, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

615:                                              ; preds = %597
  %616 = load ptr, ptr %18, align 8, !tbaa !5
  %617 = load i32, ptr %35, align 4, !tbaa !11
  %618 = mul nsw i32 2, %617
  %619 = add nsw i32 %618, 1
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds double, ptr %616, i64 %620
  %622 = load double, ptr %621, align 8, !tbaa !9
  %623 = load double, ptr %22, align 8, !tbaa !9
  %624 = fmul double %623, %622
  store double %624, ptr %22, align 8, !tbaa !9
  %625 = load double, ptr %22, align 8, !tbaa !9
  %626 = load double, ptr %23, align 8, !tbaa !9
  %627 = fmul double %625, %626
  %628 = call double @llvm.fabs.f64(double %627)
  store double %628, ptr %25, align 8, !tbaa !9
  %629 = load ptr, ptr %20, align 8, !tbaa !5
  store double %628, ptr %629, align 8, !tbaa !9
  %630 = load double, ptr %25, align 8, !tbaa !9
  %631 = load double, ptr %11, align 8, !tbaa !9
  %632 = fcmp ole double %630, %631
  br i1 %632, label %633, label %634

633:                                              ; preds = %615
  store i32 1, ptr %30, align 4, !tbaa !11
  br label %658

634:                                              ; preds = %615
  %635 = load ptr, ptr %17, align 8, !tbaa !5
  %636 = load i32, ptr %36, align 4, !tbaa !11
  %637 = sext i32 %636 to i64
  %638 = getelementptr inbounds ptr, ptr %635, i64 %637
  %639 = load ptr, ptr %638, align 8, !tbaa !5
  %640 = load i32, ptr %35, align 4, !tbaa !11
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds double, ptr %639, i64 %641
  %643 = load double, ptr %642, align 8, !tbaa !9
  %644 = fdiv double 1.000000e+00, %643
  %645 = load ptr, ptr %12, align 8, !tbaa !5
  %646 = load i32, ptr %36, align 4, !tbaa !11
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds ptr, ptr %645, i64 %647
  %649 = load ptr, ptr %648, align 8, !tbaa !5
  %650 = load ptr, ptr %12, align 8, !tbaa !5
  %651 = load i32, ptr %36, align 4, !tbaa !11
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds ptr, ptr %650, i64 %652
  %654 = load ptr, ptr %653, align 8, !tbaa !5
  call void @N_VScale(double noundef %644, ptr noundef %649, ptr noundef %654)
  br label %655

655:                                              ; preds = %634
  %656 = load i32, ptr %35, align 4, !tbaa !11
  %657 = add nsw i32 %656, 1
  store i32 %657, ptr %35, align 4, !tbaa !11
  br label %389, !llvm.loop !38

658:                                              ; preds = %633, %389
  %659 = load double, ptr %23, align 8, !tbaa !9
  %660 = load ptr, ptr %19, align 8, !tbaa !5
  %661 = getelementptr inbounds double, ptr %660, i64 0
  store double %659, ptr %661, align 8, !tbaa !9
  store i32 1, ptr %32, align 4, !tbaa !11
  br label %662

662:                                              ; preds = %671, %658
  %663 = load i32, ptr %32, align 4, !tbaa !11
  %664 = load i32, ptr %38, align 4, !tbaa !11
  %665 = icmp sle i32 %663, %664
  br i1 %665, label %666, label %674

666:                                              ; preds = %662
  %667 = load ptr, ptr %19, align 8, !tbaa !5
  %668 = load i32, ptr %32, align 4, !tbaa !11
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds double, ptr %667, i64 %669
  store double 0.000000e+00, ptr %670, align 8, !tbaa !9
  br label %671

671:                                              ; preds = %666
  %672 = load i32, ptr %32, align 4, !tbaa !11
  %673 = add nsw i32 %672, 1
  store i32 %673, ptr %32, align 4, !tbaa !11
  br label %662, !llvm.loop !39

674:                                              ; preds = %662
  %675 = load i32, ptr %38, align 4, !tbaa !11
  %676 = load ptr, ptr %17, align 8, !tbaa !5
  %677 = load ptr, ptr %18, align 8, !tbaa !5
  %678 = load ptr, ptr %19, align 8, !tbaa !5
  %679 = call i32 @SUNQRsol(i32 noundef %675, ptr noundef %676, ptr noundef %677, ptr noundef %678)
  %680 = icmp ne i32 %679, 0
  br i1 %680, label %681, label %692

681:                                              ; preds = %674
  %682 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %682, align 4, !tbaa !11
  %683 = load ptr, ptr %7, align 8, !tbaa !5
  %684 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %683, i32 0, i32 0
  %685 = load ptr, ptr %684, align 8, !tbaa !13
  %686 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %685, i32 0, i32 7
  store i32 -811, ptr %686, align 8, !tbaa !34
  %687 = load ptr, ptr %7, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %687, i32 0, i32 0
  %689 = load ptr, ptr %688, align 8, !tbaa !13
  %690 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %689, i32 0, i32 7
  %691 = load i32, ptr %690, align 8, !tbaa !34
  store i32 %691, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

692:                                              ; preds = %674
  %693 = load ptr, ptr %48, align 8, !tbaa !5
  %694 = getelementptr inbounds double, ptr %693, i64 0
  store double 1.000000e+00, ptr %694, align 8, !tbaa !9
  %695 = load ptr, ptr %13, align 8, !tbaa !5
  %696 = load ptr, ptr %49, align 8, !tbaa !5
  %697 = getelementptr inbounds ptr, ptr %696, i64 0
  store ptr %695, ptr %697, align 8, !tbaa !5
  store i32 0, ptr %34, align 4, !tbaa !11
  br label %698

698:                                              ; preds = %723, %692
  %699 = load i32, ptr %34, align 4, !tbaa !11
  %700 = load i32, ptr %38, align 4, !tbaa !11
  %701 = icmp slt i32 %699, %700
  br i1 %701, label %702, label %726

702:                                              ; preds = %698
  %703 = load ptr, ptr %19, align 8, !tbaa !5
  %704 = load i32, ptr %34, align 4, !tbaa !11
  %705 = sext i32 %704 to i64
  %706 = getelementptr inbounds double, ptr %703, i64 %705
  %707 = load double, ptr %706, align 8, !tbaa !9
  %708 = load ptr, ptr %48, align 8, !tbaa !5
  %709 = load i32, ptr %34, align 4, !tbaa !11
  %710 = add nsw i32 %709, 1
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds double, ptr %708, i64 %711
  store double %707, ptr %712, align 8, !tbaa !9
  %713 = load ptr, ptr %12, align 8, !tbaa !5
  %714 = load i32, ptr %34, align 4, !tbaa !11
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds ptr, ptr %713, i64 %715
  %717 = load ptr, ptr %716, align 8, !tbaa !5
  %718 = load ptr, ptr %49, align 8, !tbaa !5
  %719 = load i32, ptr %34, align 4, !tbaa !11
  %720 = add nsw i32 %719, 1
  %721 = sext i32 %720 to i64
  %722 = getelementptr inbounds ptr, ptr %718, i64 %721
  store ptr %717, ptr %722, align 8, !tbaa !5
  br label %723

723:                                              ; preds = %702
  %724 = load i32, ptr %34, align 4, !tbaa !11
  %725 = add nsw i32 %724, 1
  store i32 %725, ptr %34, align 4, !tbaa !11
  br label %698, !llvm.loop !40

726:                                              ; preds = %698
  %727 = load i32, ptr %38, align 4, !tbaa !11
  %728 = add nsw i32 %727, 1
  %729 = load ptr, ptr %48, align 8, !tbaa !5
  %730 = load ptr, ptr %49, align 8, !tbaa !5
  %731 = load ptr, ptr %13, align 8, !tbaa !5
  %732 = call i32 @N_VLinearCombination(i32 noundef %728, ptr noundef %729, ptr noundef %730, ptr noundef %731)
  store i32 %732, ptr %39, align 4, !tbaa !11
  %733 = load i32, ptr %39, align 4, !tbaa !11
  %734 = icmp ne i32 %733, 0
  br i1 %734, label %735, label %741

735:                                              ; preds = %726
  %736 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %736, align 4, !tbaa !11
  %737 = load ptr, ptr %7, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %737, i32 0, i32 0
  %739 = load ptr, ptr %738, align 8, !tbaa !13
  %740 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %739, i32 0, i32 7
  store i32 -812, ptr %740, align 8, !tbaa !34
  store i32 -812, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

741:                                              ; preds = %726
  %742 = load i32, ptr %30, align 4, !tbaa !11
  %743 = icmp ne i32 %742, 0
  br i1 %743, label %744, label %804

744:                                              ; preds = %741
  %745 = load i32, ptr %28, align 4, !tbaa !11
  %746 = icmp ne i32 %745, 0
  br i1 %746, label %747, label %751

747:                                              ; preds = %744
  %748 = load ptr, ptr %13, align 8, !tbaa !5
  %749 = load ptr, ptr %16, align 8, !tbaa !5
  %750 = load ptr, ptr %13, align 8, !tbaa !5
  call void @N_VDiv(ptr noundef %748, ptr noundef %749, ptr noundef %750)
  br label %751

751:                                              ; preds = %747, %744
  %752 = load i32, ptr %27, align 4, !tbaa !11
  %753 = icmp ne i32 %752, 0
  br i1 %753, label %754, label %779

754:                                              ; preds = %751
  %755 = load ptr, ptr %47, align 8, !tbaa !5
  %756 = load ptr, ptr %45, align 8, !tbaa !5
  %757 = load ptr, ptr %13, align 8, !tbaa !5
  %758 = load ptr, ptr %14, align 8, !tbaa !5
  %759 = load double, ptr %11, align 8, !tbaa !9
  %760 = call i32 %755(ptr noundef %756, ptr noundef %757, ptr noundef %758, double noundef %759, i32 noundef 2)
  store i32 %760, ptr %39, align 4, !tbaa !11
  %761 = load i32, ptr %39, align 4, !tbaa !11
  %762 = icmp ne i32 %761, 0
  br i1 %762, label %763, label %778

763:                                              ; preds = %754
  %764 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %764, align 4, !tbaa !11
  %765 = load i32, ptr %39, align 4, !tbaa !11
  %766 = icmp slt i32 %765, 0
  %767 = zext i1 %766 to i64
  %768 = select i1 %766, i32 -808, i32 805
  %769 = load ptr, ptr %7, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %769, i32 0, i32 0
  %771 = load ptr, ptr %770, align 8, !tbaa !13
  %772 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %771, i32 0, i32 7
  store i32 %768, ptr %772, align 8, !tbaa !34
  %773 = load ptr, ptr %7, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %773, i32 0, i32 0
  %775 = load ptr, ptr %774, align 8, !tbaa !13
  %776 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %775, i32 0, i32 7
  %777 = load i32, ptr %776, align 8, !tbaa !34
  store i32 %777, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

778:                                              ; preds = %754
  br label %782

779:                                              ; preds = %751
  %780 = load ptr, ptr %13, align 8, !tbaa !5
  %781 = load ptr, ptr %14, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %780, ptr noundef %781)
  br label %782

782:                                              ; preds = %779, %778
  %783 = load ptr, ptr %31, align 8, !tbaa !5
  %784 = load i32, ptr %783, align 4, !tbaa !11
  %785 = icmp ne i32 %784, 0
  br i1 %785, label %786, label %789

786:                                              ; preds = %782
  %787 = load ptr, ptr %14, align 8, !tbaa !5
  %788 = load ptr, ptr %9, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %787, ptr noundef %788)
  br label %793

789:                                              ; preds = %782
  %790 = load ptr, ptr %9, align 8, !tbaa !5
  %791 = load ptr, ptr %14, align 8, !tbaa !5
  %792 = load ptr, ptr %9, align 8, !tbaa !5
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %790, double noundef 1.000000e+00, ptr noundef %791, ptr noundef %792)
  br label %793

793:                                              ; preds = %789, %786
  %794 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %794, align 4, !tbaa !11
  %795 = load ptr, ptr %7, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %795, i32 0, i32 0
  %797 = load ptr, ptr %796, align 8, !tbaa !13
  %798 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %797, i32 0, i32 7
  store i32 0, ptr %798, align 8, !tbaa !34
  %799 = load ptr, ptr %7, align 8, !tbaa !5
  %800 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %799, i32 0, i32 0
  %801 = load ptr, ptr %800, align 8, !tbaa !13
  %802 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %801, i32 0, i32 7
  %803 = load i32, ptr %802, align 8, !tbaa !34
  store i32 %803, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

804:                                              ; preds = %741
  %805 = load i32, ptr %40, align 4, !tbaa !11
  %806 = load i32, ptr %41, align 4, !tbaa !11
  %807 = icmp eq i32 %805, %806
  br i1 %807, label %808, label %809

808:                                              ; preds = %804
  br label %912

809:                                              ; preds = %804
  store double 1.000000e+00, ptr %24, align 8, !tbaa !9
  %810 = load i32, ptr %38, align 4, !tbaa !11
  store i32 %810, ptr %32, align 4, !tbaa !11
  br label %811

811:                                              ; preds = %837, %809
  %812 = load i32, ptr %32, align 4, !tbaa !11
  %813 = icmp sgt i32 %812, 0
  br i1 %813, label %814, label %840

814:                                              ; preds = %811
  %815 = load double, ptr %24, align 8, !tbaa !9
  %816 = load ptr, ptr %18, align 8, !tbaa !5
  %817 = load i32, ptr %32, align 4, !tbaa !11
  %818 = mul nsw i32 2, %817
  %819 = sub nsw i32 %818, 2
  %820 = sext i32 %819 to i64
  %821 = getelementptr inbounds double, ptr %816, i64 %820
  %822 = load double, ptr %821, align 8, !tbaa !9
  %823 = fmul double %815, %822
  %824 = load ptr, ptr %19, align 8, !tbaa !5
  %825 = load i32, ptr %32, align 4, !tbaa !11
  %826 = sext i32 %825 to i64
  %827 = getelementptr inbounds double, ptr %824, i64 %826
  store double %823, ptr %827, align 8, !tbaa !9
  %828 = load ptr, ptr %18, align 8, !tbaa !5
  %829 = load i32, ptr %32, align 4, !tbaa !11
  %830 = mul nsw i32 2, %829
  %831 = sub nsw i32 %830, 1
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds double, ptr %828, i64 %832
  %834 = load double, ptr %833, align 8, !tbaa !9
  %835 = load double, ptr %24, align 8, !tbaa !9
  %836 = fmul double %835, %834
  store double %836, ptr %24, align 8, !tbaa !9
  br label %837

837:                                              ; preds = %814
  %838 = load i32, ptr %32, align 4, !tbaa !11
  %839 = add nsw i32 %838, -1
  store i32 %839, ptr %32, align 4, !tbaa !11
  br label %811, !llvm.loop !41

840:                                              ; preds = %811
  %841 = load double, ptr %24, align 8, !tbaa !9
  %842 = load ptr, ptr %19, align 8, !tbaa !5
  %843 = getelementptr inbounds double, ptr %842, i64 0
  store double %841, ptr %843, align 8, !tbaa !9
  %844 = load double, ptr %24, align 8, !tbaa !9
  %845 = load double, ptr %23, align 8, !tbaa !9
  %846 = fmul double %845, %844
  store double %846, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %32, align 4, !tbaa !11
  br label %847

847:                                              ; preds = %859, %840
  %848 = load i32, ptr %32, align 4, !tbaa !11
  %849 = load i32, ptr %38, align 4, !tbaa !11
  %850 = icmp sle i32 %848, %849
  br i1 %850, label %851, label %862

851:                                              ; preds = %847
  %852 = load double, ptr %23, align 8, !tbaa !9
  %853 = load ptr, ptr %19, align 8, !tbaa !5
  %854 = load i32, ptr %32, align 4, !tbaa !11
  %855 = sext i32 %854 to i64
  %856 = getelementptr inbounds double, ptr %853, i64 %855
  %857 = load double, ptr %856, align 8, !tbaa !9
  %858 = fmul double %857, %852
  store double %858, ptr %856, align 8, !tbaa !9
  br label %859

859:                                              ; preds = %851
  %860 = load i32, ptr %32, align 4, !tbaa !11
  %861 = add nsw i32 %860, 1
  store i32 %861, ptr %32, align 4, !tbaa !11
  br label %847, !llvm.loop !42

862:                                              ; preds = %847
  %863 = load double, ptr %23, align 8, !tbaa !9
  %864 = call double @llvm.fabs.f64(double %863)
  store double %864, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %34, align 4, !tbaa !11
  br label %865

865:                                              ; preds = %888, %862
  %866 = load i32, ptr %34, align 4, !tbaa !11
  %867 = load i32, ptr %38, align 4, !tbaa !11
  %868 = icmp sle i32 %866, %867
  br i1 %868, label %869, label %891

869:                                              ; preds = %865
  %870 = load ptr, ptr %19, align 8, !tbaa !5
  %871 = load i32, ptr %34, align 4, !tbaa !11
  %872 = sext i32 %871 to i64
  %873 = getelementptr inbounds double, ptr %870, i64 %872
  %874 = load double, ptr %873, align 8, !tbaa !9
  %875 = load ptr, ptr %48, align 8, !tbaa !5
  %876 = load i32, ptr %34, align 4, !tbaa !11
  %877 = sext i32 %876 to i64
  %878 = getelementptr inbounds double, ptr %875, i64 %877
  store double %874, ptr %878, align 8, !tbaa !9
  %879 = load ptr, ptr %12, align 8, !tbaa !5
  %880 = load i32, ptr %34, align 4, !tbaa !11
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds ptr, ptr %879, i64 %881
  %883 = load ptr, ptr %882, align 8, !tbaa !5
  %884 = load ptr, ptr %49, align 8, !tbaa !5
  %885 = load i32, ptr %34, align 4, !tbaa !11
  %886 = sext i32 %885 to i64
  %887 = getelementptr inbounds ptr, ptr %884, i64 %886
  store ptr %883, ptr %887, align 8, !tbaa !5
  br label %888

888:                                              ; preds = %869
  %889 = load i32, ptr %34, align 4, !tbaa !11
  %890 = add nsw i32 %889, 1
  store i32 %890, ptr %34, align 4, !tbaa !11
  br label %865, !llvm.loop !43

891:                                              ; preds = %865
  %892 = load i32, ptr %38, align 4, !tbaa !11
  %893 = add nsw i32 %892, 1
  %894 = load ptr, ptr %48, align 8, !tbaa !5
  %895 = load ptr, ptr %49, align 8, !tbaa !5
  %896 = load ptr, ptr %12, align 8, !tbaa !5
  %897 = getelementptr inbounds ptr, ptr %896, i64 0
  %898 = load ptr, ptr %897, align 8, !tbaa !5
  %899 = call i32 @N_VLinearCombination(i32 noundef %893, ptr noundef %894, ptr noundef %895, ptr noundef %898)
  store i32 %899, ptr %39, align 4, !tbaa !11
  %900 = load i32, ptr %39, align 4, !tbaa !11
  %901 = icmp ne i32 %900, 0
  br i1 %901, label %902, label %908

902:                                              ; preds = %891
  %903 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %903, align 4, !tbaa !11
  %904 = load ptr, ptr %7, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %904, i32 0, i32 0
  %906 = load ptr, ptr %905, align 8, !tbaa !13
  %907 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %906, i32 0, i32 7
  store i32 -812, ptr %907, align 8, !tbaa !34
  store i32 -812, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

908:                                              ; preds = %891
  br label %909

909:                                              ; preds = %908
  %910 = load i32, ptr %40, align 4, !tbaa !11
  %911 = add nsw i32 %910, 1
  store i32 %911, ptr %40, align 4, !tbaa !11
  br label %350, !llvm.loop !44

912:                                              ; preds = %808, %350
  %913 = load double, ptr %25, align 8, !tbaa !9
  %914 = load double, ptr %21, align 8, !tbaa !9
  %915 = fcmp olt double %913, %914
  br i1 %915, label %916, label %976

916:                                              ; preds = %912
  %917 = load i32, ptr %28, align 4, !tbaa !11
  %918 = icmp ne i32 %917, 0
  br i1 %918, label %919, label %923

919:                                              ; preds = %916
  %920 = load ptr, ptr %13, align 8, !tbaa !5
  %921 = load ptr, ptr %16, align 8, !tbaa !5
  %922 = load ptr, ptr %13, align 8, !tbaa !5
  call void @N_VDiv(ptr noundef %920, ptr noundef %921, ptr noundef %922)
  br label %923

923:                                              ; preds = %919, %916
  %924 = load i32, ptr %27, align 4, !tbaa !11
  %925 = icmp ne i32 %924, 0
  br i1 %925, label %926, label %951

926:                                              ; preds = %923
  %927 = load ptr, ptr %47, align 8, !tbaa !5
  %928 = load ptr, ptr %45, align 8, !tbaa !5
  %929 = load ptr, ptr %13, align 8, !tbaa !5
  %930 = load ptr, ptr %14, align 8, !tbaa !5
  %931 = load double, ptr %11, align 8, !tbaa !9
  %932 = call i32 %927(ptr noundef %928, ptr noundef %929, ptr noundef %930, double noundef %931, i32 noundef 2)
  store i32 %932, ptr %39, align 4, !tbaa !11
  %933 = load i32, ptr %39, align 4, !tbaa !11
  %934 = icmp ne i32 %933, 0
  br i1 %934, label %935, label %950

935:                                              ; preds = %926
  %936 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %936, align 4, !tbaa !11
  %937 = load i32, ptr %39, align 4, !tbaa !11
  %938 = icmp slt i32 %937, 0
  %939 = zext i1 %938 to i64
  %940 = select i1 %938, i32 -808, i32 805
  %941 = load ptr, ptr %7, align 8, !tbaa !5
  %942 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %941, i32 0, i32 0
  %943 = load ptr, ptr %942, align 8, !tbaa !13
  %944 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %943, i32 0, i32 7
  store i32 %940, ptr %944, align 8, !tbaa !34
  %945 = load ptr, ptr %7, align 8, !tbaa !5
  %946 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %945, i32 0, i32 0
  %947 = load ptr, ptr %946, align 8, !tbaa !13
  %948 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %947, i32 0, i32 7
  %949 = load i32, ptr %948, align 8, !tbaa !34
  store i32 %949, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

950:                                              ; preds = %926
  br label %954

951:                                              ; preds = %923
  %952 = load ptr, ptr %13, align 8, !tbaa !5
  %953 = load ptr, ptr %14, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %952, ptr noundef %953)
  br label %954

954:                                              ; preds = %951, %950
  %955 = load ptr, ptr %31, align 8, !tbaa !5
  %956 = load i32, ptr %955, align 4, !tbaa !11
  %957 = icmp ne i32 %956, 0
  br i1 %957, label %958, label %961

958:                                              ; preds = %954
  %959 = load ptr, ptr %14, align 8, !tbaa !5
  %960 = load ptr, ptr %9, align 8, !tbaa !5
  call void @N_VScale(double noundef 1.000000e+00, ptr noundef %959, ptr noundef %960)
  br label %965

961:                                              ; preds = %954
  %962 = load ptr, ptr %9, align 8, !tbaa !5
  %963 = load ptr, ptr %14, align 8, !tbaa !5
  %964 = load ptr, ptr %9, align 8, !tbaa !5
  call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %962, double noundef 1.000000e+00, ptr noundef %963, ptr noundef %964)
  br label %965

965:                                              ; preds = %961, %958
  %966 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %966, align 4, !tbaa !11
  %967 = load ptr, ptr %7, align 8, !tbaa !5
  %968 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %967, i32 0, i32 0
  %969 = load ptr, ptr %968, align 8, !tbaa !13
  %970 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %969, i32 0, i32 7
  store i32 801, ptr %970, align 8, !tbaa !34
  %971 = load ptr, ptr %7, align 8, !tbaa !5
  %972 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %971, i32 0, i32 0
  %973 = load ptr, ptr %972, align 8, !tbaa !13
  %974 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %973, i32 0, i32 7
  %975 = load i32, ptr %974, align 8, !tbaa !34
  store i32 %975, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

976:                                              ; preds = %912
  %977 = load ptr, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %977, align 4, !tbaa !11
  %978 = load ptr, ptr %7, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %978, i32 0, i32 0
  %980 = load ptr, ptr %979, align 8, !tbaa !13
  %981 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %980, i32 0, i32 7
  store i32 802, ptr %981, align 8, !tbaa !34
  %982 = load ptr, ptr %7, align 8, !tbaa !5
  %983 = getelementptr inbounds %struct._generic_SUNLinearSolver, ptr %982, i32 0, i32 0
  %984 = load ptr, ptr %983, align 8, !tbaa !13
  %985 = getelementptr inbounds %struct._SUNLinearSolverContent_SPGMR, ptr %984, i32 0, i32 7
  %986 = load i32, ptr %985, align 8, !tbaa !34
  store i32 %986, ptr %6, align 4
  store i32 1, ptr %50, align 4
  br label %987

987:                                              ; preds = %976, %965, %935, %902, %793, %763, %735, %681, %604, %585, %558, %497, %466, %438, %336, %276, %239, %213, %193, %53
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  %988 = load i32, ptr %6, align 4
  ret i32 %988
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

declare void @N_VScale(double noundef, ptr noundef, ptr noundef) #2

declare void @N_VLinearSum(double noundef, ptr noundef, double noundef, ptr noundef, ptr noundef) #2

declare void @N_VProd(ptr noundef, ptr noundef, ptr noundef) #2

declare double @N_VDotProd(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind
declare double @sqrt(double noundef) #3

declare void @N_VConst(double noundef, ptr noundef) #2

declare void @N_VDiv(ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @SUNClassicalGS(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @SUNModifiedGS(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #2

declare i32 @SUNQRfact(i32 noundef, ptr noundef, ptr noundef, i32 noundef) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #4

declare i32 @SUNQRsol(i32 noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @N_VLinearCombination(i32 noundef, ptr noundef, ptr noundef, ptr noundef) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"_generic_SUNLinearSolver", !6, i64 0, !6, i64 8, !6, i64 16}
!15 = !{!16, !12, i64 0}
!16 = !{!"_SUNLinearSolverContent_SPGMR", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !10, i64 24, !12, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !12, i64 160, !6, i64 168}
!17 = !{!16, !12, i64 12}
!18 = !{!16, !12, i64 8}
!19 = !{!16, !6, i64 96}
!20 = !{!16, !6, i64 104}
!21 = !{!16, !6, i64 112}
!22 = !{!16, !6, i64 120}
!23 = !{!16, !6, i64 128}
!24 = !{!16, !6, i64 136}
!25 = !{!16, !6, i64 80}
!26 = !{!16, !6, i64 88}
!27 = !{!16, !6, i64 48}
!28 = !{!16, !6, i64 72}
!29 = !{!16, !6, i64 40}
!30 = !{!16, !6, i64 64}
!31 = !{!16, !6, i64 144}
!32 = !{!16, !6, i64 152}
!33 = !{!16, !12, i64 4}
!34 = !{!16, !12, i64 32}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = distinct !{!37, !36}
!38 = distinct !{!38, !36}
!39 = distinct !{!39, !36}
!40 = distinct !{!40, !36}
!41 = distinct !{!41, !36}
!42 = distinct !{!42, !36}
!43 = distinct !{!43, !36}
!44 = distinct !{!44, !36}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

; Function Attrs: nounwind uwtable
define dso_local i32 @SUNLinSolSolve_SPGMR(ptr noundef readonly %0, ptr nocapture noundef readnone %1, ptr noundef %2, ptr noundef %3, double noundef %4) local_unnamed_addr #0 {
  %6 = icmp eq ptr %0, null
  br i1 %6, label %357, label %7

7:                                                ; preds = %5
  %8 = load ptr, ptr %0, align 8, !tbaa !5
  %9 = load i32, ptr %8, align 8, !tbaa !10
  %10 = getelementptr inbounds i8, ptr %8, i64 12
  %11 = load i32, ptr %10, align 4, !tbaa !14
  %12 = getelementptr inbounds i8, ptr %8, i64 8
  %13 = load i32, ptr %12, align 8, !tbaa !15
  %14 = getelementptr inbounds i8, ptr %8, i64 96
  %15 = load ptr, ptr %14, align 8, !tbaa !16
  %16 = ptrtoint ptr %15 to i64
  %17 = getelementptr inbounds i8, ptr %8, i64 104
  %18 = load ptr, ptr %17, align 8, !tbaa !17
  %19 = getelementptr inbounds i8, ptr %8, i64 112
  %20 = load ptr, ptr %19, align 8, !tbaa !18
  %21 = getelementptr inbounds i8, ptr %8, i64 120
  %22 = load ptr, ptr %21, align 8, !tbaa !19
  %23 = getelementptr inbounds i8, ptr %8, i64 128
  %24 = load ptr, ptr %23, align 8, !tbaa !20
  %25 = ptrtoint ptr %24 to i64
  %26 = getelementptr inbounds i8, ptr %8, i64 136
  %27 = load ptr, ptr %26, align 8, !tbaa !21
  %28 = getelementptr inbounds i8, ptr %8, i64 80
  %29 = load ptr, ptr %28, align 8, !tbaa !22
  %30 = getelementptr inbounds i8, ptr %8, i64 88
  %31 = load ptr, ptr %30, align 8, !tbaa !23
  %32 = getelementptr inbounds i8, ptr %8, i64 48
  %33 = load ptr, ptr %32, align 8, !tbaa !24
  %34 = getelementptr inbounds i8, ptr %8, i64 72
  %35 = load ptr, ptr %34, align 8, !tbaa !25
  %36 = getelementptr inbounds i8, ptr %8, i64 40
  %37 = load ptr, ptr %36, align 8, !tbaa !26
  %38 = getelementptr inbounds i8, ptr %8, i64 64
  %39 = load ptr, ptr %38, align 8, !tbaa !27
  %40 = getelementptr inbounds i8, ptr %8, i64 16
  %41 = getelementptr inbounds i8, ptr %8, i64 20
  %42 = getelementptr inbounds i8, ptr %8, i64 24
  %43 = getelementptr inbounds i8, ptr %8, i64 144
  %44 = load ptr, ptr %43, align 8, !tbaa !28
  %45 = ptrtoint ptr %44 to i64
  %46 = getelementptr inbounds i8, ptr %8, i64 152
  %47 = load ptr, ptr %46, align 8, !tbaa !29
  %48 = ptrtoint ptr %47 to i64
  store i32 0, ptr %41, align 4, !tbaa !30
  %49 = getelementptr inbounds i8, ptr %8, i64 4
  %50 = load i32, ptr %49, align 4, !tbaa !31
  %.not = icmp eq ptr %29, null
  %.not386 = icmp eq ptr %31, null
  %51 = icmp eq ptr %37, null
  br i1 %51, label %52, label %53

52:                                               ; preds = %7
  store i32 0, ptr %40, align 4, !tbaa !30
  br label %.sink.split

53:                                               ; preds = %7
  %54 = and i32 %50, -2
  %55 = icmp eq i32 %54, 2
  %56 = and i32 %50, -3
  %spec.select = icmp eq i32 %56, 1
  %or.cond = or i1 %spec.select, %55
  %57 = icmp eq ptr %39, null
  %or.cond3 = select i1 %or.cond, i1 %57, i1 false
  br i1 %or.cond3, label %58, label %59

58:                                               ; preds = %53
  store i32 0, ptr %40, align 4, !tbaa !30
  br label %.sink.split

59:                                               ; preds = %53
  %60 = load i32, ptr %40, align 4, !tbaa !30
  %.not387 = icmp eq i32 %60, 0
  br i1 %.not387, label %62, label %61

61:                                               ; preds = %59
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %3, ptr noundef %27) #5
  br label %69

62:                                               ; preds = %59
  %63 = tail call i32 %37(ptr noundef %33, ptr noundef %2, ptr noundef %27) #5
  %.not388 = icmp eq i32 %63, 0
  br i1 %.not388, label %68, label %64

64:                                               ; preds = %62
  store i32 0, ptr %40, align 4, !tbaa !30
  %65 = icmp slt i32 %63, 0
  %66 = select i1 %65, i32 -805, i32 803
  %67 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

68:                                               ; preds = %62
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %3, double noundef -1.000000e+00, ptr noundef %27, ptr noundef %27) #5
  br label %69

69:                                               ; preds = %68, %61
  %70 = load ptr, ptr %15, align 8, !tbaa !32
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %27, ptr noundef %70) #5
  switch i32 %50, label %78 [
    i32 3, label %71
    i32 1, label %71
  ]

71:                                               ; preds = %69, %69
  %72 = load ptr, ptr %15, align 8, !tbaa !32
  %73 = tail call i32 %39(ptr noundef %35, ptr noundef %72, ptr noundef %27, double noundef %4, i32 noundef 1) #5
  %.not389 = icmp eq i32 %73, 0
  br i1 %.not389, label %80, label %74

74:                                               ; preds = %71
  store i32 0, ptr %40, align 4, !tbaa !30
  %75 = icmp slt i32 %73, 0
  %76 = select i1 %75, i32 -808, i32 805
  %77 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

78:                                               ; preds = %69
  %79 = load ptr, ptr %15, align 8, !tbaa !32
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %79, ptr noundef %27) #5
  br label %80

80:                                               ; preds = %71, %78
  %81 = load ptr, ptr %15, align 8, !tbaa !32
  br i1 %.not, label %83, label %82

82:                                               ; preds = %80
  tail call void @N_VProd(ptr noundef nonnull %29, ptr noundef %27, ptr noundef %81) #5
  br label %84

83:                                               ; preds = %80
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %27, ptr noundef %81) #5
  br label %84

84:                                               ; preds = %83, %82
  %85 = load ptr, ptr %15, align 8, !tbaa !32
  %86 = tail call double @N_VDotProd(ptr noundef %85, ptr noundef %85) #5
  %87 = fcmp ugt double %86, 0.000000e+00
  br i1 %87, label %88, label %92

88:                                               ; preds = %84
  %89 = load ptr, ptr %15, align 8, !tbaa !32
  %90 = tail call double @N_VDotProd(ptr noundef %89, ptr noundef %89) #5
  %91 = tail call double @sqrt(double noundef %90) #5
  br label %92

92:                                               ; preds = %84, %88
  %93 = phi double [ %91, %88 ], [ 0.000000e+00, %84 ]
  store double %93, ptr %42, align 8, !tbaa !33
  %94 = fcmp ugt double %93, %4
  br i1 %94, label %97, label %95

95:                                               ; preds = %92
  store i32 0, ptr %40, align 4, !tbaa !30
  %96 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

97:                                               ; preds = %92
  tail call void @N_VConst(double noundef 0.000000e+00, ptr noundef %22) #5
  %.not390466 = icmp slt i32 %11, 0
  br i1 %.not390466, label %._crit_edge471.thread, label %.preheader415.lr.ph

.preheader415.lr.ph:                              ; preds = %97
  %98 = icmp slt i32 %9, 1
  %99 = icmp eq i32 %13, 2
  %100 = zext i32 %9 to i64
  %101 = shl nuw nsw i64 %100, 3
  %102 = add i32 %9, 1
  %103 = sext i32 %9 to i64
  %scevgep = getelementptr i8, ptr %24, i64 8
  %wide.trip.count = zext i32 %102 to i64
  %104 = sub i64 %45, %25
  %105 = sub i64 %48, %16
  %106 = add i64 %45, 8
  %107 = sub i64 %106, %25
  %108 = add i64 %48, 8
  %109 = sub i64 %108, %16
  %xtraiter = and i64 %wide.trip.count, 7
  %110 = icmp ult i32 %102, 8
  %unroll_iter = and i64 %wide.trip.count, 4294967288
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %diff.check594 = icmp ult i64 %107, 32
  %diff.check595 = icmp ult i64 %109, 32
  %conflict.rdx596 = or i1 %diff.check594, %diff.check595
  %diff.check = icmp ult i64 %104, 32
  %diff.check576 = icmp ult i64 %105, 32
  %conflict.rdx = or i1 %diff.check, %diff.check576
  br label %.preheader415

.preheader415:                                    ; preds = %._crit_edge465, %.preheader415.lr.ph
  %.0346470 = phi double [ %93, %.preheader415.lr.ph ], [ %332, %._crit_edge465 ]
  %.0348469 = phi double [ %93, %.preheader415.lr.ph ], [ %.2, %._crit_edge465 ]
  %.0358468 = phi i32 [ 0, %.preheader415.lr.ph ], [ %335, %._crit_edge465 ]
  %.0359467 = phi i32 [ 0, %.preheader415.lr.ph ], [ %.2361, %._crit_edge465 ]
  br i1 %98, label %._crit_edge431.thread, label %.preheader.us.preheader

.preheader.us.preheader:                          ; preds = %.preheader415
  br i1 %110, label %._crit_edge431.unr-lcssa, label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %.preheader.us
  %indvars.iv = phi i64 [ %indvars.iv.next.7, %.preheader.us ], [ 0, %.preheader.us.preheader ]
  %niter = phi i64 [ %niter.next.7, %.preheader.us ], [ 0, %.preheader.us.preheader ]
  %111 = getelementptr inbounds ptr, ptr %18, i64 %indvars.iv
  %112 = load ptr, ptr %111, align 8, !tbaa !32
  tail call void @llvm.memset.p0.i64(ptr align 8 %112, i8 0, i64 %101, i1 false), !tbaa !33
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %113 = getelementptr inbounds ptr, ptr %18, i64 %indvars.iv.next
  %114 = load ptr, ptr %113, align 8, !tbaa !32
  tail call void @llvm.memset.p0.i64(ptr align 8 %114, i8 0, i64 %101, i1 false), !tbaa !33
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %115 = getelementptr inbounds ptr, ptr %18, i64 %indvars.iv.next.1
  %116 = load ptr, ptr %115, align 8, !tbaa !32
  tail call void @llvm.memset.p0.i64(ptr align 8 %116, i8 0, i64 %101, i1 false), !tbaa !33
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %117 = getelementptr inbounds ptr, ptr %18, i64 %indvars.iv.next.2
  %118 = load ptr, ptr %117, align 8, !tbaa !32
  tail call void @llvm.memset.p0.i64(ptr align 8 %118, i8 0, i64 %101, i1 false), !tbaa !33
  %indvars.iv.next.3 = or disjoint i64 %indvars.iv, 4
  %119 = getelementptr inbounds ptr, ptr %18, i64 %indvars.iv.next.3
  %120 = load ptr, ptr %119, align 8, !tbaa !32
  tail call void @llvm.memset.p0.i64(ptr align 8 %120, i8 0, i64 %101, i1 false), !tbaa !33
  %indvars.iv.next.4 = or disjoint i64 %indvars.iv, 5
  %121 = getelementptr inbounds ptr, ptr %18, i64 %indvars.iv.next.4
  %122 = load ptr, ptr %121, align 8, !tbaa !32
  tail call void @llvm.memset.p0.i64(ptr align 8 %122, i8 0, i64 %101, i1 false), !tbaa !33
  %indvars.iv.next.5 = or disjoint i64 %indvars.iv, 6
  %123 = getelementptr inbounds ptr, ptr %18, i64 %indvars.iv.next.5
  %124 = load ptr, ptr %123, align 8, !tbaa !32
  tail call void @llvm.memset.p0.i64(ptr align 8 %124, i8 0, i64 %101, i1 false), !tbaa !33
  %indvars.iv.next.6 = or disjoint i64 %indvars.iv, 7
  %125 = getelementptr inbounds ptr, ptr %18, i64 %indvars.iv.next.6
  %126 = load ptr, ptr %125, align 8, !tbaa !32
  tail call void @llvm.memset.p0.i64(ptr align 8 %126, i8 0, i64 %101, i1 false), !tbaa !33
  %indvars.iv.next.7 = add nuw nsw i64 %indvars.iv, 8
  %niter.next.7 = add i64 %niter, 8
  %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter
  br i1 %niter.ncmp.7, label %._crit_edge431.unr-lcssa, label %.preheader.us, !llvm.loop !34

._crit_edge431.thread:                            ; preds = %.preheader415
  %127 = fdiv double 1.000000e+00, %.0346470
  %128 = load ptr, ptr %15, align 8, !tbaa !32
  tail call void @N_VScale(double noundef %127, ptr noundef %128, ptr noundef %128) #5
  br label %._crit_edge

._crit_edge431.unr-lcssa:                         ; preds = %.preheader.us, %.preheader.us.preheader
  %indvars.iv.unr = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next.7, %.preheader.us ]
  br i1 %lcmp.mod.not, label %._crit_edge431, label %.preheader.us.epil

.preheader.us.epil:                               ; preds = %._crit_edge431.unr-lcssa, %.preheader.us.epil
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.preheader.us.epil ], [ %indvars.iv.unr, %._crit_edge431.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.preheader.us.epil ], [ 0, %._crit_edge431.unr-lcssa ]
  %129 = getelementptr inbounds ptr, ptr %18, i64 %indvars.iv.epil
  %130 = load ptr, ptr %129, align 8, !tbaa !32
  tail call void @llvm.memset.p0.i64(ptr align 8 %130, i8 0, i64 %101, i1 false), !tbaa !33
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge431, label %.preheader.us.epil, !llvm.loop !36

._crit_edge431:                                   ; preds = %.preheader.us.epil, %._crit_edge431.unr-lcssa
  %131 = fdiv double 1.000000e+00, %.0346470
  %132 = load ptr, ptr %15, align 8, !tbaa !32
  tail call void @N_VScale(double noundef %131, ptr noundef %132, ptr noundef %132) #5
  br i1 %98, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %._crit_edge431, %199
  %indvars.iv498 = phi i64 [ %indvars.iv.next499, %199 ], [ 0, %._crit_edge431 ]
  %.not402435 = phi i1 [ %.not402, %199 ], [ true, %._crit_edge431 ]
  %.0345434 = phi double [ %195, %199 ], [ 1.000000e+00, %._crit_edge431 ]
  %.0362433 = phi i32 [ %135, %199 ], [ 0, %._crit_edge431 ]
  %133 = load i32, ptr %41, align 4, !tbaa !30
  %134 = add nsw i32 %133, 1
  store i32 %134, ptr %41, align 4, !tbaa !30
  %indvars.iv.next499 = add nuw nsw i64 %indvars.iv498, 1
  %135 = add nuw nsw i32 %.0362433, 1
  %136 = getelementptr inbounds ptr, ptr %15, i64 %indvars.iv498
  %137 = load ptr, ptr %136, align 8, !tbaa !32
  br i1 %.not386, label %139, label %138

138:                                              ; preds = %.lr.ph
  tail call void @N_VDiv(ptr noundef %137, ptr noundef nonnull %31, ptr noundef %27) #5
  br label %140

139:                                              ; preds = %.lr.ph
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %137, ptr noundef %27) #5
  br label %140

140:                                              ; preds = %139, %138
  br i1 %55, label %141, label %150

141:                                              ; preds = %140
  %142 = getelementptr inbounds ptr, ptr %15, i64 %indvars.iv.next499
  %143 = load ptr, ptr %142, align 8, !tbaa !32
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %27, ptr noundef %143) #5
  %144 = load ptr, ptr %142, align 8, !tbaa !32
  %145 = tail call i32 %39(ptr noundef %35, ptr noundef %144, ptr noundef %27, double noundef %4, i32 noundef 2) #5
  %.not392 = icmp eq i32 %145, 0
  br i1 %.not392, label %150, label %146

146:                                              ; preds = %141
  store i32 0, ptr %40, align 4, !tbaa !30
  %147 = icmp slt i32 %145, 0
  %148 = select i1 %147, i32 -808, i32 805
  %149 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

150:                                              ; preds = %140, %141
  %151 = getelementptr inbounds ptr, ptr %15, i64 %indvars.iv.next499
  %152 = load ptr, ptr %151, align 8, !tbaa !32
  %153 = tail call i32 %37(ptr noundef %33, ptr noundef %27, ptr noundef %152) #5
  %.not393 = icmp eq i32 %153, 0
  br i1 %.not393, label %158, label %154

154:                                              ; preds = %150
  store i32 0, ptr %40, align 4, !tbaa !30
  %155 = icmp slt i32 %153, 0
  %156 = select i1 %155, i32 -805, i32 803
  %157 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

158:                                              ; preds = %150
  switch i32 %50, label %166 [
    i32 3, label %159
    i32 1, label %159
  ]

159:                                              ; preds = %158, %158
  %160 = load ptr, ptr %151, align 8, !tbaa !32
  %161 = tail call i32 %39(ptr noundef %35, ptr noundef %160, ptr noundef %27, double noundef %4, i32 noundef 1) #5
  %.not394 = icmp eq i32 %161, 0
  br i1 %.not394, label %168, label %162

162:                                              ; preds = %159
  store i32 0, ptr %40, align 4, !tbaa !30
  %163 = icmp slt i32 %161, 0
  %164 = select i1 %163, i32 -808, i32 805
  %165 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

166:                                              ; preds = %158
  %167 = load ptr, ptr %151, align 8, !tbaa !32
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %167, ptr noundef %27) #5
  br label %168

168:                                              ; preds = %159, %166
  %169 = load ptr, ptr %151, align 8, !tbaa !32
  br i1 %.not, label %171, label %170

170:                                              ; preds = %168
  tail call void @N_VProd(ptr noundef nonnull %29, ptr noundef %27, ptr noundef %169) #5
  br label %172

171:                                              ; preds = %168
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %27, ptr noundef %169) #5
  br label %172

172:                                              ; preds = %171, %170
  %173 = getelementptr inbounds ptr, ptr %18, i64 %indvars.iv.next499
  %174 = load ptr, ptr %173, align 8, !tbaa !32
  %175 = getelementptr inbounds double, ptr %174, i64 %indvars.iv498
  %176 = trunc nuw nsw i64 %indvars.iv.next499 to i32
  br i1 %99, label %177, label %181

177:                                              ; preds = %172
  %178 = tail call i32 @SUNClassicalGS(ptr noundef nonnull %15, ptr noundef %18, i32 noundef %176, i32 noundef %9, ptr noundef %175, ptr noundef %44, ptr noundef %47) #5
  %.not396 = icmp eq i32 %178, 0
  br i1 %.not396, label %185, label %179

179:                                              ; preds = %177
  store i32 0, ptr %40, align 4, !tbaa !30
  %180 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

181:                                              ; preds = %172
  %182 = tail call i32 @SUNModifiedGS(ptr noundef nonnull %15, ptr noundef %18, i32 noundef %176, i32 noundef %9, ptr noundef %175) #5
  %.not395 = icmp eq i32 %182, 0
  br i1 %.not395, label %185, label %183

183:                                              ; preds = %181
  store i32 0, ptr %40, align 4, !tbaa !30
  %184 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

185:                                              ; preds = %181, %177
  %186 = trunc nuw nsw i64 %indvars.iv498 to i32
  %187 = tail call i32 @SUNQRfact(i32 noundef %135, ptr noundef nonnull %18, ptr noundef %20, i32 noundef %186) #5
  %.not397 = icmp eq i32 %187, 0
  br i1 %.not397, label %190, label %188

188:                                              ; preds = %185
  store i32 0, ptr %40, align 4, !tbaa !30
  %189 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

190:                                              ; preds = %185
  %191 = shl nuw nsw i64 %indvars.iv498, 1
  %192 = or disjoint i64 %191, 1
  %193 = getelementptr inbounds double, ptr %20, i64 %192
  %194 = load double, ptr %193, align 8, !tbaa !33
  %195 = fmul double %.0345434, %194
  %196 = fmul double %.0346470, %195
  %197 = tail call double @llvm.fabs.f64(double %196)
  store double %197, ptr %42, align 8, !tbaa !33
  %198 = fcmp ugt double %197, %4
  br i1 %198, label %199, label %._crit_edge.loopexit.split.loop.exit

199:                                              ; preds = %190
  %200 = getelementptr inbounds ptr, ptr %18, i64 %indvars.iv.next499
  %201 = load ptr, ptr %200, align 8, !tbaa !32
  %202 = getelementptr inbounds double, ptr %201, i64 %indvars.iv498
  %203 = load double, ptr %202, align 8, !tbaa !33
  %204 = fdiv double 1.000000e+00, %203
  %205 = load ptr, ptr %151, align 8, !tbaa !32
  tail call void @N_VScale(double noundef %204, ptr noundef %205, ptr noundef %205) #5
  %.not402 = icmp slt i64 %indvars.iv.next499, %103
  %exitcond501.not = icmp eq i64 %indvars.iv.next499, %100
  br i1 %exitcond501.not, label %._crit_edge, label %.lr.ph, !llvm.loop !38

._crit_edge.loopexit.split.loop.exit:             ; preds = %190
  %206 = trunc nuw nsw i64 %indvars.iv.next499 to i32
  br label %._crit_edge

._crit_edge:                                      ; preds = %199, %._crit_edge.loopexit.split.loop.exit, %._crit_edge431.thread, %._crit_edge431
  %.not402.lcssa = phi i1 [ false, %._crit_edge431 ], [ false, %._crit_edge431.thread ], [ %.not402435, %._crit_edge.loopexit.split.loop.exit ], [ %.not402, %199 ]
  %.2361 = phi i32 [ %.0359467, %._crit_edge431 ], [ %.0359467, %._crit_edge431.thread ], [ %206, %._crit_edge.loopexit.split.loop.exit ], [ %9, %199 ]
  %.2 = phi double [ %.0348469, %._crit_edge431 ], [ %.0348469, %._crit_edge431.thread ], [ %197, %._crit_edge.loopexit.split.loop.exit ], [ %197, %199 ]
  store double %.0346470, ptr %24, align 8, !tbaa !33
  %.not398442 = icmp slt i32 %.2361, 1
  br i1 %.not398442, label %._crit_edge446, label %.lr.ph445.preheader

.lr.ph445.preheader:                              ; preds = %._crit_edge
  %207 = zext nneg i32 %.2361 to i64
  %208 = shl nuw nsw i64 %207, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %208, i1 false), !tbaa !33
  br label %._crit_edge446

._crit_edge446:                                   ; preds = %.lr.ph445.preheader, %._crit_edge
  %209 = tail call i32 @SUNQRsol(i32 noundef %.2361, ptr noundef %18, ptr noundef %20, ptr noundef nonnull %24) #5
  %.not399 = icmp eq i32 %209, 0
  br i1 %.not399, label %212, label %210

210:                                              ; preds = %._crit_edge446
  store i32 0, ptr %40, align 4, !tbaa !30
  %211 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

212:                                              ; preds = %._crit_edge446
  store double 1.000000e+00, ptr %44, align 8, !tbaa !33
  store ptr %22, ptr %47, align 8, !tbaa !32
  %213 = icmp sgt i32 %.2361, 0
  br i1 %213, label %.lr.ph449.preheader, label %._crit_edge450

.lr.ph449.preheader:                              ; preds = %212
  %wide.trip.count510 = zext nneg i32 %.2361 to i64
  %min.iters.check599 = icmp ult i32 %.2361, 4
  %brmerge = select i1 %min.iters.check599, i1 true, i1 %conflict.rdx596
  br i1 %brmerge, label %.lr.ph449.preheader614, label %vector.ph600

vector.ph600:                                     ; preds = %.lr.ph449.preheader
  %n.vec602 = and i64 %wide.trip.count510, 2147483644
  br label %vector.body604

vector.body604:                                   ; preds = %vector.body604, %vector.ph600
  %index605 = phi i64 [ 0, %vector.ph600 ], [ %index.next610, %vector.body604 ]
  %214 = getelementptr inbounds double, ptr %24, i64 %index605
  %215 = getelementptr inbounds i8, ptr %214, i64 16
  %wide.load606 = load <2 x double>, ptr %214, align 8, !tbaa !33
  %wide.load607 = load <2 x double>, ptr %215, align 8, !tbaa !33
  %216 = or disjoint i64 %index605, 1
  %217 = getelementptr inbounds double, ptr %44, i64 %216
  %218 = getelementptr inbounds i8, ptr %217, i64 16
  store <2 x double> %wide.load606, ptr %217, align 8, !tbaa !33
  store <2 x double> %wide.load607, ptr %218, align 8, !tbaa !33
  %219 = getelementptr inbounds ptr, ptr %15, i64 %index605
  %220 = getelementptr inbounds i8, ptr %219, i64 16
  %wide.load608 = load <2 x ptr>, ptr %219, align 8, !tbaa !32
  %wide.load609 = load <2 x ptr>, ptr %220, align 8, !tbaa !32
  %221 = getelementptr inbounds ptr, ptr %47, i64 %216
  %222 = getelementptr inbounds i8, ptr %221, i64 16
  store <2 x ptr> %wide.load608, ptr %221, align 8, !tbaa !32
  store <2 x ptr> %wide.load609, ptr %222, align 8, !tbaa !32
  %index.next610 = add nuw i64 %index605, 4
  %223 = icmp eq i64 %index.next610, %n.vec602
  br i1 %223, label %middle.block597, label %vector.body604, !llvm.loop !39

middle.block597:                                  ; preds = %vector.body604
  %cmp.n611 = icmp eq i64 %n.vec602, %wide.trip.count510
  br i1 %cmp.n611, label %._crit_edge450, label %.lr.ph449.preheader614

.lr.ph449.preheader614:                           ; preds = %.lr.ph449.preheader, %middle.block597
  %indvars.iv507.ph = phi i64 [ 0, %.lr.ph449.preheader ], [ %n.vec602, %middle.block597 ]
  %xtraiter645 = and i64 %wide.trip.count510, 1
  %lcmp.mod646.not = icmp eq i64 %xtraiter645, 0
  br i1 %lcmp.mod646.not, label %.lr.ph449.prol.loopexit, label %.lr.ph449.prol

.lr.ph449.prol:                                   ; preds = %.lr.ph449.preheader614
  %224 = getelementptr inbounds double, ptr %24, i64 %indvars.iv507.ph
  %225 = load double, ptr %224, align 8, !tbaa !33
  %indvars.iv.next508.prol = or disjoint i64 %indvars.iv507.ph, 1
  %226 = getelementptr inbounds double, ptr %44, i64 %indvars.iv.next508.prol
  store double %225, ptr %226, align 8, !tbaa !33
  %227 = getelementptr inbounds ptr, ptr %15, i64 %indvars.iv507.ph
  %228 = load ptr, ptr %227, align 8, !tbaa !32
  %229 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv.next508.prol
  store ptr %228, ptr %229, align 8, !tbaa !32
  br label %.lr.ph449.prol.loopexit

.lr.ph449.prol.loopexit:                          ; preds = %.lr.ph449.prol, %.lr.ph449.preheader614
  %indvars.iv507.unr = phi i64 [ %indvars.iv507.ph, %.lr.ph449.preheader614 ], [ %indvars.iv.next508.prol, %.lr.ph449.prol ]
  %230 = add nsw i64 %wide.trip.count510, -1
  %231 = icmp eq i64 %indvars.iv507.ph, %230
  br i1 %231, label %._crit_edge450, label %.lr.ph449

.lr.ph449:                                        ; preds = %.lr.ph449.prol.loopexit, %.lr.ph449
  %indvars.iv507 = phi i64 [ %indvars.iv.next508.1, %.lr.ph449 ], [ %indvars.iv507.unr, %.lr.ph449.prol.loopexit ]
  %232 = getelementptr inbounds double, ptr %24, i64 %indvars.iv507
  %233 = load double, ptr %232, align 8, !tbaa !33
  %indvars.iv.next508 = add nuw nsw i64 %indvars.iv507, 1
  %234 = getelementptr inbounds double, ptr %44, i64 %indvars.iv.next508
  store double %233, ptr %234, align 8, !tbaa !33
  %235 = getelementptr inbounds ptr, ptr %15, i64 %indvars.iv507
  %236 = load ptr, ptr %235, align 8, !tbaa !32
  %237 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv.next508
  store ptr %236, ptr %237, align 8, !tbaa !32
  %238 = getelementptr inbounds double, ptr %24, i64 %indvars.iv.next508
  %239 = load double, ptr %238, align 8, !tbaa !33
  %indvars.iv.next508.1 = add nuw nsw i64 %indvars.iv507, 2
  %240 = getelementptr inbounds double, ptr %44, i64 %indvars.iv.next508.1
  store double %239, ptr %240, align 8, !tbaa !33
  %241 = getelementptr inbounds ptr, ptr %15, i64 %indvars.iv.next508
  %242 = load ptr, ptr %241, align 8, !tbaa !32
  %243 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv.next508.1
  store ptr %242, ptr %243, align 8, !tbaa !32
  %exitcond511.not.1 = icmp eq i64 %indvars.iv.next508.1, %wide.trip.count510
  br i1 %exitcond511.not.1, label %._crit_edge450, label %.lr.ph449, !llvm.loop !42

._crit_edge450:                                   ; preds = %.lr.ph449.prol.loopexit, %.lr.ph449, %middle.block597, %212
  %244 = add i32 %.2361, 1
  %245 = tail call i32 @N_VLinearCombination(i32 noundef %244, ptr noundef nonnull %44, ptr noundef nonnull %47, ptr noundef %22) #5
  %.not400 = icmp eq i32 %245, 0
  br i1 %.not400, label %248, label %246

246:                                              ; preds = %._crit_edge450
  store i32 0, ptr %40, align 4, !tbaa !30
  %247 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

248:                                              ; preds = %._crit_edge450
  br i1 %.not402.lcssa, label %249, label %265

249:                                              ; preds = %248
  br i1 %.not386, label %251, label %250

250:                                              ; preds = %249
  tail call void @N_VDiv(ptr noundef %22, ptr noundef nonnull %31, ptr noundef %22) #5
  br label %251

251:                                              ; preds = %250, %249
  br i1 %55, label %252, label %258

252:                                              ; preds = %251
  %253 = tail call i32 %39(ptr noundef %35, ptr noundef %22, ptr noundef %27, double noundef %4, i32 noundef 2) #5
  %.not408 = icmp eq i32 %253, 0
  br i1 %.not408, label %259, label %254

254:                                              ; preds = %252
  store i32 0, ptr %40, align 4, !tbaa !30
  %255 = icmp slt i32 %253, 0
  %256 = select i1 %255, i32 -808, i32 805
  %257 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

258:                                              ; preds = %251
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %22, ptr noundef %27) #5
  br label %259

259:                                              ; preds = %252, %258
  %260 = load i32, ptr %40, align 4, !tbaa !30
  %.not409 = icmp eq i32 %260, 0
  br i1 %.not409, label %262, label %261

261:                                              ; preds = %259
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %27, ptr noundef %2) #5
  br label %263

262:                                              ; preds = %259
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %2, double noundef 1.000000e+00, ptr noundef %27, ptr noundef %2) #5
  br label %263

263:                                              ; preds = %262, %261
  store i32 0, ptr %40, align 4, !tbaa !30
  %264 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

265:                                              ; preds = %248
  %266 = icmp eq i32 %.0358468, %11
  br i1 %266, label %._crit_edge471, label %.preheader414

.preheader414:                                    ; preds = %265
  br i1 %213, label %.lr.ph453.preheader, label %._crit_edge454

.lr.ph453.preheader:                              ; preds = %.preheader414
  %267 = zext nneg i32 %.2361 to i64
  %xtraiter647 = and i64 %267, 1
  %lcmp.mod648.not = icmp eq i64 %xtraiter647, 0
  br i1 %lcmp.mod648.not, label %.lr.ph453.prol.loopexit, label %.lr.ph453.prol

.lr.ph453.prol:                                   ; preds = %.lr.ph453.preheader
  %.idx.prol = shl nuw nsw i64 %267, 4
  %268 = getelementptr i8, ptr %20, i64 %.idx.prol
  %269 = getelementptr i8, ptr %268, i64 -16
  %270 = load double, ptr %269, align 8, !tbaa !33
  %271 = getelementptr inbounds double, ptr %24, i64 %267
  store double %270, ptr %271, align 8, !tbaa !33
  %272 = getelementptr i8, ptr %268, i64 -8
  %273 = load double, ptr %272, align 8, !tbaa !33
  %indvars.iv.next513.prol = add nsw i64 %267, -1
  br label %.lr.ph453.prol.loopexit

.lr.ph453.prol.loopexit:                          ; preds = %.lr.ph453.prol, %.lr.ph453.preheader
  %indvars.iv512.unr = phi i64 [ %267, %.lr.ph453.preheader ], [ %indvars.iv.next513.prol, %.lr.ph453.prol ]
  %.0347452.unr = phi double [ 1.000000e+00, %.lr.ph453.preheader ], [ %273, %.lr.ph453.prol ]
  %.lcssa640.unr = phi double [ poison, %.lr.ph453.preheader ], [ %273, %.lr.ph453.prol ]
  %274 = icmp eq i32 %.2361, 1
  br i1 %274, label %._crit_edge454, label %.lr.ph453

.lr.ph453:                                        ; preds = %.lr.ph453.prol.loopexit, %.lr.ph453
  %indvars.iv512 = phi i64 [ %indvars.iv.next513.1, %.lr.ph453 ], [ %indvars.iv512.unr, %.lr.ph453.prol.loopexit ]
  %.0347452 = phi double [ %290, %.lr.ph453 ], [ %.0347452.unr, %.lr.ph453.prol.loopexit ]
  %.idx = shl i64 %indvars.iv512, 4
  %275 = getelementptr i8, ptr %20, i64 %.idx
  %276 = getelementptr i8, ptr %275, i64 -16
  %277 = load double, ptr %276, align 8, !tbaa !33
  %278 = fmul double %.0347452, %277
  %279 = getelementptr inbounds double, ptr %24, i64 %indvars.iv512
  store double %278, ptr %279, align 8, !tbaa !33
  %280 = getelementptr i8, ptr %275, i64 -8
  %281 = load double, ptr %280, align 8, !tbaa !33
  %282 = fmul double %.0347452, %281
  %indvars.iv.next513 = add nsw i64 %indvars.iv512, -1
  %.idx.1 = shl i64 %indvars.iv.next513, 4
  %283 = getelementptr i8, ptr %20, i64 %.idx.1
  %284 = getelementptr i8, ptr %283, i64 -16
  %285 = load double, ptr %284, align 8, !tbaa !33
  %286 = fmul double %282, %285
  %287 = getelementptr inbounds double, ptr %24, i64 %indvars.iv.next513
  store double %286, ptr %287, align 8, !tbaa !33
  %288 = getelementptr i8, ptr %283, i64 -8
  %289 = load double, ptr %288, align 8, !tbaa !33
  %290 = fmul double %282, %289
  %indvars.iv.next513.1 = add nsw i64 %indvars.iv512, -2
  %291 = icmp ugt i64 %indvars.iv.next513, 1
  br i1 %291, label %.lr.ph453, label %._crit_edge454, !llvm.loop !43

._crit_edge454:                                   ; preds = %.lr.ph453.prol.loopexit, %.lr.ph453, %.preheader414
  %.0347.lcssa = phi double [ 1.000000e+00, %.preheader414 ], [ %.lcssa640.unr, %.lr.ph453.prol.loopexit ], [ %290, %.lr.ph453 ]
  store double %.0347.lcssa, ptr %24, align 8, !tbaa !33
  %292 = fmul double %.0346470, %.0347.lcssa
  %.not403456 = icmp slt i32 %.2361, 0
  br i1 %.not403456, label %._crit_edge460.thread, label %.lr.ph459.preheader

._crit_edge460.thread:                            ; preds = %._crit_edge454
  %293 = tail call double @llvm.fabs.f64(double %292)
  br label %._crit_edge465

.lr.ph459.preheader:                              ; preds = %._crit_edge454
  %wide.trip.count518 = zext i32 %244 to i64
  %min.iters.check582 = icmp ult i32 %244, 4
  br i1 %min.iters.check582, label %.lr.ph459.preheader613, label %vector.ph583

vector.ph583:                                     ; preds = %.lr.ph459.preheader
  %n.vec585 = and i64 %wide.trip.count518, 4294967292
  %broadcast.splatinsert = insertelement <2 x double> poison, double %292, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body587

vector.body587:                                   ; preds = %vector.body587, %vector.ph583
  %index588 = phi i64 [ 0, %vector.ph583 ], [ %index.next591, %vector.body587 ]
  %294 = getelementptr inbounds double, ptr %24, i64 %index588
  %295 = getelementptr inbounds i8, ptr %294, i64 16
  %wide.load589 = load <2 x double>, ptr %294, align 8, !tbaa !33
  %wide.load590 = load <2 x double>, ptr %295, align 8, !tbaa !33
  %296 = fmul <2 x double> %broadcast.splat, %wide.load589
  %297 = fmul <2 x double> %broadcast.splat, %wide.load590
  store <2 x double> %296, ptr %294, align 8, !tbaa !33
  store <2 x double> %297, ptr %295, align 8, !tbaa !33
  %index.next591 = add nuw i64 %index588, 4
  %298 = icmp eq i64 %index.next591, %n.vec585
  br i1 %298, label %middle.block580, label %vector.body587, !llvm.loop !44

middle.block580:                                  ; preds = %vector.body587
  %cmp.n592 = icmp eq i64 %n.vec585, %wide.trip.count518
  br i1 %cmp.n592, label %._crit_edge460, label %.lr.ph459.preheader613

.lr.ph459.preheader613:                           ; preds = %middle.block580, %.lr.ph459.preheader
  %indvars.iv515.ph = phi i64 [ 0, %.lr.ph459.preheader ], [ %n.vec585, %middle.block580 ]
  br label %.lr.ph459

.lr.ph459:                                        ; preds = %.lr.ph459.preheader613, %.lr.ph459
  %indvars.iv515 = phi i64 [ %indvars.iv.next516, %.lr.ph459 ], [ %indvars.iv515.ph, %.lr.ph459.preheader613 ]
  %299 = getelementptr inbounds double, ptr %24, i64 %indvars.iv515
  %300 = load double, ptr %299, align 8, !tbaa !33
  %301 = fmul double %292, %300
  store double %301, ptr %299, align 8, !tbaa !33
  %indvars.iv.next516 = add nuw nsw i64 %indvars.iv515, 1
  %exitcond519.not = icmp eq i64 %indvars.iv.next516, %wide.trip.count518
  br i1 %exitcond519.not, label %._crit_edge460, label %.lr.ph459, !llvm.loop !45

._crit_edge460:                                   ; preds = %.lr.ph459, %middle.block580
  %302 = tail call double @llvm.fabs.f64(double %292)
  br i1 %.not403456, label %._crit_edge465, label %.lr.ph464.preheader

.lr.ph464.preheader:                              ; preds = %._crit_edge460
  %wide.trip.count523 = zext i32 %244 to i64
  %min.iters.check = icmp ult i32 %244, 4
  %brmerge681 = select i1 %min.iters.check, i1 true, i1 %conflict.rdx
  br i1 %brmerge681, label %.lr.ph464.preheader612, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph464.preheader
  %n.vec = and i64 %wide.trip.count518, 4294967292
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %303 = getelementptr inbounds double, ptr %24, i64 %index
  %304 = getelementptr inbounds i8, ptr %303, i64 16
  %wide.load = load <2 x double>, ptr %303, align 8, !tbaa !33
  %wide.load577 = load <2 x double>, ptr %304, align 8, !tbaa !33
  %305 = getelementptr inbounds double, ptr %44, i64 %index
  %306 = getelementptr inbounds i8, ptr %305, i64 16
  store <2 x double> %wide.load, ptr %305, align 8, !tbaa !33
  store <2 x double> %wide.load577, ptr %306, align 8, !tbaa !33
  %307 = getelementptr inbounds ptr, ptr %15, i64 %index
  %308 = getelementptr inbounds i8, ptr %307, i64 16
  %wide.load578 = load <2 x ptr>, ptr %307, align 8, !tbaa !32
  %wide.load579 = load <2 x ptr>, ptr %308, align 8, !tbaa !32
  %309 = getelementptr inbounds ptr, ptr %47, i64 %index
  %310 = getelementptr inbounds i8, ptr %309, i64 16
  store <2 x ptr> %wide.load578, ptr %309, align 8, !tbaa !32
  store <2 x ptr> %wide.load579, ptr %310, align 8, !tbaa !32
  %index.next = add nuw i64 %index, 4
  %311 = icmp eq i64 %index.next, %n.vec
  br i1 %311, label %middle.block, label %vector.body, !llvm.loop !46

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count518
  br i1 %cmp.n, label %._crit_edge465, label %.lr.ph464.preheader612

.lr.ph464.preheader612:                           ; preds = %.lr.ph464.preheader, %middle.block
  %indvars.iv520.ph = phi i64 [ 0, %.lr.ph464.preheader ], [ %n.vec, %middle.block ]
  %xtraiter649 = and i64 %wide.trip.count518, 1
  %lcmp.mod650.not = icmp eq i64 %xtraiter649, 0
  br i1 %lcmp.mod650.not, label %.lr.ph464.prol.loopexit, label %.lr.ph464.prol

.lr.ph464.prol:                                   ; preds = %.lr.ph464.preheader612
  %312 = getelementptr inbounds double, ptr %24, i64 %indvars.iv520.ph
  %313 = load double, ptr %312, align 8, !tbaa !33
  %314 = getelementptr inbounds double, ptr %44, i64 %indvars.iv520.ph
  store double %313, ptr %314, align 8, !tbaa !33
  %315 = getelementptr inbounds ptr, ptr %15, i64 %indvars.iv520.ph
  %316 = load ptr, ptr %315, align 8, !tbaa !32
  %317 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv520.ph
  store ptr %316, ptr %317, align 8, !tbaa !32
  %indvars.iv.next521.prol = or disjoint i64 %indvars.iv520.ph, 1
  br label %.lr.ph464.prol.loopexit

.lr.ph464.prol.loopexit:                          ; preds = %.lr.ph464.prol, %.lr.ph464.preheader612
  %indvars.iv520.unr = phi i64 [ %indvars.iv520.ph, %.lr.ph464.preheader612 ], [ %indvars.iv.next521.prol, %.lr.ph464.prol ]
  %318 = add nsw i64 %wide.trip.count518, -1
  %319 = icmp eq i64 %indvars.iv520.ph, %318
  br i1 %319, label %._crit_edge465, label %.lr.ph464

.lr.ph464:                                        ; preds = %.lr.ph464.prol.loopexit, %.lr.ph464
  %indvars.iv520 = phi i64 [ %indvars.iv.next521.1, %.lr.ph464 ], [ %indvars.iv520.unr, %.lr.ph464.prol.loopexit ]
  %320 = getelementptr inbounds double, ptr %24, i64 %indvars.iv520
  %321 = load double, ptr %320, align 8, !tbaa !33
  %322 = getelementptr inbounds double, ptr %44, i64 %indvars.iv520
  store double %321, ptr %322, align 8, !tbaa !33
  %323 = getelementptr inbounds ptr, ptr %15, i64 %indvars.iv520
  %324 = load ptr, ptr %323, align 8, !tbaa !32
  %325 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv520
  store ptr %324, ptr %325, align 8, !tbaa !32
  %indvars.iv.next521 = add nuw nsw i64 %indvars.iv520, 1
  %326 = getelementptr inbounds double, ptr %24, i64 %indvars.iv.next521
  %327 = load double, ptr %326, align 8, !tbaa !33
  %328 = getelementptr inbounds double, ptr %44, i64 %indvars.iv.next521
  store double %327, ptr %328, align 8, !tbaa !33
  %329 = getelementptr inbounds ptr, ptr %15, i64 %indvars.iv.next521
  %330 = load ptr, ptr %329, align 8, !tbaa !32
  %331 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv.next521
  store ptr %330, ptr %331, align 8, !tbaa !32
  %indvars.iv.next521.1 = add nuw nsw i64 %indvars.iv520, 2
  %exitcond524.not.1 = icmp eq i64 %indvars.iv.next521.1, %wide.trip.count523
  br i1 %exitcond524.not.1, label %._crit_edge465, label %.lr.ph464, !llvm.loop !47

._crit_edge465:                                   ; preds = %.lr.ph464.prol.loopexit, %.lr.ph464, %middle.block, %._crit_edge460.thread, %._crit_edge460
  %332 = phi double [ %293, %._crit_edge460.thread ], [ %302, %._crit_edge460 ], [ %302, %middle.block ], [ %302, %.lr.ph464 ], [ %302, %.lr.ph464.prol.loopexit ]
  %333 = load ptr, ptr %15, align 8, !tbaa !32
  %334 = tail call i32 @N_VLinearCombination(i32 noundef %244, ptr noundef nonnull %44, ptr noundef nonnull %47, ptr noundef %333) #5
  %.not405 = icmp eq i32 %334, 0
  %335 = add nuw nsw i32 %.0358468, 1
  br i1 %.not405, label %.preheader415, label %336

336:                                              ; preds = %._crit_edge465
  store i32 0, ptr %40, align 4, !tbaa !30
  %337 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

._crit_edge471:                                   ; preds = %265
  %338 = fcmp olt double %.2, %93
  br i1 %338, label %339, label %._crit_edge471.thread

339:                                              ; preds = %._crit_edge471
  br i1 %.not386, label %341, label %340

340:                                              ; preds = %339
  tail call void @N_VDiv(ptr noundef %22, ptr noundef nonnull %31, ptr noundef %22) #5
  br label %341

341:                                              ; preds = %340, %339
  br i1 %55, label %342, label %348

342:                                              ; preds = %341
  %343 = tail call i32 %39(ptr noundef %35, ptr noundef %22, ptr noundef %27, double noundef %4, i32 noundef 2) #5
  %.not406 = icmp eq i32 %343, 0
  br i1 %.not406, label %349, label %344

344:                                              ; preds = %342
  store i32 0, ptr %40, align 4, !tbaa !30
  %345 = icmp slt i32 %343, 0
  %346 = select i1 %345, i32 -808, i32 805
  %347 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

348:                                              ; preds = %341
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %22, ptr noundef %27) #5
  br label %349

349:                                              ; preds = %342, %348
  %350 = load i32, ptr %40, align 4, !tbaa !30
  %.not407 = icmp eq i32 %350, 0
  br i1 %.not407, label %352, label %351

351:                                              ; preds = %349
  tail call void @N_VScale(double noundef 1.000000e+00, ptr noundef %27, ptr noundef %2) #5
  br label %353

352:                                              ; preds = %349
  tail call void @N_VLinearSum(double noundef 1.000000e+00, ptr noundef %2, double noundef 1.000000e+00, ptr noundef %27, ptr noundef %2) #5
  br label %353

353:                                              ; preds = %352, %351
  store i32 0, ptr %40, align 4, !tbaa !30
  %354 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

._crit_edge471.thread:                            ; preds = %97, %._crit_edge471
  store i32 0, ptr %40, align 4, !tbaa !30
  %355 = load ptr, ptr %0, align 8, !tbaa !5
  br label %.sink.split

.sink.split:                                      ; preds = %52, %58, %64, %74, %95, %146, %154, %162, %179, %183, %188, %210, %246, %254, %263, %336, %344, %353, %._crit_edge471.thread
  %.sink545 = phi ptr [ %355, %._crit_edge471.thread ], [ %354, %353 ], [ %347, %344 ], [ %337, %336 ], [ %264, %263 ], [ %257, %254 ], [ %247, %246 ], [ %211, %210 ], [ %189, %188 ], [ %184, %183 ], [ %180, %179 ], [ %165, %162 ], [ %157, %154 ], [ %149, %146 ], [ %96, %95 ], [ %77, %74 ], [ %67, %64 ], [ %8, %58 ], [ %8, %52 ]
  %.sink = phi i32 [ 802, %._crit_edge471.thread ], [ 801, %353 ], [ %346, %344 ], [ -812, %336 ], [ 0, %263 ], [ %256, %254 ], [ -812, %246 ], [ -811, %210 ], [ 807, %188 ], [ -810, %183 ], [ -810, %179 ], [ %164, %162 ], [ %156, %154 ], [ %148, %146 ], [ 0, %95 ], [ %76, %74 ], [ %66, %64 ], [ -807, %58 ], [ -804, %52 ]
  %356 = getelementptr inbounds i8, ptr %.sink545, i64 32
  store i32 %.sink, ptr %356, align 8, !tbaa !48
  br label %357

357:                                              ; preds = %.sink.split, %5
  %.0 = phi i32 [ -801, %5 ], [ %.sink, %.sink.split ]
  ret i32 %.0
}

declare void @N_VScale(double noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @N_VLinearSum(double noundef, ptr noundef, double noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @N_VProd(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare double @N_VDotProd(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #2

declare void @N_VConst(double noundef, ptr noundef) local_unnamed_addr #1

declare void @N_VDiv(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @SUNClassicalGS(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @SUNModifiedGS(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

declare i32 @SUNQRfact(i32 noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #3

declare i32 @SUNQRsol(i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @N_VLinearCombination(i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_generic_SUNLinearSolver", !7, i64 0, !7, i64 8, !7, i64 16}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !12, i64 0}
!11 = !{!"_SUNLinearSolverContent_SPGMR", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !13, i64 24, !12, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !12, i64 160, !7, i64 168}
!12 = !{!"int", !8, i64 0}
!13 = !{!"double", !8, i64 0}
!14 = !{!11, !12, i64 12}
!15 = !{!11, !12, i64 8}
!16 = !{!11, !7, i64 96}
!17 = !{!11, !7, i64 104}
!18 = !{!11, !7, i64 112}
!19 = !{!11, !7, i64 120}
!20 = !{!11, !7, i64 128}
!21 = !{!11, !7, i64 136}
!22 = !{!11, !7, i64 80}
!23 = !{!11, !7, i64 88}
!24 = !{!11, !7, i64 48}
!25 = !{!11, !7, i64 72}
!26 = !{!11, !7, i64 40}
!27 = !{!11, !7, i64 64}
!28 = !{!11, !7, i64 144}
!29 = !{!11, !7, i64 152}
!30 = !{!12, !12, i64 0}
!31 = !{!11, !12, i64 4}
!32 = !{!7, !7, i64 0}
!33 = !{!13, !13, i64 0}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.unroll.disable"}
!38 = distinct !{!38, !35}
!39 = distinct !{!39, !35, !40, !41}
!40 = !{!"llvm.loop.isvectorized", i32 1}
!41 = !{!"llvm.loop.unroll.runtime.disable"}
!42 = distinct !{!42, !35, !40}
!43 = distinct !{!43, !35}
!44 = distinct !{!44, !35, !40, !41}
!45 = distinct !{!45, !35, !41, !40}
!46 = distinct !{!46, !35, !40, !41}
!47 = distinct !{!47, !35, !40}
!48 = !{!11, !12, i64 32}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass