; LLVM IR from Discngine/fpocket :: src (rpdb)

; 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.s_pdb = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, float, float, float, float, float, float, [83 x i8], [500 x i8], float, float, float, i32, i32 }
%struct.s_fparams = type { [2000 x i8], [2000 x i8], [2000 x i8], [8000 x i8], ptr, ptr, ptr, i32, i32, ptr, ptr, ptr, i8, i8, i32, i32, i16, i32, i32, i32, i16, i32, i32, i32, i16, float, float, float, float, float, [20 x ptr], i16, i16, [20 x ptr], i32, [10 x i8] }

@stderr = external global ptr, align 8
@ST_keep_hetatm = external hidden global [1961 x ptr], align 16
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [34 x i8], align 1

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

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

declare ptr @my_malloc(i64 noundef) #1

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

declare void @my_free(ptr noundef) #1

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @rpdb_extract_atm_resname(ptr noundef, ptr noundef) #4

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strncmp(ptr noundef, ptr noundef, i64 noundef) #3

; Function Attrs: nounwind
declare ptr @strcpy(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @rpdb_extract_atm_resumber(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local void @rpdb_extract_atom_coordinates(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

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

54:                                               ; preds = %5
  %55 = load ptr, ptr %12, align 8, !tbaa !5
  call void @my_free(ptr noundef %55)
  %56 = load ptr, ptr @stderr, align 8, !tbaa !5
  %57 = load ptr, ptr %7, align 8, !tbaa !5
  %58 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %56, ptr noundef @.str.3, ptr noundef %57) #5
  store ptr null, ptr %6, align 8
  store i32 1, ptr %27, align 4
  br label %854

59:                                               ; preds = %5
  %60 = load i32, ptr %10, align 4, !tbaa !9
  %61 = icmp sgt i32 %60, 0
  br i1 %61, label %62, label %85

62:                                               ; preds = %59
  br label %63

63:                                               ; preds = %80, %62
  %64 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %65 = load ptr, ptr %12, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.s_pdb, ptr %65, i32 0, i32 0
  %67 = load ptr, ptr %66, align 8, !tbaa !20
  %68 = call ptr @fgets(ptr noundef %64, i32 noundef 82, ptr noundef %67)
  %69 = icmp ne ptr %68, null
  br i1 %69, label %70, label %81

70:                                               ; preds = %63
  %71 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %72 = call i32 @strncmp(ptr noundef %71, ptr noundef @.str.4, i64 noundef 5) #6
  %73 = icmp ne i32 %72, 0
  br i1 %73, label %80, label %74

74:                                               ; preds = %70
  %75 = load i32, ptr %10, align 4, !tbaa !9
  %76 = icmp sgt i32 %75, 0
  br i1 %76, label %77, label %80

77:                                               ; preds = %74
  %78 = load ptr, ptr %12, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.s_pdb, ptr %78, i32 0, i32 25
  store i32 1, ptr %79, align 8, !tbaa !18
  br label %80

80:                                               ; preds = %77, %74, %70
  br label %63, !llvm.loop !21

81:                                               ; preds = %63
  %82 = load ptr, ptr %12, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.s_pdb, ptr %82, i32 0, i32 0
  %84 = load ptr, ptr %83, align 8, !tbaa !20
  call void @rewind(ptr noundef %84)
  br label %85

85:                                               ; preds = %81, %59
  br label %86

86:                                               ; preds = %762, %85
  %87 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %88 = load ptr, ptr %12, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.s_pdb, ptr %88, i32 0, i32 0
  %90 = load ptr, ptr %89, align 8, !tbaa !20
  %91 = call ptr @fgets(ptr noundef %87, i32 noundef 82, ptr noundef %90)
  %92 = icmp ne ptr %91, null
  br i1 %92, label %93, label %763

93:                                               ; preds = %86
  %94 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %95 = call i32 @strncmp(ptr noundef %94, ptr noundef @.str.4, i64 noundef 5) #6
  %96 = icmp ne i32 %95, 0
  br i1 %96, label %113, label %97

97:                                               ; preds = %93
  %98 = load i32, ptr %10, align 4, !tbaa !9
  %99 = icmp sgt i32 %98, 0
  br i1 %99, label %100, label %113

100:                                              ; preds = %97
  %101 = load ptr, ptr %12, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.s_pdb, ptr %101, i32 0, i32 25
  %103 = load i32, ptr %102, align 8, !tbaa !18
  %104 = icmp ne i32 %103, 0
  br i1 %104, label %105, label %113

105:                                              ; preds = %100
  %106 = load i32, ptr %26, align 4, !tbaa !9
  %107 = add nsw i32 %106, 1
  store i32 %107, ptr %26, align 4, !tbaa !9
  %108 = load i32, ptr %26, align 4, !tbaa !9
  %109 = load i32, ptr %10, align 4, !tbaa !9
  %110 = icmp eq i32 %108, %109
  br i1 %110, label %111, label %112

111:                                              ; preds = %105
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %112

112:                                              ; preds = %111, %105
  br label %113

113:                                              ; preds = %112, %100, %97, %93
  %114 = load ptr, ptr %12, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.s_pdb, ptr %114, i32 0, i32 25
  %116 = load i32, ptr %115, align 8, !tbaa !18
  %117 = icmp eq i32 %116, 0
  br i1 %117, label %121, label %118

118:                                              ; preds = %113
  %119 = load i32, ptr %25, align 4, !tbaa !9
  %120 = icmp eq i32 %119, 1
  br i1 %120, label %121, label %762

121:                                              ; preds = %118, %113
  %122 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 21
  %123 = load i8, ptr %122, align 1, !tbaa !11
  %124 = load ptr, ptr %23, align 8, !tbaa !5
  %125 = getelementptr inbounds i8, ptr %124, i64 0
  store i8 %123, ptr %125, align 1, !tbaa !11
  %126 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %127 = call i32 @strncmp(ptr noundef %126, ptr noundef @.str.5, i64 noundef 5) #6
  %128 = icmp ne i32 %127, 0
  br i1 %128, label %378, label %129

129:                                              ; preds = %121
  %130 = load ptr, ptr %11, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.s_fparams, ptr %130, i32 0, i32 33
  %132 = getelementptr inbounds [20 x ptr], ptr %131, i64 0, i64 0
  %133 = load ptr, ptr %23, align 8, !tbaa !5
  %134 = load ptr, ptr %11, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.s_fparams, ptr %134, i32 0, i32 32
  %136 = load i16, ptr %135, align 2, !tbaa !23
  %137 = call i32 @is_ligand(ptr noundef %132, ptr noundef %133, i16 noundef zeroext %136)
  %138 = icmp ne i32 %137, 0
  br i1 %138, label %378, label %139

139:                                              ; preds = %129
  %140 = load ptr, ptr %11, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.s_fparams, ptr %140, i32 0, i32 30
  %142 = getelementptr inbounds [20 x ptr], ptr %141, i64 0, i64 0
  %143 = load ptr, ptr %23, align 8, !tbaa !5
  %144 = load ptr, ptr %11, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.s_fparams, ptr %144, i32 0, i32 34
  %146 = load i32, ptr %145, align 8, !tbaa !26
  %147 = load ptr, ptr %11, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.s_fparams, ptr %147, i32 0, i32 31
  %149 = load i16, ptr %148, align 8, !tbaa !27
  %150 = call i32 @chains_to_delete(ptr noundef %142, ptr noundef %143, i32 noundef %146, i16 noundef zeroext %149)
  %151 = icmp ne i32 %150, 0
  br i1 %151, label %152, label %158

152:                                              ; preds = %139
  %153 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %154 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  call void @rpdb_extract_atm_resname(ptr noundef %153, ptr noundef %154)
  %155 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  call void @rpdb_extract_atom_coordinates(ptr noundef %155, ptr noundef %19, ptr noundef %20, ptr noundef %21)
  %156 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %157 = call i32 @rpdb_extract_atm_resumber(ptr noundef %156)
  store i32 %157, ptr %22, align 4, !tbaa !9
  br label %158

158:                                              ; preds = %152, %139
  %159 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 16
  %160 = load i8, ptr %159, align 16, !tbaa !11
  %161 = sext i8 %160 to i32
  %162 = icmp eq i32 %161, 32
  br i1 %162, label %168, label %163

163:                                              ; preds = %158
  %164 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 16
  %165 = load i8, ptr %164, align 16, !tbaa !11
  %166 = sext i8 %165 to i32
  %167 = icmp eq i32 %166, 65
  br i1 %167, label %168, label %285

168:                                              ; preds = %163, %158
  %169 = load float, ptr %19, align 4, !tbaa !28
  %170 = fcmp olt float %169, 9.990000e+03
  br i1 %170, label %171, label %285

171:                                              ; preds = %168
  %172 = load float, ptr %20, align 4, !tbaa !28
  %173 = fcmp olt float %172, 9.990000e+03
  br i1 %173, label %174, label %285

174:                                              ; preds = %171
  %175 = load float, ptr %21, align 4, !tbaa !28
  %176 = fcmp olt float %175, 9.990000e+03
  br i1 %176, label %177, label %285

177:                                              ; preds = %174
  %178 = load ptr, ptr %11, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.s_fparams, ptr %178, i32 0, i32 30
  %180 = getelementptr inbounds [20 x ptr], ptr %179, i64 0, i64 0
  %181 = load ptr, ptr %23, align 8, !tbaa !5
  %182 = load ptr, ptr %11, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.s_fparams, ptr %182, i32 0, i32 34
  %184 = load i32, ptr %183, align 8, !tbaa !26
  %185 = load ptr, ptr %11, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.s_fparams, ptr %185, i32 0, i32 31
  %187 = load i16, ptr %186, align 8, !tbaa !27
  %188 = call i32 @chains_to_delete(ptr noundef %180, ptr noundef %181, i32 noundef %184, i16 noundef zeroext %187)
  %189 = icmp ne i32 %188, 0
  br i1 %189, label %190, label %263

190:                                              ; preds = %177
  %191 = load ptr, ptr %8, align 8, !tbaa !5
  %192 = icmp ne ptr %191, null
  br i1 %192, label %193, label %233

193:                                              ; preds = %190
  %194 = load ptr, ptr %8, align 8, !tbaa !5
  %195 = call i64 @strlen(ptr noundef %194) #6
  %196 = icmp ugt i64 %195, 1
  br i1 %196, label %197, label %233

197:                                              ; preds = %193
  %198 = load ptr, ptr %8, align 8, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %198, i64 0
  %200 = load i8, ptr %199, align 1, !tbaa !11
  %201 = sext i8 %200 to i32
  %202 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  %203 = load i8, ptr %202, align 1, !tbaa !11
  %204 = sext i8 %203 to i32
  %205 = icmp eq i32 %201, %204
  br i1 %205, label %206, label %233

206:                                              ; preds = %197
  %207 = load ptr, ptr %8, align 8, !tbaa !5
  %208 = getelementptr inbounds i8, ptr %207, i64 1
  %209 = load i8, ptr %208, align 1, !tbaa !11
  %210 = sext i8 %209 to i32
  %211 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 1
  %212 = load i8, ptr %211, align 1, !tbaa !11
  %213 = sext i8 %212 to i32
  %214 = icmp eq i32 %210, %213
  br i1 %214, label %215, label %233

215:                                              ; preds = %206
  %216 = load ptr, ptr %8, align 8, !tbaa !5
  %217 = getelementptr inbounds i8, ptr %216, i64 2
  %218 = load i8, ptr %217, align 1, !tbaa !11
  %219 = sext i8 %218 to i32
  %220 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 2
  %221 = load i8, ptr %220, align 1, !tbaa !11
  %222 = sext i8 %221 to i32
  %223 = icmp eq i32 %219, %222
  br i1 %223, label %224, label %233

224:                                              ; preds = %215
  %225 = load i32, ptr %9, align 4, !tbaa !9
  %226 = icmp ne i32 %225, 0
  br i1 %226, label %227, label %232

227:                                              ; preds = %224
  %228 = load i32, ptr %17, align 4, !tbaa !9
  %229 = add nsw i32 %228, 1
  store i32 %229, ptr %17, align 4, !tbaa !9
  %230 = load i32, ptr %16, align 4, !tbaa !9
  %231 = add nsw i32 %230, 1
  store i32 %231, ptr %16, align 4, !tbaa !9
  br label %232

232:                                              ; preds = %227, %224
  br label %262

233:                                              ; preds = %215, %206, %197, %193, %190
  %234 = load ptr, ptr %8, align 8, !tbaa !5
  %235 = icmp ne ptr %234, null
  br i1 %235, label %236, label %258

236:                                              ; preds = %233
  %237 = load ptr, ptr %8, align 8, !tbaa !5
  %238 = call i64 @strlen(ptr noundef %237) #6
  %239 = icmp eq i64 %238, 1
  br i1 %239, label %240, label %258

240:                                              ; preds = %236
  %241 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 21
  %242 = load i8, ptr %241, align 1, !tbaa !11
  %243 = sext i8 %242 to i32
  %244 = load ptr, ptr %8, align 8, !tbaa !5
  %245 = getelementptr inbounds i8, ptr %244, i64 0
  %246 = load i8, ptr %245, align 1, !tbaa !11
  %247 = sext i8 %246 to i32
  %248 = icmp eq i32 %243, %247
  br i1 %248, label %249, label %258

249:                                              ; preds = %240
  %250 = load i32, ptr %9, align 4, !tbaa !9
  %251 = icmp ne i32 %250, 0
  br i1 %251, label %252, label %257

252:                                              ; preds = %249
  %253 = load i32, ptr %17, align 4, !tbaa !9
  %254 = add nsw i32 %253, 1
  store i32 %254, ptr %17, align 4, !tbaa !9
  %255 = load i32, ptr %16, align 4, !tbaa !9
  %256 = add nsw i32 %255, 1
  store i32 %256, ptr %16, align 4, !tbaa !9
  br label %257

257:                                              ; preds = %252, %249
  br label %261

258:                                              ; preds = %240, %236, %233
  %259 = load i32, ptr %16, align 4, !tbaa !9
  %260 = add nsw i32 %259, 1
  store i32 %260, ptr %16, align 4, !tbaa !9
  br label %261

261:                                              ; preds = %258, %257
  br label %262

262:                                              ; preds = %261, %232
  br label %263

263:                                              ; preds = %262, %177
  %264 = load ptr, ptr %11, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.s_fparams, ptr %264, i32 0, i32 7
  %266 = load i32, ptr %265, align 8, !tbaa !29
  %267 = icmp sgt i32 %266, -1
  br i1 %267, label %268, label %284

268:                                              ; preds = %263
  %269 = load ptr, ptr %11, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.s_fparams, ptr %269, i32 0, i32 33
  %271 = getelementptr inbounds [20 x ptr], ptr %270, i64 0, i64 0
  %272 = load ptr, ptr %23, align 8, !tbaa !5
  %273 = load ptr, ptr %11, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.s_fparams, ptr %273, i32 0, i32 32
  %275 = load i16, ptr %274, align 2, !tbaa !23
  %276 = call i32 @is_ligand(ptr noundef %271, ptr noundef %272, i16 noundef zeroext %275)
  %277 = icmp ne i32 %276, 0
  br i1 %277, label %278, label %283

278:                                              ; preds = %268
  %279 = load ptr, ptr %12, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.s_pdb, ptr %279, i32 0, i32 9
  %281 = load i32, ptr %280, align 8, !tbaa !12
  %282 = add nsw i32 %281, 1
  store i32 %282, ptr %280, align 8, !tbaa !12
  br label %283

283:                                              ; preds = %278, %268
  br label %284

284:                                              ; preds = %283, %263
  br label %285

285:                                              ; preds = %284, %174, %171, %168, %163
  %286 = load float, ptr %19, align 4, !tbaa !28
  %287 = fcmp olt float %286, 9.990000e+03
  br i1 %287, label %288, label %377

288:                                              ; preds = %285
  %289 = load float, ptr %20, align 4, !tbaa !28
  %290 = fcmp olt float %289, 9.990000e+03
  br i1 %290, label %291, label %377

291:                                              ; preds = %288
  %292 = load float, ptr %21, align 4, !tbaa !28
  %293 = fcmp olt float %292, 9.990000e+03
  br i1 %293, label %294, label %377

294:                                              ; preds = %291
  %295 = load ptr, ptr %11, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.s_fparams, ptr %295, i32 0, i32 7
  %297 = load i32, ptr %296, align 8, !tbaa !29
  %298 = icmp sgt i32 %297, -1
  br i1 %298, label %299, label %376

299:                                              ; preds = %294
  %300 = load ptr, ptr %11, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.s_fparams, ptr %300, i32 0, i32 33
  %302 = getelementptr inbounds [20 x ptr], ptr %301, i64 0, i64 0
  %303 = load ptr, ptr %23, align 8, !tbaa !5
  %304 = load ptr, ptr %11, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.s_fparams, ptr %304, i32 0, i32 32
  %306 = load i16, ptr %305, align 2, !tbaa !23
  %307 = call i32 @is_ligand(ptr noundef %302, ptr noundef %303, i16 noundef zeroext %306)
  %308 = icmp ne i32 %307, 0
  br i1 %308, label %309, label %314

309:                                              ; preds = %299
  %310 = load ptr, ptr %12, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.s_pdb, ptr %310, i32 0, i32 9
  %312 = load i32, ptr %311, align 8, !tbaa !12
  %313 = add nsw i32 %312, 1
  store i32 %313, ptr %311, align 8, !tbaa !12
  br label %375

314:                                              ; preds = %299
  %315 = load ptr, ptr %11, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.s_fparams, ptr %315, i32 0, i32 5
  %317 = load ptr, ptr %316, align 8, !tbaa !30
  %318 = icmp ne ptr %317, null
  br i1 %318, label %319, label %374

319:                                              ; preds = %314
  %320 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 21
  %321 = load i8, ptr %320, align 1, !tbaa !11
  %322 = sext i8 %321 to i32
  %323 = load ptr, ptr %11, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.s_fparams, ptr %323, i32 0, i32 5
  %325 = load ptr, ptr %324, align 8, !tbaa !30
  %326 = getelementptr inbounds i8, ptr %325, i64 0
  %327 = load i8, ptr %326, align 1, !tbaa !11
  %328 = sext i8 %327 to i32
  %329 = icmp eq i32 %322, %328
  br i1 %329, label %330, label %374

330:                                              ; preds = %319
  %331 = load i32, ptr %22, align 4, !tbaa !9
  %332 = load ptr, ptr %11, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.s_fparams, ptr %332, i32 0, i32 7
  %334 = load i32, ptr %333, align 8, !tbaa !29
  %335 = icmp eq i32 %331, %334
  br i1 %335, label %336, label %374

336:                                              ; preds = %330
  %337 = load ptr, ptr %11, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.s_fparams, ptr %337, i32 0, i32 6
  %339 = load ptr, ptr %338, align 8, !tbaa !31
  %340 = getelementptr inbounds i8, ptr %339, i64 0
  %341 = load i8, ptr %340, align 1, !tbaa !11
  %342 = sext i8 %341 to i32
  %343 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  %344 = load i8, ptr %343, align 1, !tbaa !11
  %345 = sext i8 %344 to i32
  %346 = icmp eq i32 %342, %345
  br i1 %346, label %347, label %374

347:                                              ; preds = %336
  %348 = load ptr, ptr %11, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.s_fparams, ptr %348, i32 0, i32 6
  %350 = load ptr, ptr %349, align 8, !tbaa !31
  %351 = getelementptr inbounds i8, ptr %350, i64 1
  %352 = load i8, ptr %351, align 1, !tbaa !11
  %353 = sext i8 %352 to i32
  %354 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 1
  %355 = load i8, ptr %354, align 1, !tbaa !11
  %356 = sext i8 %355 to i32
  %357 = icmp eq i32 %353, %356
  br i1 %357, label %358, label %374

358:                                              ; preds = %347
  %359 = load ptr, ptr %11, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.s_fparams, ptr %359, i32 0, i32 6
  %361 = load ptr, ptr %360, align 8, !tbaa !31
  %362 = getelementptr inbounds i8, ptr %361, i64 2
  %363 = load i8, ptr %362, align 1, !tbaa !11
  %364 = sext i8 %363 to i32
  %365 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 2
  %366 = load i8, ptr %365, align 1, !tbaa !11
  %367 = sext i8 %366 to i32
  %368 = icmp eq i32 %364, %367
  br i1 %368, label %369, label %374

369:                                              ; preds = %358
  %370 = load ptr, ptr %12, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.s_pdb, ptr %370, i32 0, i32 9
  %372 = load i32, ptr %371, align 8, !tbaa !12
  %373 = add nsw i32 %372, 1
  store i32 %373, ptr %371, align 8, !tbaa !12
  br label %374

374:                                              ; preds = %369, %358, %347, %336, %330, %319, %314
  br label %375

375:                                              ; preds = %374, %309
  br label %376

376:                                              ; preds = %375, %294
  br label %377

377:                                              ; preds = %376, %291, %288, %285
  br label %761

378:                                              ; preds = %129, %121
  %379 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %380 = call i32 @strncmp(ptr noundef %379, ptr noundef @.str.6, i64 noundef 6) #6
  %381 = icmp ne i32 %380, 0
  br i1 %381, label %382, label %396

382:                                              ; preds = %378
  %383 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %384 = call i32 @strncmp(ptr noundef %383, ptr noundef @.str.5, i64 noundef 5) #6
  %385 = icmp ne i32 %384, 0
  br i1 %385, label %740, label %386

386:                                              ; preds = %382
  %387 = load ptr, ptr %11, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.s_fparams, ptr %387, i32 0, i32 33
  %389 = getelementptr inbounds [20 x ptr], ptr %388, i64 0, i64 0
  %390 = load ptr, ptr %23, align 8, !tbaa !5
  %391 = load ptr, ptr %11, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.s_fparams, ptr %391, i32 0, i32 32
  %393 = load i16, ptr %392, align 2, !tbaa !23
  %394 = call i32 @is_ligand(ptr noundef %389, ptr noundef %390, i16 noundef zeroext %393)
  %395 = icmp ne i32 %394, 0
  br i1 %395, label %396, label %740

396:                                              ; preds = %386, %378
  %397 = load ptr, ptr %11, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.s_fparams, ptr %397, i32 0, i32 30
  %399 = getelementptr inbounds [20 x ptr], ptr %398, i64 0, i64 0
  %400 = load ptr, ptr %23, align 8, !tbaa !5
  %401 = load ptr, ptr %11, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.s_fparams, ptr %401, i32 0, i32 34
  %403 = load i32, ptr %402, align 8, !tbaa !26
  %404 = load ptr, ptr %11, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.s_fparams, ptr %404, i32 0, i32 31
  %406 = load i16, ptr %405, align 8, !tbaa !27
  %407 = call i32 @chains_to_delete(ptr noundef %399, ptr noundef %400, i32 noundef %403, i16 noundef zeroext %406)
  %408 = icmp ne i32 %407, 0
  br i1 %408, label %409, label %413

409:                                              ; preds = %396
  %410 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  call void @rpdb_extract_atom_coordinates(ptr noundef %410, ptr noundef %19, ptr noundef %20, ptr noundef %21)
  %411 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %412 = call i32 @rpdb_extract_atm_resumber(ptr noundef %411)
  store i32 %412, ptr %22, align 4, !tbaa !9
  br label %413

413:                                              ; preds = %409, %396
  %414 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 16
  %415 = load i8, ptr %414, align 16, !tbaa !11
  %416 = sext i8 %415 to i32
  %417 = icmp eq i32 %416, 32
  br i1 %417, label %423, label %418

418:                                              ; preds = %413
  %419 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 16
  %420 = load i8, ptr %419, align 16, !tbaa !11
  %421 = sext i8 %420 to i32
  %422 = icmp eq i32 %421, 65
  br i1 %422, label %423, label %630

423:                                              ; preds = %418, %413
  %424 = load float, ptr %19, align 4, !tbaa !28
  %425 = fcmp olt float %424, 9.990000e+03
  br i1 %425, label %426, label %630

426:                                              ; preds = %423
  %427 = load float, ptr %20, align 4, !tbaa !28
  %428 = fcmp olt float %427, 9.990000e+03
  br i1 %428, label %429, label %630

429:                                              ; preds = %426
  %430 = load float, ptr %21, align 4, !tbaa !28
  %431 = fcmp olt float %430, 9.990000e+03
  br i1 %431, label %432, label %630

432:                                              ; preds = %429
  %433 = load ptr, ptr %11, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.s_fparams, ptr %433, i32 0, i32 30
  %435 = getelementptr inbounds [20 x ptr], ptr %434, i64 0, i64 0
  %436 = load ptr, ptr %23, align 8, !tbaa !5
  %437 = load ptr, ptr %11, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.s_fparams, ptr %437, i32 0, i32 34
  %439 = load i32, ptr %438, align 8, !tbaa !26
  %440 = load ptr, ptr %11, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.s_fparams, ptr %440, i32 0, i32 31
  %442 = load i16, ptr %441, align 8, !tbaa !27
  %443 = call i32 @chains_to_delete(ptr noundef %435, ptr noundef %436, i32 noundef %439, i16 noundef zeroext %442)
  %444 = icmp ne i32 %443, 0
  br i1 %444, label %445, label %614

445:                                              ; preds = %432
  %446 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %447 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  call void @rpdb_extract_atm_resname(ptr noundef %446, ptr noundef %447)
  %448 = load ptr, ptr %8, align 8, !tbaa !5
  %449 = icmp ne ptr %448, null
  br i1 %449, label %450, label %489

450:                                              ; preds = %445
  %451 = load ptr, ptr %8, align 8, !tbaa !5
  %452 = call i64 @strlen(ptr noundef %451) #6
  %453 = icmp ugt i64 %452, 1
  br i1 %453, label %454, label %489

454:                                              ; preds = %450
  %455 = load i32, ptr %9, align 4, !tbaa !9
  %456 = icmp ne i32 %455, 0
  br i1 %456, label %457, label %489

457:                                              ; preds = %454
  %458 = load ptr, ptr %8, align 8, !tbaa !5
  %459 = getelementptr inbounds i8, ptr %458, i64 0
  %460 = load i8, ptr %459, align 1, !tbaa !11
  %461 = sext i8 %460 to i32
  %462 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  %463 = load i8, ptr %462, align 1, !tbaa !11
  %464 = sext i8 %463 to i32
  %465 = icmp eq i32 %461, %464
  br i1 %465, label %466, label %489

466:                                              ; preds = %457
  %467 = load ptr, ptr %8, align 8, !tbaa !5
  %468 = getelementptr inbounds i8, ptr %467, i64 1
  %469 = load i8, ptr %468, align 1, !tbaa !11
  %470 = sext i8 %469 to i32
  %471 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 1
  %472 = load i8, ptr %471, align 1, !tbaa !11
  %473 = sext i8 %472 to i32
  %474 = icmp eq i32 %470, %473
  br i1 %474, label %475, label %489

475:                                              ; preds = %466
  %476 = load ptr, ptr %8, align 8, !tbaa !5
  %477 = getelementptr inbounds i8, ptr %476, i64 2
  %478 = load i8, ptr %477, align 1, !tbaa !11
  %479 = sext i8 %478 to i32
  %480 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 2
  %481 = load i8, ptr %480, align 1, !tbaa !11
  %482 = sext i8 %481 to i32
  %483 = icmp eq i32 %479, %482
  br i1 %483, label %484, label %489

484:                                              ; preds = %475
  %485 = load i32, ptr %17, align 4, !tbaa !9
  %486 = add nsw i32 %485, 1
  store i32 %486, ptr %17, align 4, !tbaa !9
  %487 = load i32, ptr %16, align 4, !tbaa !9
  %488 = add nsw i32 %487, 1
  store i32 %488, ptr %16, align 4, !tbaa !9
  br label %613

489:                                              ; preds = %475, %466, %457, %454, %450, %445
  %490 = load ptr, ptr %8, align 8, !tbaa !5
  %491 = icmp ne ptr %490, null
  br i1 %491, label %492, label %514

492:                                              ; preds = %489
  %493 = load ptr, ptr %8, align 8, !tbaa !5
  %494 = call i64 @strlen(ptr noundef %493) #6
  %495 = icmp eq i64 %494, 1
  br i1 %495, label %496, label %514

496:                                              ; preds = %492
  %497 = load ptr, ptr %8, align 8, !tbaa !5
  %498 = getelementptr inbounds i8, ptr %497, i64 0
  %499 = load i8, ptr %498, align 1, !tbaa !11
  %500 = sext i8 %499 to i32
  %501 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 21
  %502 = load i8, ptr %501, align 1, !tbaa !11
  %503 = sext i8 %502 to i32
  %504 = icmp eq i32 %500, %503
  br i1 %504, label %505, label %514

505:                                              ; preds = %496
  %506 = load i32, ptr %9, align 4, !tbaa !9
  %507 = icmp ne i32 %506, 0
  br i1 %507, label %508, label %511

508:                                              ; preds = %505
  %509 = load i32, ptr %17, align 4, !tbaa !9
  %510 = add nsw i32 %509, 1
  store i32 %510, ptr %17, align 4, !tbaa !9
  br label %511

511:                                              ; preds = %508, %505
  %512 = load i32, ptr %16, align 4, !tbaa !9
  %513 = add nsw i32 %512, 1
  store i32 %513, ptr %16, align 4, !tbaa !9
  br label %612

514:                                              ; preds = %496, %492, %489
  %515 = load i32, ptr %9, align 4, !tbaa !9
  %516 = icmp ne i32 %515, 0
  br i1 %516, label %517, label %532

517:                                              ; preds = %514
  %518 = load ptr, ptr %8, align 8, !tbaa !5
  %519 = icmp ne ptr %518, null
  br i1 %519, label %532, label %520

520:                                              ; preds = %517
  %521 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  %522 = call i32 @strncmp(ptr noundef %521, ptr noundef @.str.7, i64 noundef 3) #6
  %523 = icmp ne i32 %522, 0
  br i1 %523, label %524, label %532

524:                                              ; preds = %520
  %525 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  %526 = call i32 @strncmp(ptr noundef %525, ptr noundef @.str.8, i64 noundef 3) #6
  %527 = icmp ne i32 %526, 0
  br i1 %527, label %528, label %532

528:                                              ; preds = %524
  %529 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  %530 = call i32 @strncmp(ptr noundef %529, ptr noundef @.str.9, i64 noundef 3) #6
  %531 = icmp ne i32 %530, 0
  br i1 %531, label %545, label %532

532:                                              ; preds = %528, %524, %520, %517, %514
  %533 = load i32, ptr %9, align 4, !tbaa !9
  %534 = icmp ne i32 %533, 0
  br i1 %534, label %535, label %550

535:                                              ; preds = %532
  %536 = load ptr, ptr %11, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.s_fparams, ptr %536, i32 0, i32 33
  %538 = getelementptr inbounds [20 x ptr], ptr %537, i64 0, i64 0
  %539 = load ptr, ptr %23, align 8, !tbaa !5
  %540 = load ptr, ptr %11, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.s_fparams, ptr %540, i32 0, i32 32
  %542 = load i16, ptr %541, align 2, !tbaa !23
  %543 = call i32 @is_ligand(ptr noundef %538, ptr noundef %539, i16 noundef zeroext %542)
  %544 = icmp ne i32 %543, 0
  br i1 %544, label %545, label %550

545:                                              ; preds = %535, %528
  %546 = load i32, ptr %16, align 4, !tbaa !9
  %547 = add nsw i32 %546, 1
  store i32 %547, ptr %16, align 4, !tbaa !9
  %548 = load i32, ptr %15, align 4, !tbaa !9
  %549 = add nsw i32 %548, 1
  store i32 %549, ptr %15, align 4, !tbaa !9
  br label %611

550:                                              ; preds = %535, %532
  %551 = load ptr, ptr %11, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.s_fparams, ptr %551, i32 0, i32 33
  %553 = getelementptr inbounds [20 x ptr], ptr %552, i64 0, i64 0
  %554 = load ptr, ptr %23, align 8, !tbaa !5
  %555 = load ptr, ptr %11, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.s_fparams, ptr %555, i32 0, i32 32
  %557 = load i16, ptr %556, align 2, !tbaa !23
  %558 = call i32 @is_ligand(ptr noundef %553, ptr noundef %554, i16 noundef zeroext %557)
  %559 = icmp ne i32 %558, 0
  br i1 %559, label %610, label %560

560:                                              ; preds = %550
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %561

561:                                              ; preds = %606, %560
  %562 = load i32, ptr %18, align 4, !tbaa !9
  %563 = icmp slt i32 %562, 1961
  br i1 %563, label %564, label %609

564:                                              ; preds = %561
  %565 = load i32, ptr %18, align 4, !tbaa !9
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds [1961 x ptr], ptr @ST_keep_hetatm, i64 0, i64 %566
  %568 = load ptr, ptr %567, align 8, !tbaa !5
  %569 = getelementptr inbounds i8, ptr %568, i64 0
  %570 = load i8, ptr %569, align 1, !tbaa !11
  %571 = sext i8 %570 to i32
  %572 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  %573 = load i8, ptr %572, align 1, !tbaa !11
  %574 = sext i8 %573 to i32
  %575 = icmp eq i32 %571, %574
  br i1 %575, label %576, label %605

576:                                              ; preds = %564
  %577 = load i32, ptr %18, align 4, !tbaa !9
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds [1961 x ptr], ptr @ST_keep_hetatm, i64 0, i64 %578
  %580 = load ptr, ptr %579, align 8, !tbaa !5
  %581 = getelementptr inbounds i8, ptr %580, i64 1
  %582 = load i8, ptr %581, align 1, !tbaa !11
  %583 = sext i8 %582 to i32
  %584 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 1
  %585 = load i8, ptr %584, align 1, !tbaa !11
  %586 = sext i8 %585 to i32
  %587 = icmp eq i32 %583, %586
  br i1 %587, label %588, label %605

588:                                              ; preds = %576
  %589 = load i32, ptr %18, align 4, !tbaa !9
  %590 = sext i32 %589 to i64
  %591 = getelementptr inbounds [1961 x ptr], ptr @ST_keep_hetatm, i64 0, i64 %590
  %592 = load ptr, ptr %591, align 8, !tbaa !5
  %593 = getelementptr inbounds i8, ptr %592, i64 2
  %594 = load i8, ptr %593, align 1, !tbaa !11
  %595 = sext i8 %594 to i32
  %596 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 2
  %597 = load i8, ptr %596, align 1, !tbaa !11
  %598 = sext i8 %597 to i32
  %599 = icmp eq i32 %595, %598
  br i1 %599, label %600, label %605

600:                                              ; preds = %588
  %601 = load i32, ptr %15, align 4, !tbaa !9
  %602 = add nsw i32 %601, 1
  store i32 %602, ptr %15, align 4, !tbaa !9
  %603 = load i32, ptr %16, align 4, !tbaa !9
  %604 = add nsw i32 %603, 1
  store i32 %604, ptr %16, align 4, !tbaa !9
  br label %609

605:                                              ; preds = %588, %576, %564
  br label %606

606:                                              ; preds = %605
  %607 = load i32, ptr %18, align 4, !tbaa !9
  %608 = add nsw i32 %607, 1
  store i32 %608, ptr %18, align 4, !tbaa !9
  br label %561, !llvm.loop !32

609:                                              ; preds = %600, %561
  br label %610

610:                                              ; preds = %609, %550
  br label %611

611:                                              ; preds = %610, %545
  br label %612

612:                                              ; preds = %611, %511
  br label %613

613:                                              ; preds = %612, %484
  br label %614

614:                                              ; preds = %613, %432
  %615 = load ptr, ptr %11, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.s_fparams, ptr %615, i32 0, i32 33
  %617 = getelementptr inbounds [20 x ptr], ptr %616, i64 0, i64 0
  %618 = load ptr, ptr %23, align 8, !tbaa !5
  %619 = load ptr, ptr %11, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.s_fparams, ptr %619, i32 0, i32 32
  %621 = load i16, ptr %620, align 2, !tbaa !23
  %622 = call i32 @is_ligand(ptr noundef %617, ptr noundef %618, i16 noundef zeroext %621)
  %623 = icmp ne i32 %622, 0
  br i1 %623, label %624, label %629

624:                                              ; preds = %614
  %625 = load ptr, ptr %12, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.s_pdb, ptr %625, i32 0, i32 9
  %627 = load i32, ptr %626, align 8, !tbaa !12
  %628 = add nsw i32 %627, 1
  store i32 %628, ptr %626, align 8, !tbaa !12
  br label %629

629:                                              ; preds = %624, %614
  br label %630

630:                                              ; preds = %629, %429, %426, %423, %418
  %631 = load float, ptr %19, align 4, !tbaa !28
  %632 = fcmp olt float %631, 9.990000e+03
  br i1 %632, label %633, label %739

633:                                              ; preds = %630
  %634 = load float, ptr %20, align 4, !tbaa !28
  %635 = fcmp olt float %634, 9.990000e+03
  br i1 %635, label %636, label %739

636:                                              ; preds = %633
  %637 = load float, ptr %21, align 4, !tbaa !28
  %638 = fcmp olt float %637, 9.990000e+03
  br i1 %638, label %639, label %739

639:                                              ; preds = %636
  %640 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %641 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  call void @rpdb_extract_atm_resname(ptr noundef %640, ptr noundef %641)
  %642 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %643 = call i32 @rpdb_extract_atm_resumber(ptr noundef %642)
  store i32 %643, ptr %22, align 4, !tbaa !9
  %644 = load ptr, ptr %11, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.s_fparams, ptr %644, i32 0, i32 7
  %646 = load i32, ptr %645, align 8, !tbaa !29
  %647 = icmp sgt i32 %646, -1
  br i1 %647, label %648, label %738

648:                                              ; preds = %639
  call void @llvm.lifetime.start.p0(i64 2, ptr %28) #5
  %649 = load ptr, ptr %11, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.s_fparams, ptr %649, i32 0, i32 33
  %651 = getelementptr inbounds [20 x ptr], ptr %650, i64 0, i64 0
  %652 = load ptr, ptr %23, align 8, !tbaa !5
  %653 = load ptr, ptr %11, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.s_fparams, ptr %653, i32 0, i32 32
  %655 = load i16, ptr %654, align 2, !tbaa !23
  %656 = call i32 @is_ligand(ptr noundef %651, ptr noundef %652, i16 noundef zeroext %655)
  %657 = icmp ne i32 %656, 0
  br i1 %657, label %658, label %670

658:                                              ; preds = %648
  %659 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  %660 = call i32 @strncmp(ptr noundef %659, ptr noundef @.str.7, i64 noundef 3) #6
  %661 = icmp ne i32 %660, 0
  br i1 %661, label %662, label %670

662:                                              ; preds = %658
  %663 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  %664 = call i32 @strncmp(ptr noundef %663, ptr noundef @.str.8, i64 noundef 3) #6
  %665 = icmp ne i32 %664, 0
  br i1 %665, label %666, label %670

666:                                              ; preds = %662
  %667 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  %668 = call i32 @strncmp(ptr noundef %667, ptr noundef @.str.9, i64 noundef 3) #6
  %669 = icmp ne i32 %668, 0
  br label %670

670:                                              ; preds = %666, %662, %658, %648
  %671 = phi i1 [ false, %662 ], [ false, %658 ], [ false, %648 ], [ %669, %666 ]
  %672 = zext i1 %671 to i32
  %673 = trunc i32 %672 to i16
  store i16 %673, ptr %28, align 2, !tbaa !33
  %674 = load i16, ptr %28, align 2, !tbaa !33
  %675 = zext i16 %674 to i32
  %676 = icmp ne i32 %675, 0
  br i1 %676, label %732, label %677

677:                                              ; preds = %670
  %678 = load ptr, ptr %11, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.s_fparams, ptr %678, i32 0, i32 5
  %680 = load ptr, ptr %679, align 8, !tbaa !30
  %681 = icmp ne ptr %680, null
  br i1 %681, label %682, label %737

682:                                              ; preds = %677
  %683 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 21
  %684 = load i8, ptr %683, align 1, !tbaa !11
  %685 = sext i8 %684 to i32
  %686 = load ptr, ptr %11, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.s_fparams, ptr %686, i32 0, i32 5
  %688 = load ptr, ptr %687, align 8, !tbaa !30
  %689 = getelementptr inbounds i8, ptr %688, i64 0
  %690 = load i8, ptr %689, align 1, !tbaa !11
  %691 = sext i8 %690 to i32
  %692 = icmp eq i32 %685, %691
  br i1 %692, label %693, label %737

693:                                              ; preds = %682
  %694 = load i32, ptr %22, align 4, !tbaa !9
  %695 = load ptr, ptr %11, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.s_fparams, ptr %695, i32 0, i32 7
  %697 = load i32, ptr %696, align 8, !tbaa !29
  %698 = icmp eq i32 %694, %697
  br i1 %698, label %699, label %737

699:                                              ; preds = %693
  %700 = load ptr, ptr %11, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.s_fparams, ptr %700, i32 0, i32 6
  %702 = load ptr, ptr %701, align 8, !tbaa !31
  %703 = getelementptr inbounds i8, ptr %702, i64 0
  %704 = load i8, ptr %703, align 1, !tbaa !11
  %705 = sext i8 %704 to i32
  %706 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 0
  %707 = load i8, ptr %706, align 1, !tbaa !11
  %708 = sext i8 %707 to i32
  %709 = icmp eq i32 %705, %708
  br i1 %709, label %710, label %737

710:                                              ; preds = %699
  %711 = load ptr, ptr %11, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.s_fparams, ptr %711, i32 0, i32 6
  %713 = load ptr, ptr %712, align 8, !tbaa !31
  %714 = getelementptr inbounds i8, ptr %713, i64 1
  %715 = load i8, ptr %714, align 1, !tbaa !11
  %716 = sext i8 %715 to i32
  %717 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 1
  %718 = load i8, ptr %717, align 1, !tbaa !11
  %719 = sext i8 %718 to i32
  %720 = icmp eq i32 %716, %719
  br i1 %720, label %721, label %737

721:                                              ; preds = %710
  %722 = load ptr, ptr %11, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.s_fparams, ptr %722, i32 0, i32 6
  %724 = load ptr, ptr %723, align 8, !tbaa !31
  %725 = getelementptr inbounds i8, ptr %724, i64 2
  %726 = load i8, ptr %725, align 1, !tbaa !11
  %727 = sext i8 %726 to i32
  %728 = getelementptr inbounds [5 x i8], ptr %14, i64 0, i64 2
  %729 = load i8, ptr %728, align 1, !tbaa !11
  %730 = sext i8 %729 to i32
  %731 = icmp eq i32 %727, %730
  br i1 %731, label %732, label %737

732:                                              ; preds = %721, %670
  %733 = load ptr, ptr %12, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.s_pdb, ptr %733, i32 0, i32 9
  %735 = load i32, ptr %734, align 8, !tbaa !12
  %736 = add nsw i32 %735, 1
  store i32 %736, ptr %734, align 8, !tbaa !12
  br label %737

737:                                              ; preds = %732, %721, %710, %699, %693, %682, %677
  call void @llvm.lifetime.end.p0(i64 2, ptr %28) #5
  br label %738

738:                                              ; preds = %737, %639
  br label %739

739:                                              ; preds = %738, %636, %633, %630
  br label %760

740:                                              ; preds = %386, %382
  %741 = load i32, ptr %25, align 4, !tbaa !9
  %742 = icmp eq i32 %741, 1
  br i1 %742, label %743, label %748

743:                                              ; preds = %740
  %744 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %745 = call i32 @strncmp(ptr noundef %744, ptr noundef @.str.10, i64 noundef 6) #6
  %746 = icmp ne i32 %745, 0
  br i1 %746, label %748, label %747

747:                                              ; preds = %743
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %759

748:                                              ; preds = %743, %740
  %749 = load ptr, ptr %12, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.s_pdb, ptr %749, i32 0, i32 25
  %751 = load i32, ptr %750, align 8, !tbaa !18
  %752 = icmp eq i32 %751, 0
  br i1 %752, label %753, label %758

753:                                              ; preds = %748
  %754 = getelementptr inbounds [83 x i8], ptr %13, i64 0, i64 0
  %755 = call i32 @strncmp(ptr noundef %754, ptr noundef @.str.11, i64 noundef 3) #6
  %756 = icmp ne i32 %755, 0
  br i1 %756, label %758, label %757

757:                                              ; preds = %753
  br label %763

758:                                              ; preds = %753, %748
  br label %759

759:                                              ; preds = %758, %747
  br label %760

760:                                              ; preds = %759, %739
  br label %761

761:                                              ; preds = %760, %377
  br label %762

762:                                              ; preds = %761, %118
  br label %86, !llvm.loop !34

763:                                              ; preds = %757, %86
  %764 = load ptr, ptr %12, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.s_pdb, ptr %764, i32 0, i32 9
  %766 = load i32, ptr %765, align 8, !tbaa !12
  %767 = icmp ne i32 %766, 0
  br i1 %767, label %768, label %793

768:                                              ; preds = %763
  %769 = load ptr, ptr %12, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct.s_pdb, ptr %769, i32 0, i32 9
  %771 = load i32, ptr %770, align 8, !tbaa !12
  %772 = sext i32 %771 to i64
  %773 = mul i64 4, %772
  %774 = call ptr @my_malloc(i64 noundef %773)
  %775 = load ptr, ptr %12, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.s_pdb, ptr %775, i32 0, i32 6
  store ptr %774, ptr %776, align 8, !tbaa !15
  %777 = load ptr, ptr %12, align 8, !tbaa !5
  %778 = getelementptr inbounds %struct.s_pdb, ptr %777, i32 0, i32 9
  %779 = load i32, ptr %778, align 8, !tbaa !12
  %780 = sext i32 %779 to i64
  %781 = mul i64 4, %780
  %782 = call ptr @my_malloc(i64 noundef %781)
  %783 = load ptr, ptr %12, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.s_pdb, ptr %783, i32 0, i32 7
  store ptr %782, ptr %784, align 8, !tbaa !16
  %785 = load ptr, ptr %12, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.s_pdb, ptr %785, i32 0, i32 9
  %787 = load i32, ptr %786, align 8, !tbaa !12
  %788 = sext i32 %787 to i64
  %789 = mul i64 4, %788
  %790 = call ptr @my_malloc(i64 noundef %789)
  %791 = load ptr, ptr %12, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct.s_pdb, ptr %791, i32 0, i32 8
  store ptr %790, ptr %792, align 8, !tbaa !17
  br label %793

793:                                              ; preds = %768, %763
  %794 = load i32, ptr %16, align 4, !tbaa !9
  %795 = icmp eq i32 %794, 0
  br i1 %795, label %796, label %801

796:                                              ; preds = %793
  %797 = load ptr, ptr @stderr, align 8, !tbaa !5
  %798 = load ptr, ptr %7, align 8, !tbaa !5
  %799 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %797, ptr noundef @.str.12, ptr noundef %798) #5
  %800 = load ptr, ptr %12, align 8, !tbaa !5
  call void @my_free(ptr noundef %800)
  store ptr null, ptr %6, align 8
  store i32 1, ptr %27, align 4
  br label %854

801:                                              ; preds = %793
  %802 = load i32, ptr %16, align 4, !tbaa !9
  %803 = sext i32 %802 to i64
  %804 = call ptr @my_calloc(i64 noundef %803, i64 noundef 184)
  %805 = load ptr, ptr %12, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.s_pdb, ptr %805, i32 0, i32 2
  store ptr %804, ptr %806, align 8, !tbaa !35
  %807 = load i32, ptr %16, align 4, !tbaa !9
  %808 = sext i32 %807 to i64
  %809 = call ptr @my_calloc(i64 noundef %808, i64 noundef 8)
  %810 = load ptr, ptr %12, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.s_pdb, ptr %810, i32 0, i32 3
  store ptr %809, ptr %811, align 8, !tbaa !36
  %812 = load i32, ptr %15, align 4, !tbaa !9
  %813 = icmp sgt i32 %812, 0
  br i1 %813, label %814, label %820

814:                                              ; preds = %801
  %815 = load i32, ptr %15, align 4, !tbaa !9
  %816 = sext i32 %815 to i64
  %817 = call ptr @my_calloc(i64 noundef %816, i64 noundef 8)
  %818 = load ptr, ptr %12, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.s_pdb, ptr %818, i32 0, i32 4
  store ptr %817, ptr %819, align 8, !tbaa !37
  br label %823

820:                                              ; preds = %801
  %821 = load ptr, ptr %12, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.s_pdb, ptr %821, i32 0, i32 4
  store ptr null, ptr %822, align 8, !tbaa !37
  br label %823

823:                                              ; preds = %820, %814
  %824 = load i32, ptr %17, align 4, !tbaa !9
  %825 = icmp sgt i32 %824, 0
  br i1 %825, label %826, label %832

826:                                              ; preds = %823
  %827 = load i32, ptr %17, align 4, !tbaa !9
  %828 = sext i32 %827 to i64
  %829 = call ptr @my_calloc(i64 noundef %828, i64 noundef 8)
  %830 = load ptr, ptr %12, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.s_pdb, ptr %830, i32 0, i32 5
  store ptr %829, ptr %831, align 8, !tbaa !38
  br label %835

832:                                              ; preds = %823
  %833 = load ptr, ptr %12, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.s_pdb, ptr %833, i32 0, i32 5
  store ptr null, ptr %834, align 8, !tbaa !38
  br label %835

835:                                              ; preds = %832, %826
  %836 = load i32, ptr %16, align 4, !tbaa !9
  %837 = load ptr, ptr %12, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.s_pdb, ptr %837, i32 0, i32 10
  store i32 %836, ptr %838, align 4, !tbaa !39
  %839 = load i32, ptr %15, align 4, !tbaa !9
  %840 = load ptr, ptr %12, align 8, !tbaa !5
  %841 = getelementptr inbounds %struct.s_pdb, ptr %840, i32 0, i32 11
  store i32 %839, ptr %841, align 8, !tbaa !40
  %842 = load i32, ptr %17, align 4, !tbaa !9
  %843 = load ptr, ptr %12, align 8, !tbaa !5
  %844 = getelementptr inbounds %struct.s_pdb, ptr %843, i32 0, i32 12
  store i32 %842, ptr %844, align 4, !tbaa !41
  %845 = load ptr, ptr %12, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.s_pdb, ptr %845, i32 0, i32 21
  %847 = getelementptr inbounds [500 x i8], ptr %846, i64 0, i64 0
  %848 = load ptr, ptr %7, align 8, !tbaa !5
  %849 = call ptr @strcpy(ptr noundef %847, ptr noundef %848) #5
  %850 = load ptr, ptr %12, align 8, !tbaa !5
  %851 = getelementptr inbounds %struct.s_pdb, ptr %850, i32 0, i32 0
  %852 = load ptr, ptr %851, align 8, !tbaa !20
  call void @rewind(ptr noundef %852)
  %853 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %853, ptr %6, align 8
  store i32 1, ptr %27, align 4
  br label %854

854:                                              ; preds = %835, %796, %54
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 5, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 83, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  %855 = load ptr, ptr %6, align 8
  ret ptr %855
}

declare ptr @fopen_pdb_check_case(ptr noundef, ptr noundef) #1

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

declare void @rewind(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @is_ligand(ptr noundef, ptr noundef, i16 noundef zeroext) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @chains_to_delete(ptr noundef, ptr noundef, i32 noundef, i16 noundef zeroext) #4

declare ptr @my_calloc(i64 noundef, i64 noundef) #1

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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind willreturn memory(read) "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 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 #5 = { nounwind }
attributes #6 = { nounwind willreturn memory(read) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !10, i64 72}
!13 = !{!"s_pdb", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !14, i64 92, !14, i64 96, !14, i64 100, !14, i64 104, !14, i64 108, !14, i64 112, !7, i64 116, !7, i64 199, !14, i64 700, !14, i64 704, !14, i64 708, !10, i64 712, !10, i64 716}
!14 = !{!"float", !7, i64 0}
!15 = !{!13, !6, i64 48}
!16 = !{!13, !6, i64 56}
!17 = !{!13, !6, i64 64}
!18 = !{!13, !10, i64 712}
!19 = !{!13, !10, i64 716}
!20 = !{!13, !6, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!24, !25, i64 14290}
!24 = !{!"s_fparams", !7, i64 0, !7, i64 2000, !7, i64 4000, !7, i64 6000, !6, i64 14000, !6, i64 14008, !6, i64 14016, !10, i64 14024, !10, i64 14028, !6, i64 14032, !6, i64 14040, !6, i64 14048, !7, i64 14056, !7, i64 14057, !10, i64 14060, !10, i64 14064, !25, i64 14068, !10, i64 14072, !10, i64 14076, !10, i64 14080, !25, i64 14084, !10, i64 14088, !10, i64 14092, !10, i64 14096, !25, i64 14100, !14, i64 14104, !14, i64 14108, !14, i64 14112, !14, i64 14116, !14, i64 14120, !7, i64 14128, !25, i64 14288, !25, i64 14290, !7, i64 14296, !10, i64 14456, !7, i64 14460}
!25 = !{!"short", !7, i64 0}
!26 = !{!24, !10, i64 14456}
!27 = !{!24, !25, i64 14288}
!28 = !{!14, !14, i64 0}
!29 = !{!24, !10, i64 14024}
!30 = !{!24, !6, i64 14008}
!31 = !{!24, !6, i64 14016}
!32 = distinct !{!32, !22}
!33 = !{!25, !25, i64 0}
!34 = distinct !{!34, !22}
!35 = !{!13, !6, i64 16}
!36 = !{!13, !6, i64 24}
!37 = !{!13, !6, i64 32}
!38 = !{!13, !6, i64 40}
!39 = !{!13, !10, i64 76}
!40 = !{!13, !10, i64 80}
!41 = !{!13, !10, i64 84}


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

@stderr = external local_unnamed_addr global ptr, align 8
@ST_keep_hetatm = external hidden local_unnamed_addr global [1961 x ptr], align 16
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [34 x i8], align 1

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

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

declare ptr @my_malloc(i64 noundef) local_unnamed_addr #1

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

declare void @my_free(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local void @rpdb_extract_atm_resname(ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strncmp(ptr nocapture noundef, ptr nocapture noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strcpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare dso_local i32 @rpdb_extract_atm_resumber(ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local void @rpdb_extract_atom_coordinates(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
define dso_local ptr @rpdb_open(ptr noundef %0, ptr noundef readonly %1, i32 noundef %2, i32 noundef %3, ptr noundef %4) local_unnamed_addr #4 {
  %6 = alloca [83 x i8], align 16
  %7 = alloca [5 x i8], align 1
  %8 = alloca float, align 4
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  call void @llvm.lifetime.start.p0(i64 83, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 5, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #7
  %11 = tail call ptr @my_malloc(i64 noundef 2) #7
  %12 = getelementptr inbounds i8, ptr %11, i64 1
  store i8 0, ptr %12, align 1, !tbaa !5
  %13 = tail call ptr @my_malloc(i64 noundef 720) #7
  %14 = getelementptr inbounds i8, ptr %13, i64 72
  %15 = getelementptr inbounds i8, ptr %13, i64 48
  %16 = getelementptr inbounds i8, ptr %13, i64 56
  %17 = getelementptr inbounds i8, ptr %13, i64 64
  %18 = getelementptr inbounds i8, ptr %13, i64 712
  store i32 0, ptr %18, align 8, !tbaa !8
  %19 = getelementptr inbounds i8, ptr %13, i64 716
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(28) %15, i8 0, i64 28, i1 false)
  store i32 %3, ptr %19, align 4, !tbaa !13
  %20 = tail call ptr @fopen_pdb_check_case(ptr noundef %0, ptr noundef nonnull @.str.2) #7
  store ptr %20, ptr %13, align 8, !tbaa !14
  %.not = icmp eq ptr %20, null
  br i1 %.not, label %21, label %24

21:                                               ; preds = %5
  tail call void @my_free(ptr noundef nonnull %13) #7
  %22 = load ptr, ptr @stderr, align 8, !tbaa !15
  %23 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %22, ptr noundef nonnull @.str.3, ptr noundef %0) #8
  br label %373

24:                                               ; preds = %5
  %25 = icmp sgt i32 %3, 0
  br i1 %25, label %.preheader275, label %34

.preheader275:                                    ; preds = %24
  %26 = call ptr @fgets(ptr noundef nonnull %6, i32 noundef 82, ptr noundef nonnull %20)
  %.not233276 = icmp eq ptr %26, null
  br i1 %.not233276, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader275, %30
  %27 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.4, i64 noundef 5) #9
  %28 = icmp eq i32 %27, 0
  br i1 %28, label %29, label %30

29:                                               ; preds = %.lr.ph
  store i32 1, ptr %18, align 8, !tbaa !8
  br label %30

30:                                               ; preds = %29, %.lr.ph
  %31 = load ptr, ptr %13, align 8, !tbaa !14
  %32 = call ptr @fgets(ptr noundef nonnull %6, i32 noundef 82, ptr noundef %31)
  %.not233 = icmp eq ptr %32, null
  br i1 %.not233, label %._crit_edge, label %.lr.ph, !llvm.loop !16

._crit_edge:                                      ; preds = %30, %.preheader275
  %33 = load ptr, ptr %13, align 8, !tbaa !14
  call void @rewind(ptr noundef %33)
  %.pre = load ptr, ptr %13, align 8, !tbaa !14
  br label %34

34:                                               ; preds = %._crit_edge, %24
  %35 = phi ptr [ %.pre, %._crit_edge ], [ %20, %24 ]
  %36 = call ptr @fgets(ptr noundef nonnull %6, i32 noundef 82, ptr noundef %35)
  %.not234278 = icmp eq ptr %36, null
  br i1 %.not234278, label %._crit_edge287, label %.lr.ph286

.lr.ph286:                                        ; preds = %34
  %37 = getelementptr inbounds i8, ptr %6, i64 21
  %38 = getelementptr inbounds i8, ptr %4, i64 14296
  %39 = getelementptr inbounds i8, ptr %4, i64 14290
  %40 = getelementptr inbounds i8, ptr %4, i64 14128
  %41 = getelementptr inbounds i8, ptr %4, i64 14456
  %42 = getelementptr inbounds i8, ptr %4, i64 14288
  %43 = getelementptr inbounds i8, ptr %6, i64 16
  %.not296 = icmp eq ptr %1, null
  %44 = icmp eq i32 %2, 0
  %45 = icmp ne i32 %2, 0
  %46 = zext i1 %45 to i32
  %47 = getelementptr inbounds i8, ptr %1, i64 1
  %48 = getelementptr inbounds i8, ptr %7, i64 1
  %49 = getelementptr inbounds i8, ptr %1, i64 2
  %50 = getelementptr inbounds i8, ptr %7, i64 2
  %51 = getelementptr inbounds i8, ptr %4, i64 14024
  %52 = getelementptr inbounds i8, ptr %4, i64 14008
  %53 = getelementptr inbounds i8, ptr %4, i64 14016
  br label %54

54:                                               ; preds = %.lr.ph286, %328
  %.0202284 = phi i32 [ 0, %.lr.ph286 ], [ %.1304, %328 ]
  %.0203283 = phi i32 [ 0, %.lr.ph286 ], [ %.2, %328 ]
  %.0205282 = phi i32 [ 0, %.lr.ph286 ], [ %.3, %328 ]
  %.0208281 = phi i32 [ 0, %.lr.ph286 ], [ %.3211, %328 ]
  %.0213280 = phi i32 [ 0, %.lr.ph286 ], [ %.6, %328 ]
  %.0217279 = phi i32 [ 0, %.lr.ph286 ], [ %.5222, %328 ]
  %55 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.4, i64 noundef 5) #9
  %56 = icmp eq i32 %55, 0
  %or.cond3 = and i1 %25, %56
  %.pre299 = load i32, ptr %18, align 8, !tbaa !8
  br i1 %or.cond3, label %57, label %62

57:                                               ; preds = %54
  %.not235 = icmp eq i32 %.pre299, 0
  br i1 %.not235, label %.thread, label %59

.thread:                                          ; preds = %57
  %58 = icmp eq i32 %.0203283, 1
  br label %65

59:                                               ; preds = %57
  %60 = add nsw i32 %.0202284, 1
  %61 = icmp eq i32 %60, %3
  %spec.select = select i1 %61, i32 1, i32 %.0203283
  br label %62

62:                                               ; preds = %59, %54
  %.1204 = phi i32 [ %.0203283, %54 ], [ %spec.select, %59 ]
  %.1 = phi i32 [ %.0202284, %54 ], [ %60, %59 ]
  %63 = icmp eq i32 %.pre299, 0
  %64 = icmp eq i32 %.1204, 1
  %or.cond5 = select i1 %63, i1 true, i1 %64
  br i1 %or.cond5, label %65, label %328

65:                                               ; preds = %.thread, %62
  %66 = phi i1 [ %58, %.thread ], [ %64, %62 ]
  %.1305 = phi i32 [ %.0202284, %.thread ], [ %.1, %62 ]
  %.1204303 = phi i32 [ %.0203283, %.thread ], [ %.1204, %62 ]
  %67 = load i8, ptr %37, align 1, !tbaa !5
  store i8 %67, ptr %11, align 1, !tbaa !5
  %68 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.5, i64 noundef 5) #9
  %.not236 = icmp eq i32 %68, 0
  br i1 %.not236, label %69, label %169

69:                                               ; preds = %65
  %70 = load i16, ptr %39, align 2, !tbaa !18
  %71 = call i32 @is_ligand(ptr noundef nonnull %38, ptr noundef nonnull %11, i16 noundef zeroext %70)
  %.not237 = icmp eq i32 %71, 0
  br i1 %.not237, label %72, label %169

72:                                               ; preds = %69
  %73 = load i32, ptr %41, align 8, !tbaa !21
  %74 = load i16, ptr %42, align 8, !tbaa !22
  %75 = call i32 @chains_to_delete(ptr noundef nonnull %40, ptr noundef nonnull %11, i32 noundef %73, i16 noundef zeroext %74)
  %.not238 = icmp eq i32 %75, 0
  br i1 %.not238, label %78, label %76

76:                                               ; preds = %72
  call void @rpdb_extract_atm_resname(ptr noundef nonnull %6, ptr noundef nonnull %7)
  call void @rpdb_extract_atom_coordinates(ptr noundef nonnull %6, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10)
  %77 = call i32 @rpdb_extract_atm_resumber(ptr noundef nonnull %6)
  br label %78

78:                                               ; preds = %76, %72
  %.1209 = phi i32 [ %77, %76 ], [ %.0208281, %72 ]
  %79 = load i8, ptr %43, align 16
  %80 = icmp eq i8 %79, 32
  %81 = icmp eq i8 %79, 65
  %or.cond9 = or i1 %80, %81
  %82 = load float, ptr %8, align 4
  %83 = fcmp olt float %82, 9.990000e+03
  %or.cond11 = select i1 %or.cond9, i1 %83, i1 false
  %84 = load float, ptr %9, align 4
  %85 = fcmp olt float %84, 9.990000e+03
  %or.cond13 = select i1 %or.cond11, i1 %85, i1 false
  %86 = load float, ptr %10, align 4
  %87 = fcmp olt float %86, 9.990000e+03
  %or.cond15 = select i1 %or.cond13, i1 %87, i1 false
  br i1 %or.cond15, label %88, label %132

88:                                               ; preds = %78
  %89 = load i32, ptr %41, align 8, !tbaa !21
  %90 = load i16, ptr %42, align 8, !tbaa !22
  %91 = call i32 @chains_to_delete(ptr noundef nonnull %40, ptr noundef nonnull %11, i32 noundef %89, i16 noundef zeroext %90)
  %.not239 = icmp eq i32 %91, 0
  br i1 %.not239, label %123, label %92

92:                                               ; preds = %88
  br i1 %.not296, label %.critedge, label %93

93:                                               ; preds = %92
  %94 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %1) #9
  %95 = icmp ugt i64 %94, 1
  br i1 %95, label %96, label %112

96:                                               ; preds = %93
  %97 = load i8, ptr %1, align 1, !tbaa !5
  %98 = load i8, ptr %7, align 1, !tbaa !5
  %99 = icmp eq i8 %97, %98
  br i1 %99, label %100, label %.critedge

100:                                              ; preds = %96
  %101 = load i8, ptr %47, align 1, !tbaa !5
  %102 = load i8, ptr %48, align 1, !tbaa !5
  %103 = icmp eq i8 %101, %102
  br i1 %103, label %104, label %.critedge

104:                                              ; preds = %100
  %105 = load i8, ptr %49, align 1, !tbaa !5
  %106 = load i8, ptr %50, align 1, !tbaa !5
  %107 = icmp eq i8 %105, %106
  br i1 %107, label %108, label %.critedge

108:                                              ; preds = %104
  br i1 %44, label %123, label %109

109:                                              ; preds = %108
  %110 = add nsw i32 %.0213280, 1
  %111 = add nsw i32 %.0217279, 1
  br label %123

112:                                              ; preds = %93
  %113 = icmp eq i64 %94, 1
  br i1 %113, label %114, label %.critedge

114:                                              ; preds = %112
  %115 = load i8, ptr %37, align 1, !tbaa !5
  %116 = load i8, ptr %1, align 1, !tbaa !5
  %117 = icmp eq i8 %115, %116
  br i1 %117, label %118, label %.critedge

118:                                              ; preds = %114
  br i1 %44, label %123, label %119

119:                                              ; preds = %118
  %120 = add nsw i32 %.0213280, 1
  %121 = add nsw i32 %.0217279, 1
  br label %123

.critedge:                                        ; preds = %104, %100, %96, %92, %114, %112
  %122 = add nsw i32 %.0217279, 1
  br label %123

123:                                              ; preds = %109, %108, %118, %119, %.critedge, %88
  %.1218 = phi i32 [ %111, %109 ], [ %.0217279, %108 ], [ %121, %119 ], [ %.0217279, %118 ], [ %122, %.critedge ], [ %.0217279, %88 ]
  %.1214 = phi i32 [ %110, %109 ], [ %.0213280, %108 ], [ %120, %119 ], [ %.0213280, %118 ], [ %.0213280, %.critedge ], [ %.0213280, %88 ]
  %124 = load i32, ptr %51, align 8, !tbaa !23
  %125 = icmp sgt i32 %124, -1
  br i1 %125, label %126, label %132

126:                                              ; preds = %123
  %127 = load i16, ptr %39, align 2, !tbaa !18
  %128 = call i32 @is_ligand(ptr noundef nonnull %38, ptr noundef nonnull %11, i16 noundef zeroext %127)
  %.not243 = icmp eq i32 %128, 0
  br i1 %.not243, label %132, label %129

129:                                              ; preds = %126
  %130 = load i32, ptr %14, align 8, !tbaa !24
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %14, align 8, !tbaa !24
  br label %132

132:                                              ; preds = %123, %129, %126, %78
  %.2219 = phi i32 [ %.1218, %129 ], [ %.1218, %126 ], [ %.1218, %123 ], [ %.0217279, %78 ]
  %.2215 = phi i32 [ %.1214, %129 ], [ %.1214, %126 ], [ %.1214, %123 ], [ %.0213280, %78 ]
  %133 = load float, ptr %8, align 4, !tbaa !25
  %134 = fcmp olt float %133, 9.990000e+03
  %135 = load float, ptr %9, align 4
  %136 = fcmp olt float %135, 9.990000e+03
  %or.cond17 = select i1 %134, i1 %136, i1 false
  %137 = load float, ptr %10, align 4
  %138 = fcmp olt float %137, 9.990000e+03
  %or.cond19 = select i1 %or.cond17, i1 %138, i1 false
  br i1 %or.cond19, label %139, label %328

139:                                              ; preds = %132
  %140 = load i32, ptr %51, align 8, !tbaa !23
  %141 = icmp sgt i32 %140, -1
  br i1 %141, label %142, label %328

142:                                              ; preds = %139
  %143 = load i16, ptr %39, align 2, !tbaa !18
  %144 = call i32 @is_ligand(ptr noundef nonnull %38, ptr noundef nonnull %11, i16 noundef zeroext %143)
  %.not244 = icmp eq i32 %144, 0
  br i1 %.not244, label %145, label %.sink.split

145:                                              ; preds = %142
  %146 = load ptr, ptr %52, align 8, !tbaa !26
  %.not245 = icmp eq ptr %146, null
  br i1 %.not245, label %328, label %147

147:                                              ; preds = %145
  %148 = load i8, ptr %37, align 1, !tbaa !5
  %149 = load i8, ptr %146, align 1, !tbaa !5
  %150 = icmp eq i8 %148, %149
  br i1 %150, label %151, label %328

151:                                              ; preds = %147
  %152 = load i32, ptr %51, align 8, !tbaa !23
  %153 = icmp eq i32 %.1209, %152
  br i1 %153, label %154, label %328

154:                                              ; preds = %151
  %155 = load ptr, ptr %53, align 8, !tbaa !27
  %156 = load i8, ptr %155, align 1, !tbaa !5
  %157 = load i8, ptr %7, align 1, !tbaa !5
  %158 = icmp eq i8 %156, %157
  br i1 %158, label %159, label %328

159:                                              ; preds = %154
  %160 = getelementptr inbounds i8, ptr %155, i64 1
  %161 = load i8, ptr %160, align 1, !tbaa !5
  %162 = load i8, ptr %48, align 1, !tbaa !5
  %163 = icmp eq i8 %161, %162
  br i1 %163, label %164, label %328

164:                                              ; preds = %159
  %165 = getelementptr inbounds i8, ptr %155, i64 2
  %166 = load i8, ptr %165, align 1, !tbaa !5
  %167 = load i8, ptr %50, align 1, !tbaa !5
  %168 = icmp eq i8 %166, %167
  br i1 %168, label %.sink.split, label %328

169:                                              ; preds = %69, %65
  %170 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.6, i64 noundef 6) #9
  %.not246 = icmp eq i32 %170, 0
  br i1 %.not246, label %176, label %171

171:                                              ; preds = %169
  %172 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.5, i64 noundef 5) #9
  %.not247 = icmp eq i32 %172, 0
  br i1 %.not247, label %173, label %318

173:                                              ; preds = %171
  %174 = load i16, ptr %39, align 2, !tbaa !18
  %175 = call i32 @is_ligand(ptr noundef nonnull %38, ptr noundef nonnull %11, i16 noundef zeroext %174)
  %.not248 = icmp eq i32 %175, 0
  br i1 %.not248, label %318, label %176

176:                                              ; preds = %173, %169
  %177 = load i32, ptr %41, align 8, !tbaa !21
  %178 = load i16, ptr %42, align 8, !tbaa !22
  %179 = call i32 @chains_to_delete(ptr noundef nonnull %40, ptr noundef nonnull %11, i32 noundef %177, i16 noundef zeroext %178)
  %.not249 = icmp eq i32 %179, 0
  br i1 %.not249, label %182, label %180

180:                                              ; preds = %176
  call void @rpdb_extract_atom_coordinates(ptr noundef nonnull %6, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10)
  %181 = call i32 @rpdb_extract_atm_resumber(ptr noundef nonnull %6)
  br label %182

182:                                              ; preds = %180, %176
  %.2210 = phi i32 [ %181, %180 ], [ %.0208281, %176 ]
  %183 = load i8, ptr %43, align 16
  %184 = icmp eq i8 %183, 32
  %185 = icmp eq i8 %183, 65
  %or.cond23 = or i1 %184, %185
  %186 = load float, ptr %8, align 4
  %187 = fcmp olt float %186, 9.990000e+03
  %or.cond25 = select i1 %or.cond23, i1 %187, i1 false
  %188 = load float, ptr %9, align 4
  %189 = fcmp olt float %188, 9.990000e+03
  %or.cond27 = select i1 %or.cond25, i1 %189, i1 false
  %190 = load float, ptr %10, align 4
  %191 = fcmp olt float %190, 9.990000e+03
  %or.cond29 = select i1 %or.cond27, i1 %191, i1 false
  br i1 %or.cond29, label %192, label %275

192:                                              ; preds = %182
  %193 = load i32, ptr %41, align 8, !tbaa !21
  %194 = load i16, ptr %42, align 8, !tbaa !22
  %195 = call i32 @chains_to_delete(ptr noundef nonnull %40, ptr noundef nonnull %11, i32 noundef %193, i16 noundef zeroext %194)
  %.not250 = icmp eq i32 %195, 0
  br i1 %.not250, label %.loopexit, label %196

196:                                              ; preds = %192
  call void @rpdb_extract_atm_resname(ptr noundef nonnull %6, ptr noundef nonnull %7)
  br i1 %.not296, label %.critedge267, label %197

197:                                              ; preds = %196
  %198 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %1) #9
  %199 = icmp ugt i64 %198, 1
  %or.cond31 = and i1 %45, %199
  br i1 %or.cond31, label %200, label %215

200:                                              ; preds = %197
  %201 = load i8, ptr %1, align 1, !tbaa !5
  %202 = load i8, ptr %7, align 1, !tbaa !5
  %203 = icmp eq i8 %201, %202
  br i1 %203, label %204, label %.critedge267.thread.thread

204:                                              ; preds = %200
  %205 = load i8, ptr %47, align 1, !tbaa !5
  %206 = load i8, ptr %48, align 1, !tbaa !5
  %207 = icmp eq i8 %205, %206
  br i1 %207, label %208, label %.critedge267.thread.thread

208:                                              ; preds = %204
  %209 = load i8, ptr %49, align 1, !tbaa !5
  %210 = load i8, ptr %50, align 1, !tbaa !5
  %211 = icmp eq i8 %209, %210
  br i1 %211, label %212, label %.critedge267.thread.thread

212:                                              ; preds = %208
  %213 = add nsw i32 %.0213280, 1
  %214 = add nsw i32 %.0217279, 1
  br label %.loopexit

215:                                              ; preds = %197
  %216 = icmp eq i64 %198, 1
  br i1 %216, label %217, label %.critedge267.thread

217:                                              ; preds = %215
  %218 = load i8, ptr %1, align 1, !tbaa !5
  %219 = load i8, ptr %37, align 1, !tbaa !5
  %220 = icmp eq i8 %218, %219
  br i1 %220, label %221, label %.critedge267.thread

221:                                              ; preds = %217
  %spec.select268 = add nsw i32 %.0213280, %46
  %222 = add nsw i32 %.0217279, 1
  br label %.loopexit

.critedge267.thread:                              ; preds = %217, %215
  br i1 %44, label %.critedge295, label %.critedge267.thread.thread

.critedge267:                                     ; preds = %196
  br i1 %44, label %.critedge295, label %223

223:                                              ; preds = %.critedge267
  %224 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.7, i64 noundef 3) #9
  %.not251 = icmp eq i32 %224, 0
  br i1 %.not251, label %.critedge267.thread.thread, label %225

225:                                              ; preds = %223
  %226 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.8, i64 noundef 3) #9
  %.not252 = icmp eq i32 %226, 0
  br i1 %.not252, label %.critedge267.thread.thread, label %227

227:                                              ; preds = %225
  %228 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.9, i64 noundef 3) #9
  %.not253 = icmp eq i32 %228, 0
  br i1 %.not253, label %.critedge267.thread.thread, label %231

.critedge267.thread.thread:                       ; preds = %223, %225, %227, %208, %204, %200, %.critedge267.thread
  %229 = load i16, ptr %39, align 2, !tbaa !18
  %230 = call i32 @is_ligand(ptr noundef nonnull %38, ptr noundef nonnull %11, i16 noundef zeroext %229)
  %.not255 = icmp eq i32 %230, 0
  br i1 %.not255, label %.critedge295, label %231

231:                                              ; preds = %.critedge267.thread.thread, %227
  %232 = add nsw i32 %.0217279, 1
  %233 = add nsw i32 %.0205282, 1
  br label %.loopexit

.critedge295:                                     ; preds = %.critedge267, %.critedge267.thread, %.critedge267.thread.thread
  %234 = load i16, ptr %39, align 2, !tbaa !18
  %235 = call i32 @is_ligand(ptr noundef nonnull %38, ptr noundef nonnull %11, i16 noundef zeroext %234)
  %.not256 = icmp eq i32 %235, 0
  br i1 %.not256, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %.critedge295
  %236 = load i8, ptr %7, align 1, !tbaa !5
  %237 = load i8, ptr %48, align 1
  %238 = load i8, ptr %50, align 1
  br label %239

239:                                              ; preds = %269, %.preheader
  %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next.1, %269 ]
  %240 = getelementptr inbounds [1961 x ptr], ptr @ST_keep_hetatm, i64 0, i64 %indvars.iv
  %241 = load ptr, ptr %240, align 16, !tbaa !15
  %242 = load i8, ptr %241, align 1, !tbaa !5
  %243 = icmp eq i8 %242, %236
  br i1 %243, label %244, label %255

244:                                              ; preds = %239
  %245 = getelementptr inbounds i8, ptr %241, i64 1
  %246 = load i8, ptr %245, align 1, !tbaa !5
  %247 = icmp eq i8 %246, %237
  br i1 %247, label %248, label %255

248:                                              ; preds = %244
  %249 = getelementptr inbounds i8, ptr %241, i64 2
  %250 = load i8, ptr %249, align 1, !tbaa !5
  %251 = icmp eq i8 %250, %238
  br i1 %251, label %252, label %255

252:                                              ; preds = %265, %248
  %253 = add nsw i32 %.0205282, 1
  %254 = add nsw i32 %.0217279, 1
  br label %.loopexit

255:                                              ; preds = %239, %244, %248
  %exitcond.not = icmp eq i64 %indvars.iv, 1960
  br i1 %exitcond.not, label %.loopexit, label %256, !llvm.loop !28

256:                                              ; preds = %255
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %257 = getelementptr inbounds [1961 x ptr], ptr @ST_keep_hetatm, i64 0, i64 %indvars.iv.next
  %258 = load ptr, ptr %257, align 8, !tbaa !15
  %259 = load i8, ptr %258, align 1, !tbaa !5
  %260 = icmp eq i8 %259, %236
  br i1 %260, label %261, label %269

261:                                              ; preds = %256
  %262 = getelementptr inbounds i8, ptr %258, i64 1
  %263 = load i8, ptr %262, align 1, !tbaa !5
  %264 = icmp eq i8 %263, %237
  br i1 %264, label %265, label %269

265:                                              ; preds = %261
  %266 = getelementptr inbounds i8, ptr %258, i64 2
  %267 = load i8, ptr %266, align 1, !tbaa !5
  %268 = icmp eq i8 %267, %238
  br i1 %268, label %252, label %269

269:                                              ; preds = %265, %261, %256
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  br label %239

.loopexit:                                        ; preds = %255, %212, %231, %252, %.critedge295, %221, %192
  %.3220 = phi i32 [ %214, %212 ], [ %222, %221 ], [ %232, %231 ], [ %.0217279, %.critedge295 ], [ %254, %252 ], [ %.0217279, %192 ], [ %.0217279, %255 ]
  %.4 = phi i32 [ %213, %212 ], [ %spec.select268, %221 ], [ %.0213280, %231 ], [ %.0213280, %.critedge295 ], [ %.0213280, %252 ], [ %.0213280, %192 ], [ %.0213280, %255 ]
  %.1206 = phi i32 [ %.0205282, %212 ], [ %.0205282, %221 ], [ %233, %231 ], [ %.0205282, %.critedge295 ], [ %253, %252 ], [ %.0205282, %192 ], [ %.0205282, %255 ]
  %270 = load i16, ptr %39, align 2, !tbaa !18
  %271 = call i32 @is_ligand(ptr noundef nonnull %38, ptr noundef nonnull %11, i16 noundef zeroext %270)
  %.not258 = icmp eq i32 %271, 0
  br i1 %.not258, label %275, label %272

272:                                              ; preds = %.loopexit
  %273 = load i32, ptr %14, align 8, !tbaa !24
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %14, align 8, !tbaa !24
  br label %275

275:                                              ; preds = %.loopexit, %272, %182
  %.4221 = phi i32 [ %.3220, %272 ], [ %.3220, %.loopexit ], [ %.0217279, %182 ]
  %.5 = phi i32 [ %.4, %272 ], [ %.4, %.loopexit ], [ %.0213280, %182 ]
  %.2207 = phi i32 [ %.1206, %272 ], [ %.1206, %.loopexit ], [ %.0205282, %182 ]
  %276 = load float, ptr %8, align 4, !tbaa !25
  %277 = fcmp olt float %276, 9.990000e+03
  %278 = load float, ptr %9, align 4
  %279 = fcmp olt float %278, 9.990000e+03
  %or.cond35 = select i1 %277, i1 %279, i1 false
  %280 = load float, ptr %10, align 4
  %281 = fcmp olt float %280, 9.990000e+03
  %or.cond37 = select i1 %or.cond35, i1 %281, i1 false
  br i1 %or.cond37, label %282, label %328

282:                                              ; preds = %275
  call void @rpdb_extract_atm_resname(ptr noundef nonnull %6, ptr noundef nonnull %7)
  %283 = call i32 @rpdb_extract_atm_resumber(ptr noundef nonnull %6)
  %284 = load i32, ptr %51, align 8, !tbaa !23
  %285 = icmp sgt i32 %284, -1
  br i1 %285, label %286, label %328

286:                                              ; preds = %282
  %287 = load i16, ptr %39, align 2, !tbaa !18
  %288 = call i32 @is_ligand(ptr noundef nonnull %38, ptr noundef nonnull %11, i16 noundef zeroext %287)
  %.not259 = icmp eq i32 %288, 0
  br i1 %.not259, label %.critedge270, label %289

289:                                              ; preds = %286
  %290 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.7, i64 noundef 3) #9
  %.not260 = icmp eq i32 %290, 0
  br i1 %.not260, label %.critedge270, label %291

291:                                              ; preds = %289
  %292 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.8, i64 noundef 3) #9
  %.not261 = icmp eq i32 %292, 0
  br i1 %.not261, label %.critedge270, label %293

293:                                              ; preds = %291
  %294 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.9, i64 noundef 3) #9
  %.not274 = icmp eq i32 %294, 0
  br i1 %.not274, label %.critedge270, label %.sink.split

.critedge270:                                     ; preds = %291, %289, %286, %293
  %295 = load ptr, ptr %52, align 8, !tbaa !26
  %.not262 = icmp eq ptr %295, null
  br i1 %.not262, label %328, label %296

296:                                              ; preds = %.critedge270
  %297 = load i8, ptr %37, align 1, !tbaa !5
  %298 = load i8, ptr %295, align 1, !tbaa !5
  %299 = icmp eq i8 %297, %298
  br i1 %299, label %300, label %328

300:                                              ; preds = %296
  %301 = load i32, ptr %51, align 8, !tbaa !23
  %302 = icmp eq i32 %283, %301
  br i1 %302, label %303, label %328

303:                                              ; preds = %300
  %304 = load ptr, ptr %53, align 8, !tbaa !27
  %305 = load i8, ptr %304, align 1, !tbaa !5
  %306 = load i8, ptr %7, align 1, !tbaa !5
  %307 = icmp eq i8 %305, %306
  br i1 %307, label %308, label %328

308:                                              ; preds = %303
  %309 = getelementptr inbounds i8, ptr %304, i64 1
  %310 = load i8, ptr %309, align 1, !tbaa !5
  %311 = load i8, ptr %48, align 1, !tbaa !5
  %312 = icmp eq i8 %310, %311
  br i1 %312, label %313, label %328

313:                                              ; preds = %308
  %314 = getelementptr inbounds i8, ptr %304, i64 2
  %315 = load i8, ptr %314, align 1, !tbaa !5
  %316 = load i8, ptr %50, align 1, !tbaa !5
  %317 = icmp eq i8 %315, %316
  br i1 %317, label %.sink.split, label %328

318:                                              ; preds = %173, %171
  br i1 %66, label %319, label %321

319:                                              ; preds = %318
  %320 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.10, i64 noundef 6) #9
  %.not263 = icmp eq i32 %320, 0
  br i1 %.not263, label %328, label %321

321:                                              ; preds = %319, %318
  %322 = load i32, ptr %18, align 8, !tbaa !8
  %323 = icmp eq i32 %322, 0
  br i1 %323, label %324, label %328

324:                                              ; preds = %321
  %325 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.11, i64 noundef 3) #9
  %.not264 = icmp eq i32 %325, 0
  br i1 %.not264, label %._crit_edge287, label %328

.sink.split:                                      ; preds = %293, %313, %164, %142
  %.5222.ph = phi i32 [ %.2219, %142 ], [ %.2219, %164 ], [ %.4221, %313 ], [ %.4221, %293 ]
  %.6.ph = phi i32 [ %.2215, %142 ], [ %.2215, %164 ], [ %.5, %313 ], [ %.5, %293 ]
  %.3211.ph = phi i32 [ %.1209, %142 ], [ %.1209, %164 ], [ %283, %313 ], [ %283, %293 ]
  %.3.ph = phi i32 [ %.0205282, %142 ], [ %.0205282, %164 ], [ %.2207, %313 ], [ %.2207, %293 ]
  %326 = load i32, ptr %14, align 8, !tbaa !24
  %327 = add nsw i32 %326, 1
  store i32 %327, ptr %14, align 8, !tbaa !24
  br label %328

328:                                              ; preds = %.sink.split, %319, %.critedge270, %296, %300, %303, %308, %313, %139, %145, %147, %151, %154, %159, %164, %132, %324, %321, %275, %282, %62
  %.1304 = phi i32 [ %.1305, %324 ], [ %.1305, %321 ], [ %.1305, %282 ], [ %.1305, %275 ], [ %.1305, %164 ], [ %.1305, %159 ], [ %.1305, %154 ], [ %.1305, %151 ], [ %.1305, %147 ], [ %.1305, %145 ], [ %.1305, %139 ], [ %.1305, %132 ], [ %.1, %62 ], [ %.1305, %313 ], [ %.1305, %308 ], [ %.1305, %303 ], [ %.1305, %300 ], [ %.1305, %296 ], [ %.1305, %.critedge270 ], [ %.1305, %319 ], [ %.1305, %.sink.split ]
  %.5222 = phi i32 [ %.0217279, %324 ], [ %.0217279, %321 ], [ %.4221, %282 ], [ %.4221, %275 ], [ %.2219, %164 ], [ %.2219, %159 ], [ %.2219, %154 ], [ %.2219, %151 ], [ %.2219, %147 ], [ %.2219, %145 ], [ %.2219, %139 ], [ %.2219, %132 ], [ %.0217279, %62 ], [ %.4221, %313 ], [ %.4221, %308 ], [ %.4221, %303 ], [ %.4221, %300 ], [ %.4221, %296 ], [ %.4221, %.critedge270 ], [ %.0217279, %319 ], [ %.5222.ph, %.sink.split ]
  %.6 = phi i32 [ %.0213280, %324 ], [ %.0213280, %321 ], [ %.5, %282 ], [ %.5, %275 ], [ %.2215, %164 ], [ %.2215, %159 ], [ %.2215, %154 ], [ %.2215, %151 ], [ %.2215, %147 ], [ %.2215, %145 ], [ %.2215, %139 ], [ %.2215, %132 ], [ %.0213280, %62 ], [ %.5, %313 ], [ %.5, %308 ], [ %.5, %303 ], [ %.5, %300 ], [ %.5, %296 ], [ %.5, %.critedge270 ], [ %.0213280, %319 ], [ %.6.ph, %.sink.split ]
  %.3211 = phi i32 [ %.0208281, %324 ], [ %.0208281, %321 ], [ %283, %282 ], [ %.2210, %275 ], [ %.1209, %164 ], [ %.1209, %159 ], [ %.1209, %154 ], [ %.1209, %151 ], [ %.1209, %147 ], [ %.1209, %145 ], [ %.1209, %139 ], [ %.1209, %132 ], [ %.0208281, %62 ], [ %283, %313 ], [ %283, %308 ], [ %283, %303 ], [ %283, %300 ], [ %283, %296 ], [ %283, %.critedge270 ], [ %.0208281, %319 ], [ %.3211.ph, %.sink.split ]
  %.3 = phi i32 [ %.0205282, %324 ], [ %.0205282, %321 ], [ %.2207, %282 ], [ %.2207, %275 ], [ %.0205282, %164 ], [ %.0205282, %159 ], [ %.0205282, %154 ], [ %.0205282, %151 ], [ %.0205282, %147 ], [ %.0205282, %145 ], [ %.0205282, %139 ], [ %.0205282, %132 ], [ %.0205282, %62 ], [ %.2207, %313 ], [ %.2207, %308 ], [ %.2207, %303 ], [ %.2207, %300 ], [ %.2207, %296 ], [ %.2207, %.critedge270 ], [ %.0205282, %319 ], [ %.3.ph, %.sink.split ]
  %.2 = phi i32 [ %.1204303, %324 ], [ %.1204303, %321 ], [ %.1204303, %282 ], [ %.1204303, %275 ], [ %.1204303, %164 ], [ %.1204303, %159 ], [ %.1204303, %154 ], [ %.1204303, %151 ], [ %.1204303, %147 ], [ %.1204303, %145 ], [ %.1204303, %139 ], [ %.1204303, %132 ], [ 0, %62 ], [ %.1204303, %313 ], [ %.1204303, %308 ], [ %.1204303, %303 ], [ %.1204303, %300 ], [ %.1204303, %296 ], [ %.1204303, %.critedge270 ], [ 0, %319 ], [ %.1204303, %.sink.split ]
  %329 = load ptr, ptr %13, align 8, !tbaa !14
  %330 = call ptr @fgets(ptr noundef nonnull %6, i32 noundef 82, ptr noundef %329)
  %.not234 = icmp eq ptr %330, null
  br i1 %.not234, label %._crit_edge287, label %54, !llvm.loop !29

._crit_edge287:                                   ; preds = %328, %324, %34
  %.0217.lcssa = phi i32 [ 0, %34 ], [ %.0217279, %324 ], [ %.5222, %328 ]
  %.0213.lcssa = phi i32 [ 0, %34 ], [ %.0213280, %324 ], [ %.6, %328 ]
  %.0205.lcssa = phi i32 [ 0, %34 ], [ %.0205282, %324 ], [ %.3, %328 ]
  %331 = load i32, ptr %14, align 8, !tbaa !24
  %.not265 = icmp eq i32 %331, 0
  br i1 %.not265, label %344, label %332

332:                                              ; preds = %._crit_edge287
  %333 = sext i32 %331 to i64
  %334 = shl nsw i64 %333, 2
  %335 = call ptr @my_malloc(i64 noundef %334) #7
  store ptr %335, ptr %15, align 8, !tbaa !30
  %336 = load i32, ptr %14, align 8, !tbaa !24
  %337 = sext i32 %336 to i64
  %338 = shl nsw i64 %337, 2
  %339 = call ptr @my_malloc(i64 noundef %338) #7
  store ptr %339, ptr %16, align 8, !tbaa !31
  %340 = load i32, ptr %14, align 8, !tbaa !24
  %341 = sext i32 %340 to i64
  %342 = shl nsw i64 %341, 2
  %343 = call ptr @my_malloc(i64 noundef %342) #7
  store ptr %343, ptr %17, align 8, !tbaa !32
  br label %344

344:                                              ; preds = %332, %._crit_edge287
  %345 = icmp eq i32 %.0217.lcssa, 0
  br i1 %345, label %346, label %349

346:                                              ; preds = %344
  %347 = load ptr, ptr @stderr, align 8, !tbaa !15
  %348 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %347, ptr noundef nonnull @.str.12, ptr noundef %0) #8
  call void @my_free(ptr noundef nonnull %13) #7
  br label %373

349:                                              ; preds = %344
  %350 = sext i32 %.0217.lcssa to i64
  %351 = call ptr @my_calloc(i64 noundef %350, i64 noundef 184) #7
  %352 = getelementptr inbounds i8, ptr %13, i64 16
  store ptr %351, ptr %352, align 8, !tbaa !33
  %353 = call ptr @my_calloc(i64 noundef %350, i64 noundef 8) #7
  %354 = getelementptr inbounds i8, ptr %13, i64 24
  store ptr %353, ptr %354, align 8, !tbaa !34
  %355 = icmp sgt i32 %.0205.lcssa, 0
  br i1 %355, label %356, label %359

356:                                              ; preds = %349
  %357 = zext nneg i32 %.0205.lcssa to i64
  %358 = call ptr @my_calloc(i64 noundef %357, i64 noundef 8) #7
  br label %359

359:                                              ; preds = %349, %356
  %.sink = phi ptr [ %358, %356 ], [ null, %349 ]
  %360 = getelementptr inbounds i8, ptr %13, i64 32
  store ptr %.sink, ptr %360, align 8
  %361 = icmp sgt i32 %.0213.lcssa, 0
  br i1 %361, label %362, label %365

362:                                              ; preds = %359
  %363 = zext nneg i32 %.0213.lcssa to i64
  %364 = call ptr @my_calloc(i64 noundef %363, i64 noundef 8) #7
  br label %365

365:                                              ; preds = %359, %362
  %.sink298 = phi ptr [ %364, %362 ], [ null, %359 ]
  %366 = getelementptr inbounds i8, ptr %13, i64 40
  store ptr %.sink298, ptr %366, align 8
  %367 = getelementptr inbounds i8, ptr %13, i64 76
  store i32 %.0217.lcssa, ptr %367, align 4, !tbaa !35
  %368 = getelementptr inbounds i8, ptr %13, i64 80
  store i32 %.0205.lcssa, ptr %368, align 8, !tbaa !36
  %369 = getelementptr inbounds i8, ptr %13, i64 84
  store i32 %.0213.lcssa, ptr %369, align 4, !tbaa !37
  %370 = getelementptr inbounds i8, ptr %13, i64 199
  %371 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %370, ptr noundef nonnull dereferenceable(1) %0) #7
  %372 = load ptr, ptr %13, align 8, !tbaa !14
  call void @rewind(ptr noundef %372)
  br label %373

373:                                              ; preds = %365, %346, %21
  %.0 = phi ptr [ null, %346 ], [ %13, %365 ], [ null, %21 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 5, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 83, ptr nonnull %6) #7
  ret ptr %.0
}

declare ptr @fopen_pdb_check_case(ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @is_ligand(ptr noundef, ptr noundef, i16 noundef zeroext) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @chains_to_delete(ptr noundef, ptr noundef, i32 noundef, i16 noundef zeroext) local_unnamed_addr #4

declare ptr @my_calloc(i64 noundef, i64 noundef) local_unnamed_addr #1

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

attributes #0 = { mustprogress 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 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 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 #5 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nounwind }
attributes #8 = { cold nounwind }
attributes #9 = { nounwind willreturn memory(read) }

!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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9, !11, i64 712}
!9 = !{!"s_pdb", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !12, i64 92, !12, i64 96, !12, i64 100, !12, i64 104, !12, i64 108, !12, i64 112, !6, i64 116, !6, i64 199, !12, i64 700, !12, i64 704, !12, i64 708, !11, i64 712, !11, i64 716}
!10 = !{!"any pointer", !6, i64 0}
!11 = !{!"int", !6, i64 0}
!12 = !{!"float", !6, i64 0}
!13 = !{!9, !11, i64 716}
!14 = !{!9, !10, i64 0}
!15 = !{!10, !10, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!19, !20, i64 14290}
!19 = !{!"s_fparams", !6, i64 0, !6, i64 2000, !6, i64 4000, !6, i64 6000, !10, i64 14000, !10, i64 14008, !10, i64 14016, !11, i64 14024, !11, i64 14028, !10, i64 14032, !10, i64 14040, !10, i64 14048, !6, i64 14056, !6, i64 14057, !11, i64 14060, !11, i64 14064, !20, i64 14068, !11, i64 14072, !11, i64 14076, !11, i64 14080, !20, i64 14084, !11, i64 14088, !11, i64 14092, !11, i64 14096, !20, i64 14100, !12, i64 14104, !12, i64 14108, !12, i64 14112, !12, i64 14116, !12, i64 14120, !6, i64 14128, !20, i64 14288, !20, i64 14290, !6, i64 14296, !11, i64 14456, !6, i64 14460}
!20 = !{!"short", !6, i64 0}
!21 = !{!19, !11, i64 14456}
!22 = !{!19, !20, i64 14288}
!23 = !{!19, !11, i64 14024}
!24 = !{!9, !11, i64 72}
!25 = !{!12, !12, i64 0}
!26 = !{!19, !10, i64 14008}
!27 = !{!19, !10, i64 14016}
!28 = distinct !{!28, !17}
!29 = distinct !{!29, !17}
!30 = !{!9, !10, i64 48}
!31 = !{!9, !10, i64 56}
!32 = !{!9, !10, i64 64}
!33 = !{!9, !10, i64 16}
!34 = !{!9, !10, i64 24}
!35 = !{!9, !11, i64 76}
!36 = !{!9, !11, i64 80}
!37 = !{!9, !11, i64 84}


; Effective O3 passes: ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass