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

; 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.FileListStr = type { i32, [128 x [64 x i8]] }
%struct.EnergyReadStr = type { double, double, double, double, double, double }
%struct.REMDStr = type { i32, i32 }
%struct.PESurStr = type { i32, double }
%struct.FileStr = type { i32, [256 x i8] }
%struct.SectionStr = type { i64, double, double, double, double, [20 x i8], %struct.WallStr, %struct.DynamicWallStr, %struct.ObstructionStr, %struct.TunnelStr, %struct.FlowStr }
%struct.WallStr = type { [20 x i8], [20 x i8], %struct.AtomStr }
%struct.AtomStr = type { ptr, ptr }
%struct.DynamicWallStr = type { [16 x i8], i32, i32, double, double, double, double, [4 x double] }
%struct.ObstructionStr = type { i32, i32, ptr, ptr, ptr }
%struct.TunnelStr = type { i32, double, double, double, %struct.AtomStr }
%struct.FlowStr = type { i32, %struct.ConstVStr, %struct.ForceStr, %struct.ChargeStr }
%struct.ConstVStr = type { [4 x double] }
%struct.ForceStr = type { [4 x double], ptr, ptr }
%struct.ChargeStr = type { i32, i32, ptr, ptr, ptr, ptr }

@stdout = external global ptr, align 8
@RMSDFile = external global %struct.FileListStr, align 4
@.str.2 = external hidden unnamed_addr constant [66 x i8], align 1
@nRow = external hidden global i32, align 4
@refCoor = external hidden global ptr, align 8
@.str.3 = 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.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [116 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [79 x i8], align 1
@fileList = external global ptr, align 8
@sectInfo = external global ptr, align 8
@curCoor = external hidden global ptr, align 8
@.str.14 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [105 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [88 x i8], align 1
@energy = external global %struct.EnergyReadStr, align 8
@.str.20 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [55 x i8], align 1
@RE = external global %struct.REMDStr, align 4

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

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

declare i32 @fflush(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @InitializeVariables() #2

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

; Function Attrs: nounwind uwtable
declare hidden void @ReadRef(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #2

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

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

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

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #4

declare i32 @ReadGro(ptr noundef) #1

declare void @PrintProcess(i64 noundef) #1

; Function Attrs: nounwind uwtable
declare hidden double @CalRMSD(i32 noundef, i32 noundef, ptr noundef, ptr noundef) #2

declare i32 @fclose(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @FreeVar() #2

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

declare void @FindTargetFile(ptr noundef, ptr noundef, ptr noundef) #1

declare i32 @ReadConnectionMap(ptr noundef) #1

declare i32 @ReadEnergyFile(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local void @PESurfaceInfoPerT() #2 {
  %1 = alloca i32, align 4
  %2 = alloca [2 x i32], align 4
  %3 = alloca i64, align 8
  %4 = alloca i64, align 8
  %5 = alloca [2 x double], align 16
  %6 = alloca double, align 8
  %7 = alloca double, align 8
  %8 = alloca [512 x i8], align 16
  %9 = alloca [512 x i8], align 16
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %1) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %2) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #7
  store i64 0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %5) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  store double 5.000000e-02, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 512, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 512, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %31 = call i32 (ptr, ...) @printf(ptr noundef @.str.21)
  %32 = load ptr, ptr @stdout, align 8, !tbaa !11
  %33 = call i32 @fflush(ptr noundef %32)
  %34 = load i32, ptr @RMSDFile, align 4, !tbaa !13
  %35 = icmp eq i32 %34, 1
  br i1 %35, label %36, label %39

36:                                               ; preds = %0
  %37 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  %38 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, ptr noundef @.str.2, i32 noundef 261)
  call void @exit(i32 noundef 1) #8
  unreachable

39:                                               ; preds = %0
  %40 = load i32, ptr getelementptr inbounds (%struct.REMDStr, ptr @RE, i32 0, i32 1), align 4, !tbaa !16
  %41 = sext i32 %40 to i64
  %42 = call noalias ptr @calloc(i64 noundef %41, i64 noundef 8) #9
  store ptr %42, ptr %11, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  store i32 0, ptr %17, align 4, !tbaa !18
  br label %43

43:                                               ; preds = %133, %39
  %44 = load i32, ptr %17, align 4, !tbaa !18
  %45 = load i32, ptr getelementptr inbounds (%struct.REMDStr, ptr @RE, i32 0, i32 1), align 4, !tbaa !16
  %46 = icmp slt i32 %44, %45
  br i1 %46, label %48, label %47

47:                                               ; preds = %43
  store i32 2, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  br label %136

48:                                               ; preds = %43
  %49 = call noalias ptr @calloc(i64 noundef 20, i64 noundef 8) #9
  %50 = load ptr, ptr %11, align 8, !tbaa !11
  %51 = load i32, ptr %17, align 4, !tbaa !18
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds ptr, ptr %50, i64 %52
  store ptr %49, ptr %53, align 8, !tbaa !11
  %54 = call noalias ptr @calloc(i64 noundef 400, i64 noundef 16) #9
  %55 = load ptr, ptr %11, align 8, !tbaa !11
  %56 = load i32, ptr %17, align 4, !tbaa !18
  %57 = sext i32 %56 to i64
  %58 = getelementptr inbounds ptr, ptr %55, i64 %57
  %59 = load ptr, ptr %58, align 8, !tbaa !11
  %60 = getelementptr inbounds ptr, ptr %59, i64 0
  store ptr %54, ptr %60, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 1, ptr %19, align 4, !tbaa !18
  br label %61

61:                                               ; preds = %85, %48
  %62 = load i32, ptr %19, align 4, !tbaa !18
  %63 = icmp slt i32 %62, 20
  br i1 %63, label %65, label %64

64:                                               ; preds = %61
  store i32 5, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  br label %88

65:                                               ; preds = %61
  %66 = load ptr, ptr %11, align 8, !tbaa !11
  %67 = load i32, ptr %17, align 4, !tbaa !18
  %68 = sext i32 %67 to i64
  %69 = getelementptr inbounds ptr, ptr %66, i64 %68
  %70 = load ptr, ptr %69, align 8, !tbaa !11
  %71 = getelementptr inbounds ptr, ptr %70, i64 0
  %72 = load ptr, ptr %71, align 8, !tbaa !11
  %73 = load i32, ptr %19, align 4, !tbaa !18
  %74 = mul nsw i32 %73, 20
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds %struct.PESurStr, ptr %72, i64 %75
  %77 = load ptr, ptr %11, align 8, !tbaa !11
  %78 = load i32, ptr %17, align 4, !tbaa !18
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds ptr, ptr %77, i64 %79
  %81 = load ptr, ptr %80, align 8, !tbaa !11
  %82 = load i32, ptr %19, align 4, !tbaa !18
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds ptr, ptr %81, i64 %83
  store ptr %76, ptr %84, align 8, !tbaa !11
  br label %85

85:                                               ; preds = %65
  %86 = load i32, ptr %19, align 4, !tbaa !18
  %87 = add nsw i32 %86, 1
  store i32 %87, ptr %19, align 4, !tbaa !18
  br label %61, !llvm.loop !19

88:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 0, ptr %20, align 4, !tbaa !18
  br label %89

89:                                               ; preds = %129, %88
  %90 = load i32, ptr %20, align 4, !tbaa !18
  %91 = icmp slt i32 %90, 20
  br i1 %91, label %93, label %92

92:                                               ; preds = %89
  store i32 8, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %132

93:                                               ; preds = %89
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  store i32 0, ptr %21, align 4, !tbaa !18
  br label %94

94:                                               ; preds = %125, %93
  %95 = load i32, ptr %21, align 4, !tbaa !18
  %96 = icmp slt i32 %95, 20
  br i1 %96, label %98, label %97

97:                                               ; preds = %94
  store i32 11, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %128

98:                                               ; preds = %94
  %99 = load ptr, ptr %11, align 8, !tbaa !11
  %100 = load i32, ptr %17, align 4, !tbaa !18
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds ptr, ptr %99, i64 %101
  %103 = load ptr, ptr %102, align 8, !tbaa !11
  %104 = load i32, ptr %20, align 4, !tbaa !18
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds ptr, ptr %103, i64 %105
  %107 = load ptr, ptr %106, align 8, !tbaa !11
  %108 = load i32, ptr %21, align 4, !tbaa !18
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds %struct.PESurStr, ptr %107, i64 %109
  %111 = getelementptr inbounds %struct.PESurStr, ptr %110, i32 0, i32 0
  store i32 0, ptr %111, align 8, !tbaa !21
  %112 = load ptr, ptr %11, align 8, !tbaa !11
  %113 = load i32, ptr %17, align 4, !tbaa !18
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds ptr, ptr %112, i64 %114
  %116 = load ptr, ptr %115, align 8, !tbaa !11
  %117 = load i32, ptr %20, align 4, !tbaa !18
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds ptr, ptr %116, i64 %118
  %120 = load ptr, ptr %119, align 8, !tbaa !11
  %121 = load i32, ptr %21, align 4, !tbaa !18
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds %struct.PESurStr, ptr %120, i64 %122
  %124 = getelementptr inbounds %struct.PESurStr, ptr %123, i32 0, i32 1
  store double 0.000000e+00, ptr %124, align 8, !tbaa !23
  br label %125

125:                                              ; preds = %98
  %126 = load i32, ptr %21, align 4, !tbaa !18
  %127 = add nsw i32 %126, 1
  store i32 %127, ptr %21, align 4, !tbaa !18
  br label %94, !llvm.loop !24

128:                                              ; preds = %97
  br label %129

129:                                              ; preds = %128
  %130 = load i32, ptr %20, align 4, !tbaa !18
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %20, align 4, !tbaa !18
  br label %89, !llvm.loop !25

132:                                              ; preds = %92
  br label %133

133:                                              ; preds = %132
  %134 = load i32, ptr %17, align 4, !tbaa !18
  %135 = add nsw i32 %134, 1
  store i32 %135, ptr %17, align 4, !tbaa !18
  br label %43, !llvm.loop !26

136:                                              ; preds = %47
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store i32 0, ptr %22, align 4, !tbaa !18
  br label %137

137:                                              ; preds = %474, %136
  %138 = load i32, ptr %22, align 4, !tbaa !18
  %139 = load i32, ptr getelementptr inbounds (%struct.REMDStr, ptr @RE, i32 0, i32 1), align 4, !tbaa !16
  %140 = icmp slt i32 %138, %139
  br i1 %140, label %142, label %141

141:                                              ; preds = %137
  store i32 14, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %477

142:                                              ; preds = %137
  call void @InitializeVariables()
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  store i32 0, ptr %23, align 4, !tbaa !18
  br label %143

143:                                              ; preds = %159, %142
  %144 = load i32, ptr %23, align 4, !tbaa !18
  %145 = load i32, ptr @RMSDFile, align 4, !tbaa !13
  %146 = icmp slt i32 %144, %145
  br i1 %146, label %148, label %147

147:                                              ; preds = %143
  store i32 17, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %162

148:                                              ; preds = %143
  %149 = load i32, ptr %23, align 4, !tbaa !18
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds [128 x [64 x i8]], ptr getelementptr inbounds (%struct.FileListStr, ptr @RMSDFile, i32 0, i32 1), i64 0, i64 %150
  %152 = getelementptr inbounds [64 x i8], ptr %151, i64 0, i64 0
  %153 = load i32, ptr @nRow, align 4, !tbaa !18
  %154 = load ptr, ptr @refCoor, align 8, !tbaa !11
  %155 = load i32, ptr %23, align 4, !tbaa !18
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds ptr, ptr %154, i64 %156
  %158 = load ptr, ptr %157, align 8, !tbaa !11
  call void @ReadRef(ptr noundef %152, i32 noundef 3, i32 noundef %153, ptr noundef %158)
  br label %159

159:                                              ; preds = %148
  %160 = load i32, ptr %23, align 4, !tbaa !18
  %161 = add nsw i32 %160, 1
  store i32 %161, ptr %23, align 4, !tbaa !18
  br label %143, !llvm.loop !27

162:                                              ; preds = %147
  %163 = getelementptr inbounds [512 x i8], ptr %8, i64 0, i64 0
  %164 = load ptr, ptr @files, align 8, !tbaa !11
  %165 = getelementptr inbounds ptr, ptr %164, i64 8
  %166 = load ptr, ptr %165, align 8, !tbaa !11
  %167 = load i32, ptr %22, align 4, !tbaa !18
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds %struct.FileStr, ptr %166, i64 %168
  %170 = getelementptr inbounds %struct.FileStr, ptr %169, i32 0, i32 1
  %171 = getelementptr inbounds [256 x i8], ptr %170, i64 0, i64 0
  %172 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %163, ptr noundef @.str.3, ptr noundef @path, ptr noundef %171) #7
  %173 = getelementptr inbounds [512 x i8], ptr %8, i64 0, i64 0
  %174 = call noalias ptr @fopen(ptr noundef %173, ptr noundef @.str.8)
  store ptr %174, ptr %12, align 8, !tbaa !11
  %175 = load ptr, ptr %12, align 8, !tbaa !11
  %176 = icmp eq ptr %175, null
  br i1 %176, label %177, label %188

177:                                              ; preds = %162
  %178 = load ptr, ptr @files, align 8, !tbaa !11
  %179 = getelementptr inbounds ptr, ptr %178, i64 8
  %180 = load ptr, ptr %179, align 8, !tbaa !11
  %181 = load i32, ptr %22, align 4, !tbaa !18
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds %struct.FileStr, ptr %180, i64 %182
  %184 = getelementptr inbounds %struct.FileStr, ptr %183, i32 0, i32 1
  %185 = getelementptr inbounds [256 x i8], ptr %184, i64 0, i64 0
  %186 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, ptr noundef %185, ptr noundef @path, ptr noundef @.str.2, i32 noundef 291)
  %187 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  call void @exit(i32 noundef 1) #8
  unreachable

188:                                              ; preds = %162
  %189 = getelementptr inbounds [512 x i8], ptr %8, i64 0, i64 0
  %190 = load ptr, ptr @files, align 8, !tbaa !11
  %191 = getelementptr inbounds ptr, ptr %190, i64 9
  %192 = load ptr, ptr %191, align 8, !tbaa !11
  %193 = load i32, ptr %22, align 4, !tbaa !18
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds %struct.FileStr, ptr %192, i64 %194
  %196 = getelementptr inbounds %struct.FileStr, ptr %195, i32 0, i32 1
  %197 = getelementptr inbounds [256 x i8], ptr %196, i64 0, i64 0
  %198 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %189, ptr noundef @.str.3, ptr noundef @path, ptr noundef %197) #7
  %199 = getelementptr inbounds [512 x i8], ptr %8, i64 0, i64 0
  %200 = call noalias ptr @fopen(ptr noundef %199, ptr noundef @.str.8)
  store ptr %200, ptr %14, align 8, !tbaa !11
  %201 = load ptr, ptr %14, align 8, !tbaa !11
  %202 = icmp eq ptr %201, null
  br i1 %202, label %203, label %214

203:                                              ; preds = %188
  %204 = load ptr, ptr @files, align 8, !tbaa !11
  %205 = getelementptr inbounds ptr, ptr %204, i64 9
  %206 = load ptr, ptr %205, align 8, !tbaa !11
  %207 = load i32, ptr %22, align 4, !tbaa !18
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds %struct.FileStr, ptr %206, i64 %208
  %210 = getelementptr inbounds %struct.FileStr, ptr %209, i32 0, i32 1
  %211 = getelementptr inbounds [256 x i8], ptr %210, i64 0, i64 0
  %212 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, ptr noundef %211, ptr noundef @path, ptr noundef @.str.2, i32 noundef 299)
  %213 = call i32 (ptr, ...) @printf(ptr noundef @.str.18)
  call void @exit(i32 noundef 1) #8
  unreachable

214:                                              ; preds = %188
  %215 = getelementptr inbounds [512 x i8], ptr %8, i64 0, i64 0
  %216 = load ptr, ptr @files, align 8, !tbaa !11
  %217 = getelementptr inbounds ptr, ptr %216, i64 7
  %218 = load ptr, ptr %217, align 8, !tbaa !11
  %219 = load i32, ptr %22, align 4, !tbaa !18
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds %struct.FileStr, ptr %218, i64 %220
  %222 = getelementptr inbounds %struct.FileStr, ptr %221, i32 0, i32 1
  %223 = getelementptr inbounds [256 x i8], ptr %222, i64 0, i64 0
  %224 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %215, ptr noundef @.str.3, ptr noundef @path, ptr noundef %223) #7
  %225 = getelementptr inbounds [512 x i8], ptr %8, i64 0, i64 0
  %226 = call noalias ptr @fopen(ptr noundef %225, ptr noundef @.str.8)
  store ptr %226, ptr %15, align 8, !tbaa !11
  %227 = load ptr, ptr %15, align 8, !tbaa !11
  %228 = icmp eq ptr %227, null
  br i1 %228, label %229, label %239

229:                                              ; preds = %214
  %230 = load ptr, ptr @files, align 8, !tbaa !11
  %231 = getelementptr inbounds ptr, ptr %230, i64 7
  %232 = load ptr, ptr %231, align 8, !tbaa !11
  %233 = load i32, ptr %22, align 4, !tbaa !18
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds %struct.FileStr, ptr %232, i64 %234
  %236 = getelementptr inbounds %struct.FileStr, ptr %235, i32 0, i32 1
  %237 = getelementptr inbounds [256 x i8], ptr %236, i64 0, i64 0
  %238 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, ptr noundef %237, ptr noundef @path, ptr noundef @.str.2, i32 noundef 307)
  call void @exit(i32 noundef 1) #8
  unreachable

239:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  store i32 0, ptr %24, align 4, !tbaa !18
  br label %240

240:                                              ; preds = %466, %239
  %241 = load i32, ptr %24, align 4, !tbaa !18
  %242 = load ptr, ptr @fileList, align 8, !tbaa !11
  %243 = load i32, ptr %22, align 4, !tbaa !18
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds %struct.FileListStr, ptr %242, i64 %244
  %246 = getelementptr inbounds %struct.FileListStr, ptr %245, i32 0, i32 0
  %247 = load i32, ptr %246, align 4, !tbaa !13
  %248 = icmp slt i32 %241, %247
  br i1 %248, label %250, label %249

249:                                              ; preds = %240
  store i32 20, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %469

250:                                              ; preds = %240
  %251 = getelementptr inbounds [512 x i8], ptr %9, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 16 %251, i8 0, i64 512, i1 false)
  %252 = load ptr, ptr @files, align 8, !tbaa !11
  %253 = getelementptr inbounds ptr, ptr %252, i64 5
  %254 = load ptr, ptr %253, align 8, !tbaa !11
  %255 = load i32, ptr %22, align 4, !tbaa !18
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds %struct.FileStr, ptr %254, i64 %256
  %258 = getelementptr inbounds %struct.FileStr, ptr %257, i32 0, i32 1
  %259 = getelementptr inbounds [256 x i8], ptr %258, i64 0, i64 0
  %260 = load ptr, ptr @fileList, align 8, !tbaa !11
  %261 = load i32, ptr %22, align 4, !tbaa !18
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds %struct.FileListStr, ptr %260, i64 %262
  %264 = getelementptr inbounds %struct.FileListStr, ptr %263, i32 0, i32 1
  %265 = load i32, ptr %24, align 4, !tbaa !18
  %266 = add nsw i32 %265, 1
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [128 x [64 x i8]], ptr %264, i64 0, i64 %267
  %269 = getelementptr inbounds [64 x i8], ptr %268, i64 0, i64 0
  %270 = getelementptr inbounds [512 x i8], ptr %9, i64 0, i64 0
  call void @FindTargetFile(ptr noundef %259, ptr noundef %269, ptr noundef %270)
  %271 = getelementptr inbounds [512 x i8], ptr %8, i64 0, i64 0
  %272 = getelementptr inbounds [512 x i8], ptr %9, i64 0, i64 0
  %273 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %271, ptr noundef @.str.3, ptr noundef @path, ptr noundef %272) #7
  %274 = getelementptr inbounds [512 x i8], ptr %8, i64 0, i64 0
  %275 = call noalias ptr @fopen(ptr noundef %274, ptr noundef @.str.8)
  store ptr %275, ptr %13, align 8, !tbaa !11
  %276 = load ptr, ptr %13, align 8, !tbaa !11
  %277 = icmp eq ptr %276, null
  br i1 %277, label %278, label %282

278:                                              ; preds = %250
  %279 = getelementptr inbounds [512 x i8], ptr %9, i64 0, i64 0
  %280 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, ptr noundef %279, ptr noundef @path, ptr noundef @.str.2, i32 noundef 319)
  %281 = call i32 (ptr, ...) @printf(ptr noundef @.str.19)
  call void @exit(i32 noundef 1) #8
  unreachable

282:                                              ; preds = %250
  %283 = load ptr, ptr @sectInfo, align 8, !tbaa !11
  %284 = load i32, ptr %24, align 4, !tbaa !18
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds %struct.SectionStr, ptr %283, i64 %285
  %287 = getelementptr inbounds %struct.SectionStr, ptr %286, i32 0, i32 0
  %288 = load i64, ptr %287, align 8, !tbaa !28
  %289 = sitofp i64 %288 to double
  %290 = load ptr, ptr @sectInfo, align 8, !tbaa !11
  %291 = load i32, ptr %24, align 4, !tbaa !18
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds %struct.SectionStr, ptr %290, i64 %292
  %294 = getelementptr inbounds %struct.SectionStr, ptr %293, i32 0, i32 1
  %295 = load double, ptr %294, align 8, !tbaa !39
  %296 = fadd double %289, %295
  %297 = load ptr, ptr @sectInfo, align 8, !tbaa !11
  %298 = load i32, ptr %24, align 4, !tbaa !18
  %299 = sext i32 %298 to i64
  %300 = getelementptr inbounds %struct.SectionStr, ptr %297, i64 %299
  %301 = getelementptr inbounds %struct.SectionStr, ptr %300, i32 0, i32 4
  %302 = load double, ptr %301, align 8, !tbaa !40
  %303 = fdiv double %296, %302
  %304 = fadd double %303, 1.000000e+00
  %305 = fptosi double %304 to i64
  store i64 %305, ptr %4, align 8, !tbaa !5
  %306 = load ptr, ptr @sectInfo, align 8, !tbaa !11
  %307 = load i32, ptr %24, align 4, !tbaa !18
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds %struct.SectionStr, ptr %306, i64 %308
  %310 = getelementptr inbounds %struct.SectionStr, ptr %309, i32 0, i32 1
  %311 = load double, ptr %310, align 8, !tbaa !39
  %312 = load ptr, ptr @sectInfo, align 8, !tbaa !11
  %313 = load i32, ptr %24, align 4, !tbaa !18
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds %struct.SectionStr, ptr %312, i64 %314
  %316 = getelementptr inbounds %struct.SectionStr, ptr %315, i32 0, i32 4
  %317 = load double, ptr %316, align 8, !tbaa !40
  %318 = fdiv double %311, %317
  %319 = fptosi double %318 to i64
  store i64 %319, ptr %3, align 8, !tbaa !5
  br label %320

320:                                              ; preds = %460, %282
  %321 = load i64, ptr %3, align 8, !tbaa !5
  %322 = load i64, ptr %4, align 8, !tbaa !5
  %323 = icmp slt i64 %321, %322
  br i1 %323, label %324, label %463

324:                                              ; preds = %320
  %325 = load ptr, ptr %12, align 8, !tbaa !11
  %326 = call i32 @ReadGro(ptr noundef %325)
  %327 = icmp ne i32 %326, 0
  br i1 %327, label %341, label %328

328:                                              ; preds = %324
  %329 = load ptr, ptr %13, align 8, !tbaa !11
  %330 = call i32 @ReadConnectionMap(ptr noundef %329)
  %331 = icmp ne i32 %330, 0
  br i1 %331, label %341, label %332

332:                                              ; preds = %328
  %333 = load ptr, ptr %14, align 8, !tbaa !11
  %334 = call i32 @ReadEnergyFile(ptr noundef %333, ptr noundef @energy)
  %335 = icmp ne i32 %334, 0
  br i1 %335, label %341, label %336

336:                                              ; preds = %332
  %337 = load ptr, ptr %15, align 8, !tbaa !11
  %338 = call i32 @ReadREMDTempFile(ptr noundef %337)
  %339 = sub nsw i32 %338, 1
  store i32 %339, ptr %1, align 4, !tbaa !18
  %340 = icmp slt i32 %339, 0
  br i1 %340, label %341, label %342

341:                                              ; preds = %336, %332, %328, %324
  br label %463

342:                                              ; preds = %336
  %343 = load double, ptr getelementptr inbounds (%struct.EnergyReadStr, ptr @energy, i32 0, i32 3), align 8, !tbaa !41
  store double %343, ptr %6, align 8, !tbaa !9
  %344 = load i64, ptr %3, align 8, !tbaa !5
  call void @PrintProcess(i64 noundef %344)
  %345 = load ptr, ptr @sectInfo, align 8, !tbaa !11
  %346 = load i32, ptr %24, align 4, !tbaa !18
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds %struct.SectionStr, ptr %345, i64 %347
  store ptr %348, ptr %10, align 8, !tbaa !11
  %349 = load i32, ptr @nRow, align 4, !tbaa !18
  %350 = load ptr, ptr @refCoor, align 8, !tbaa !11
  %351 = getelementptr inbounds ptr, ptr %350, i64 0
  %352 = load ptr, ptr %351, align 8, !tbaa !11
  %353 = load ptr, ptr @curCoor, align 8, !tbaa !11
  %354 = call double @CalRMSD(i32 noundef 3, i32 noundef %349, ptr noundef %352, ptr noundef %353)
  %355 = fdiv double %354, 1.000000e+01
  %356 = getelementptr inbounds [2 x double], ptr %5, i64 0, i64 0
  store double %355, ptr %356, align 16, !tbaa !9
  %357 = load i32, ptr @nRow, align 4, !tbaa !18
  %358 = load ptr, ptr @refCoor, align 8, !tbaa !11
  %359 = getelementptr inbounds ptr, ptr %358, i64 1
  %360 = load ptr, ptr %359, align 8, !tbaa !11
  %361 = load ptr, ptr @curCoor, align 8, !tbaa !11
  %362 = call double @CalRMSD(i32 noundef 3, i32 noundef %357, ptr noundef %360, ptr noundef %361)
  %363 = fdiv double %362, 1.000000e+01
  %364 = getelementptr inbounds [2 x double], ptr %5, i64 0, i64 1
  store double %363, ptr %364, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  store i32 0, ptr %25, align 4, !tbaa !18
  br label %365

365:                                              ; preds = %390, %342
  %366 = load i32, ptr %25, align 4, !tbaa !18
  %367 = icmp slt i32 %366, 20
  br i1 %367, label %369, label %368

368:                                              ; preds = %365
  store i32 26, ptr %18, align 4
  br label %393

369:                                              ; preds = %365
  %370 = getelementptr inbounds [2 x double], ptr %5, i64 0, i64 0
  %371 = load double, ptr %370, align 16, !tbaa !9
  %372 = load i32, ptr %25, align 4, !tbaa !18
  %373 = sitofp i32 %372 to double
  %374 = load double, ptr %7, align 8, !tbaa !9
  %375 = fmul double %373, %374
  %376 = fcmp ogt double %371, %375
  br i1 %376, label %377, label %389

377:                                              ; preds = %369
  %378 = getelementptr inbounds [2 x double], ptr %5, i64 0, i64 0
  %379 = load double, ptr %378, align 16, !tbaa !9
  %380 = load i32, ptr %25, align 4, !tbaa !18
  %381 = add nsw i32 %380, 1
  %382 = sitofp i32 %381 to double
  %383 = load double, ptr %7, align 8, !tbaa !9
  %384 = fmul double %382, %383
  %385 = fcmp ole double %379, %384
  br i1 %385, label %386, label %389

386:                                              ; preds = %377
  %387 = load i32, ptr %25, align 4, !tbaa !18
  %388 = getelementptr inbounds [2 x i32], ptr %2, i64 0, i64 0
  store i32 %387, ptr %388, align 4, !tbaa !18
  store i32 26, ptr %18, align 4
  br label %393

389:                                              ; preds = %377, %369
  br label %390

390:                                              ; preds = %389
  %391 = load i32, ptr %25, align 4, !tbaa !18
  %392 = add nsw i32 %391, 1
  store i32 %392, ptr %25, align 4, !tbaa !18
  br label %365, !llvm.loop !43

393:                                              ; preds = %386, %368
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %394

394:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  store i32 0, ptr %26, align 4, !tbaa !18
  br label %395

395:                                              ; preds = %420, %394
  %396 = load i32, ptr %26, align 4, !tbaa !18
  %397 = icmp slt i32 %396, 20
  br i1 %397, label %399, label %398

398:                                              ; preds = %395
  store i32 29, ptr %18, align 4
  br label %423

399:                                              ; preds = %395
  %400 = getelementptr inbounds [2 x double], ptr %5, i64 0, i64 1
  %401 = load double, ptr %400, align 8, !tbaa !9
  %402 = load i32, ptr %26, align 4, !tbaa !18
  %403 = sitofp i32 %402 to double
  %404 = load double, ptr %7, align 8, !tbaa !9
  %405 = fmul double %403, %404
  %406 = fcmp ogt double %401, %405
  br i1 %406, label %407, label %419

407:                                              ; preds = %399
  %408 = getelementptr inbounds [2 x double], ptr %5, i64 0, i64 1
  %409 = load double, ptr %408, align 8, !tbaa !9
  %410 = load i32, ptr %26, align 4, !tbaa !18
  %411 = add nsw i32 %410, 1
  %412 = sitofp i32 %411 to double
  %413 = load double, ptr %7, align 8, !tbaa !9
  %414 = fmul double %412, %413
  %415 = fcmp ole double %409, %414
  br i1 %415, label %416, label %419

416:                                              ; preds = %407
  %417 = load i32, ptr %26, align 4, !tbaa !18
  %418 = getelementptr inbounds [2 x i32], ptr %2, i64 0, i64 1
  store i32 %417, ptr %418, align 4, !tbaa !18
  store i32 29, ptr %18, align 4
  br label %423

419:                                              ; preds = %407, %399
  br label %420

420:                                              ; preds = %419
  %421 = load i32, ptr %26, align 4, !tbaa !18
  %422 = add nsw i32 %421, 1
  store i32 %422, ptr %26, align 4, !tbaa !18
  br label %395, !llvm.loop !44

423:                                              ; preds = %416, %398
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %424

424:                                              ; preds = %423
  %425 = load ptr, ptr %11, align 8, !tbaa !11
  %426 = load i32, ptr %1, align 4, !tbaa !18
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds ptr, ptr %425, i64 %427
  %429 = load ptr, ptr %428, align 8, !tbaa !11
  %430 = getelementptr inbounds [2 x i32], ptr %2, i64 0, i64 0
  %431 = load i32, ptr %430, align 4, !tbaa !18
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds ptr, ptr %429, i64 %432
  %434 = load ptr, ptr %433, align 8, !tbaa !11
  %435 = getelementptr inbounds [2 x i32], ptr %2, i64 0, i64 1
  %436 = load i32, ptr %435, align 4, !tbaa !18
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds %struct.PESurStr, ptr %434, i64 %437
  %439 = getelementptr inbounds %struct.PESurStr, ptr %438, i32 0, i32 0
  %440 = load i32, ptr %439, align 8, !tbaa !21
  %441 = add nsw i32 %440, 1
  store i32 %441, ptr %439, align 8, !tbaa !21
  %442 = load double, ptr %6, align 8, !tbaa !9
  %443 = load ptr, ptr %11, align 8, !tbaa !11
  %444 = load i32, ptr %1, align 4, !tbaa !18
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds ptr, ptr %443, i64 %445
  %447 = load ptr, ptr %446, align 8, !tbaa !11
  %448 = getelementptr inbounds [2 x i32], ptr %2, i64 0, i64 0
  %449 = load i32, ptr %448, align 4, !tbaa !18
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds ptr, ptr %447, i64 %450
  %452 = load ptr, ptr %451, align 8, !tbaa !11
  %453 = getelementptr inbounds [2 x i32], ptr %2, i64 0, i64 1
  %454 = load i32, ptr %453, align 4, !tbaa !18
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds %struct.PESurStr, ptr %452, i64 %455
  %457 = getelementptr inbounds %struct.PESurStr, ptr %456, i32 0, i32 1
  %458 = load double, ptr %457, align 8, !tbaa !23
  %459 = fadd double %458, %442
  store double %459, ptr %457, align 8, !tbaa !23
  br label %460

460:                                              ; preds = %424
  %461 = load i64, ptr %3, align 8, !tbaa !5
  %462 = add nsw i64 %461, 1
  store i64 %462, ptr %3, align 8, !tbaa !5
  br label %320, !llvm.loop !45

463:                                              ; preds = %341, %320
  %464 = load ptr, ptr %13, align 8, !tbaa !11
  %465 = call i32 @fclose(ptr noundef %464)
  br label %466

466:                                              ; preds = %463
  %467 = load i32, ptr %24, align 4, !tbaa !18
  %468 = add nsw i32 %467, 1
  store i32 %468, ptr %24, align 4, !tbaa !18
  br label %240, !llvm.loop !46

469:                                              ; preds = %249
  %470 = load ptr, ptr %12, align 8, !tbaa !11
  %471 = call i32 @fclose(ptr noundef %470)
  %472 = load ptr, ptr %14, align 8, !tbaa !11
  %473 = call i32 @fclose(ptr noundef %472)
  call void @FreeVar()
  br label %474

474:                                              ; preds = %469
  %475 = load i32, ptr %22, align 4, !tbaa !18
  %476 = add nsw i32 %475, 1
  store i32 %476, ptr %22, align 4, !tbaa !18
  br label %137, !llvm.loop !47

477:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  store i32 0, ptr %27, align 4, !tbaa !18
  br label %478

478:                                              ; preds = %603, %477
  %479 = load i32, ptr %27, align 4, !tbaa !18
  %480 = load i32, ptr getelementptr inbounds (%struct.REMDStr, ptr @RE, i32 0, i32 1), align 4, !tbaa !16
  %481 = icmp slt i32 %479, %480
  br i1 %481, label %483, label %482

482:                                              ; preds = %478
  store i32 32, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  br label %606

483:                                              ; preds = %478
  %484 = getelementptr inbounds [512 x i8], ptr %8, i64 0, i64 0
  %485 = load ptr, ptr @files, align 8, !tbaa !11
  %486 = getelementptr inbounds ptr, ptr %485, i64 18
  %487 = load ptr, ptr %486, align 8, !tbaa !11
  %488 = load i32, ptr %27, align 4, !tbaa !18
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds %struct.FileStr, ptr %487, i64 %489
  %491 = getelementptr inbounds %struct.FileStr, ptr %490, i32 0, i32 1
  %492 = getelementptr inbounds [256 x i8], ptr %491, i64 0, i64 0
  %493 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %484, ptr noundef @.str.3, ptr noundef @path, ptr noundef %492) #7
  %494 = getelementptr inbounds [512 x i8], ptr %8, i64 0, i64 0
  %495 = call noalias ptr @fopen(ptr noundef %494, ptr noundef @.str.4)
  store ptr %495, ptr %16, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  store i32 0, ptr %28, align 4, !tbaa !18
  br label %496

496:                                              ; preds = %597, %483
  %497 = load i32, ptr %28, align 4, !tbaa !18
  %498 = icmp slt i32 %497, 20
  br i1 %498, label %500, label %499

499:                                              ; preds = %496
  store i32 35, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %600

500:                                              ; preds = %496
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  store i32 0, ptr %29, align 4, !tbaa !18
  br label %501

501:                                              ; preds = %593, %500
  %502 = load i32, ptr %29, align 4, !tbaa !18
  %503 = icmp slt i32 %502, 20
  br i1 %503, label %505, label %504

504:                                              ; preds = %501
  store i32 38, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  br label %596

505:                                              ; preds = %501
  %506 = load ptr, ptr %11, align 8, !tbaa !11
  %507 = load i32, ptr %27, align 4, !tbaa !18
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds ptr, ptr %506, i64 %508
  %510 = load ptr, ptr %509, align 8, !tbaa !11
  %511 = load i32, ptr %28, align 4, !tbaa !18
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds ptr, ptr %510, i64 %512
  %514 = load ptr, ptr %513, align 8, !tbaa !11
  %515 = load i32, ptr %29, align 4, !tbaa !18
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds %struct.PESurStr, ptr %514, i64 %516
  %518 = getelementptr inbounds %struct.PESurStr, ptr %517, i32 0, i32 0
  %519 = load i32, ptr %518, align 8, !tbaa !21
  %520 = icmp ne i32 %519, 0
  br i1 %520, label %521, label %552

521:                                              ; preds = %505
  %522 = load ptr, ptr %11, align 8, !tbaa !11
  %523 = load i32, ptr %27, align 4, !tbaa !18
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds ptr, ptr %522, i64 %524
  %526 = load ptr, ptr %525, align 8, !tbaa !11
  %527 = load i32, ptr %28, align 4, !tbaa !18
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds ptr, ptr %526, i64 %528
  %530 = load ptr, ptr %529, align 8, !tbaa !11
  %531 = load i32, ptr %29, align 4, !tbaa !18
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds %struct.PESurStr, ptr %530, i64 %532
  %534 = getelementptr inbounds %struct.PESurStr, ptr %533, i32 0, i32 0
  %535 = load i32, ptr %534, align 8, !tbaa !21
  %536 = sitofp i32 %535 to double
  %537 = load ptr, ptr %11, align 8, !tbaa !11
  %538 = load i32, ptr %27, align 4, !tbaa !18
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds ptr, ptr %537, i64 %539
  %541 = load ptr, ptr %540, align 8, !tbaa !11
  %542 = load i32, ptr %28, align 4, !tbaa !18
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds ptr, ptr %541, i64 %543
  %545 = load ptr, ptr %544, align 8, !tbaa !11
  %546 = load i32, ptr %29, align 4, !tbaa !18
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds %struct.PESurStr, ptr %545, i64 %547
  %549 = getelementptr inbounds %struct.PESurStr, ptr %548, i32 0, i32 1
  %550 = load double, ptr %549, align 8, !tbaa !23
  %551 = fdiv double %550, %536
  store double %551, ptr %549, align 8, !tbaa !23
  br label %552

552:                                              ; preds = %521, %505
  %553 = load ptr, ptr %16, align 8, !tbaa !11
  %554 = load i32, ptr %28, align 4, !tbaa !18
  %555 = sitofp i32 %554 to double
  %556 = fadd double %555, 5.000000e-01
  %557 = load double, ptr %7, align 8, !tbaa !9
  %558 = fmul double %556, %557
  %559 = load i32, ptr %29, align 4, !tbaa !18
  %560 = sitofp i32 %559 to double
  %561 = fadd double %560, 5.000000e-01
  %562 = load double, ptr %7, align 8, !tbaa !9
  %563 = fmul double %561, %562
  %564 = load ptr, ptr %11, align 8, !tbaa !11
  %565 = load i32, ptr %27, align 4, !tbaa !18
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds ptr, ptr %564, i64 %566
  %568 = load ptr, ptr %567, align 8, !tbaa !11
  %569 = load i32, ptr %28, align 4, !tbaa !18
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds ptr, ptr %568, i64 %570
  %572 = load ptr, ptr %571, align 8, !tbaa !11
  %573 = load i32, ptr %29, align 4, !tbaa !18
  %574 = sext i32 %573 to i64
  %575 = getelementptr inbounds %struct.PESurStr, ptr %572, i64 %574
  %576 = getelementptr inbounds %struct.PESurStr, ptr %575, i32 0, i32 1
  %577 = load double, ptr %576, align 8, !tbaa !23
  %578 = load ptr, ptr %11, align 8, !tbaa !11
  %579 = load i32, ptr %27, align 4, !tbaa !18
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds ptr, ptr %578, i64 %580
  %582 = load ptr, ptr %581, align 8, !tbaa !11
  %583 = load i32, ptr %28, align 4, !tbaa !18
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds ptr, ptr %582, i64 %584
  %586 = load ptr, ptr %585, align 8, !tbaa !11
  %587 = load i32, ptr %29, align 4, !tbaa !18
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds %struct.PESurStr, ptr %586, i64 %588
  %590 = getelementptr inbounds %struct.PESurStr, ptr %589, i32 0, i32 0
  %591 = load i32, ptr %590, align 8, !tbaa !21
  %592 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %553, ptr noundef @.str.20, double noundef %558, double noundef %563, double noundef %577, i32 noundef %591) #7
  br label %593

593:                                              ; preds = %552
  %594 = load i32, ptr %29, align 4, !tbaa !18
  %595 = add nsw i32 %594, 1
  store i32 %595, ptr %29, align 4, !tbaa !18
  br label %501, !llvm.loop !48

596:                                              ; preds = %504
  br label %597

597:                                              ; preds = %596
  %598 = load i32, ptr %28, align 4, !tbaa !18
  %599 = add nsw i32 %598, 1
  store i32 %599, ptr %28, align 4, !tbaa !18
  br label %496, !llvm.loop !49

600:                                              ; preds = %499
  %601 = load ptr, ptr %16, align 8, !tbaa !11
  %602 = call i32 @fclose(ptr noundef %601)
  br label %603

603:                                              ; preds = %600
  %604 = load i32, ptr %27, align 4, !tbaa !18
  %605 = add nsw i32 %604, 1
  store i32 %605, ptr %27, align 4, !tbaa !18
  br label %478, !llvm.loop !50

606:                                              ; preds = %482
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  store i32 0, ptr %30, align 4, !tbaa !18
  br label %607

607:                                              ; preds = %625, %606
  %608 = load i32, ptr %30, align 4, !tbaa !18
  %609 = load i32, ptr getelementptr inbounds (%struct.REMDStr, ptr @RE, i32 0, i32 1), align 4, !tbaa !16
  %610 = icmp slt i32 %608, %609
  br i1 %610, label %612, label %611

611:                                              ; preds = %607
  store i32 41, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  br label %628

612:                                              ; preds = %607
  %613 = load ptr, ptr %11, align 8, !tbaa !11
  %614 = load i32, ptr %30, align 4, !tbaa !18
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds ptr, ptr %613, i64 %615
  %617 = load ptr, ptr %616, align 8, !tbaa !11
  %618 = getelementptr inbounds ptr, ptr %617, i64 0
  %619 = load ptr, ptr %618, align 8, !tbaa !11
  call void @free(ptr noundef %619) #7
  %620 = load ptr, ptr %11, align 8, !tbaa !11
  %621 = load i32, ptr %30, align 4, !tbaa !18
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds ptr, ptr %620, i64 %622
  %624 = load ptr, ptr %623, align 8, !tbaa !11
  call void @free(ptr noundef %624) #7
  br label %625

625:                                              ; preds = %612
  %626 = load i32, ptr %30, align 4, !tbaa !18
  %627 = add nsw i32 %626, 1
  store i32 %627, ptr %30, align 4, !tbaa !18
  br label %607, !llvm.loop !51

628:                                              ; preds = %611
  %629 = load ptr, ptr %11, align 8, !tbaa !11
  call void @free(ptr noundef %629) #7
  %630 = call i32 (ptr, ...) @printf(ptr noundef @.str.14)
  %631 = load ptr, ptr @stdout, align 8, !tbaa !11
  %632 = call i32 @fflush(ptr noundef %631)
  store i32 1, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 512, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 512, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %2) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1) #7
  ret void
}

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

declare i32 @ReadREMDTempFile(ptr noundef) #1

; Function Attrs: nounwind
declare void @free(ptr noundef) #4

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #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 = { 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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { 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 #7 = { nounwind }
attributes #8 = { noreturn nounwind }
attributes #9 = { 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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!14, !15, i64 0}
!14 = !{!"FileListStr", !15, i64 0, !7, i64 4}
!15 = !{!"int", !7, i64 0}
!16 = !{!17, !15, i64 4}
!17 = !{!"REMDStr", !15, i64 0, !15, i64 4}
!18 = !{!15, !15, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!22, !15, i64 0}
!22 = !{!"PESurStr", !15, i64 0, !10, i64 8}
!23 = !{!22, !10, i64 8}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20}
!26 = distinct !{!26, !20}
!27 = distinct !{!27, !20}
!28 = !{!29, !6, i64 0}
!29 = !{!"SectionStr", !6, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !7, i64 40, !30, i64 64, !32, i64 120, !33, i64 208, !34, i64 240, !35, i64 288}
!30 = !{!"WallStr", !7, i64 0, !7, i64 20, !31, i64 40}
!31 = !{!"AtomStr", !12, i64 0, !12, i64 8}
!32 = !{!"DynamicWallStr", !7, i64 0, !15, i64 16, !15, i64 20, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !7, i64 56}
!33 = !{!"ObstructionStr", !15, i64 0, !15, i64 4, !12, i64 8, !12, i64 16, !12, i64 24}
!34 = !{!"TunnelStr", !15, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !31, i64 32}
!35 = !{!"FlowStr", !15, i64 0, !36, i64 8, !37, i64 40, !38, i64 88}
!36 = !{!"ConstVStr", !7, i64 0}
!37 = !{!"ForceStr", !7, i64 0, !12, i64 32, !12, i64 40}
!38 = !{!"ChargeStr", !15, i64 0, !15, i64 4, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32}
!39 = !{!29, !10, i64 8}
!40 = !{!29, !10, i64 32}
!41 = !{!42, !10, i64 24}
!42 = !{!"EnergyReadStr", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!43 = distinct !{!43, !20}
!44 = distinct !{!44, !20}
!45 = distinct !{!45, !20}
!46 = distinct !{!46, !20}
!47 = distinct !{!47, !20}
!48 = distinct !{!48, !20}
!49 = distinct !{!49, !20}
!50 = distinct !{!50, !20}
!51 = distinct !{!51, !20}


; 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.FileListStr = type { i32, [128 x [64 x i8]] }
%struct.EnergyReadStr = type { double, double, double, double, double, double }
%struct.REMDStr = type { i32, i32 }
%struct.FileStr = type { i32, [256 x i8] }
%struct.SectionStr = type { i64, double, double, double, double, [20 x i8], %struct.WallStr, %struct.DynamicWallStr, %struct.ObstructionStr, %struct.TunnelStr, %struct.FlowStr }
%struct.WallStr = type { [20 x i8], [20 x i8], %struct.AtomStr }
%struct.AtomStr = type { ptr, ptr }
%struct.DynamicWallStr = type { [16 x i8], i32, i32, double, double, double, double, [4 x double] }
%struct.ObstructionStr = type { i32, i32, ptr, ptr, ptr }
%struct.TunnelStr = type { i32, double, double, double, %struct.AtomStr }
%struct.FlowStr = type { i32, %struct.ConstVStr, %struct.ForceStr, %struct.ChargeStr }
%struct.ConstVStr = type { [4 x double] }
%struct.ForceStr = type { [4 x double], ptr, ptr }
%struct.ChargeStr = type { i32, i32, ptr, ptr, ptr, ptr }
%struct.PESurStr = type { i32, double }

@stdout = external local_unnamed_addr global ptr, align 8
@RMSDFile = external global %struct.FileListStr, align 4
@.str.2 = external hidden unnamed_addr constant [66 x i8], align 1
@nRow = external hidden local_unnamed_addr global i32, align 4
@refCoor = external hidden local_unnamed_addr global ptr, align 8
@.str.3 = 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.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [116 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [79 x i8], align 1
@fileList = external local_unnamed_addr global ptr, align 8
@sectInfo = external local_unnamed_addr global ptr, align 8
@curCoor = external hidden local_unnamed_addr global ptr, align 8
@.str.14 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [105 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [88 x i8], align 1
@energy = external global %struct.EnergyReadStr, align 8
@.str.20 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [55 x i8], align 1
@RE = external local_unnamed_addr global %struct.REMDStr, align 4

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

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

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

; Function Attrs: nounwind uwtable
declare hidden void @InitializeVariables() local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare hidden void @ReadRef(ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

declare i32 @ReadGro(ptr noundef) local_unnamed_addr #4

declare void @PrintProcess(i64 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare hidden double @CalRMSD(i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare hidden void @FreeVar() local_unnamed_addr #2

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

declare void @FindTargetFile(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @ReadConnectionMap(ptr noundef) local_unnamed_addr #4

declare i32 @ReadEnergyFile(ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
define dso_local void @PESurfaceInfoPerT() local_unnamed_addr #2 {
  %1 = alloca [512 x i8], align 16
  %2 = alloca [512 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %1) #8
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %2) #8
  %3 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21)
  %4 = load ptr, ptr @stdout, align 8, !tbaa !5
  %5 = tail call i32 @fflush(ptr noundef %4)
  %6 = load i32, ptr @RMSDFile, align 4, !tbaa !9
  %7 = icmp eq i32 %6, 1
  br i1 %7, label %8, label %11

8:                                                ; preds = %0
  %9 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16)
  %10 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, ptr noundef nonnull @.str.2, i32 noundef 261)
  tail call void @exit(i32 noundef 1) #9
  unreachable

11:                                               ; preds = %0
  %12 = load i32, ptr getelementptr inbounds (i8, ptr @RE, i64 4), align 4, !tbaa !12
  %13 = sext i32 %12 to i64
  %14 = tail call noalias ptr @calloc(i64 noundef %13, i64 noundef 8) #10
  %15 = icmp sgt i32 %12, 0
  br i1 %15, label %.lr.ph.preheader, label %._crit_edge208

.lr.ph.preheader:                                 ; preds = %11
  %wide.trip.count = zext nneg i32 %12 to i64
  br label %.lr.ph

.preheader156:                                    ; preds = %98
  br i1 %15, label %.lr.ph201, label %._crit_edge208

.lr.ph201:                                        ; preds = %.preheader156
  %invariant.gep = getelementptr i8, ptr %14, i64 -8
  br label %100

.lr.ph:                                           ; preds = %.lr.ph.preheader, %98
  %indvars.iv216 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next217, %98 ]
  %16 = tail call noalias dereferenceable_or_null(160) ptr @calloc(i64 noundef 20, i64 noundef 8) #10
  %17 = getelementptr inbounds ptr, ptr %14, i64 %indvars.iv216
  store ptr %16, ptr %17, align 8, !tbaa !5
  %18 = tail call noalias dereferenceable_or_null(6400) ptr @calloc(i64 noundef 400, i64 noundef 16) #10
  store ptr %18, ptr %16, align 8, !tbaa !5
  %19 = getelementptr inbounds i8, ptr %18, i64 320
  %20 = getelementptr inbounds i8, ptr %16, i64 8
  store ptr %19, ptr %20, align 8, !tbaa !5
  %21 = getelementptr inbounds i8, ptr %18, i64 640
  %22 = getelementptr inbounds i8, ptr %16, i64 16
  store ptr %21, ptr %22, align 8, !tbaa !5
  %23 = getelementptr inbounds i8, ptr %18, i64 960
  %24 = getelementptr inbounds i8, ptr %16, i64 24
  store ptr %23, ptr %24, align 8, !tbaa !5
  %25 = getelementptr inbounds i8, ptr %18, i64 1280
  %26 = getelementptr inbounds i8, ptr %16, i64 32
  store ptr %25, ptr %26, align 8, !tbaa !5
  %27 = getelementptr inbounds i8, ptr %18, i64 1600
  %28 = getelementptr inbounds i8, ptr %16, i64 40
  store ptr %27, ptr %28, align 8, !tbaa !5
  %29 = getelementptr inbounds i8, ptr %18, i64 1920
  %30 = getelementptr inbounds i8, ptr %16, i64 48
  store ptr %29, ptr %30, align 8, !tbaa !5
  %31 = getelementptr inbounds i8, ptr %18, i64 2240
  %32 = getelementptr inbounds i8, ptr %16, i64 56
  store ptr %31, ptr %32, align 8, !tbaa !5
  %33 = getelementptr inbounds i8, ptr %18, i64 2560
  %34 = getelementptr inbounds i8, ptr %16, i64 64
  store ptr %33, ptr %34, align 8, !tbaa !5
  %35 = getelementptr inbounds i8, ptr %18, i64 2880
  %36 = getelementptr inbounds i8, ptr %16, i64 72
  store ptr %35, ptr %36, align 8, !tbaa !5
  %37 = getelementptr inbounds i8, ptr %18, i64 3200
  %38 = getelementptr inbounds i8, ptr %16, i64 80
  store ptr %37, ptr %38, align 8, !tbaa !5
  %39 = getelementptr inbounds i8, ptr %18, i64 3520
  %40 = getelementptr inbounds i8, ptr %16, i64 88
  store ptr %39, ptr %40, align 8, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %18, i64 3840
  %42 = getelementptr inbounds i8, ptr %16, i64 96
  store ptr %41, ptr %42, align 8, !tbaa !5
  %43 = getelementptr inbounds i8, ptr %18, i64 4160
  %44 = getelementptr inbounds i8, ptr %16, i64 104
  store ptr %43, ptr %44, align 8, !tbaa !5
  %45 = getelementptr inbounds i8, ptr %18, i64 4480
  %46 = getelementptr inbounds i8, ptr %16, i64 112
  store ptr %45, ptr %46, align 8, !tbaa !5
  %47 = getelementptr inbounds i8, ptr %18, i64 4800
  %48 = getelementptr inbounds i8, ptr %16, i64 120
  store ptr %47, ptr %48, align 8, !tbaa !5
  %49 = getelementptr inbounds i8, ptr %18, i64 5120
  %50 = getelementptr inbounds i8, ptr %16, i64 128
  store ptr %49, ptr %50, align 8, !tbaa !5
  %51 = getelementptr inbounds i8, ptr %18, i64 5440
  %52 = getelementptr inbounds i8, ptr %16, i64 136
  store ptr %51, ptr %52, align 8, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %18, i64 5760
  %54 = getelementptr inbounds i8, ptr %16, i64 144
  store ptr %53, ptr %54, align 8, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %18, i64 6080
  %56 = getelementptr inbounds i8, ptr %16, i64 152
  store ptr %55, ptr %56, align 8, !tbaa !5
  br label %.preheader157

.preheader157:                                    ; preds = %.lr.ph, %.preheader157
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %.preheader157 ]
  %57 = getelementptr inbounds ptr, ptr %16, i64 %indvars.iv
  %58 = load ptr, ptr %57, align 8, !tbaa !5
  store i32 0, ptr %58, align 8, !tbaa !14
  %59 = getelementptr inbounds i8, ptr %58, i64 8
  store double 0.000000e+00, ptr %59, align 8, !tbaa !17
  %60 = getelementptr inbounds i8, ptr %58, i64 16
  store i32 0, ptr %60, align 8, !tbaa !14
  %61 = getelementptr inbounds i8, ptr %58, i64 24
  store double 0.000000e+00, ptr %61, align 8, !tbaa !17
  %62 = getelementptr inbounds i8, ptr %58, i64 32
  store i32 0, ptr %62, align 8, !tbaa !14
  %63 = getelementptr inbounds i8, ptr %58, i64 40
  store double 0.000000e+00, ptr %63, align 8, !tbaa !17
  %64 = getelementptr inbounds i8, ptr %58, i64 48
  store i32 0, ptr %64, align 8, !tbaa !14
  %65 = getelementptr inbounds i8, ptr %58, i64 56
  store double 0.000000e+00, ptr %65, align 8, !tbaa !17
  %66 = getelementptr inbounds i8, ptr %58, i64 64
  store i32 0, ptr %66, align 8, !tbaa !14
  %67 = getelementptr inbounds i8, ptr %58, i64 72
  store double 0.000000e+00, ptr %67, align 8, !tbaa !17
  %68 = getelementptr inbounds i8, ptr %58, i64 80
  store i32 0, ptr %68, align 8, !tbaa !14
  %69 = getelementptr inbounds i8, ptr %58, i64 88
  store double 0.000000e+00, ptr %69, align 8, !tbaa !17
  %70 = getelementptr inbounds i8, ptr %58, i64 96
  store i32 0, ptr %70, align 8, !tbaa !14
  %71 = getelementptr inbounds i8, ptr %58, i64 104
  store double 0.000000e+00, ptr %71, align 8, !tbaa !17
  %72 = getelementptr inbounds i8, ptr %58, i64 112
  store i32 0, ptr %72, align 8, !tbaa !14
  %73 = getelementptr inbounds i8, ptr %58, i64 120
  store double 0.000000e+00, ptr %73, align 8, !tbaa !17
  %74 = getelementptr inbounds i8, ptr %58, i64 128
  store i32 0, ptr %74, align 8, !tbaa !14
  %75 = getelementptr inbounds i8, ptr %58, i64 136
  store double 0.000000e+00, ptr %75, align 8, !tbaa !17
  %76 = getelementptr inbounds i8, ptr %58, i64 144
  store i32 0, ptr %76, align 8, !tbaa !14
  %77 = getelementptr inbounds i8, ptr %58, i64 152
  store double 0.000000e+00, ptr %77, align 8, !tbaa !17
  %78 = getelementptr inbounds i8, ptr %58, i64 160
  store i32 0, ptr %78, align 8, !tbaa !14
  %79 = getelementptr inbounds i8, ptr %58, i64 168
  store double 0.000000e+00, ptr %79, align 8, !tbaa !17
  %80 = getelementptr inbounds i8, ptr %58, i64 176
  store i32 0, ptr %80, align 8, !tbaa !14
  %81 = getelementptr inbounds i8, ptr %58, i64 184
  store double 0.000000e+00, ptr %81, align 8, !tbaa !17
  %82 = getelementptr inbounds i8, ptr %58, i64 192
  store i32 0, ptr %82, align 8, !tbaa !14
  %83 = getelementptr inbounds i8, ptr %58, i64 200
  store double 0.000000e+00, ptr %83, align 8, !tbaa !17
  %84 = getelementptr inbounds i8, ptr %58, i64 208
  store i32 0, ptr %84, align 8, !tbaa !14
  %85 = getelementptr inbounds i8, ptr %58, i64 216
  store double 0.000000e+00, ptr %85, align 8, !tbaa !17
  %86 = getelementptr inbounds i8, ptr %58, i64 224
  store i32 0, ptr %86, align 8, !tbaa !14
  %87 = getelementptr inbounds i8, ptr %58, i64 232
  store double 0.000000e+00, ptr %87, align 8, !tbaa !17
  %88 = getelementptr inbounds i8, ptr %58, i64 240
  store i32 0, ptr %88, align 8, !tbaa !14
  %89 = getelementptr inbounds i8, ptr %58, i64 248
  store double 0.000000e+00, ptr %89, align 8, !tbaa !17
  %90 = getelementptr inbounds i8, ptr %58, i64 256
  store i32 0, ptr %90, align 8, !tbaa !14
  %91 = getelementptr inbounds i8, ptr %58, i64 264
  store double 0.000000e+00, ptr %91, align 8, !tbaa !17
  %92 = getelementptr inbounds i8, ptr %58, i64 272
  store i32 0, ptr %92, align 8, !tbaa !14
  %93 = getelementptr inbounds i8, ptr %58, i64 280
  store double 0.000000e+00, ptr %93, align 8, !tbaa !17
  %94 = getelementptr inbounds i8, ptr %58, i64 288
  store i32 0, ptr %94, align 8, !tbaa !14
  %95 = getelementptr inbounds i8, ptr %58, i64 296
  store double 0.000000e+00, ptr %95, align 8, !tbaa !17
  %96 = getelementptr inbounds i8, ptr %58, i64 304
  store i32 0, ptr %96, align 8, !tbaa !14
  %97 = getelementptr inbounds i8, ptr %58, i64 312
  store double 0.000000e+00, ptr %97, align 8, !tbaa !17
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 20
  br i1 %exitcond.not, label %98, label %.preheader157, !llvm.loop !18

98:                                               ; preds = %.preheader157
  %indvars.iv.next217 = add nuw nsw i64 %indvars.iv216, 1
  %exitcond219.not = icmp eq i64 %indvars.iv.next217, %wide.trip.count
  br i1 %exitcond219.not, label %.preheader156, label %.lr.ph, !llvm.loop !20

.preheader154:                                    ; preds = %._crit_edge195
  %99 = icmp sgt i32 %158, 0
  br i1 %99, label %.lr.ph205, label %._crit_edge208

100:                                              ; preds = %.lr.ph201, %._crit_edge195
  %indvars.iv229 = phi i64 [ 0, %.lr.ph201 ], [ %indvars.iv.next230, %._crit_edge195 ]
  %.sroa.5125.0199 = phi i32 [ undef, %.lr.ph201 ], [ %.sroa.5125.1.lcssa, %._crit_edge195 ]
  %.sroa.0123.0198 = phi i32 [ undef, %.lr.ph201 ], [ %.sroa.0123.1.lcssa, %._crit_edge195 ]
  call void @InitializeVariables()
  %101 = load i32, ptr @RMSDFile, align 4, !tbaa !9
  %102 = icmp sgt i32 %101, 0
  br i1 %102, label %.lr.ph169, label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph169, %100
  %103 = load ptr, ptr @files, align 8, !tbaa !5
  %104 = getelementptr inbounds i8, ptr %103, i64 64
  %105 = load ptr, ptr %104, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.FileStr, ptr %105, i64 %indvars.iv229, i32 1
  %107 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %1, ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef nonnull @path, ptr noundef nonnull %106) #8
  %108 = call noalias ptr @fopen(ptr noundef nonnull %1, ptr noundef nonnull @.str.8)
  %109 = icmp eq ptr %108, null
  %110 = load ptr, ptr @files, align 8, !tbaa !5
  br i1 %109, label %119, label %125

.lr.ph169:                                        ; preds = %100, %.lr.ph169
  %indvars.iv220 = phi i64 [ %indvars.iv.next221, %.lr.ph169 ], [ 0, %100 ]
  %111 = getelementptr inbounds [128 x [64 x i8]], ptr getelementptr inbounds (i8, ptr @RMSDFile, i64 4), i64 0, i64 %indvars.iv220
  %112 = load i32, ptr @nRow, align 4, !tbaa !21
  %113 = load ptr, ptr @refCoor, align 8, !tbaa !5
  %114 = getelementptr inbounds ptr, ptr %113, i64 %indvars.iv220
  %115 = load ptr, ptr %114, align 8, !tbaa !5
  call void @ReadRef(ptr noundef nonnull %111, i32 noundef 3, i32 noundef %112, ptr noundef %115)
  %indvars.iv.next221 = add nuw nsw i64 %indvars.iv220, 1
  %116 = load i32, ptr @RMSDFile, align 4, !tbaa !9
  %117 = sext i32 %116 to i64
  %118 = icmp slt i64 %indvars.iv.next221, %117
  br i1 %118, label %.lr.ph169, label %._crit_edge, !llvm.loop !22

119:                                              ; preds = %._crit_edge
  %120 = getelementptr inbounds i8, ptr %110, i64 64
  %121 = load ptr, ptr %120, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.FileStr, ptr %121, i64 %indvars.iv229, i32 1
  %123 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, ptr noundef nonnull %122, ptr noundef nonnull @path, ptr noundef nonnull @.str.2, i32 noundef 291)
  %124 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  call void @exit(i32 noundef 1) #9
  unreachable

125:                                              ; preds = %._crit_edge
  %126 = getelementptr inbounds i8, ptr %110, i64 72
  %127 = load ptr, ptr %126, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.FileStr, ptr %127, i64 %indvars.iv229, i32 1
  %129 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %1, ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef nonnull @path, ptr noundef nonnull %128) #8
  %130 = call noalias ptr @fopen(ptr noundef nonnull %1, ptr noundef nonnull @.str.8)
  %131 = icmp eq ptr %130, null
  %132 = load ptr, ptr @files, align 8, !tbaa !5
  br i1 %131, label %133, label %139

133:                                              ; preds = %125
  %134 = getelementptr inbounds i8, ptr %132, i64 72
  %135 = load ptr, ptr %134, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.FileStr, ptr %135, i64 %indvars.iv229, i32 1
  %137 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, ptr noundef nonnull %136, ptr noundef nonnull @path, ptr noundef nonnull @.str.2, i32 noundef 299)
  %138 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18)
  call void @exit(i32 noundef 1) #9
  unreachable

139:                                              ; preds = %125
  %140 = getelementptr inbounds i8, ptr %132, i64 56
  %141 = load ptr, ptr %140, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.FileStr, ptr %141, i64 %indvars.iv229, i32 1
  %143 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %1, ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef nonnull @path, ptr noundef nonnull %142) #8
  %144 = call noalias ptr @fopen(ptr noundef nonnull %1, ptr noundef nonnull @.str.8)
  %145 = icmp eq ptr %144, null
  br i1 %145, label %150, label %.preheader155

.preheader155:                                    ; preds = %139
  %146 = load ptr, ptr @fileList, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.FileListStr, ptr %146, i64 %indvars.iv229
  %148 = load i32, ptr %147, align 4, !tbaa !9
  %149 = icmp sgt i32 %148, 0
  br i1 %149, label %.lr.ph194, label %._crit_edge195

150:                                              ; preds = %139
  %151 = load ptr, ptr @files, align 8, !tbaa !5
  %152 = getelementptr inbounds i8, ptr %151, i64 56
  %153 = load ptr, ptr %152, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.FileStr, ptr %153, i64 %indvars.iv229, i32 1
  %155 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, ptr noundef nonnull %154, ptr noundef nonnull @path, ptr noundef nonnull @.str.2, i32 noundef 307)
  call void @exit(i32 noundef 1) #9
  unreachable

._crit_edge195:                                   ; preds = %._crit_edge177, %.preheader155
  %.sroa.0123.1.lcssa = phi i32 [ %.sroa.0123.0198, %.preheader155 ], [ %.sroa.0123.2.lcssa, %._crit_edge177 ]
  %.sroa.5125.1.lcssa = phi i32 [ %.sroa.5125.0199, %.preheader155 ], [ %.sroa.5125.2.lcssa, %._crit_edge177 ]
  %156 = call i32 @fclose(ptr noundef nonnull %108)
  %157 = call i32 @fclose(ptr noundef nonnull %130)
  call void @FreeVar()
  %indvars.iv.next230 = add nuw nsw i64 %indvars.iv229, 1
  %158 = load i32, ptr getelementptr inbounds (i8, ptr @RE, i64 4), align 4, !tbaa !12
  %159 = sext i32 %158 to i64
  %160 = icmp slt i64 %indvars.iv.next230, %159
  br i1 %160, label %100, label %.preheader154, !llvm.loop !23

.lr.ph194:                                        ; preds = %.preheader155, %._crit_edge177
  %indvars.iv226 = phi i64 [ %indvars.iv.next227, %._crit_edge177 ], [ 0, %.preheader155 ]
  %161 = phi ptr [ %346, %._crit_edge177 ], [ %146, %.preheader155 ]
  %.sroa.5125.1192 = phi i32 [ %.sroa.5125.2.lcssa, %._crit_edge177 ], [ %.sroa.5125.0199, %.preheader155 ]
  %.sroa.0123.1191 = phi i32 [ %.sroa.0123.2.lcssa, %._crit_edge177 ], [ %.sroa.0123.0198, %.preheader155 ]
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(512) %2, i8 0, i64 512, i1 false)
  %162 = load ptr, ptr @files, align 8, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %162, i64 40
  %164 = load ptr, ptr %163, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.FileStr, ptr %164, i64 %indvars.iv229, i32 1
  %indvars.iv.next227 = add nuw nsw i64 %indvars.iv226, 1
  %166 = getelementptr inbounds %struct.FileListStr, ptr %161, i64 %indvars.iv229, i32 1, i64 %indvars.iv.next227
  call void @FindTargetFile(ptr noundef nonnull %165, ptr noundef nonnull %166, ptr noundef nonnull %2) #8
  %167 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %1, ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef nonnull @path, ptr noundef nonnull %2) #8
  %168 = call noalias ptr @fopen(ptr noundef nonnull %1, ptr noundef nonnull @.str.8)
  %169 = icmp eq ptr %168, null
  br i1 %169, label %170, label %173

170:                                              ; preds = %.lr.ph194
  %171 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, ptr noundef nonnull %2, ptr noundef nonnull @path, ptr noundef nonnull @.str.2, i32 noundef 319)
  %172 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19)
  call void @exit(i32 noundef 1) #9
  unreachable

173:                                              ; preds = %.lr.ph194
  %174 = load ptr, ptr @sectInfo, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.SectionStr, ptr %174, i64 %indvars.iv226
  %176 = load i64, ptr %175, align 8, !tbaa !24
  %177 = sitofp i64 %176 to double
  %178 = getelementptr inbounds i8, ptr %175, i64 8
  %179 = load double, ptr %178, align 8, !tbaa !36
  %180 = fadd double %179, %177
  %181 = getelementptr inbounds i8, ptr %175, i64 32
  %182 = load double, ptr %181, align 8, !tbaa !37
  %183 = fdiv double %180, %182
  %184 = fadd double %183, 1.000000e+00
  %185 = fptosi double %184 to i64
  %186 = fdiv double %179, %182
  %187 = fptosi double %186 to i64
  %188 = icmp slt i64 %187, %185
  br i1 %188, label %.lr.ph176, label %._crit_edge177

.lr.ph176:                                        ; preds = %173, %331
  %.sroa.5125.2174 = phi i32 [ %.sroa.5125.3, %331 ], [ %.sroa.5125.1192, %173 ]
  %.sroa.0123.2173 = phi i32 [ %.sroa.0123.3, %331 ], [ %.sroa.0123.1191, %173 ]
  %.0141172 = phi i64 [ %344, %331 ], [ %187, %173 ]
  %189 = call i32 @ReadGro(ptr noundef nonnull %108) #8
  %.not150 = icmp eq i32 %189, 0
  br i1 %.not150, label %190, label %._crit_edge177

190:                                              ; preds = %.lr.ph176
  %191 = call i32 @ReadConnectionMap(ptr noundef nonnull %168) #8
  %.not151 = icmp eq i32 %191, 0
  br i1 %.not151, label %192, label %._crit_edge177

192:                                              ; preds = %190
  %193 = call i32 @ReadEnergyFile(ptr noundef nonnull %130, ptr noundef nonnull @energy) #8
  %.not152 = icmp eq i32 %193, 0
  br i1 %.not152, label %194, label %._crit_edge177

194:                                              ; preds = %192
  %195 = call i32 @ReadREMDTempFile(ptr noundef nonnull %144) #8
  %196 = icmp slt i32 %195, 1
  br i1 %196, label %._crit_edge177, label %197

197:                                              ; preds = %194
  %198 = load double, ptr getelementptr inbounds (i8, ptr @energy, i64 24), align 8, !tbaa !38
  call void @PrintProcess(i64 noundef %.0141172) #8
  %199 = load i32, ptr @nRow, align 4, !tbaa !21
  %200 = load ptr, ptr @refCoor, align 8, !tbaa !5
  %201 = load ptr, ptr %200, align 8, !tbaa !5
  %202 = load ptr, ptr @curCoor, align 8, !tbaa !5
  %203 = call double @CalRMSD(i32 noundef 3, i32 noundef %199, ptr noundef %201, ptr noundef %202)
  %204 = fdiv double %203, 1.000000e+01
  %205 = load i32, ptr @nRow, align 4, !tbaa !21
  %206 = load ptr, ptr @refCoor, align 8, !tbaa !5
  %207 = getelementptr inbounds i8, ptr %206, i64 8
  %208 = load ptr, ptr %207, align 8, !tbaa !5
  %209 = load ptr, ptr @curCoor, align 8, !tbaa !5
  %210 = call double @CalRMSD(i32 noundef 3, i32 noundef %205, ptr noundef %208, ptr noundef %209)
  %211 = fdiv double %210, 1.000000e+01
  %212 = fcmp ule double %204, 0.000000e+00
  %213 = fcmp ugt double %204, 5.000000e-02
  %or.cond = or i1 %212, %213
  br i1 %or.cond, label %214, label %271

214:                                              ; preds = %197
  %215 = fcmp ule double %204, 5.000000e-02
  %216 = fcmp ugt double %204, 1.000000e-01
  %or.cond252 = or i1 %215, %216
  br i1 %or.cond252, label %217, label %271

217:                                              ; preds = %214
  %218 = fcmp ule double %204, 1.000000e-01
  %219 = fcmp ugt double %204, 0x3FC3333333333334
  %or.cond253 = or i1 %218, %219
  br i1 %or.cond253, label %220, label %271

220:                                              ; preds = %217
  %221 = fcmp ule double %204, 0x3FC3333333333334
  %222 = fcmp ugt double %204, 2.000000e-01
  %or.cond254 = or i1 %221, %222
  br i1 %or.cond254, label %223, label %271

223:                                              ; preds = %220
  %224 = fcmp ule double %204, 2.000000e-01
  %225 = fcmp ugt double %204, 2.500000e-01
  %or.cond255 = or i1 %224, %225
  br i1 %or.cond255, label %226, label %271

226:                                              ; preds = %223
  %227 = fcmp ule double %204, 2.500000e-01
  %228 = fcmp ugt double %204, 0x3FD3333333333334
  %or.cond256 = or i1 %227, %228
  br i1 %or.cond256, label %229, label %271

229:                                              ; preds = %226
  %230 = fcmp ule double %204, 0x3FD3333333333334
  %231 = fcmp ugt double %204, 0x3FD6666666666667
  %or.cond257 = or i1 %230, %231
  br i1 %or.cond257, label %232, label %271

232:                                              ; preds = %229
  %233 = fcmp ule double %204, 0x3FD6666666666667
  %234 = fcmp ugt double %204, 4.000000e-01
  %or.cond258 = or i1 %233, %234
  br i1 %or.cond258, label %235, label %271

235:                                              ; preds = %232
  %236 = fcmp ule double %204, 4.000000e-01
  %237 = fcmp ugt double %204, 4.500000e-01
  %or.cond259 = or i1 %236, %237
  br i1 %or.cond259, label %238, label %271

238:                                              ; preds = %235
  %239 = fcmp ule double %204, 4.500000e-01
  %240 = fcmp ugt double %204, 5.000000e-01
  %or.cond260 = or i1 %239, %240
  br i1 %or.cond260, label %241, label %271

241:                                              ; preds = %238
  %242 = fcmp ule double %204, 5.000000e-01
  %243 = fcmp ugt double %204, 5.500000e-01
  %or.cond261 = or i1 %242, %243
  br i1 %or.cond261, label %244, label %271

244:                                              ; preds = %241
  %245 = fcmp ule double %204, 5.500000e-01
  %246 = fcmp ugt double %204, 0x3FE3333333333334
  %or.cond262 = or i1 %245, %246
  br i1 %or.cond262, label %247, label %271

247:                                              ; preds = %244
  %248 = fcmp ule double %204, 0x3FE3333333333334
  %249 = fcmp ugt double %204, 6.500000e-01
  %or.cond263 = or i1 %248, %249
  br i1 %or.cond263, label %250, label %271

250:                                              ; preds = %247
  %251 = fcmp ule double %204, 6.500000e-01
  %252 = fcmp ugt double %204, 0x3FE6666666666667
  %or.cond264 = or i1 %251, %252
  br i1 %or.cond264, label %253, label %271

253:                                              ; preds = %250
  %254 = fcmp ule double %204, 0x3FE6666666666667
  %255 = fcmp ugt double %204, 7.500000e-01
  %or.cond265 = or i1 %254, %255
  br i1 %or.cond265, label %256, label %271

256:                                              ; preds = %253
  %257 = fcmp ule double %204, 7.500000e-01
  %258 = fcmp ugt double %204, 8.000000e-01
  %or.cond266 = or i1 %257, %258
  br i1 %or.cond266, label %259, label %271

259:                                              ; preds = %256
  %260 = fcmp ule double %204, 8.000000e-01
  %261 = fcmp ugt double %204, 0x3FEB333333333334
  %or.cond267 = or i1 %260, %261
  br i1 %or.cond267, label %262, label %271

262:                                              ; preds = %259
  %263 = fcmp ule double %204, 0x3FEB333333333334
  %264 = fcmp ugt double %204, 9.000000e-01
  %or.cond268 = or i1 %263, %264
  br i1 %or.cond268, label %265, label %271

265:                                              ; preds = %262
  %266 = fcmp ule double %204, 9.000000e-01
  %267 = fcmp ugt double %204, 0x3FEE666666666667
  %or.cond269 = or i1 %266, %267
  br i1 %or.cond269, label %268, label %271

268:                                              ; preds = %265
  %269 = fcmp ule double %204, 0x3FEE666666666667
  %270 = fcmp ugt double %204, 1.000000e+00
  %or.cond270 = or i1 %269, %270
  %spec.select = select i1 %or.cond270, i32 %.sroa.0123.2173, i32 19
  br label %271

271:                                              ; preds = %268, %265, %262, %259, %256, %253, %250, %247, %244, %241, %238, %235, %232, %229, %226, %223, %220, %217, %214, %197
  %.sroa.0123.3 = phi i32 [ 0, %197 ], [ 1, %214 ], [ 2, %217 ], [ 3, %220 ], [ 4, %223 ], [ 5, %226 ], [ 6, %229 ], [ 7, %232 ], [ 8, %235 ], [ 9, %238 ], [ 10, %241 ], [ 11, %244 ], [ 12, %247 ], [ 13, %250 ], [ 14, %253 ], [ 15, %256 ], [ 16, %259 ], [ 17, %262 ], [ 18, %265 ], [ %spec.select, %268 ]
  %272 = fcmp ule double %211, 0.000000e+00
  %273 = fcmp ugt double %211, 5.000000e-02
  %or.cond271 = or i1 %272, %273
  br i1 %or.cond271, label %274, label %331

274:                                              ; preds = %271
  %275 = fcmp ule double %211, 5.000000e-02
  %276 = fcmp ugt double %211, 1.000000e-01
  %or.cond272 = or i1 %275, %276
  br i1 %or.cond272, label %277, label %331

277:                                              ; preds = %274
  %278 = fcmp ule double %211, 1.000000e-01
  %279 = fcmp ugt double %211, 0x3FC3333333333334
  %or.cond273 = or i1 %278, %279
  br i1 %or.cond273, label %280, label %331

280:                                              ; preds = %277
  %281 = fcmp ule double %211, 0x3FC3333333333334
  %282 = fcmp ugt double %211, 2.000000e-01
  %or.cond274 = or i1 %281, %282
  br i1 %or.cond274, label %283, label %331

283:                                              ; preds = %280
  %284 = fcmp ule double %211, 2.000000e-01
  %285 = fcmp ugt double %211, 2.500000e-01
  %or.cond275 = or i1 %284, %285
  br i1 %or.cond275, label %286, label %331

286:                                              ; preds = %283
  %287 = fcmp ule double %211, 2.500000e-01
  %288 = fcmp ugt double %211, 0x3FD3333333333334
  %or.cond276 = or i1 %287, %288
  br i1 %or.cond276, label %289, label %331

289:                                              ; preds = %286
  %290 = fcmp ule double %211, 0x3FD3333333333334
  %291 = fcmp ugt double %211, 0x3FD6666666666667
  %or.cond277 = or i1 %290, %291
  br i1 %or.cond277, label %292, label %331

292:                                              ; preds = %289
  %293 = fcmp ule double %211, 0x3FD6666666666667
  %294 = fcmp ugt double %211, 4.000000e-01
  %or.cond278 = or i1 %293, %294
  br i1 %or.cond278, label %295, label %331

295:                                              ; preds = %292
  %296 = fcmp ule double %211, 4.000000e-01
  %297 = fcmp ugt double %211, 4.500000e-01
  %or.cond279 = or i1 %296, %297
  br i1 %or.cond279, label %298, label %331

298:                                              ; preds = %295
  %299 = fcmp ule double %211, 4.500000e-01
  %300 = fcmp ugt double %211, 5.000000e-01
  %or.cond280 = or i1 %299, %300
  br i1 %or.cond280, label %301, label %331

301:                                              ; preds = %298
  %302 = fcmp ule double %211, 5.000000e-01
  %303 = fcmp ugt double %211, 5.500000e-01
  %or.cond281 = or i1 %302, %303
  br i1 %or.cond281, label %304, label %331

304:                                              ; preds = %301
  %305 = fcmp ule double %211, 5.500000e-01
  %306 = fcmp ugt double %211, 0x3FE3333333333334
  %or.cond282 = or i1 %305, %306
  br i1 %or.cond282, label %307, label %331

307:                                              ; preds = %304
  %308 = fcmp ule double %211, 0x3FE3333333333334
  %309 = fcmp ugt double %211, 6.500000e-01
  %or.cond283 = or i1 %308, %309
  br i1 %or.cond283, label %310, label %331

310:                                              ; preds = %307
  %311 = fcmp ule double %211, 6.500000e-01
  %312 = fcmp ugt double %211, 0x3FE6666666666667
  %or.cond284 = or i1 %311, %312
  br i1 %or.cond284, label %313, label %331

313:                                              ; preds = %310
  %314 = fcmp ule double %211, 0x3FE6666666666667
  %315 = fcmp ugt double %211, 7.500000e-01
  %or.cond285 = or i1 %314, %315
  br i1 %or.cond285, label %316, label %331

316:                                              ; preds = %313
  %317 = fcmp ule double %211, 7.500000e-01
  %318 = fcmp ugt double %211, 8.000000e-01
  %or.cond286 = or i1 %317, %318
  br i1 %or.cond286, label %319, label %331

319:                                              ; preds = %316
  %320 = fcmp ule double %211, 8.000000e-01
  %321 = fcmp ugt double %211, 0x3FEB333333333334
  %or.cond287 = or i1 %320, %321
  br i1 %or.cond287, label %322, label %331

322:                                              ; preds = %319
  %323 = fcmp ule double %211, 0x3FEB333333333334
  %324 = fcmp ugt double %211, 9.000000e-01
  %or.cond288 = or i1 %323, %324
  br i1 %or.cond288, label %325, label %331

325:                                              ; preds = %322
  %326 = fcmp ule double %211, 9.000000e-01
  %327 = fcmp ugt double %211, 0x3FEE666666666667
  %or.cond289 = or i1 %326, %327
  br i1 %or.cond289, label %328, label %331

328:                                              ; preds = %325
  %329 = fcmp ule double %211, 0x3FEE666666666667
  %330 = fcmp ugt double %211, 1.000000e+00
  %or.cond290 = or i1 %329, %330
  %spec.select291 = select i1 %or.cond290, i32 %.sroa.5125.2174, i32 19
  br label %331

331:                                              ; preds = %328, %325, %322, %319, %316, %313, %310, %307, %304, %301, %298, %295, %292, %289, %286, %283, %280, %277, %274, %271
  %.sroa.5125.3 = phi i32 [ 0, %271 ], [ 1, %274 ], [ 2, %277 ], [ 3, %280 ], [ 4, %283 ], [ 5, %286 ], [ 6, %289 ], [ 7, %292 ], [ 8, %295 ], [ 9, %298 ], [ 10, %301 ], [ 11, %304 ], [ 12, %307 ], [ 13, %310 ], [ 14, %313 ], [ 15, %316 ], [ 16, %319 ], [ 17, %322 ], [ 18, %325 ], [ %spec.select291, %328 ]
  %332 = zext nneg i32 %195 to i64
  %gep = getelementptr ptr, ptr %invariant.gep, i64 %332
  %333 = load ptr, ptr %gep, align 8, !tbaa !5
  %334 = sext i32 %.sroa.0123.3 to i64
  %335 = getelementptr inbounds ptr, ptr %333, i64 %334
  %336 = load ptr, ptr %335, align 8, !tbaa !5
  %337 = sext i32 %.sroa.5125.3 to i64
  %338 = getelementptr inbounds %struct.PESurStr, ptr %336, i64 %337
  %339 = load i32, ptr %338, align 8, !tbaa !14
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %338, align 8, !tbaa !14
  %341 = getelementptr inbounds %struct.PESurStr, ptr %336, i64 %337, i32 1
  %342 = load double, ptr %341, align 8, !tbaa !17
  %343 = fadd double %198, %342
  store double %343, ptr %341, align 8, !tbaa !17
  %344 = add i64 %.0141172, 1
  %exitcond225.not = icmp eq i64 %344, %185
  br i1 %exitcond225.not, label %._crit_edge177, label %.lr.ph176, !llvm.loop !40

._crit_edge177:                                   ; preds = %331, %194, %192, %190, %.lr.ph176, %173
  %.sroa.0123.2.lcssa = phi i32 [ %.sroa.0123.1191, %173 ], [ %.sroa.0123.2173, %.lr.ph176 ], [ %.sroa.0123.2173, %190 ], [ %.sroa.0123.2173, %192 ], [ %.sroa.0123.2173, %194 ], [ %.sroa.0123.3, %331 ]
  %.sroa.5125.2.lcssa = phi i32 [ %.sroa.5125.1192, %173 ], [ %.sroa.5125.2174, %.lr.ph176 ], [ %.sroa.5125.2174, %190 ], [ %.sroa.5125.2174, %192 ], [ %.sroa.5125.2174, %194 ], [ %.sroa.5125.3, %331 ]
  %345 = call i32 @fclose(ptr noundef nonnull %168)
  %346 = load ptr, ptr @fileList, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.FileListStr, ptr %346, i64 %indvars.iv229
  %348 = load i32, ptr %347, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = icmp slt i64 %indvars.iv.next227, %349
  br i1 %350, label %.lr.ph194, label %._crit_edge195, !llvm.loop !41

.preheader:                                       ; preds = %365
  %351 = icmp sgt i32 %367, 0
  br i1 %351, label %.lr.ph207, label %._crit_edge208

.lr.ph205:                                        ; preds = %.preheader154, %365
  %indvars.iv240 = phi i64 [ %indvars.iv.next241, %365 ], [ 0, %.preheader154 ]
  %352 = load ptr, ptr @files, align 8, !tbaa !5
  %353 = getelementptr inbounds i8, ptr %352, i64 144
  %354 = load ptr, ptr %353, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.FileStr, ptr %354, i64 %indvars.iv240, i32 1
  %356 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %1, ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef nonnull @path, ptr noundef nonnull %355) #8
  %357 = call noalias ptr @fopen(ptr noundef nonnull %1, ptr noundef nonnull @.str.4)
  %358 = getelementptr inbounds ptr, ptr %14, i64 %indvars.iv240
  %359 = load ptr, ptr %358, align 8, !tbaa !5
  br label %.preheader153

.preheader153:                                    ; preds = %.lr.ph205, %370
  %indvars.iv236 = phi i64 [ 0, %.lr.ph205 ], [ %indvars.iv.next237, %370 ]
  %360 = getelementptr inbounds ptr, ptr %359, i64 %indvars.iv236
  %361 = trunc nuw nsw i64 %indvars.iv236 to i32
  %362 = uitofp nneg i32 %361 to double
  %363 = fadd double %362, 5.000000e-01
  %364 = fmul double %363, 5.000000e-02
  br label %371

365:                                              ; preds = %370
  %366 = call i32 @fclose(ptr noundef %357)
  %indvars.iv.next241 = add nuw nsw i64 %indvars.iv240, 1
  %367 = load i32, ptr getelementptr inbounds (i8, ptr @RE, i64 4), align 4, !tbaa !12
  %368 = sext i32 %367 to i64
  %369 = icmp slt i64 %indvars.iv.next241, %368
  br i1 %369, label %.lr.ph205, label %.preheader, !llvm.loop !42

370:                                              ; preds = %380
  %indvars.iv.next237 = add nuw nsw i64 %indvars.iv236, 1
  %exitcond239.not = icmp eq i64 %indvars.iv.next237, 20
  br i1 %exitcond239.not, label %365, label %.preheader153, !llvm.loop !43

371:                                              ; preds = %.preheader153, %380
  %indvars.iv232 = phi i64 [ 0, %.preheader153 ], [ %indvars.iv.next233, %380 ]
  %372 = load ptr, ptr %360, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.PESurStr, ptr %372, i64 %indvars.iv232
  %374 = load i32, ptr %373, align 8, !tbaa !14
  %.not = icmp eq i32 %374, 0
  br i1 %.not, label %._crit_edge246, label %375

._crit_edge246:                                   ; preds = %371
  %.phi.trans.insert = getelementptr inbounds i8, ptr %373, i64 8
  %.pre = load double, ptr %.phi.trans.insert, align 8, !tbaa !17
  br label %380

375:                                              ; preds = %371
  %376 = sitofp i32 %374 to double
  %377 = getelementptr inbounds i8, ptr %373, i64 8
  %378 = load double, ptr %377, align 8, !tbaa !17
  %379 = fdiv double %378, %376
  store double %379, ptr %377, align 8, !tbaa !17
  br label %380

380:                                              ; preds = %._crit_edge246, %375
  %381 = phi double [ %.pre, %._crit_edge246 ], [ %379, %375 ]
  %382 = trunc nuw nsw i64 %indvars.iv232 to i32
  %383 = uitofp nneg i32 %382 to double
  %384 = fadd double %383, 5.000000e-01
  %385 = fmul double %384, 5.000000e-02
  %386 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %357, ptr noundef nonnull @.str.20, double noundef %364, double noundef %385, double noundef %381, i32 noundef %374) #8
  %indvars.iv.next233 = add nuw nsw i64 %indvars.iv232, 1
  %exitcond235.not = icmp eq i64 %indvars.iv.next233, 20
  br i1 %exitcond235.not, label %370, label %371, !llvm.loop !44

._crit_edge208:                                   ; preds = %.lr.ph207, %11, %.preheader156, %.preheader154, %.preheader
  call void @free(ptr noundef %14) #8
  %387 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14)
  %388 = load ptr, ptr @stdout, align 8, !tbaa !5
  %389 = call i32 @fflush(ptr noundef %388)
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %2) #8
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %1) #8
  ret void

.lr.ph207:                                        ; preds = %.preheader, %.lr.ph207
  %indvars.iv243 = phi i64 [ %indvars.iv.next244, %.lr.ph207 ], [ 0, %.preheader ]
  %390 = getelementptr inbounds ptr, ptr %14, i64 %indvars.iv243
  %391 = load ptr, ptr %390, align 8, !tbaa !5
  %392 = load ptr, ptr %391, align 8, !tbaa !5
  call void @free(ptr noundef %392) #8
  call void @free(ptr noundef %391) #8
  %indvars.iv.next244 = add nuw nsw i64 %indvars.iv243, 1
  %393 = load i32, ptr getelementptr inbounds (i8, ptr @RE, i64 4), align 4, !tbaa !12
  %394 = sext i32 %393 to i64
  %395 = icmp slt i64 %indvars.iv.next244, %394
  br i1 %395, label %.lr.ph207, label %._crit_edge208, !llvm.loop !45
}

; 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 #6

declare i32 @ReadREMDTempFile(ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #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 = { "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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { 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 #7 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, 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 #8 = { nounwind }
attributes #9 = { noreturn nounwind }
attributes #10 = { 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, !11, i64 0}
!10 = !{!"FileListStr", !11, i64 0, !7, i64 4}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !11, i64 4}
!13 = !{!"REMDStr", !11, i64 0, !11, i64 4}
!14 = !{!15, !11, i64 0}
!15 = !{!"PESurStr", !11, i64 0, !16, i64 8}
!16 = !{!"double", !7, i64 0}
!17 = !{!15, !16, i64 8}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = !{!11, !11, i64 0}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}
!24 = !{!25, !26, i64 0}
!25 = !{!"SectionStr", !26, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !7, i64 40, !27, i64 64, !29, i64 120, !30, i64 208, !31, i64 240, !32, i64 288}
!26 = !{!"long", !7, i64 0}
!27 = !{!"WallStr", !7, i64 0, !7, i64 20, !28, i64 40}
!28 = !{!"AtomStr", !6, i64 0, !6, i64 8}
!29 = !{!"DynamicWallStr", !7, i64 0, !11, i64 16, !11, i64 20, !16, i64 24, !16, i64 32, !16, i64 40, !16, i64 48, !7, i64 56}
!30 = !{!"ObstructionStr", !11, i64 0, !11, i64 4, !6, i64 8, !6, i64 16, !6, i64 24}
!31 = !{!"TunnelStr", !11, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !28, i64 32}
!32 = !{!"FlowStr", !11, i64 0, !33, i64 8, !34, i64 40, !35, i64 88}
!33 = !{!"ConstVStr", !7, i64 0}
!34 = !{!"ForceStr", !7, i64 0, !6, i64 32, !6, i64 40}
!35 = !{!"ChargeStr", !11, i64 0, !11, i64 4, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!36 = !{!25, !16, i64 8}
!37 = !{!25, !16, i64 32}
!38 = !{!39, !16, i64 24}
!39 = !{!"EnergyReadStr", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40}
!40 = distinct !{!40, !19}
!41 = distinct !{!41, !19}
!42 = distinct !{!42, !19}
!43 = distinct !{!43, !19}
!44 = distinct !{!44, !19}
!45 = distinct !{!45, !19}


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