; LLVM IR from alexzheng42/sDMD :: analysis (SystemInformation)

; 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.HBPotentialStr = type { double, double, double, double, double, double }
%struct.ConstraintStr = type { i32, double, ptr, double, ptr }
%struct.FileStr = type { i32, [256 x i8] }
%struct.AtomStr = type { ptr, ptr }
%struct.PropertyStr = type { [8 x i8], [2 x [16 x i8]], [8 x i8], i32, i32, i32, double, double, [3 x double], %struct.AtomSeqStr, ptr, ptr }
%struct.AtomSeqStr = type { i32, i32, i32 }
%struct.StepPotenStr = type { double, double, double, ptr }
%struct.DynamicStr = type { [4 x i32], [4 x double], [4 x double], %struct.HBStr, %struct.HBNeighborStr, %struct.InteractionEventStr }
%struct.HBStr = type { i32, i32, i8, i32 }
%struct.HBNeighborStr = type { [5 x i32], i32, i32 }
%struct.InteractionEventStr = type { i32, i64, i64, double, double, i32, i32 }

@.str = external hidden unnamed_addr constant [33 x i8], align 1
@stdout = external global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@path = external global [1024 x i8], align 16
@files = external global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [116 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [79 x i8], align 1
@atomnum = external global i32, align 4
@numofprotein = external global i32, align 4
@totalAminoAcids = external global i32, align 4
@nPP = external global i32, align 4
@.str.5 = external hidden unnamed_addr constant [87 x i8], align 1
@connectionMap = external global ptr, align 8
@aminoacid = external global ptr, align 8
@protein = external global ptr, align 8
@atom = external global ptr, align 8
@HBPotential = external global %struct.HBPotentialStr, align 8
@potentialPairCollision = external global [33 x [33 x %struct.ConstraintStr]], align 16
@potentialPairHB = external global [12 x [33 x [33 x %struct.ConstraintStr]]], align 16
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @SystemInformationInput(i32 noundef %0) #0 {
  %2 = alloca i32, align 4
  %3 = alloca [256 x i8], align 16
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %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 i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  store i32 %0, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr %3) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #6
  %31 = call i32 (ptr, ...) @printf(ptr noundef @.str)
  %32 = load ptr, ptr @stdout, align 8, !tbaa !9
  %33 = call i32 @fflush(ptr noundef %32)
  %34 = getelementptr inbounds [256 x i8], ptr %3, i64 0, i64 0
  %35 = load ptr, ptr @files, align 8, !tbaa !9
  %36 = getelementptr inbounds ptr, ptr %35, i64 0
  %37 = load ptr, ptr %36, align 8, !tbaa !9
  %38 = load i32, ptr %2, align 4, !tbaa !5
  %39 = sext i32 %38 to i64
  %40 = getelementptr inbounds %struct.FileStr, ptr %37, i64 %39
  %41 = getelementptr inbounds %struct.FileStr, ptr %40, i32 0, i32 1
  %42 = getelementptr inbounds [256 x i8], ptr %41, i64 0, i64 0
  %43 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %34, ptr noundef @.str.1, ptr noundef @path, ptr noundef %42) #6
  %44 = getelementptr inbounds [256 x i8], ptr %3, i64 0, i64 0
  %45 = call noalias ptr @fopen(ptr noundef %44, ptr noundef @.str.2)
  store ptr %45, ptr %4, align 8, !tbaa !9
  %46 = load ptr, ptr %4, align 8, !tbaa !9
  %47 = icmp eq ptr %46, null
  br i1 %47, label %48, label %58

48:                                               ; preds = %1
  %49 = load ptr, ptr @files, align 8, !tbaa !9
  %50 = getelementptr inbounds ptr, ptr %49, i64 0
  %51 = load ptr, ptr %50, align 8, !tbaa !9
  %52 = load i32, ptr %2, align 4, !tbaa !5
  %53 = sext i32 %52 to i64
  %54 = getelementptr inbounds %struct.FileStr, ptr %51, i64 %53
  %55 = getelementptr inbounds %struct.FileStr, ptr %54, i32 0, i32 1
  %56 = getelementptr inbounds [256 x i8], ptr %55, i64 0, i64 0
  %57 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, ptr noundef %56, ptr noundef @path, ptr noundef @.str.4, i32 noundef 22)
  call void @exit(i32 noundef 1) #7
  unreachable

58:                                               ; preds = %1
  %59 = load ptr, ptr %4, align 8, !tbaa !9
  %60 = call i64 @fread(ptr noundef @atomnum, i64 noundef 4, i64 noundef 1, ptr noundef %59)
  %61 = load ptr, ptr %4, align 8, !tbaa !9
  %62 = call i64 @fread(ptr noundef @numofprotein, i64 noundef 4, i64 noundef 1, ptr noundef %61)
  %63 = load ptr, ptr %4, align 8, !tbaa !9
  %64 = call i64 @fread(ptr noundef @totalAminoAcids, i64 noundef 4, i64 noundef 1, ptr noundef %63)
  %65 = load i32, ptr @nPP, align 4, !tbaa !5
  %66 = load i32, ptr @numofprotein, align 4, !tbaa !5
  %67 = icmp sgt i32 %65, %66
  br i1 %67, label %68, label %72

68:                                               ; preds = %58
  %69 = load i32, ptr @nPP, align 4, !tbaa !5
  %70 = load i32, ptr @numofprotein, align 4, !tbaa !5
  %71 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, i32 noundef %69, i32 noundef %70, ptr noundef @.str.4, i32 noundef 31)
  br label %72

72:                                               ; preds = %68, %58
  %73 = load i32, ptr @atomnum, align 4, !tbaa !5
  %74 = add nsw i32 %73, 1
  %75 = sext i32 %74 to i64
  %76 = call noalias ptr @calloc(i64 noundef %75, i64 noundef 8) #8
  store ptr %76, ptr @connectionMap, align 8, !tbaa !9
  %77 = load i32, ptr @atomnum, align 4, !tbaa !5
  %78 = add nsw i32 %77, 1
  %79 = load i32, ptr @atomnum, align 4, !tbaa !5
  %80 = add nsw i32 %79, 1
  %81 = mul nsw i32 %78, %80
  %82 = sext i32 %81 to i64
  %83 = call noalias ptr @calloc(i64 noundef %82, i64 noundef 4) #8
  %84 = load ptr, ptr @connectionMap, align 8, !tbaa !9
  %85 = getelementptr inbounds ptr, ptr %84, i64 0
  store ptr %83, ptr %85, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #6
  store i32 1, ptr %5, align 4, !tbaa !5
  br label %86

86:                                               ; preds = %106, %72
  %87 = load i32, ptr %5, align 4, !tbaa !5
  %88 = load i32, ptr @atomnum, align 4, !tbaa !5
  %89 = add nsw i32 %88, 1
  %90 = icmp slt i32 %87, %89
  br i1 %90, label %92, label %91

91:                                               ; preds = %86
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  br label %109

92:                                               ; preds = %86
  %93 = load ptr, ptr @connectionMap, align 8, !tbaa !9
  %94 = getelementptr inbounds ptr, ptr %93, i64 0
  %95 = load ptr, ptr %94, align 8, !tbaa !9
  %96 = load i32, ptr %5, align 4, !tbaa !5
  %97 = load i32, ptr @atomnum, align 4, !tbaa !5
  %98 = add nsw i32 %97, 1
  %99 = mul nsw i32 %96, %98
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds i32, ptr %95, i64 %100
  %102 = load ptr, ptr @connectionMap, align 8, !tbaa !9
  %103 = load i32, ptr %5, align 4, !tbaa !5
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds ptr, ptr %102, i64 %104
  store ptr %101, ptr %105, align 8, !tbaa !9
  br label %106

106:                                              ; preds = %92
  %107 = load i32, ptr %5, align 4, !tbaa !5
  %108 = add nsw i32 %107, 1
  store i32 %108, ptr %5, align 4, !tbaa !5
  br label %86, !llvm.loop !11

109:                                              ; preds = %91
  %110 = load i32, ptr @totalAminoAcids, align 4, !tbaa !5
  %111 = add nsw i32 %110, 1
  %112 = sext i32 %111 to i64
  %113 = call noalias ptr @calloc(i64 noundef %112, i64 noundef 32) #8
  store ptr %113, ptr @aminoacid, align 8, !tbaa !9
  %114 = load ptr, ptr @aminoacid, align 8, !tbaa !9
  %115 = load i32, ptr @totalAminoAcids, align 4, !tbaa !5
  %116 = add nsw i32 %115, 1
  %117 = sext i32 %116 to i64
  %118 = load ptr, ptr %4, align 8, !tbaa !9
  %119 = call i64 @fread(ptr noundef %114, i64 noundef 32, i64 noundef %117, ptr noundef %118)
  %120 = load i32, ptr @numofprotein, align 4, !tbaa !5
  %121 = add nsw i32 %120, 1
  %122 = sext i32 %121 to i64
  %123 = call noalias ptr @calloc(i64 noundef %122, i64 noundef 24) #8
  store ptr %123, ptr @protein, align 8, !tbaa !9
  %124 = load ptr, ptr @protein, align 8, !tbaa !9
  %125 = load i32, ptr @numofprotein, align 4, !tbaa !5
  %126 = add nsw i32 %125, 1
  %127 = sext i32 %126 to i64
  %128 = load ptr, ptr %4, align 8, !tbaa !9
  %129 = call i64 @fread(ptr noundef %124, i64 noundef 24, i64 noundef %127, ptr noundef %128)
  %130 = load i32, ptr @atomnum, align 4, !tbaa !5
  %131 = add nsw i32 %130, 1
  %132 = sext i32 %131 to i64
  %133 = call noalias ptr @calloc(i64 noundef %132, i64 noundef 16) #8
  store ptr %133, ptr @atom, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %134

134:                                              ; preds = %241, %109
  %135 = load i32, ptr %6, align 4, !tbaa !5
  %136 = load i32, ptr @atomnum, align 4, !tbaa !5
  %137 = icmp sle i32 %135, %136
  br i1 %137, label %139, label %138

138:                                              ; preds = %134
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  br label %244

139:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %140 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 136) #8
  store ptr %140, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  %141 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 176) #8
  store ptr %141, ptr %8, align 8, !tbaa !9
  %142 = load ptr, ptr %7, align 8, !tbaa !9
  %143 = load ptr, ptr @atom, align 8, !tbaa !9
  %144 = load i32, ptr %6, align 4, !tbaa !5
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds %struct.AtomStr, ptr %143, i64 %145
  %147 = getelementptr inbounds %struct.AtomStr, ptr %146, i32 0, i32 0
  store ptr %142, ptr %147, align 8, !tbaa !13
  %148 = load ptr, ptr %8, align 8, !tbaa !9
  %149 = load ptr, ptr @atom, align 8, !tbaa !9
  %150 = load i32, ptr %6, align 4, !tbaa !5
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds %struct.AtomStr, ptr %149, i64 %151
  %153 = getelementptr inbounds %struct.AtomStr, ptr %152, i32 0, i32 1
  store ptr %148, ptr %153, align 8, !tbaa !15
  %154 = load ptr, ptr @atom, align 8, !tbaa !9
  %155 = load i32, ptr %6, align 4, !tbaa !5
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds %struct.AtomStr, ptr %154, i64 %156
  %158 = getelementptr inbounds %struct.AtomStr, ptr %157, i32 0, i32 0
  %159 = load ptr, ptr %158, align 8, !tbaa !13
  %160 = load ptr, ptr %4, align 8, !tbaa !9
  %161 = call i64 @fread(ptr noundef %159, i64 noundef 136, i64 noundef 1, ptr noundef %160)
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  store ptr null, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  %162 = load ptr, ptr @atom, align 8, !tbaa !9
  %163 = load i32, ptr %6, align 4, !tbaa !5
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds %struct.AtomStr, ptr %162, i64 %164
  %166 = getelementptr inbounds %struct.AtomStr, ptr %165, i32 0, i32 0
  %167 = load ptr, ptr %166, align 8, !tbaa !13
  %168 = getelementptr inbounds %struct.PropertyStr, ptr %167, i32 0, i32 11
  %169 = load ptr, ptr %168, align 8, !tbaa !16
  store ptr %169, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %170

170:                                              ; preds = %227, %139
  %171 = load ptr, ptr %10, align 8, !tbaa !9
  %172 = icmp ne ptr %171, null
  br i1 %172, label %173, label %231

173:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %174 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 40) #8
  store ptr %174, ptr %12, align 8, !tbaa !9
  %175 = load ptr, ptr %12, align 8, !tbaa !9
  %176 = load ptr, ptr %4, align 8, !tbaa !9
  %177 = call i64 @fread(ptr noundef %175, i64 noundef 40, i64 noundef 1, ptr noundef %176)
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  store ptr null, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %178 = load ptr, ptr %12, align 8, !tbaa !9
  %179 = getelementptr inbounds %struct.ConstraintStr, ptr %178, i32 0, i32 2
  %180 = load ptr, ptr %179, align 8, !tbaa !20
  store ptr %180, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %181

181:                                              ; preds = %203, %173
  %182 = load ptr, ptr %14, align 8, !tbaa !9
  %183 = icmp ne ptr %182, null
  br i1 %183, label %184, label %207

184:                                              ; preds = %181
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %185 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 32) #8
  store ptr %185, ptr %16, align 8, !tbaa !9
  %186 = load ptr, ptr %16, align 8, !tbaa !9
  %187 = load ptr, ptr %4, align 8, !tbaa !9
  %188 = call i64 @fread(ptr noundef %186, i64 noundef 32, i64 noundef 1, ptr noundef %187)
  %189 = load i32, ptr %15, align 4, !tbaa !5
  %190 = icmp eq i32 %189, 0
  br i1 %190, label %191, label %196

191:                                              ; preds = %184
  %192 = load ptr, ptr %16, align 8, !tbaa !9
  %193 = load ptr, ptr %12, align 8, !tbaa !9
  %194 = getelementptr inbounds %struct.ConstraintStr, ptr %193, i32 0, i32 2
  store ptr %192, ptr %194, align 8, !tbaa !20
  %195 = load ptr, ptr %16, align 8, !tbaa !9
  store ptr %195, ptr %13, align 8, !tbaa !9
  store i32 1, ptr %15, align 4, !tbaa !5
  br label %203

196:                                              ; preds = %184
  %197 = load ptr, ptr %16, align 8, !tbaa !9
  %198 = load ptr, ptr %13, align 8, !tbaa !9
  %199 = getelementptr inbounds %struct.StepPotenStr, ptr %198, i32 0, i32 3
  store ptr %197, ptr %199, align 8, !tbaa !22
  %200 = load ptr, ptr %13, align 8, !tbaa !9
  %201 = getelementptr inbounds %struct.StepPotenStr, ptr %200, i32 0, i32 3
  %202 = load ptr, ptr %201, align 8, !tbaa !22
  store ptr %202, ptr %13, align 8, !tbaa !9
  br label %203

203:                                              ; preds = %196, %191
  %204 = load ptr, ptr %16, align 8, !tbaa !9
  %205 = getelementptr inbounds %struct.StepPotenStr, ptr %204, i32 0, i32 3
  %206 = load ptr, ptr %205, align 8, !tbaa !22
  store ptr %206, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  br label %181, !llvm.loop !24

207:                                              ; preds = %181
  %208 = load i32, ptr %11, align 4, !tbaa !5
  %209 = icmp eq i32 %208, 0
  br i1 %209, label %210, label %220

210:                                              ; preds = %207
  %211 = load ptr, ptr %12, align 8, !tbaa !9
  %212 = load ptr, ptr @atom, align 8, !tbaa !9
  %213 = load i32, ptr %6, align 4, !tbaa !5
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds %struct.AtomStr, ptr %212, i64 %214
  %216 = getelementptr inbounds %struct.AtomStr, ptr %215, i32 0, i32 0
  %217 = load ptr, ptr %216, align 8, !tbaa !13
  %218 = getelementptr inbounds %struct.PropertyStr, ptr %217, i32 0, i32 11
  store ptr %211, ptr %218, align 8, !tbaa !16
  %219 = load ptr, ptr %12, align 8, !tbaa !9
  store ptr %219, ptr %9, align 8, !tbaa !9
  store i32 1, ptr %11, align 4, !tbaa !5
  br label %227

220:                                              ; preds = %207
  %221 = load ptr, ptr %12, align 8, !tbaa !9
  %222 = load ptr, ptr %9, align 8, !tbaa !9
  %223 = getelementptr inbounds %struct.ConstraintStr, ptr %222, i32 0, i32 4
  store ptr %221, ptr %223, align 8, !tbaa !25
  %224 = load ptr, ptr %9, align 8, !tbaa !9
  %225 = getelementptr inbounds %struct.ConstraintStr, ptr %224, i32 0, i32 4
  %226 = load ptr, ptr %225, align 8, !tbaa !25
  store ptr %226, ptr %9, align 8, !tbaa !9
  br label %227

227:                                              ; preds = %220, %210
  %228 = load ptr, ptr %12, align 8, !tbaa !9
  %229 = getelementptr inbounds %struct.ConstraintStr, ptr %228, i32 0, i32 4
  %230 = load ptr, ptr %229, align 8, !tbaa !25
  store ptr %230, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  br label %170, !llvm.loop !26

231:                                              ; preds = %170
  %232 = load ptr, ptr @atom, align 8, !tbaa !9
  %233 = load i32, ptr %6, align 4, !tbaa !5
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds %struct.AtomStr, ptr %232, i64 %234
  %236 = getelementptr inbounds %struct.AtomStr, ptr %235, i32 0, i32 1
  %237 = load ptr, ptr %236, align 8, !tbaa !15
  %238 = getelementptr inbounds %struct.DynamicStr, ptr %237, i32 0, i32 3
  %239 = load ptr, ptr %4, align 8, !tbaa !9
  %240 = call i64 @fread(ptr noundef %238, i64 noundef 16, i64 noundef 1, ptr noundef %239)
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  br label %241

241:                                              ; preds = %231
  %242 = load i32, ptr %6, align 4, !tbaa !5
  %243 = add nsw i32 %242, 1
  store i32 %243, ptr %6, align 4, !tbaa !5
  br label %134, !llvm.loop !27

244:                                              ; preds = %138
  %245 = load ptr, ptr %4, align 8, !tbaa !9
  %246 = call i64 @fread(ptr noundef @HBPotential, i64 noundef 48, i64 noundef 1, ptr noundef %245)
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 0, ptr %17, align 4, !tbaa !5
  br label %247

247:                                              ; preds = %309, %244
  %248 = load i32, ptr %17, align 4, !tbaa !5
  %249 = icmp slt i32 %248, 32
  br i1 %249, label %251, label %250

250:                                              ; preds = %247
  store i32 12, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %312

251:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %252

252:                                              ; preds = %305, %251
  %253 = load i32, ptr %19, align 4, !tbaa !5
  %254 = icmp slt i32 %253, 32
  br i1 %254, label %256, label %255

255:                                              ; preds = %252
  store i32 15, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %308

256:                                              ; preds = %252
  %257 = load i32, ptr %17, align 4, !tbaa !5
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds [33 x [33 x %struct.ConstraintStr]], ptr @potentialPairCollision, i64 0, i64 %258
  %260 = load i32, ptr %19, align 4, !tbaa !5
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds [33 x %struct.ConstraintStr], ptr %259, i64 0, i64 %261
  %263 = load ptr, ptr %4, align 8, !tbaa !9
  %264 = call i64 @fread(ptr noundef %262, i64 noundef 40, i64 noundef 1, ptr noundef %263)
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  store ptr null, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %265 = load i32, ptr %17, align 4, !tbaa !5
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds [33 x [33 x %struct.ConstraintStr]], ptr @potentialPairCollision, i64 0, i64 %266
  %268 = load i32, ptr %19, align 4, !tbaa !5
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds [33 x %struct.ConstraintStr], ptr %267, i64 0, i64 %269
  %271 = getelementptr inbounds %struct.ConstraintStr, ptr %270, i32 0, i32 2
  %272 = load ptr, ptr %271, align 8, !tbaa !20
  store ptr %272, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %273

273:                                              ; preds = %300, %256
  %274 = load ptr, ptr %21, align 8, !tbaa !9
  %275 = icmp ne ptr %274, null
  br i1 %275, label %276, label %304

276:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %277 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 32) #8
  store ptr %277, ptr %23, align 8, !tbaa !9
  %278 = load ptr, ptr %23, align 8, !tbaa !9
  %279 = load ptr, ptr %4, align 8, !tbaa !9
  %280 = call i64 @fread(ptr noundef %278, i64 noundef 32, i64 noundef 1, ptr noundef %279)
  %281 = load i32, ptr %22, align 4, !tbaa !5
  %282 = icmp eq i32 %281, 0
  br i1 %282, label %283, label %293

283:                                              ; preds = %276
  %284 = load ptr, ptr %23, align 8, !tbaa !9
  %285 = load i32, ptr %17, align 4, !tbaa !5
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds [33 x [33 x %struct.ConstraintStr]], ptr @potentialPairCollision, i64 0, i64 %286
  %288 = load i32, ptr %19, align 4, !tbaa !5
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds [33 x %struct.ConstraintStr], ptr %287, i64 0, i64 %289
  %291 = getelementptr inbounds %struct.ConstraintStr, ptr %290, i32 0, i32 2
  store ptr %284, ptr %291, align 8, !tbaa !20
  %292 = load ptr, ptr %23, align 8, !tbaa !9
  store ptr %292, ptr %20, align 8, !tbaa !9
  store i32 1, ptr %22, align 4, !tbaa !5
  br label %300

293:                                              ; preds = %276
  %294 = load ptr, ptr %23, align 8, !tbaa !9
  %295 = load ptr, ptr %20, align 8, !tbaa !9
  %296 = getelementptr inbounds %struct.StepPotenStr, ptr %295, i32 0, i32 3
  store ptr %294, ptr %296, align 8, !tbaa !22
  %297 = load ptr, ptr %20, align 8, !tbaa !9
  %298 = getelementptr inbounds %struct.StepPotenStr, ptr %297, i32 0, i32 3
  %299 = load ptr, ptr %298, align 8, !tbaa !22
  store ptr %299, ptr %20, align 8, !tbaa !9
  br label %300

300:                                              ; preds = %293, %283
  %301 = load ptr, ptr %23, align 8, !tbaa !9
  %302 = getelementptr inbounds %struct.StepPotenStr, ptr %301, i32 0, i32 3
  %303 = load ptr, ptr %302, align 8, !tbaa !22
  store ptr %303, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br label %273, !llvm.loop !28

304:                                              ; preds = %273
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %305

305:                                              ; preds = %304
  %306 = load i32, ptr %19, align 4, !tbaa !5
  %307 = add nsw i32 %306, 1
  store i32 %307, ptr %19, align 4, !tbaa !5
  br label %252, !llvm.loop !29

308:                                              ; preds = %255
  br label %309

309:                                              ; preds = %308
  %310 = load i32, ptr %17, align 4, !tbaa !5
  %311 = add nsw i32 %310, 1
  store i32 %311, ptr %17, align 4, !tbaa !5
  br label %247, !llvm.loop !30

312:                                              ; preds = %250
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  store i32 0, ptr %24, align 4, !tbaa !5
  br label %313

313:                                              ; preds = %393, %312
  %314 = load i32, ptr %24, align 4, !tbaa !5
  %315 = icmp slt i32 %314, 11
  br i1 %315, label %317, label %316

316:                                              ; preds = %313
  store i32 20, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %396

317:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  store i32 0, ptr %25, align 4, !tbaa !5
  br label %318

318:                                              ; preds = %389, %317
  %319 = load i32, ptr %25, align 4, !tbaa !5
  %320 = icmp slt i32 %319, 32
  br i1 %320, label %322, label %321

321:                                              ; preds = %318
  store i32 23, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %392

322:                                              ; preds = %318
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  store i32 0, ptr %26, align 4, !tbaa !5
  br label %323

323:                                              ; preds = %385, %322
  %324 = load i32, ptr %26, align 4, !tbaa !5
  %325 = icmp slt i32 %324, 32
  br i1 %325, label %327, label %326

326:                                              ; preds = %323
  store i32 26, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %388

327:                                              ; preds = %323
  %328 = load i32, ptr %24, align 4, !tbaa !5
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds [12 x [33 x [33 x %struct.ConstraintStr]]], ptr @potentialPairHB, i64 0, i64 %329
  %331 = load i32, ptr %25, align 4, !tbaa !5
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds [33 x [33 x %struct.ConstraintStr]], ptr %330, i64 0, i64 %332
  %334 = load i32, ptr %26, align 4, !tbaa !5
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds [33 x %struct.ConstraintStr], ptr %333, i64 0, i64 %335
  %337 = load ptr, ptr %4, align 8, !tbaa !9
  %338 = call i64 @fread(ptr noundef %336, i64 noundef 40, i64 noundef 1, ptr noundef %337)
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  store ptr null, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %339 = load i32, ptr %24, align 4, !tbaa !5
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds [12 x [33 x [33 x %struct.ConstraintStr]]], ptr @potentialPairHB, i64 0, i64 %340
  %342 = load i32, ptr %25, align 4, !tbaa !5
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds [33 x [33 x %struct.ConstraintStr]], ptr %341, i64 0, i64 %343
  %345 = load i32, ptr %26, align 4, !tbaa !5
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds [33 x %struct.ConstraintStr], ptr %344, i64 0, i64 %346
  %348 = getelementptr inbounds %struct.ConstraintStr, ptr %347, i32 0, i32 2
  %349 = load ptr, ptr %348, align 8, !tbaa !20
  store ptr %349, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %350

350:                                              ; preds = %380, %327
  %351 = load ptr, ptr %28, align 8, !tbaa !9
  %352 = icmp ne ptr %351, null
  br i1 %352, label %353, label %384

353:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %354 = call noalias ptr @calloc(i64 noundef 1, i64 noundef 32) #8
  store ptr %354, ptr %30, align 8, !tbaa !9
  %355 = load ptr, ptr %30, align 8, !tbaa !9
  %356 = load ptr, ptr %4, align 8, !tbaa !9
  %357 = call i64 @fread(ptr noundef %355, i64 noundef 32, i64 noundef 1, ptr noundef %356)
  %358 = load i32, ptr %29, align 4, !tbaa !5
  %359 = icmp eq i32 %358, 0
  br i1 %359, label %360, label %373

360:                                              ; preds = %353
  %361 = load ptr, ptr %30, align 8, !tbaa !9
  %362 = load i32, ptr %24, align 4, !tbaa !5
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds [12 x [33 x [33 x %struct.ConstraintStr]]], ptr @potentialPairHB, i64 0, i64 %363
  %365 = load i32, ptr %25, align 4, !tbaa !5
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds [33 x [33 x %struct.ConstraintStr]], ptr %364, i64 0, i64 %366
  %368 = load i32, ptr %26, align 4, !tbaa !5
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds [33 x %struct.ConstraintStr], ptr %367, i64 0, i64 %369
  %371 = getelementptr inbounds %struct.ConstraintStr, ptr %370, i32 0, i32 2
  store ptr %361, ptr %371, align 8, !tbaa !20
  %372 = load ptr, ptr %30, align 8, !tbaa !9
  store ptr %372, ptr %27, align 8, !tbaa !9
  store i32 1, ptr %29, align 4, !tbaa !5
  br label %380

373:                                              ; preds = %353
  %374 = load ptr, ptr %30, align 8, !tbaa !9
  %375 = load ptr, ptr %27, align 8, !tbaa !9
  %376 = getelementptr inbounds %struct.StepPotenStr, ptr %375, i32 0, i32 3
  store ptr %374, ptr %376, align 8, !tbaa !22
  %377 = load ptr, ptr %27, align 8, !tbaa !9
  %378 = getelementptr inbounds %struct.StepPotenStr, ptr %377, i32 0, i32 3
  %379 = load ptr, ptr %378, align 8, !tbaa !22
  store ptr %379, ptr %27, align 8, !tbaa !9
  br label %380

380:                                              ; preds = %373, %360
  %381 = load ptr, ptr %30, align 8, !tbaa !9
  %382 = getelementptr inbounds %struct.StepPotenStr, ptr %381, i32 0, i32 3
  %383 = load ptr, ptr %382, align 8, !tbaa !22
  store ptr %383, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  br label %350, !llvm.loop !31

384:                                              ; preds = %350
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  br label %385

385:                                              ; preds = %384
  %386 = load i32, ptr %26, align 4, !tbaa !5
  %387 = add nsw i32 %386, 1
  store i32 %387, ptr %26, align 4, !tbaa !5
  br label %323, !llvm.loop !32

388:                                              ; preds = %326
  br label %389

389:                                              ; preds = %388
  %390 = load i32, ptr %25, align 4, !tbaa !5
  %391 = add nsw i32 %390, 1
  store i32 %391, ptr %25, align 4, !tbaa !5
  br label %318, !llvm.loop !33

392:                                              ; preds = %321
  br label %393

393:                                              ; preds = %392
  %394 = load i32, ptr %24, align 4, !tbaa !5
  %395 = add nsw i32 %394, 1
  store i32 %395, ptr %24, align 4, !tbaa !5
  br label %313, !llvm.loop !34

396:                                              ; preds = %316
  %397 = load ptr, ptr %4, align 8, !tbaa !9
  %398 = call i32 @fclose(ptr noundef %397)
  %399 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  %400 = load ptr, ptr @stdout, align 8, !tbaa !9
  %401 = call i32 @fflush(ptr noundef %400)
  store i32 1, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 256, ptr %3) #6
  ret void
}

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

declare i32 @printf(ptr noundef, ...) #2

declare i32 @fflush(ptr noundef) #2

; Function Attrs: nounwind
declare i32 @sprintf(ptr noundef, ptr noundef, ...) #3

declare noalias ptr @fopen(ptr noundef, ptr noundef) #2

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #4

declare i64 @fread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #2

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #5

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

declare i32 @fclose(ptr noundef) #2

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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { noreturn 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 #5 = { nounwind allocsize(0,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 #6 = { nounwind }
attributes #7 = { noreturn nounwind }
attributes #8 = { nounwind allocsize(0,1) }

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !10, i64 0}
!14 = !{!"AtomStr", !10, i64 0, !10, i64 8}
!15 = !{!14, !10, i64 8}
!16 = !{!17, !10, i64 128}
!17 = !{!"PropertyStr", !7, i64 0, !7, i64 8, !7, i64 40, !6, i64 48, !6, i64 52, !6, i64 56, !18, i64 64, !18, i64 72, !7, i64 80, !19, i64 104, !10, i64 120, !10, i64 128}
!18 = !{!"double", !7, i64 0}
!19 = !{!"AtomSeqStr", !6, i64 0, !6, i64 4, !6, i64 8}
!20 = !{!21, !10, i64 16}
!21 = !{!"ConstraintStr", !6, i64 0, !18, i64 8, !10, i64 16, !18, i64 24, !10, i64 32}
!22 = !{!23, !10, i64 24}
!23 = !{!"StepPotenStr", !18, i64 0, !18, i64 8, !18, i64 16, !10, i64 24}
!24 = distinct !{!24, !12}
!25 = !{!21, !10, i64 32}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !12}
!28 = distinct !{!28, !12}
!29 = distinct !{!29, !12}
!30 = distinct !{!30, !12}
!31 = distinct !{!31, !12}
!32 = distinct !{!32, !12}
!33 = distinct !{!33, !12}
!34 = distinct !{!34, !12}


; 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.HBPotentialStr = type { double, double, double, double, double, double }
%struct.ConstraintStr = type { i32, double, ptr, double, ptr }
%struct.FileStr = type { i32, [256 x i8] }
%struct.AtomStr = type { ptr, ptr }

@.str = external hidden unnamed_addr constant [33 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@path = external global [1024 x i8], align 16
@files = external local_unnamed_addr global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [116 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [79 x i8], align 1
@atomnum = external global i32, align 4
@numofprotein = external global i32, align 4
@totalAminoAcids = external global i32, align 4
@nPP = external local_unnamed_addr global i32, align 4
@.str.5 = external hidden unnamed_addr constant [87 x i8], align 1
@connectionMap = external local_unnamed_addr global ptr, align 8
@aminoacid = external local_unnamed_addr global ptr, align 8
@protein = external local_unnamed_addr global ptr, align 8
@atom = external local_unnamed_addr global ptr, align 8
@HBPotential = external global %struct.HBPotentialStr, align 8
@potentialPairCollision = external global [33 x [33 x %struct.ConstraintStr]], align 16
@potentialPairHB = external global [12 x [33 x [33 x %struct.ConstraintStr]]], align 16
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @SystemInformationInput(i32 noundef %0) local_unnamed_addr #0 {
  %2 = alloca [256 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %2) #5
  %3 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str)
  %4 = load ptr, ptr @stdout, align 8, !tbaa !5
  %5 = tail call i32 @fflush(ptr noundef %4)
  %6 = load ptr, ptr @files, align 8, !tbaa !5
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %8 = sext i32 %0 to i64
  %9 = getelementptr inbounds %struct.FileStr, ptr %7, i64 %8, i32 1
  %10 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef nonnull @path, ptr noundef nonnull %9) #5
  %11 = call noalias ptr @fopen(ptr noundef nonnull %2, ptr noundef nonnull @.str.2)
  %12 = icmp eq ptr %11, null
  br i1 %12, label %13, label %18

13:                                               ; preds = %1
  %14 = load ptr, ptr @files, align 8, !tbaa !5
  %15 = load ptr, ptr %14, align 8, !tbaa !5
  %16 = getelementptr inbounds %struct.FileStr, ptr %15, i64 %8, i32 1
  %17 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef nonnull %16, ptr noundef nonnull @path, ptr noundef nonnull @.str.4, i32 noundef 22)
  tail call void @exit(i32 noundef 1) #6
  unreachable

18:                                               ; preds = %1
  %19 = tail call i64 @fread(ptr noundef nonnull @atomnum, i64 noundef 4, i64 noundef 1, ptr noundef nonnull %11)
  %20 = tail call i64 @fread(ptr noundef nonnull @numofprotein, i64 noundef 4, i64 noundef 1, ptr noundef nonnull %11)
  %21 = tail call i64 @fread(ptr noundef nonnull @totalAminoAcids, i64 noundef 4, i64 noundef 1, ptr noundef nonnull %11)
  %22 = load i32, ptr @nPP, align 4, !tbaa !9
  %23 = load i32, ptr @numofprotein, align 4, !tbaa !9
  %24 = icmp sgt i32 %22, %23
  br i1 %24, label %25, label %27

25:                                               ; preds = %18
  %26 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, i32 noundef %22, i32 noundef %23, ptr noundef nonnull @.str.4, i32 noundef 31)
  br label %27

27:                                               ; preds = %25, %18
  %28 = load i32, ptr @atomnum, align 4, !tbaa !9
  %29 = add nsw i32 %28, 1
  %30 = sext i32 %29 to i64
  %31 = tail call noalias ptr @calloc(i64 noundef %30, i64 noundef 8) #7
  store ptr %31, ptr @connectionMap, align 8, !tbaa !5
  %32 = mul nsw i32 %29, %29
  %33 = zext nneg i32 %32 to i64
  %34 = tail call noalias ptr @calloc(i64 noundef %33, i64 noundef 4) #7
  store ptr %34, ptr %31, align 8, !tbaa !5
  %.not131 = icmp slt i32 %28, 1
  br i1 %.not131, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %27
  %35 = zext nneg i32 %29 to i64
  %36 = add nsw i64 %35, -1
  %37 = add nsw i64 %35, -2
  %xtraiter = and i64 %36, 3
  %38 = icmp ult i64 %37, 3
  br i1 %38, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %36, -4
  br label %.lr.ph

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %indvars.iv.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next.3, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.lr.ph.epil ], [ %indvars.iv.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %39 = load ptr, ptr @connectionMap, align 8, !tbaa !5
  %40 = load ptr, ptr %39, align 8, !tbaa !5
  %41 = mul nuw nsw i64 %indvars.iv.epil, %35
  %42 = getelementptr inbounds i32, ptr %40, i64 %41
  %43 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.epil
  store ptr %42, ptr %43, align 8, !tbaa !5
  %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_edge, label %.lr.ph.epil, !llvm.loop !11

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil, %27
  %44 = load i32, ptr @totalAminoAcids, align 4, !tbaa !9
  %45 = add nsw i32 %44, 1
  %46 = sext i32 %45 to i64
  %47 = tail call noalias ptr @calloc(i64 noundef %46, i64 noundef 32) #7
  store ptr %47, ptr @aminoacid, align 8, !tbaa !5
  %48 = tail call i64 @fread(ptr noundef %47, i64 noundef 32, i64 noundef %46, ptr noundef nonnull %11)
  %49 = load i32, ptr @numofprotein, align 4, !tbaa !9
  %50 = add nsw i32 %49, 1
  %51 = sext i32 %50 to i64
  %52 = tail call noalias ptr @calloc(i64 noundef %51, i64 noundef 24) #7
  store ptr %52, ptr @protein, align 8, !tbaa !5
  %53 = tail call i64 @fread(ptr noundef %52, i64 noundef 24, i64 noundef %51, ptr noundef nonnull %11)
  %54 = load i32, ptr @atomnum, align 4, !tbaa !9
  %55 = add nsw i32 %54, 1
  %56 = sext i32 %55 to i64
  %57 = tail call noalias ptr @calloc(i64 noundef %56, i64 noundef 16) #7
  store ptr %57, ptr @atom, align 8, !tbaa !5
  %.not123145 = icmp slt i32 %54, 0
  br i1 %.not123145, label %._crit_edge149, label %.lr.ph148

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader.new ], [ %indvars.iv.next.3, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %58 = load ptr, ptr @connectionMap, align 8, !tbaa !5
  %59 = load ptr, ptr %58, align 8, !tbaa !5
  %60 = mul nuw nsw i64 %indvars.iv, %35
  %61 = getelementptr inbounds i32, ptr %59, i64 %60
  %62 = getelementptr inbounds ptr, ptr %58, i64 %indvars.iv
  store ptr %61, ptr %62, align 8, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %63 = load ptr, ptr @connectionMap, align 8, !tbaa !5
  %64 = load ptr, ptr %63, align 8, !tbaa !5
  %65 = mul nuw nsw i64 %indvars.iv.next, %35
  %66 = getelementptr inbounds i32, ptr %64, i64 %65
  %67 = getelementptr inbounds ptr, ptr %63, i64 %indvars.iv.next
  store ptr %66, ptr %67, align 8, !tbaa !5
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %68 = load ptr, ptr @connectionMap, align 8, !tbaa !5
  %69 = load ptr, ptr %68, align 8, !tbaa !5
  %70 = mul nuw nsw i64 %indvars.iv.next.1, %35
  %71 = getelementptr inbounds i32, ptr %69, i64 %70
  %72 = getelementptr inbounds ptr, ptr %68, i64 %indvars.iv.next.1
  store ptr %71, ptr %72, align 8, !tbaa !5
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %73 = load ptr, ptr @connectionMap, align 8, !tbaa !5
  %74 = load ptr, ptr %73, align 8, !tbaa !5
  %75 = mul nuw nsw i64 %indvars.iv.next.2, %35
  %76 = getelementptr inbounds i32, ptr %74, i64 %75
  %77 = getelementptr inbounds ptr, ptr %73, i64 %indvars.iv.next.2
  store ptr %76, ptr %77, align 8, !tbaa !5
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !13

._crit_edge149:                                   ; preds = %._crit_edge144, %._crit_edge
  %78 = tail call i64 @fread(ptr noundef nonnull @HBPotential, i64 noundef 48, i64 noundef 1, ptr noundef nonnull %11)
  br label %.preheader130

.lr.ph148:                                        ; preds = %._crit_edge, %._crit_edge144
  %indvars.iv169 = phi i64 [ %indvars.iv.next170, %._crit_edge144 ], [ 0, %._crit_edge ]
  %79 = tail call noalias dereferenceable_or_null(136) ptr @calloc(i64 noundef 1, i64 noundef 136) #7
  %80 = tail call noalias dereferenceable_or_null(176) ptr @calloc(i64 noundef 1, i64 noundef 176) #7
  %81 = load ptr, ptr @atom, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.AtomStr, ptr %81, i64 %indvars.iv169
  store ptr %79, ptr %82, align 8, !tbaa !15
  %83 = load ptr, ptr @atom, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.AtomStr, ptr %83, i64 %indvars.iv169, i32 1
  store ptr %80, ptr %84, align 8, !tbaa !17
  %85 = load ptr, ptr @atom, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.AtomStr, ptr %85, i64 %indvars.iv169
  %87 = load ptr, ptr %86, align 8, !tbaa !15
  %88 = tail call i64 @fread(ptr noundef %87, i64 noundef 136, i64 noundef 1, ptr noundef nonnull %11)
  %89 = load ptr, ptr @atom, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.AtomStr, ptr %89, i64 %indvars.iv169
  %91 = load ptr, ptr %90, align 8, !tbaa !15
  %92 = getelementptr inbounds i8, ptr %91, i64 128
  %.0116139 = load ptr, ptr %92, align 8, !tbaa !5
  %.not126140 = icmp eq ptr %.0116139, null
  br i1 %.not126140, label %._crit_edge144, label %.lr.ph143

.lr.ph143:                                        ; preds = %.lr.ph148, %112
  %.0109141 = phi ptr [ %94, %112 ], [ null, %.lr.ph148 ]
  %93 = phi i1 [ false, %112 ], [ true, %.lr.ph148 ]
  %94 = tail call noalias dereferenceable_or_null(40) ptr @calloc(i64 noundef 1, i64 noundef 40) #7
  %95 = tail call i64 @fread(ptr noundef %94, i64 noundef 40, i64 noundef 1, ptr noundef nonnull %11)
  %96 = getelementptr inbounds i8, ptr %94, i64 16
  %.0113133 = load ptr, ptr %96, align 8, !tbaa !5
  %.not127134 = icmp eq ptr %.0113133, null
  br i1 %.not127134, label %._crit_edge138, label %97

97:                                               ; preds = %.lr.ph143
  %98 = tail call noalias dereferenceable_or_null(32) ptr @calloc(i64 noundef 1, i64 noundef 32) #7
  %99 = tail call i64 @fread(ptr noundef %98, i64 noundef 32, i64 noundef 1, ptr noundef nonnull %11)
  store ptr %98, ptr %96, align 8, !tbaa !18
  %100 = getelementptr inbounds i8, ptr %98, i64 24
  %.0113.peel = load ptr, ptr %100, align 8, !tbaa !5
  %.not127.peel = icmp eq ptr %.0113.peel, null
  br i1 %.not127.peel, label %._crit_edge138, label %.lr.ph137.peel.next

.lr.ph137.peel.next:                              ; preds = %97, %.lr.ph137.peel.next
  %.0114135 = phi ptr [ %101, %.lr.ph137.peel.next ], [ %98, %97 ]
  %101 = tail call noalias dereferenceable_or_null(32) ptr @calloc(i64 noundef 1, i64 noundef 32) #7
  %102 = tail call i64 @fread(ptr noundef %101, i64 noundef 32, i64 noundef 1, ptr noundef nonnull %11)
  %103 = getelementptr inbounds i8, ptr %.0114135, i64 24
  store ptr %101, ptr %103, align 8, !tbaa !21
  %104 = getelementptr inbounds i8, ptr %101, i64 24
  %.0113 = load ptr, ptr %104, align 8, !tbaa !5
  %.not127 = icmp eq ptr %.0113, null
  br i1 %.not127, label %._crit_edge138, label %.lr.ph137.peel.next, !llvm.loop !23

._crit_edge138:                                   ; preds = %.lr.ph137.peel.next, %97, %.lr.ph143
  br i1 %93, label %105, label %110

105:                                              ; preds = %._crit_edge138
  %106 = load ptr, ptr @atom, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.AtomStr, ptr %106, i64 %indvars.iv169
  %108 = load ptr, ptr %107, align 8, !tbaa !15
  %109 = getelementptr inbounds i8, ptr %108, i64 128
  br label %112

110:                                              ; preds = %._crit_edge138
  %111 = getelementptr inbounds i8, ptr %.0109141, i64 32
  br label %112

112:                                              ; preds = %110, %105
  %.sink = phi ptr [ %111, %110 ], [ %109, %105 ]
  store ptr %94, ptr %.sink, align 8, !tbaa !5
  %113 = getelementptr inbounds i8, ptr %94, i64 32
  %.0116 = load ptr, ptr %113, align 8, !tbaa !5
  %.not126 = icmp eq ptr %.0116, null
  br i1 %.not126, label %._crit_edge144.loopexit, label %.lr.ph143, !llvm.loop !25

._crit_edge144.loopexit:                          ; preds = %112
  %.pre = load ptr, ptr @atom, align 8, !tbaa !5
  br label %._crit_edge144

._crit_edge144:                                   ; preds = %._crit_edge144.loopexit, %.lr.ph148
  %114 = phi ptr [ %.pre, %._crit_edge144.loopexit ], [ %89, %.lr.ph148 ]
  %115 = getelementptr inbounds %struct.AtomStr, ptr %114, i64 %indvars.iv169, i32 1
  %116 = load ptr, ptr %115, align 8, !tbaa !17
  %117 = getelementptr inbounds i8, ptr %116, i64 80
  %118 = tail call i64 @fread(ptr noundef nonnull %117, i64 noundef 16, i64 noundef 1, ptr noundef nonnull %11)
  %indvars.iv.next170 = add nuw nsw i64 %indvars.iv169, 1
  %119 = load i32, ptr @atomnum, align 4, !tbaa !9
  %120 = sext i32 %119 to i64
  %.not123.not = icmp slt i64 %indvars.iv169, %120
  br i1 %.not123.not, label %.lr.ph148, label %._crit_edge149, !llvm.loop !26

.preheader130:                                    ; preds = %._crit_edge149, %121
  %indvars.iv177 = phi i64 [ 0, %._crit_edge149 ], [ %indvars.iv.next178, %121 ]
  br label %122

121:                                              ; preds = %._crit_edge155
  %indvars.iv.next178 = add nuw nsw i64 %indvars.iv177, 1
  %exitcond180.not = icmp eq i64 %indvars.iv.next178, 32
  br i1 %exitcond180.not, label %.preheader128, label %.preheader130, !llvm.loop !27

122:                                              ; preds = %.preheader130, %._crit_edge155
  %indvars.iv173 = phi i64 [ 0, %.preheader130 ], [ %indvars.iv.next174, %._crit_edge155 ]
  %123 = getelementptr inbounds [33 x [33 x %struct.ConstraintStr]], ptr @potentialPairCollision, i64 0, i64 %indvars.iv177, i64 %indvars.iv173
  %124 = tail call i64 @fread(ptr noundef nonnull %123, i64 noundef 40, i64 noundef 1, ptr noundef nonnull %11)
  %125 = getelementptr inbounds i8, ptr %123, i64 16
  %.0104150 = load ptr, ptr %125, align 8, !tbaa !5
  %.not125151 = icmp eq ptr %.0104150, null
  br i1 %.not125151, label %._crit_edge155, label %126

126:                                              ; preds = %122
  %127 = tail call noalias dereferenceable_or_null(32) ptr @calloc(i64 noundef 1, i64 noundef 32) #7
  %128 = tail call i64 @fread(ptr noundef %127, i64 noundef 32, i64 noundef 1, ptr noundef nonnull %11)
  store ptr %127, ptr %125, align 8, !tbaa !18
  %129 = getelementptr inbounds i8, ptr %127, i64 24
  %.0104.peel = load ptr, ptr %129, align 8, !tbaa !5
  %.not125.peel = icmp eq ptr %.0104.peel, null
  br i1 %.not125.peel, label %._crit_edge155, label %.lr.ph154.peel.next

.lr.ph154.peel.next:                              ; preds = %126, %.lr.ph154.peel.next
  %.0105152 = phi ptr [ %130, %.lr.ph154.peel.next ], [ %127, %126 ]
  %130 = tail call noalias dereferenceable_or_null(32) ptr @calloc(i64 noundef 1, i64 noundef 32) #7
  %131 = tail call i64 @fread(ptr noundef %130, i64 noundef 32, i64 noundef 1, ptr noundef nonnull %11)
  %132 = getelementptr inbounds i8, ptr %.0105152, i64 24
  store ptr %130, ptr %132, align 8, !tbaa !21
  %133 = getelementptr inbounds i8, ptr %130, i64 24
  %.0104 = load ptr, ptr %133, align 8, !tbaa !5
  %.not125 = icmp eq ptr %.0104, null
  br i1 %.not125, label %._crit_edge155, label %.lr.ph154.peel.next, !llvm.loop !28

._crit_edge155:                                   ; preds = %.lr.ph154.peel.next, %126, %122
  %indvars.iv.next174 = add nuw nsw i64 %indvars.iv173, 1
  %exitcond176.not = icmp eq i64 %indvars.iv.next174, 32
  br i1 %exitcond176.not, label %121, label %122, !llvm.loop !29

.preheader128:                                    ; preds = %121, %139
  %indvars.iv190 = phi i64 [ %indvars.iv.next191, %139 ], [ 0, %121 ]
  br label %.preheader

134:                                              ; preds = %139
  %135 = tail call i32 @fclose(ptr noundef nonnull %11)
  %136 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %137 = load ptr, ptr @stdout, align 8, !tbaa !5
  %138 = tail call i32 @fflush(ptr noundef %137)
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %2) #5
  ret void

.preheader:                                       ; preds = %.preheader128, %140
  %indvars.iv186 = phi i64 [ 0, %.preheader128 ], [ %indvars.iv.next187, %140 ]
  br label %141

139:                                              ; preds = %140
  %indvars.iv.next191 = add nuw nsw i64 %indvars.iv190, 1
  %exitcond193.not = icmp eq i64 %indvars.iv.next191, 11
  br i1 %exitcond193.not, label %134, label %.preheader128, !llvm.loop !30

140:                                              ; preds = %._crit_edge163
  %indvars.iv.next187 = add nuw nsw i64 %indvars.iv186, 1
  %exitcond189.not = icmp eq i64 %indvars.iv.next187, 32
  br i1 %exitcond189.not, label %139, label %.preheader, !llvm.loop !31

141:                                              ; preds = %.preheader, %._crit_edge163
  %indvars.iv182 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next183, %._crit_edge163 ]
  %142 = getelementptr inbounds [12 x [33 x [33 x %struct.ConstraintStr]]], ptr @potentialPairHB, i64 0, i64 %indvars.iv190, i64 %indvars.iv186, i64 %indvars.iv182
  %143 = tail call i64 @fread(ptr noundef nonnull %142, i64 noundef 40, i64 noundef 1, ptr noundef nonnull %11)
  %144 = getelementptr inbounds i8, ptr %142, i64 16
  %.095158 = load ptr, ptr %144, align 8, !tbaa !5
  %.not124159 = icmp eq ptr %.095158, null
  br i1 %.not124159, label %._crit_edge163, label %145

145:                                              ; preds = %141
  %146 = tail call noalias dereferenceable_or_null(32) ptr @calloc(i64 noundef 1, i64 noundef 32) #7
  %147 = tail call i64 @fread(ptr noundef %146, i64 noundef 32, i64 noundef 1, ptr noundef nonnull %11)
  store ptr %146, ptr %144, align 8, !tbaa !18
  %148 = getelementptr inbounds i8, ptr %146, i64 24
  %.095.peel = load ptr, ptr %148, align 8, !tbaa !5
  %.not124.peel = icmp eq ptr %.095.peel, null
  br i1 %.not124.peel, label %._crit_edge163, label %.lr.ph162.peel.next

.lr.ph162.peel.next:                              ; preds = %145, %.lr.ph162.peel.next
  %.096160 = phi ptr [ %149, %.lr.ph162.peel.next ], [ %146, %145 ]
  %149 = tail call noalias dereferenceable_or_null(32) ptr @calloc(i64 noundef 1, i64 noundef 32) #7
  %150 = tail call i64 @fread(ptr noundef %149, i64 noundef 32, i64 noundef 1, ptr noundef nonnull %11)
  %151 = getelementptr inbounds i8, ptr %.096160, i64 24
  store ptr %149, ptr %151, align 8, !tbaa !21
  %152 = getelementptr inbounds i8, ptr %149, i64 24
  %.095 = load ptr, ptr %152, align 8, !tbaa !5
  %.not124 = icmp eq ptr %.095, null
  br i1 %.not124, label %._crit_edge163, label %.lr.ph162.peel.next, !llvm.loop !32

._crit_edge163:                                   ; preds = %.lr.ph162.peel.next, %145, %141
  %indvars.iv.next183 = add nuw nsw i64 %indvars.iv182, 1
  %exitcond185.not = icmp eq i64 %indvars.iv.next183, 32
  br i1 %exitcond185.not, label %140, label %141, !llvm.loop !33
}

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

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @sprintf(ptr noalias nocapture noundef writeonly, ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #2

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i64 @fread(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #4

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

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #2

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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nofree 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 #3 = { noreturn 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 = { mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #5 = { nounwind }
attributes #6 = { noreturn nounwind }
attributes #7 = { nounwind allocsize(0,1) }

!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 = !{!"int", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.unroll.disable"}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !6, i64 0}
!16 = !{!"AtomStr", !6, i64 0, !6, i64 8}
!17 = !{!16, !6, i64 8}
!18 = !{!19, !6, i64 16}
!19 = !{!"ConstraintStr", !10, i64 0, !20, i64 8, !6, i64 16, !20, i64 24, !6, i64 32}
!20 = !{!"double", !7, i64 0}
!21 = !{!22, !6, i64 24}
!22 = !{!"StepPotenStr", !20, i64 0, !20, i64 8, !20, i64 16, !6, i64 24}
!23 = distinct !{!23, !14, !24}
!24 = !{!"llvm.loop.peeled.count", i32 1}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14, !24}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14, !24}
!33 = distinct !{!33, !14}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass