; LLVM IR from InsightSoftwareConsortium/ITK :: Modules/Numerics/FEM/src (dsrc2c)

; 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.anon = type { i64, i64, i64, i64, i64, i64 }
%struct.anon.0 = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%struct.anon.1 = type { i64, i64, i64, i64, i64 }

@itcom1_ = external hidden global %struct.anon, align 8
@c__1 = external hidden global i64, align 8
@itcom3_ = external hidden global %struct.anon.0, align 8
@c__0 = external hidden global i64, align 8
@c_b21 = external hidden global double, align 8
@itcom2_ = external hidden global %struct.anon.1, align 8
@c__2 = external hidden global i64, align 8
@sor_.n3 = external hidden global i64, align 8
@sor_.nb = external hidden global i64, align 8
@sor_.ib1 = external hidden global i64, align 8
@sor_.ib2 = external hidden global i64, align 8
@sor_.ib3 = external hidden global i64, align 8
@sor_.ier = external hidden global i64, align 8
@sor_.tol = external hidden global double, align 8
@sor_.temp = external hidden global double, align 8
@sor_.loop = external hidden global i64, align 8
@sor_.time1 = external hidden global double, align 8
@sor_.time2 = external hidden global double, align 8
@sor_.timi1 = external hidden global float, align 4
@sor_.timj1 = external hidden global float, align 4
@sor_.timi2 = external hidden global float, align 4
@sor_.timj2 = external hidden global float, align 4
@sor_.idgts = external hidden global i64, align 8
@sor_.digit1 = external hidden global double, align 8
@sor_.digit2 = external hidden global double, align 8
@sor_.itmax1 = external hidden global i64, align 8
@sor_.ierper = external hidden global i64, align 8
@c__3 = external hidden global i64, align 8

; Function Attrs: nounwind uwtable
declare dso_local double @dsrc_timer_(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @echout_(ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @echall_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @ivfill_(ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @vfill_(ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @sbelm_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @prbndx_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @permat_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @pervec_(ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @scal_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @unscal_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @perror_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
define dso_local i32 @sor_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11) #0 {
  %13 = alloca i32, align 4
  %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 ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  store ptr %0, ptr %14, align 8, !tbaa !5
  store ptr %1, ptr %15, align 8, !tbaa !5
  store ptr %2, ptr %16, align 8, !tbaa !5
  store ptr %3, ptr %17, align 8, !tbaa !5
  store ptr %4, ptr %18, align 8, !tbaa !5
  store ptr %5, ptr %19, align 8, !tbaa !5
  store ptr %6, ptr %20, align 8, !tbaa !5
  store ptr %7, ptr %21, align 8, !tbaa !5
  store ptr %8, ptr %22, align 8, !tbaa !5
  store ptr %9, ptr %23, align 8, !tbaa !5
  store ptr %10, ptr %24, align 8, !tbaa !5
  store ptr %11, ptr %25, align 8, !tbaa !5
  %26 = load ptr, ptr %23, align 8, !tbaa !5
  %27 = getelementptr inbounds i64, ptr %26, i64 1
  %28 = load i64, ptr %27, align 8, !tbaa !9
  store i64 %28, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 4), align 8, !tbaa !11
  %29 = load ptr, ptr %23, align 8, !tbaa !5
  %30 = getelementptr inbounds i64, ptr %29, i64 3
  %31 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %31, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 5), align 8, !tbaa !13
  store i64 0, ptr @sor_.ier, align 8, !tbaa !9
  %32 = load ptr, ptr %23, align 8, !tbaa !5
  %33 = getelementptr inbounds i64, ptr %32, i64 0
  %34 = load i64, ptr %33, align 8, !tbaa !9
  %35 = icmp sle i64 %34, 0
  br i1 %35, label %36, label %37

36:                                               ; preds = %12
  store i32 0, ptr %13, align 4
  br label %394

37:                                               ; preds = %12
  %38 = load ptr, ptr %23, align 8, !tbaa !5
  %39 = getelementptr inbounds i64, ptr %38, i64 10
  %40 = load i64, ptr %39, align 8, !tbaa !9
  %41 = icmp eq i64 %40, 0
  br i1 %41, label %42, label %45

42:                                               ; preds = %37
  %43 = call double @dsrc_timer_(ptr noundef null)
  %44 = fptrunc double %43 to float
  store float %44, ptr @sor_.timj1, align 4, !tbaa !14
  br label %45

45:                                               ; preds = %42, %37
  %46 = load i64, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 4), align 8, !tbaa !11
  %47 = icmp slt i64 %46, 3
  br i1 %47, label %48, label %52

48:                                               ; preds = %45
  %49 = load ptr, ptr %23, align 8, !tbaa !5
  %50 = load ptr, ptr %24, align 8, !tbaa !5
  %51 = call i32 @echout_(ptr noundef %49, ptr noundef %50, ptr noundef @c__3)
  br label %61

52:                                               ; preds = %45
  %53 = load ptr, ptr %14, align 8, !tbaa !5
  %54 = load ptr, ptr %15, align 8, !tbaa !5
  %55 = load ptr, ptr %16, align 8, !tbaa !5
  %56 = load ptr, ptr %17, align 8, !tbaa !5
  %57 = load ptr, ptr %18, align 8, !tbaa !5
  %58 = load ptr, ptr %23, align 8, !tbaa !5
  %59 = load ptr, ptr %24, align 8, !tbaa !5
  %60 = call i32 @echall_(ptr noundef %53, ptr noundef %54, ptr noundef %55, ptr noundef %56, ptr noundef %57, ptr noundef %58, ptr noundef %59, ptr noundef @c__1)
  br label %61

61:                                               ; preds = %52, %48
  %62 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 16), align 8, !tbaa !16
  %63 = fmul double %62, 5.000000e+02
  store double %63, ptr @sor_.temp, align 8, !tbaa !19
  %64 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 19), align 8, !tbaa !20
  %65 = load double, ptr @sor_.temp, align 8, !tbaa !19
  %66 = fcmp olt double %64, %65
  br i1 %66, label %67, label %69

67:                                               ; preds = %61
  %68 = load double, ptr @sor_.temp, align 8, !tbaa !19
  store double %68, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 19), align 8, !tbaa !20
  br label %69

69:                                               ; preds = %67, %61
  %70 = load ptr, ptr %24, align 8, !tbaa !5
  %71 = getelementptr inbounds double, ptr %70, i64 8
  %72 = load double, ptr %71, align 8, !tbaa !19
  store double %72, ptr @sor_.time1, align 8, !tbaa !19
  %73 = load ptr, ptr %24, align 8, !tbaa !5
  %74 = getelementptr inbounds double, ptr %73, i64 9
  %75 = load double, ptr %74, align 8, !tbaa !19
  store double %75, ptr @sor_.time2, align 8, !tbaa !19
  %76 = load ptr, ptr %24, align 8, !tbaa !5
  %77 = getelementptr inbounds double, ptr %76, i64 10
  %78 = load double, ptr %77, align 8, !tbaa !19
  store double %78, ptr @sor_.digit1, align 8, !tbaa !19
  %79 = load ptr, ptr %24, align 8, !tbaa !5
  %80 = getelementptr inbounds double, ptr %79, i64 11
  %81 = load double, ptr %80, align 8, !tbaa !19
  store double %81, ptr @sor_.digit2, align 8, !tbaa !19
  %82 = load ptr, ptr %14, align 8, !tbaa !5
  %83 = load i64, ptr %82, align 8, !tbaa !9
  %84 = icmp sle i64 %83, 0
  br i1 %84, label %85, label %86

85:                                               ; preds = %69
  store i64 31, ptr @sor_.ier, align 8, !tbaa !9
  br label %379

86:                                               ; preds = %69
  %87 = load ptr, ptr %23, align 8, !tbaa !5
  %88 = getelementptr inbounds i64, ptr %87, i64 9
  %89 = load i64, ptr %88, align 8, !tbaa !9
  %90 = icmp ne i64 %89, 0
  br i1 %90, label %91, label %113

91:                                               ; preds = %86
  %92 = load ptr, ptr %24, align 8, !tbaa !5
  %93 = getelementptr inbounds double, ptr %92, i64 7
  %94 = load double, ptr %93, align 8, !tbaa !19
  store double %94, ptr @sor_.tol, align 8, !tbaa !19
  %95 = load ptr, ptr %14, align 8, !tbaa !5
  %96 = load ptr, ptr %20, align 8, !tbaa !5
  %97 = call i32 @ivfill_(ptr noundef %95, ptr noundef %96, ptr noundef @c__0)
  %98 = load ptr, ptr %14, align 8, !tbaa !5
  %99 = load ptr, ptr %22, align 8, !tbaa !5
  %100 = call i32 @vfill_(ptr noundef %98, ptr noundef %99, ptr noundef @c_b21)
  %101 = load ptr, ptr %14, align 8, !tbaa !5
  %102 = load ptr, ptr %15, align 8, !tbaa !5
  %103 = load ptr, ptr %16, align 8, !tbaa !5
  %104 = load ptr, ptr %17, align 8, !tbaa !5
  %105 = load ptr, ptr %18, align 8, !tbaa !5
  %106 = load ptr, ptr %20, align 8, !tbaa !5
  %107 = load ptr, ptr %22, align 8, !tbaa !5
  %108 = call i32 @sbelm_(ptr noundef %101, ptr noundef %102, ptr noundef %103, ptr noundef %104, ptr noundef %105, ptr noundef %106, ptr noundef %107, ptr noundef @sor_.tol, ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 2), ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 4), ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 5), ptr noundef @sor_.ier)
  %109 = load i64, ptr @sor_.ier, align 8, !tbaa !9
  %110 = icmp ne i64 %109, 0
  br i1 %110, label %111, label %112

111:                                              ; preds = %91
  br label %379

112:                                              ; preds = %91
  br label %113

113:                                              ; preds = %112, %86
  store i64 0, ptr @sor_.ib1, align 8, !tbaa !9
  %114 = load i64, ptr @sor_.ib1, align 8, !tbaa !9
  %115 = load ptr, ptr %14, align 8, !tbaa !5
  %116 = load i64, ptr %115, align 8, !tbaa !9
  %117 = add nsw i64 %114, %116
  store i64 %117, ptr @sor_.ib2, align 8, !tbaa !9
  %118 = load i64, ptr @sor_.ib2, align 8, !tbaa !9
  %119 = load ptr, ptr %14, align 8, !tbaa !5
  %120 = load i64, ptr %119, align 8, !tbaa !9
  %121 = add nsw i64 %118, %120
  store i64 %121, ptr @sor_.ib3, align 8, !tbaa !9
  %122 = load ptr, ptr %14, align 8, !tbaa !5
  %123 = load i64, ptr %122, align 8, !tbaa !9
  %124 = load ptr, ptr %23, align 8, !tbaa !5
  %125 = getelementptr inbounds i64, ptr %124, i64 7
  store i64 %123, ptr %125, align 8, !tbaa !9
  %126 = load ptr, ptr %21, align 8, !tbaa !5
  %127 = load i64, ptr %126, align 8, !tbaa !9
  %128 = load ptr, ptr %23, align 8, !tbaa !5
  %129 = getelementptr inbounds i64, ptr %128, i64 7
  %130 = load i64, ptr %129, align 8, !tbaa !9
  %131 = icmp slt i64 %127, %130
  br i1 %131, label %132, label %133

132:                                              ; preds = %113
  store i64 32, ptr @sor_.ier, align 8, !tbaa !9
  br label %379

133:                                              ; preds = %113
  %134 = load ptr, ptr %23, align 8, !tbaa !5
  %135 = getelementptr inbounds i64, ptr %134, i64 8
  %136 = load i64, ptr %135, align 8, !tbaa !9
  store i64 %136, ptr @sor_.nb, align 8, !tbaa !9
  %137 = load i64, ptr @sor_.nb, align 8, !tbaa !9
  %138 = icmp slt i64 %137, 0
  br i1 %138, label %139, label %140

139:                                              ; preds = %133
  br label %179

140:                                              ; preds = %133
  %141 = load ptr, ptr %14, align 8, !tbaa !5
  %142 = load i64, ptr %141, align 8, !tbaa !9
  %143 = mul nsw i64 %142, 3
  store i64 %143, ptr @sor_.n3, align 8, !tbaa !9
  %144 = load ptr, ptr %20, align 8, !tbaa !5
  %145 = call i32 @ivfill_(ptr noundef @sor_.n3, ptr noundef %144, ptr noundef @c__0)
  %146 = load ptr, ptr %14, align 8, !tbaa !5
  %147 = load ptr, ptr %15, align 8, !tbaa !5
  %148 = load ptr, ptr %16, align 8, !tbaa !5
  %149 = load ptr, ptr %20, align 8, !tbaa !5
  %150 = load ptr, ptr %20, align 8, !tbaa !5
  %151 = load i64, ptr @sor_.ib2, align 8, !tbaa !9
  %152 = getelementptr inbounds i64, ptr %150, i64 %151
  %153 = call i32 @prbndx_(ptr noundef %146, ptr noundef @sor_.nb, ptr noundef %147, ptr noundef %148, ptr noundef %149, ptr noundef %152, ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 4), ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 5), ptr noundef @sor_.ier)
  %154 = load i64, ptr @sor_.ier, align 8, !tbaa !9
  %155 = icmp ne i64 %154, 0
  br i1 %155, label %156, label %157

156:                                              ; preds = %140
  br label %379

157:                                              ; preds = %140
  %158 = load ptr, ptr %14, align 8, !tbaa !5
  %159 = load ptr, ptr %15, align 8, !tbaa !5
  %160 = load ptr, ptr %16, align 8, !tbaa !5
  %161 = load ptr, ptr %17, align 8, !tbaa !5
  %162 = load ptr, ptr %20, align 8, !tbaa !5
  %163 = load ptr, ptr %20, align 8, !tbaa !5
  %164 = load i64, ptr @sor_.ib3, align 8, !tbaa !9
  %165 = getelementptr inbounds i64, ptr %163, i64 %164
  %166 = call i32 @permat_(ptr noundef %158, ptr noundef %159, ptr noundef %160, ptr noundef %161, ptr noundef %162, ptr noundef %165, ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 2), ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 4), ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 5), ptr noundef @sor_.ier)
  %167 = load i64, ptr @sor_.ier, align 8, !tbaa !9
  %168 = icmp ne i64 %167, 0
  br i1 %168, label %169, label %170

169:                                              ; preds = %157
  br label %379

170:                                              ; preds = %157
  %171 = load ptr, ptr %14, align 8, !tbaa !5
  %172 = load ptr, ptr %18, align 8, !tbaa !5
  %173 = load ptr, ptr %20, align 8, !tbaa !5
  %174 = call i32 @pervec_(ptr noundef %171, ptr noundef %172, ptr noundef %173)
  %175 = load ptr, ptr %14, align 8, !tbaa !5
  %176 = load ptr, ptr %19, align 8, !tbaa !5
  %177 = load ptr, ptr %20, align 8, !tbaa !5
  %178 = call i32 @pervec_(ptr noundef %175, ptr noundef %176, ptr noundef %177)
  br label %179

179:                                              ; preds = %170, %139
  %180 = load ptr, ptr %23, align 8, !tbaa !5
  %181 = getelementptr inbounds i64, ptr %180, i64 7
  %182 = load ptr, ptr %22, align 8, !tbaa !5
  %183 = call i32 @vfill_(ptr noundef %181, ptr noundef %182, ptr noundef @c_b21)
  %184 = load ptr, ptr %14, align 8, !tbaa !5
  %185 = load ptr, ptr %15, align 8, !tbaa !5
  %186 = load ptr, ptr %16, align 8, !tbaa !5
  %187 = load ptr, ptr %17, align 8, !tbaa !5
  %188 = load ptr, ptr %18, align 8, !tbaa !5
  %189 = load ptr, ptr %19, align 8, !tbaa !5
  %190 = load ptr, ptr %22, align 8, !tbaa !5
  %191 = call i32 @scal_(ptr noundef %184, ptr noundef %185, ptr noundef %186, ptr noundef %187, ptr noundef %188, ptr noundef %189, ptr noundef %190, ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 4), ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 5), ptr noundef @sor_.ier)
  %192 = load i64, ptr @sor_.ier, align 8, !tbaa !9
  %193 = icmp ne i64 %192, 0
  br i1 %193, label %194, label %195

194:                                              ; preds = %179
  br label %379

195:                                              ; preds = %179
  %196 = load ptr, ptr %23, align 8, !tbaa !5
  %197 = getelementptr inbounds i64, ptr %196, i64 10
  %198 = load i64, ptr %197, align 8, !tbaa !9
  %199 = icmp eq i64 %198, 0
  br i1 %199, label %200, label %203

200:                                              ; preds = %195
  %201 = call double @dsrc_timer_(ptr noundef null)
  %202 = fptrunc double %201 to float
  store float %202, ptr @sor_.timi1, align 4, !tbaa !14
  br label %203

203:                                              ; preds = %200, %195
  %204 = load i64, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 3), align 8, !tbaa !21
  %205 = add nsw i64 %204, 1
  store i64 %205, ptr @sor_.itmax1, align 8, !tbaa !9
  store i64 1, ptr @sor_.loop, align 8, !tbaa !9
  br label %206

206:                                              ; preds = %227, %203
  %207 = load i64, ptr @sor_.loop, align 8, !tbaa !9
  %208 = load i64, ptr @sor_.itmax1, align 8, !tbaa !9
  %209 = icmp sle i64 %207, %208
  br i1 %209, label %210, label %230

210:                                              ; preds = %206
  %211 = load i64, ptr @sor_.loop, align 8, !tbaa !9
  %212 = sub nsw i64 %211, 1
  store i64 %212, ptr @itcom1_, align 8, !tbaa !22
  %213 = load ptr, ptr %14, align 8, !tbaa !5
  %214 = load ptr, ptr %15, align 8, !tbaa !5
  %215 = load ptr, ptr %16, align 8, !tbaa !5
  %216 = load ptr, ptr %17, align 8, !tbaa !5
  %217 = load ptr, ptr %18, align 8, !tbaa !5
  %218 = load ptr, ptr %19, align 8, !tbaa !5
  %219 = load ptr, ptr %22, align 8, !tbaa !5
  %220 = load i64, ptr @sor_.ib1, align 8, !tbaa !9
  %221 = getelementptr inbounds double, ptr %219, i64 %220
  %222 = call i32 @itsor_(ptr noundef %213, ptr noundef %214, ptr noundef %215, ptr noundef %216, ptr noundef %217, ptr noundef %218, ptr noundef %221)
  %223 = load i64, ptr getelementptr inbounds (%struct.anon.1, ptr @itcom2_, i32 0, i32 3), align 8, !tbaa !23
  %224 = icmp ne i64 %223, 0
  br i1 %224, label %225, label %226

225:                                              ; preds = %210
  br label %252

226:                                              ; preds = %210
  br label %227

227:                                              ; preds = %226
  %228 = load i64, ptr @sor_.loop, align 8, !tbaa !9
  %229 = add nsw i64 %228, 1
  store i64 %229, ptr @sor_.loop, align 8, !tbaa !9
  br label %206, !llvm.loop !25

230:                                              ; preds = %206
  %231 = load ptr, ptr %23, align 8, !tbaa !5
  %232 = getelementptr inbounds i64, ptr %231, i64 10
  %233 = load i64, ptr %232, align 8, !tbaa !9
  %234 = icmp eq i64 %233, 0
  br i1 %234, label %235, label %242

235:                                              ; preds = %230
  %236 = call double @dsrc_timer_(ptr noundef null)
  %237 = fptrunc double %236 to float
  store float %237, ptr @sor_.timi2, align 4, !tbaa !14
  %238 = load float, ptr @sor_.timi2, align 4, !tbaa !14
  %239 = load float, ptr @sor_.timi1, align 4, !tbaa !14
  %240 = fsub float %238, %239
  %241 = fpext float %240 to double
  store double %241, ptr @sor_.time1, align 8, !tbaa !19
  br label %242

242:                                              ; preds = %235, %230
  store i64 33, ptr @sor_.ier, align 8, !tbaa !9
  %243 = load ptr, ptr %23, align 8, !tbaa !5
  %244 = getelementptr inbounds i64, ptr %243, i64 2
  %245 = load i64, ptr %244, align 8, !tbaa !9
  %246 = icmp eq i64 %245, 0
  br i1 %246, label %247, label %251

247:                                              ; preds = %242
  %248 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 17), align 8, !tbaa !27
  %249 = load ptr, ptr %24, align 8, !tbaa !5
  %250 = getelementptr inbounds double, ptr %249, i64 0
  store double %248, ptr %250, align 8, !tbaa !19
  br label %251

251:                                              ; preds = %247, %242
  br label %265

252:                                              ; preds = %225
  %253 = load ptr, ptr %23, align 8, !tbaa !5
  %254 = getelementptr inbounds i64, ptr %253, i64 10
  %255 = load i64, ptr %254, align 8, !tbaa !9
  %256 = icmp eq i64 %255, 0
  br i1 %256, label %257, label %264

257:                                              ; preds = %252
  %258 = call double @dsrc_timer_(ptr noundef null)
  %259 = fptrunc double %258 to float
  store float %259, ptr @sor_.timi2, align 4, !tbaa !14
  %260 = load float, ptr @sor_.timi2, align 4, !tbaa !14
  %261 = load float, ptr @sor_.timi1, align 4, !tbaa !14
  %262 = fsub float %260, %261
  %263 = fpext float %262 to double
  store double %263, ptr @sor_.time1, align 8, !tbaa !19
  br label %264

264:                                              ; preds = %257, %252
  br label %265

265:                                              ; preds = %264, %251
  %266 = load ptr, ptr %14, align 8, !tbaa !5
  %267 = load ptr, ptr %15, align 8, !tbaa !5
  %268 = load ptr, ptr %16, align 8, !tbaa !5
  %269 = load ptr, ptr %17, align 8, !tbaa !5
  %270 = load ptr, ptr %18, align 8, !tbaa !5
  %271 = load ptr, ptr %19, align 8, !tbaa !5
  %272 = load ptr, ptr %22, align 8, !tbaa !5
  %273 = call i32 @unscal_(ptr noundef %266, ptr noundef %267, ptr noundef %268, ptr noundef %269, ptr noundef %270, ptr noundef %271, ptr noundef %272)
  %274 = load ptr, ptr %23, align 8, !tbaa !5
  %275 = getelementptr inbounds i64, ptr %274, i64 8
  %276 = load i64, ptr %275, align 8, !tbaa !9
  %277 = icmp slt i64 %276, 0
  br i1 %277, label %278, label %279

278:                                              ; preds = %265
  br label %312

279:                                              ; preds = %265
  %280 = load ptr, ptr %14, align 8, !tbaa !5
  %281 = load ptr, ptr %15, align 8, !tbaa !5
  %282 = load ptr, ptr %16, align 8, !tbaa !5
  %283 = load ptr, ptr %17, align 8, !tbaa !5
  %284 = load ptr, ptr %20, align 8, !tbaa !5
  %285 = load i64, ptr @sor_.ib2, align 8, !tbaa !9
  %286 = getelementptr inbounds i64, ptr %284, i64 %285
  %287 = load ptr, ptr %20, align 8, !tbaa !5
  %288 = load i64, ptr @sor_.ib3, align 8, !tbaa !9
  %289 = getelementptr inbounds i64, ptr %287, i64 %288
  %290 = call i32 @permat_(ptr noundef %280, ptr noundef %281, ptr noundef %282, ptr noundef %283, ptr noundef %286, ptr noundef %289, ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 2), ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 4), ptr noundef getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 5), ptr noundef @sor_.ierper)
  %291 = load i64, ptr @sor_.ierper, align 8, !tbaa !9
  %292 = icmp ne i64 %291, 0
  br i1 %292, label %293, label %299

293:                                              ; preds = %279
  %294 = load i64, ptr @sor_.ier, align 8, !tbaa !9
  %295 = icmp eq i64 %294, 0
  br i1 %295, label %296, label %298

296:                                              ; preds = %293
  %297 = load i64, ptr @sor_.ierper, align 8, !tbaa !9
  store i64 %297, ptr @sor_.ier, align 8, !tbaa !9
  br label %298

298:                                              ; preds = %296, %293
  br label %379

299:                                              ; preds = %279
  %300 = load ptr, ptr %14, align 8, !tbaa !5
  %301 = load ptr, ptr %18, align 8, !tbaa !5
  %302 = load ptr, ptr %20, align 8, !tbaa !5
  %303 = load i64, ptr @sor_.ib2, align 8, !tbaa !9
  %304 = getelementptr inbounds i64, ptr %302, i64 %303
  %305 = call i32 @pervec_(ptr noundef %300, ptr noundef %301, ptr noundef %304)
  %306 = load ptr, ptr %14, align 8, !tbaa !5
  %307 = load ptr, ptr %19, align 8, !tbaa !5
  %308 = load ptr, ptr %20, align 8, !tbaa !5
  %309 = load i64, ptr @sor_.ib2, align 8, !tbaa !9
  %310 = getelementptr inbounds i64, ptr %308, i64 %309
  %311 = call i32 @pervec_(ptr noundef %306, ptr noundef %307, ptr noundef %310)
  br label %312

312:                                              ; preds = %299, %278
  %313 = load ptr, ptr %23, align 8, !tbaa !5
  %314 = getelementptr inbounds i64, ptr %313, i64 11
  %315 = load i64, ptr %314, align 8, !tbaa !9
  store i64 %315, ptr @sor_.idgts, align 8, !tbaa !9
  %316 = load i64, ptr @sor_.idgts, align 8, !tbaa !9
  %317 = icmp sge i64 %316, 0
  br i1 %317, label %318, label %333

318:                                              ; preds = %312
  %319 = load ptr, ptr %23, align 8, !tbaa !5
  %320 = getelementptr inbounds i64, ptr %319, i64 1
  %321 = load i64, ptr %320, align 8, !tbaa !9
  %322 = icmp sle i64 %321, 0
  br i1 %322, label %323, label %324

323:                                              ; preds = %318
  store i64 0, ptr @sor_.idgts, align 8, !tbaa !9
  br label %324

324:                                              ; preds = %323, %318
  %325 = load ptr, ptr %14, align 8, !tbaa !5
  %326 = load ptr, ptr %15, align 8, !tbaa !5
  %327 = load ptr, ptr %16, align 8, !tbaa !5
  %328 = load ptr, ptr %17, align 8, !tbaa !5
  %329 = load ptr, ptr %18, align 8, !tbaa !5
  %330 = load ptr, ptr %19, align 8, !tbaa !5
  %331 = load ptr, ptr %22, align 8, !tbaa !5
  %332 = call i32 @perror_(ptr noundef %325, ptr noundef %326, ptr noundef %327, ptr noundef %328, ptr noundef %329, ptr noundef %330, ptr noundef %331, ptr noundef @sor_.digit1, ptr noundef @sor_.digit2, ptr noundef @sor_.idgts)
  br label %333

333:                                              ; preds = %324, %312
  %334 = load ptr, ptr %23, align 8, !tbaa !5
  %335 = getelementptr inbounds i64, ptr %334, i64 10
  %336 = load i64, ptr %335, align 8, !tbaa !9
  %337 = icmp eq i64 %336, 0
  br i1 %337, label %338, label %345

338:                                              ; preds = %333
  %339 = call double @dsrc_timer_(ptr noundef null)
  %340 = fptrunc double %339 to float
  store float %340, ptr @sor_.timj2, align 4, !tbaa !14
  %341 = load float, ptr @sor_.timj2, align 4, !tbaa !14
  %342 = load float, ptr @sor_.timj1, align 4, !tbaa !14
  %343 = fsub float %341, %342
  %344 = fpext float %343 to double
  store double %344, ptr @sor_.time2, align 8, !tbaa !19
  br label %345

345:                                              ; preds = %338, %333
  %346 = load ptr, ptr %23, align 8, !tbaa !5
  %347 = getelementptr inbounds i64, ptr %346, i64 2
  %348 = load i64, ptr %347, align 8, !tbaa !9
  %349 = icmp eq i64 %348, 0
  br i1 %349, label %350, label %378

350:                                              ; preds = %345
  %351 = load i64, ptr @itcom1_, align 8, !tbaa !22
  %352 = load ptr, ptr %23, align 8, !tbaa !5
  %353 = getelementptr inbounds i64, ptr %352, i64 0
  store i64 %351, ptr %353, align 8, !tbaa !9
  %354 = load i64, ptr @sor_.nb, align 8, !tbaa !9
  %355 = load ptr, ptr %23, align 8, !tbaa !5
  %356 = getelementptr inbounds i64, ptr %355, i64 8
  store i64 %354, ptr %356, align 8, !tbaa !9
  %357 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !28
  %358 = load ptr, ptr %24, align 8, !tbaa !5
  %359 = getelementptr inbounds double, ptr %358, i64 1
  store double %357, ptr %359, align 8, !tbaa !19
  %360 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 13), align 8, !tbaa !29
  %361 = load ptr, ptr %24, align 8, !tbaa !5
  %362 = getelementptr inbounds double, ptr %361, i64 2
  store double %360, ptr %362, align 8, !tbaa !19
  %363 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !30
  %364 = load ptr, ptr %24, align 8, !tbaa !5
  %365 = getelementptr inbounds double, ptr %364, i64 4
  store double %363, ptr %365, align 8, !tbaa !19
  %366 = load double, ptr @sor_.time1, align 8, !tbaa !19
  %367 = load ptr, ptr %24, align 8, !tbaa !5
  %368 = getelementptr inbounds double, ptr %367, i64 8
  store double %366, ptr %368, align 8, !tbaa !19
  %369 = load double, ptr @sor_.time2, align 8, !tbaa !19
  %370 = load ptr, ptr %24, align 8, !tbaa !5
  %371 = getelementptr inbounds double, ptr %370, i64 9
  store double %369, ptr %371, align 8, !tbaa !19
  %372 = load double, ptr @sor_.digit1, align 8, !tbaa !19
  %373 = load ptr, ptr %24, align 8, !tbaa !5
  %374 = getelementptr inbounds double, ptr %373, i64 10
  store double %372, ptr %374, align 8, !tbaa !19
  %375 = load double, ptr @sor_.digit2, align 8, !tbaa !19
  %376 = load ptr, ptr %24, align 8, !tbaa !5
  %377 = getelementptr inbounds double, ptr %376, i64 11
  store double %375, ptr %377, align 8, !tbaa !19
  br label %378

378:                                              ; preds = %350, %345
  br label %379

379:                                              ; preds = %378, %298, %194, %169, %156, %132, %111, %85
  %380 = load i64, ptr @sor_.ier, align 8, !tbaa !9
  %381 = load ptr, ptr %25, align 8, !tbaa !5
  store i64 %380, ptr %381, align 8, !tbaa !9
  %382 = load i64, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 4), align 8, !tbaa !11
  %383 = icmp sge i64 %382, 3
  br i1 %383, label %384, label %393

384:                                              ; preds = %379
  %385 = load ptr, ptr %14, align 8, !tbaa !5
  %386 = load ptr, ptr %15, align 8, !tbaa !5
  %387 = load ptr, ptr %16, align 8, !tbaa !5
  %388 = load ptr, ptr %17, align 8, !tbaa !5
  %389 = load ptr, ptr %18, align 8, !tbaa !5
  %390 = load ptr, ptr %23, align 8, !tbaa !5
  %391 = load ptr, ptr %24, align 8, !tbaa !5
  %392 = call i32 @echall_(ptr noundef %385, ptr noundef %386, ptr noundef %387, ptr noundef %388, ptr noundef %389, ptr noundef %390, ptr noundef %391, ptr noundef @c__2)
  br label %393

393:                                              ; preds = %384, %379
  store i32 0, ptr %13, align 4
  br label %394

394:                                              ; preds = %393, %36
  %395 = load i32, ptr %13, align 4
  ret i32 %395
}

; Function Attrs: nounwind uwtable
declare dso_local i32 @itsor_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

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" }

!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 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 32}
!12 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!13 = !{!12, !10, i64 40}
!14 = !{!15, !15, i64 0}
!15 = !{!"float", !7, i64 0}
!16 = !{!17, !18, i64 128}
!17 = !{!"", !18, i64 0, !18, i64 8, !18, i64 16, !18, i64 24, !18, i64 32, !18, i64 40, !18, i64 48, !18, i64 56, !18, i64 64, !18, i64 72, !18, i64 80, !18, i64 88, !18, i64 96, !18, i64 104, !18, i64 112, !18, i64 120, !18, i64 128, !18, i64 136, !18, i64 144, !18, i64 152}
!18 = !{!"double", !7, i64 0}
!19 = !{!18, !18, i64 0}
!20 = !{!17, !18, i64 152}
!21 = !{!12, !10, i64 24}
!22 = !{!12, !10, i64 0}
!23 = !{!24, !10, i64 24}
!24 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!17, !18, i64 136}
!28 = !{!17, !18, i64 16}
!29 = !{!17, !18, i64 104}
!30 = !{!17, !18, i64 56}


; 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"

%struct.anon = type { i64, i64, i64, i64, i64, i64 }
%struct.anon.0 = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%struct.anon.1 = type { i64, i64, i64, i64, i64 }

@itcom1_ = external hidden global %struct.anon, align 8
@c__1 = external hidden global i64, align 8
@itcom3_ = external hidden local_unnamed_addr global %struct.anon.0, align 8
@c__0 = external hidden global i64, align 8
@c_b21 = external hidden global double, align 8
@itcom2_ = external hidden local_unnamed_addr global %struct.anon.1, align 8
@c__2 = external hidden global i64, align 8
@sor_.n3 = external hidden global i64, align 8
@sor_.nb = external hidden global i64, align 8
@sor_.ib1 = external hidden local_unnamed_addr global i64, align 8
@sor_.ib2 = external hidden local_unnamed_addr global i64, align 8
@sor_.ib3 = external hidden local_unnamed_addr global i64, align 8
@sor_.ier = external hidden global i64, align 8
@sor_.tol = external hidden global double, align 8
@sor_.temp = external hidden local_unnamed_addr global double, align 8
@sor_.loop = external hidden local_unnamed_addr global i64, align 8
@sor_.time1 = external hidden local_unnamed_addr global double, align 8
@sor_.time2 = external hidden local_unnamed_addr global double, align 8
@sor_.timi1 = external hidden local_unnamed_addr global float, align 4
@sor_.timj1 = external hidden local_unnamed_addr global float, align 4
@sor_.timi2 = external hidden local_unnamed_addr global float, align 4
@sor_.timj2 = external hidden local_unnamed_addr global float, align 4
@sor_.idgts = external hidden global i64, align 8
@sor_.digit1 = external hidden global double, align 8
@sor_.digit2 = external hidden global double, align 8
@sor_.itmax1 = external hidden local_unnamed_addr global i64, align 8
@sor_.ierper = external hidden global i64, align 8
@c__3 = external hidden global i64, align 8

; Function Attrs: nounwind uwtable
declare dso_local double @dsrc_timer_(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @echout_(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @echall_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @ivfill_(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @vfill_(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @sbelm_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @prbndx_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @permat_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @pervec_(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @scal_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @unscal_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @perror_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @sor_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr nocapture noundef readonly %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr nocapture noundef writeonly %11) local_unnamed_addr #0 {
  %13 = getelementptr inbounds i8, ptr %9, i64 8
  %14 = load i64, ptr %13, align 8, !tbaa !5
  store i64 %14, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 32), align 8, !tbaa !9
  %15 = getelementptr inbounds i8, ptr %9, i64 24
  %16 = load i64, ptr %15, align 8, !tbaa !5
  store i64 %16, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 40), align 8, !tbaa !11
  store i64 0, ptr @sor_.ier, align 8, !tbaa !5
  %17 = load i64, ptr %9, align 8, !tbaa !5
  %18 = icmp slt i64 %17, 1
  br i1 %18, label %197, label %19

19:                                               ; preds = %12
  %20 = getelementptr inbounds i8, ptr %9, i64 80
  %21 = load i64, ptr %20, align 8, !tbaa !5
  %22 = icmp eq i64 %21, 0
  br i1 %22, label %23, label %26

23:                                               ; preds = %19
  %24 = tail call double @dsrc_timer_(ptr noundef null)
  %25 = fptrunc double %24 to float
  store float %25, ptr @sor_.timj1, align 4, !tbaa !12
  %.pre = load i64, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 32), align 8, !tbaa !9
  br label %26

26:                                               ; preds = %23, %19
  %27 = phi i64 [ %.pre, %23 ], [ %14, %19 ]
  %28 = icmp slt i64 %27, 3
  br i1 %28, label %29, label %31

29:                                               ; preds = %26
  %30 = tail call i32 @echout_(ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull @c__3)
  br label %33

31:                                               ; preds = %26
  %32 = tail call i32 @echall_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull @c__1)
  br label %33

33:                                               ; preds = %31, %29
  %34 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 128), align 8, !tbaa !14
  %35 = fmul double %34, 5.000000e+02
  store double %35, ptr @sor_.temp, align 8, !tbaa !17
  %36 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 152), align 8, !tbaa !18
  %37 = fcmp olt double %36, %35
  br i1 %37, label %38, label %39

38:                                               ; preds = %33
  store double %35, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 152), align 8, !tbaa !18
  br label %39

39:                                               ; preds = %38, %33
  %40 = getelementptr inbounds i8, ptr %10, i64 64
  %41 = load double, ptr %40, align 8, !tbaa !17
  store double %41, ptr @sor_.time1, align 8, !tbaa !17
  %42 = getelementptr inbounds i8, ptr %10, i64 72
  %43 = load double, ptr %42, align 8, !tbaa !17
  store double %43, ptr @sor_.time2, align 8, !tbaa !17
  %44 = getelementptr inbounds i8, ptr %10, i64 80
  %45 = load double, ptr %44, align 8, !tbaa !17
  store double %45, ptr @sor_.digit1, align 8, !tbaa !17
  %46 = getelementptr inbounds i8, ptr %10, i64 88
  %47 = load double, ptr %46, align 8, !tbaa !17
  store double %47, ptr @sor_.digit2, align 8, !tbaa !17
  %48 = load i64, ptr %0, align 8, !tbaa !5
  %49 = icmp slt i64 %48, 1
  br i1 %49, label %50, label %51

50:                                               ; preds = %39
  store i64 31, ptr @sor_.ier, align 8, !tbaa !5
  br label %191

51:                                               ; preds = %39
  %52 = getelementptr inbounds i8, ptr %9, i64 72
  %53 = load i64, ptr %52, align 8, !tbaa !5
  %.not = icmp eq i64 %53, 0
  br i1 %.not, label %61, label %54

54:                                               ; preds = %51
  %55 = getelementptr inbounds i8, ptr %10, i64 56
  %56 = load double, ptr %55, align 8, !tbaa !17
  store double %56, ptr @sor_.tol, align 8, !tbaa !17
  %57 = tail call i32 @ivfill_(ptr noundef nonnull %0, ptr noundef %6, ptr noundef nonnull @c__0)
  %58 = tail call i32 @vfill_(ptr noundef nonnull %0, ptr noundef %8, ptr noundef nonnull @c_b21)
  %59 = tail call i32 @sbelm_(ptr noundef nonnull %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %6, ptr noundef %8, ptr noundef nonnull @sor_.tol, ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 16), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 32), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 40), ptr noundef nonnull @sor_.ier)
  %60 = load i64, ptr @sor_.ier, align 8, !tbaa !5
  %.not128 = icmp eq i64 %60, 0
  br i1 %.not128, label %61, label %191

61:                                               ; preds = %54, %51
  store i64 0, ptr @sor_.ib1, align 8, !tbaa !5
  %62 = load i64, ptr %0, align 8, !tbaa !5
  store i64 %62, ptr @sor_.ib2, align 8, !tbaa !5
  %63 = shl nsw i64 %62, 1
  store i64 %63, ptr @sor_.ib3, align 8, !tbaa !5
  %64 = load i64, ptr %0, align 8, !tbaa !5
  %65 = getelementptr inbounds i8, ptr %9, i64 56
  store i64 %64, ptr %65, align 8, !tbaa !5
  %66 = load i64, ptr %7, align 8, !tbaa !5
  %67 = icmp slt i64 %66, %64
  br i1 %67, label %68, label %69

68:                                               ; preds = %61
  store i64 32, ptr @sor_.ier, align 8, !tbaa !5
  br label %191

69:                                               ; preds = %61
  %70 = getelementptr inbounds i8, ptr %9, i64 64
  %71 = load i64, ptr %70, align 8, !tbaa !5
  store i64 %71, ptr @sor_.nb, align 8, !tbaa !5
  %72 = icmp slt i64 %71, 0
  br i1 %72, label %89, label %73

73:                                               ; preds = %69
  %74 = load i64, ptr %0, align 8, !tbaa !5
  %75 = mul nsw i64 %74, 3
  store i64 %75, ptr @sor_.n3, align 8, !tbaa !5
  %76 = tail call i32 @ivfill_(ptr noundef nonnull @sor_.n3, ptr noundef %6, ptr noundef nonnull @c__0)
  %77 = load i64, ptr @sor_.ib2, align 8, !tbaa !5
  %78 = getelementptr inbounds i64, ptr %6, i64 %77
  %79 = tail call i32 @prbndx_(ptr noundef nonnull %0, ptr noundef nonnull @sor_.nb, ptr noundef %1, ptr noundef %2, ptr noundef %6, ptr noundef %78, ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 32), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 40), ptr noundef nonnull @sor_.ier)
  %80 = load i64, ptr @sor_.ier, align 8, !tbaa !5
  %.not129 = icmp eq i64 %80, 0
  br i1 %.not129, label %81, label %191

81:                                               ; preds = %73
  %82 = load i64, ptr @sor_.ib3, align 8, !tbaa !5
  %83 = getelementptr inbounds i64, ptr %6, i64 %82
  %84 = tail call i32 @permat_(ptr noundef nonnull %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %6, ptr noundef %83, ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 16), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 32), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 40), ptr noundef nonnull @sor_.ier)
  %85 = load i64, ptr @sor_.ier, align 8, !tbaa !5
  %.not130 = icmp eq i64 %85, 0
  br i1 %.not130, label %86, label %191

86:                                               ; preds = %81
  %87 = tail call i32 @pervec_(ptr noundef nonnull %0, ptr noundef %4, ptr noundef %6)
  %88 = tail call i32 @pervec_(ptr noundef nonnull %0, ptr noundef %5, ptr noundef %6)
  br label %89

89:                                               ; preds = %69, %86
  %90 = tail call i32 @vfill_(ptr noundef nonnull %65, ptr noundef %8, ptr noundef nonnull @c_b21)
  %91 = tail call i32 @scal_(ptr noundef nonnull %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %8, ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 32), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 40), ptr noundef nonnull @sor_.ier)
  %92 = load i64, ptr @sor_.ier, align 8, !tbaa !5
  %.not131 = icmp eq i64 %92, 0
  br i1 %.not131, label %93, label %191

93:                                               ; preds = %89
  %94 = load i64, ptr %20, align 8, !tbaa !5
  %95 = icmp eq i64 %94, 0
  br i1 %95, label %96, label %99

96:                                               ; preds = %93
  %97 = tail call double @dsrc_timer_(ptr noundef null)
  %98 = fptrunc double %97 to float
  store float %98, ptr @sor_.timi1, align 4, !tbaa !12
  br label %99

99:                                               ; preds = %96, %93
  %100 = load i64, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 24), align 8, !tbaa !19
  %101 = add nsw i64 %100, 1
  store i64 %101, ptr @sor_.itmax1, align 8, !tbaa !5
  store i64 1, ptr @sor_.loop, align 8, !tbaa !5
  %.not132135 = icmp slt i64 %100, 0
  br i1 %.not132135, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %99, %106
  %storemerge136 = phi i64 [ %107, %106 ], [ 0, %99 ]
  store i64 %storemerge136, ptr @itcom1_, align 8, !tbaa !20
  %102 = load i64, ptr @sor_.ib1, align 8, !tbaa !5
  %103 = getelementptr inbounds double, ptr %8, i64 %102
  %104 = tail call i32 @itsor_(ptr noundef nonnull %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %103)
  %105 = load i64, ptr getelementptr inbounds (i8, ptr @itcom2_, i64 24), align 8, !tbaa !21
  %.not133 = icmp eq i64 %105, 0
  br i1 %.not133, label %106, label %124

106:                                              ; preds = %.lr.ph
  %107 = load i64, ptr @sor_.loop, align 8, !tbaa !5
  %108 = add nsw i64 %107, 1
  store i64 %108, ptr @sor_.loop, align 8, !tbaa !5
  %109 = load i64, ptr @sor_.itmax1, align 8, !tbaa !5
  %.not132.not = icmp slt i64 %107, %109
  br i1 %.not132.not, label %.lr.ph, label %._crit_edge, !llvm.loop !23

._crit_edge:                                      ; preds = %106, %99
  %110 = load i64, ptr %20, align 8, !tbaa !5
  %111 = icmp eq i64 %110, 0
  br i1 %111, label %112, label %118

112:                                              ; preds = %._crit_edge
  %113 = tail call double @dsrc_timer_(ptr noundef null)
  %114 = fptrunc double %113 to float
  store float %114, ptr @sor_.timi2, align 4, !tbaa !12
  %115 = load float, ptr @sor_.timi1, align 4, !tbaa !12
  %116 = fsub float %114, %115
  %117 = fpext float %116 to double
  store double %117, ptr @sor_.time1, align 8, !tbaa !17
  br label %118

118:                                              ; preds = %112, %._crit_edge
  store i64 33, ptr @sor_.ier, align 8, !tbaa !5
  %119 = getelementptr inbounds i8, ptr %9, i64 16
  %120 = load i64, ptr %119, align 8, !tbaa !5
  %121 = icmp eq i64 %120, 0
  br i1 %121, label %122, label %133

122:                                              ; preds = %118
  %123 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 136), align 8, !tbaa !25
  store double %123, ptr %10, align 8, !tbaa !17
  br label %133

124:                                              ; preds = %.lr.ph
  %125 = load i64, ptr %20, align 8, !tbaa !5
  %126 = icmp eq i64 %125, 0
  br i1 %126, label %127, label %133

127:                                              ; preds = %124
  %128 = tail call double @dsrc_timer_(ptr noundef null)
  %129 = fptrunc double %128 to float
  store float %129, ptr @sor_.timi2, align 4, !tbaa !12
  %130 = load float, ptr @sor_.timi1, align 4, !tbaa !12
  %131 = fsub float %129, %130
  %132 = fpext float %131 to double
  store double %132, ptr @sor_.time1, align 8, !tbaa !17
  br label %133

133:                                              ; preds = %124, %127, %118, %122
  %134 = tail call i32 @unscal_(ptr noundef nonnull %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %8)
  %135 = load i64, ptr %70, align 8, !tbaa !5
  %136 = icmp slt i64 %135, 0
  br i1 %136, label %155, label %137

137:                                              ; preds = %133
  %138 = load i64, ptr @sor_.ib2, align 8, !tbaa !5
  %139 = getelementptr inbounds i64, ptr %6, i64 %138
  %140 = load i64, ptr @sor_.ib3, align 8, !tbaa !5
  %141 = getelementptr inbounds i64, ptr %6, i64 %140
  %142 = tail call i32 @permat_(ptr noundef nonnull %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %139, ptr noundef %141, ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 16), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 32), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom1_, i64 40), ptr noundef nonnull @sor_.ierper)
  %143 = load i64, ptr @sor_.ierper, align 8, !tbaa !5
  %.not134 = icmp eq i64 %143, 0
  br i1 %.not134, label %148, label %144

144:                                              ; preds = %137
  %145 = load i64, ptr @sor_.ier, align 8, !tbaa !5
  %146 = icmp eq i64 %145, 0
  br i1 %146, label %147, label %191

147:                                              ; preds = %144
  store i64 %143, ptr @sor_.ier, align 8, !tbaa !5
  br label %191

148:                                              ; preds = %137
  %149 = load i64, ptr @sor_.ib2, align 8, !tbaa !5
  %150 = getelementptr inbounds i64, ptr %6, i64 %149
  %151 = tail call i32 @pervec_(ptr noundef nonnull %0, ptr noundef %4, ptr noundef %150)
  %152 = load i64, ptr @sor_.ib2, align 8, !tbaa !5
  %153 = getelementptr inbounds i64, ptr %6, i64 %152
  %154 = tail call i32 @pervec_(ptr noundef nonnull %0, ptr noundef %5, ptr noundef %153)
  br label %155

155:                                              ; preds = %133, %148
  %156 = getelementptr inbounds i8, ptr %9, i64 88
  %157 = load i64, ptr %156, align 8, !tbaa !5
  store i64 %157, ptr @sor_.idgts, align 8, !tbaa !5
  %158 = icmp sgt i64 %157, -1
  br i1 %158, label %159, label %165

159:                                              ; preds = %155
  %160 = load i64, ptr %13, align 8, !tbaa !5
  %161 = icmp slt i64 %160, 1
  br i1 %161, label %162, label %163

162:                                              ; preds = %159
  store i64 0, ptr @sor_.idgts, align 8, !tbaa !5
  br label %163

163:                                              ; preds = %162, %159
  %164 = tail call i32 @perror_(ptr noundef nonnull %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %8, ptr noundef nonnull @sor_.digit1, ptr noundef nonnull @sor_.digit2, ptr noundef nonnull @sor_.idgts)
  br label %165

165:                                              ; preds = %163, %155
  %166 = load i64, ptr %20, align 8, !tbaa !5
  %167 = icmp eq i64 %166, 0
  br i1 %167, label %168, label %174

168:                                              ; preds = %165
  %169 = tail call double @dsrc_timer_(ptr noundef null)
  %170 = fptrunc double %169 to float
  store float %170, ptr @sor_.timj2, align 4, !tbaa !12
  %171 = load float, ptr @sor_.timj1, align 4, !tbaa !12
  %172 = fsub float %170, %171
  %173 = fpext float %172 to double
  store double %173, ptr @sor_.time2, align 8, !tbaa !17
  br label %174

174:                                              ; preds = %168, %165
  %175 = getelementptr inbounds i8, ptr %9, i64 16
  %176 = load i64, ptr %175, align 8, !tbaa !5
  %177 = icmp eq i64 %176, 0
  br i1 %177, label %178, label %191

178:                                              ; preds = %174
  %179 = load i64, ptr @itcom1_, align 8, !tbaa !20
  store i64 %179, ptr %9, align 8, !tbaa !5
  %180 = load i64, ptr @sor_.nb, align 8, !tbaa !5
  store i64 %180, ptr %70, align 8, !tbaa !5
  %181 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !26
  %182 = getelementptr inbounds i8, ptr %10, i64 8
  store double %181, ptr %182, align 8, !tbaa !17
  %183 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 104), align 8, !tbaa !27
  %184 = getelementptr inbounds i8, ptr %10, i64 16
  store double %183, ptr %184, align 8, !tbaa !17
  %185 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 56), align 8, !tbaa !28
  %186 = getelementptr inbounds i8, ptr %10, i64 32
  store double %185, ptr %186, align 8, !tbaa !17
  %187 = load double, ptr @sor_.time1, align 8, !tbaa !17
  store double %187, ptr %40, align 8, !tbaa !17
  %188 = load double, ptr @sor_.time2, align 8, !tbaa !17
  store double %188, ptr %42, align 8, !tbaa !17
  %189 = load double, ptr @sor_.digit1, align 8, !tbaa !17
  store double %189, ptr %44, align 8, !tbaa !17
  %190 = load double, ptr @sor_.digit2, align 8, !tbaa !17
  store double %190, ptr %46, align 8, !tbaa !17
  br label %191

191:                                              ; preds = %174, %178, %144, %147, %89, %81, %73, %54, %68, %50
  %192 = load i64, ptr @sor_.ier, align 8, !tbaa !5
  store i64 %192, ptr %11, align 8, !tbaa !5
  %193 = load i64, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 32), align 8, !tbaa !9
  %194 = icmp sgt i64 %193, 2
  br i1 %194, label %195, label %197

195:                                              ; preds = %191
  %196 = tail call i32 @echall_(ptr noundef nonnull %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull @c__2)
  br label %197

197:                                              ; preds = %191, %195, %12
  ret i32 0
}

; Function Attrs: nounwind uwtable
declare dso_local i32 @itsor_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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" }

!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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 32}
!10 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!11 = !{!10, !6, i64 40}
!12 = !{!13, !13, i64 0}
!13 = !{!"float", !7, i64 0}
!14 = !{!15, !16, i64 128}
!15 = !{!"", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40, !16, i64 48, !16, i64 56, !16, i64 64, !16, i64 72, !16, i64 80, !16, i64 88, !16, i64 96, !16, i64 104, !16, i64 112, !16, i64 120, !16, i64 128, !16, i64 136, !16, i64 144, !16, i64 152}
!16 = !{!"double", !7, i64 0}
!17 = !{!16, !16, i64 0}
!18 = !{!15, !16, i64 152}
!19 = !{!10, !6, i64 24}
!20 = !{!10, !6, i64 0}
!21 = !{!22, !6, i64 24}
!22 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!15, !16, i64 136}
!26 = !{!15, !16, i64 16}
!27 = !{!15, !16, i64 104}
!28 = !{!15, !16, i64 56}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass