; LLVM IR from gost-engine/engine :: gost_crypt (GOST_init_cipher)

; 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.gost_cipher_st = type { ptr, i32, ptr, i32, i32, i32, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [34 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [48 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local ptr @GOST_init_cipher(ptr noundef %0) #0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  %7 = load ptr, ptr %3, align 8, !tbaa !5
  %8 = getelementptr inbounds %struct.gost_cipher_st, ptr %7, i32 0, i32 2
  %9 = load ptr, ptr %8, align 8, !tbaa !9
  %10 = icmp ne ptr %9, null
  br i1 %10, label %11, label %15

11:                                               ; preds = %1
  %12 = load ptr, ptr %3, align 8, !tbaa !5
  %13 = getelementptr inbounds %struct.gost_cipher_st, ptr %12, i32 0, i32 2
  %14 = load ptr, ptr %13, align 8, !tbaa !9
  store ptr %14, ptr %2, align 8
  br label %402

15:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  %16 = load ptr, ptr %3, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.gost_cipher_st, ptr %16, i32 0, i32 6
  %18 = load i32, ptr %17, align 4, !tbaa !12
  %19 = load ptr, ptr %3, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.gost_cipher_st, ptr %19, i32 0, i32 0
  %21 = load ptr, ptr %20, align 8, !tbaa !13
  %22 = icmp ne ptr %21, null
  br i1 %22, label %23, label %29

23:                                               ; preds = %15
  %24 = load ptr, ptr %3, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.gost_cipher_st, ptr %24, i32 0, i32 0
  %26 = load ptr, ptr %25, align 8, !tbaa !13
  %27 = getelementptr inbounds %struct.gost_cipher_st, ptr %26, i32 0, i32 6
  %28 = load i32, ptr %27, align 4, !tbaa !12
  br label %30

29:                                               ; preds = %15
  br label %30

30:                                               ; preds = %29, %23
  %31 = phi i32 [ %28, %23 ], [ 0, %29 ]
  %32 = or i32 %18, %31
  store i32 %32, ptr %4, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  %33 = load ptr, ptr %3, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.gost_cipher_st, ptr %33, i32 0, i32 3
  %35 = load i32, ptr %34, align 8, !tbaa !15
  %36 = icmp ne i32 %35, 0
  br i1 %36, label %37, label %41

37:                                               ; preds = %30
  %38 = load ptr, ptr %3, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.gost_cipher_st, ptr %38, i32 0, i32 3
  %40 = load i32, ptr %39, align 8, !tbaa !15
  br label %55

41:                                               ; preds = %30
  %42 = load ptr, ptr %3, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.gost_cipher_st, ptr %42, i32 0, i32 0
  %44 = load ptr, ptr %43, align 8, !tbaa !13
  %45 = icmp ne ptr %44, null
  br i1 %45, label %46, label %52

46:                                               ; preds = %41
  %47 = load ptr, ptr %3, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.gost_cipher_st, ptr %47, i32 0, i32 0
  %49 = load ptr, ptr %48, align 8, !tbaa !13
  %50 = getelementptr inbounds %struct.gost_cipher_st, ptr %49, i32 0, i32 3
  %51 = load i32, ptr %50, align 8, !tbaa !15
  br label %53

52:                                               ; preds = %41
  br label %53

53:                                               ; preds = %52, %46
  %54 = phi i32 [ %51, %46 ], [ 0, %52 ]
  br label %55

55:                                               ; preds = %53, %37
  %56 = phi i32 [ %40, %37 ], [ %54, %53 ]
  store i32 %56, ptr %5, align 4, !tbaa !14
  %57 = load i32, ptr %4, align 4, !tbaa !14
  %58 = and i32 %57, 983047
  switch i32 %58, label %75 [
    i32 2, label %59
    i32 1, label %59
    i32 65538, label %59
  ]

59:                                               ; preds = %55, %55, %55
  %60 = load i32, ptr %5, align 4, !tbaa !14
  %61 = icmp ne i32 %60, 1
  br i1 %61, label %62, label %63

62:                                               ; preds = %59
  br label %65

63:                                               ; preds = %59
  call void @OPENSSL_die(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 103) #5
  unreachable

64:                                               ; No predecessors!
  br label %65

65:                                               ; preds = %64, %62
  %66 = phi i32 [ 0, %62 ], [ 1, %64 ]
  %67 = load i32, ptr %4, align 4, !tbaa !14
  %68 = and i32 %67, 256
  %69 = icmp ne i32 %68, 0
  br i1 %69, label %71, label %70

70:                                               ; preds = %65
  br label %73

71:                                               ; preds = %65
  call void @OPENSSL_die(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 104) #5
  unreachable

72:                                               ; No predecessors!
  br label %73

73:                                               ; preds = %72, %70
  %74 = phi i32 [ 0, %70 ], [ 1, %72 ]
  br label %91

75:                                               ; preds = %55
  %76 = load i32, ptr %5, align 4, !tbaa !14
  %77 = icmp eq i32 %76, 1
  br i1 %77, label %78, label %79

78:                                               ; preds = %75
  br label %81

79:                                               ; preds = %75
  call void @OPENSSL_die(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 107) #5
  unreachable

80:                                               ; No predecessors!
  br label %81

81:                                               ; preds = %80, %78
  %82 = phi i32 [ 0, %78 ], [ 1, %80 ]
  %83 = load i32, ptr %4, align 4, !tbaa !14
  %84 = and i32 %83, 256
  %85 = icmp ne i32 %84, 0
  br i1 %85, label %86, label %87

86:                                               ; preds = %81
  br label %89

87:                                               ; preds = %81
  call void @OPENSSL_die(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 108) #5
  unreachable

88:                                               ; No predecessors!
  br label %89

89:                                               ; preds = %88, %86
  %90 = phi i32 [ 0, %86 ], [ 1, %88 ]
  br label %91

91:                                               ; preds = %89, %73
  %92 = load ptr, ptr %3, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.gost_cipher_st, ptr %92, i32 0, i32 5
  %94 = load i32, ptr %93, align 8, !tbaa !16
  %95 = icmp ne i32 %94, 0
  br i1 %95, label %96, label %101

96:                                               ; preds = %91
  %97 = load ptr, ptr %3, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.gost_cipher_st, ptr %97, i32 0, i32 5
  %99 = load i32, ptr %98, align 8, !tbaa !16
  %100 = icmp ne i32 %99, 0
  br i1 %100, label %114, label %123

101:                                              ; preds = %91
  %102 = load ptr, ptr %3, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.gost_cipher_st, ptr %102, i32 0, i32 0
  %104 = load ptr, ptr %103, align 8, !tbaa !13
  %105 = icmp ne ptr %104, null
  br i1 %105, label %106, label %113

106:                                              ; preds = %101
  %107 = load ptr, ptr %3, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.gost_cipher_st, ptr %107, i32 0, i32 0
  %109 = load ptr, ptr %108, align 8, !tbaa !13
  %110 = getelementptr inbounds %struct.gost_cipher_st, ptr %109, i32 0, i32 5
  %111 = load i32, ptr %110, align 8, !tbaa !16
  %112 = icmp ne i32 %111, 0
  br i1 %112, label %114, label %123

113:                                              ; preds = %101
  br i1 false, label %114, label %123

114:                                              ; preds = %113, %106, %96
  %115 = load i32, ptr %4, align 4, !tbaa !14
  %116 = and i32 %115, 16
  %117 = icmp ne i32 %116, 0
  br i1 %117, label %118, label %119

118:                                              ; preds = %114
  br label %121

119:                                              ; preds = %114
  call void @OPENSSL_die(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 112) #5
  unreachable

120:                                              ; No predecessors!
  br label %121

121:                                              ; preds = %120, %118
  %122 = phi i32 [ 0, %118 ], [ 1, %120 ]
  br label %132

123:                                              ; preds = %113, %106, %96
  %124 = load i32, ptr %4, align 4, !tbaa !14
  %125 = and i32 %124, 16
  %126 = icmp ne i32 %125, 0
  br i1 %126, label %128, label %127

127:                                              ; preds = %123
  br label %130

128:                                              ; preds = %123
  call void @OPENSSL_die(ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 114) #5
  unreachable

129:                                              ; No predecessors!
  br label %130

130:                                              ; preds = %129, %127
  %131 = phi i32 [ 0, %127 ], [ 1, %129 ]
  br label %132

132:                                              ; preds = %130, %121
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  %133 = load ptr, ptr %3, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.gost_cipher_st, ptr %133, i32 0, i32 1
  %135 = load i32, ptr %134, align 8, !tbaa !17
  %136 = load i32, ptr %5, align 4, !tbaa !14
  %137 = load ptr, ptr %3, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.gost_cipher_st, ptr %137, i32 0, i32 4
  %139 = load i32, ptr %138, align 4, !tbaa !18
  %140 = icmp ne i32 %139, 0
  br i1 %140, label %141, label %145

141:                                              ; preds = %132
  %142 = load ptr, ptr %3, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.gost_cipher_st, ptr %142, i32 0, i32 4
  %144 = load i32, ptr %143, align 4, !tbaa !18
  br label %159

145:                                              ; preds = %132
  %146 = load ptr, ptr %3, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.gost_cipher_st, ptr %146, i32 0, i32 0
  %148 = load ptr, ptr %147, align 8, !tbaa !13
  %149 = icmp ne ptr %148, null
  br i1 %149, label %150, label %156

150:                                              ; preds = %145
  %151 = load ptr, ptr %3, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.gost_cipher_st, ptr %151, i32 0, i32 0
  %153 = load ptr, ptr %152, align 8, !tbaa !13
  %154 = getelementptr inbounds %struct.gost_cipher_st, ptr %153, i32 0, i32 4
  %155 = load i32, ptr %154, align 4, !tbaa !18
  br label %157

156:                                              ; preds = %145
  br label %157

157:                                              ; preds = %156, %150
  %158 = phi i32 [ %155, %150 ], [ 0, %156 ]
  br label %159

159:                                              ; preds = %157, %141
  %160 = phi i32 [ %144, %141 ], [ %158, %157 ]
  %161 = call ptr @EVP_CIPHER_meth_new(i32 noundef %135, i32 noundef %136, i32 noundef %160)
  store ptr %161, ptr %6, align 8, !tbaa !5
  %162 = icmp ne ptr %161, null
  br i1 %162, label %163, label %393

163:                                              ; preds = %159
  %164 = load ptr, ptr %6, align 8, !tbaa !5
  %165 = load ptr, ptr %3, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.gost_cipher_st, ptr %165, i32 0, i32 5
  %167 = load i32, ptr %166, align 8, !tbaa !16
  %168 = icmp ne i32 %167, 0
  br i1 %168, label %169, label %173

169:                                              ; preds = %163
  %170 = load ptr, ptr %3, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.gost_cipher_st, ptr %170, i32 0, i32 5
  %172 = load i32, ptr %171, align 8, !tbaa !16
  br label %187

173:                                              ; preds = %163
  %174 = load ptr, ptr %3, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.gost_cipher_st, ptr %174, i32 0, i32 0
  %176 = load ptr, ptr %175, align 8, !tbaa !13
  %177 = icmp ne ptr %176, null
  br i1 %177, label %178, label %184

178:                                              ; preds = %173
  %179 = load ptr, ptr %3, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.gost_cipher_st, ptr %179, i32 0, i32 0
  %181 = load ptr, ptr %180, align 8, !tbaa !13
  %182 = getelementptr inbounds %struct.gost_cipher_st, ptr %181, i32 0, i32 5
  %183 = load i32, ptr %182, align 8, !tbaa !16
  br label %185

184:                                              ; preds = %173
  br label %185

185:                                              ; preds = %184, %178
  %186 = phi i32 [ %183, %178 ], [ 0, %184 ]
  br label %187

187:                                              ; preds = %185, %169
  %188 = phi i32 [ %172, %169 ], [ %186, %185 ]
  %189 = call i32 @EVP_CIPHER_meth_set_iv_length(ptr noundef %164, i32 noundef %188)
  %190 = icmp ne i32 %189, 0
  br i1 %190, label %191, label %393

191:                                              ; preds = %187
  %192 = load ptr, ptr %6, align 8, !tbaa !5
  %193 = load i32, ptr %4, align 4, !tbaa !14
  %194 = sext i32 %193 to i64
  %195 = call i32 @EVP_CIPHER_meth_set_flags(ptr noundef %192, i64 noundef %194)
  %196 = icmp ne i32 %195, 0
  br i1 %196, label %197, label %393

197:                                              ; preds = %191
  %198 = load ptr, ptr %6, align 8, !tbaa !5
  %199 = load ptr, ptr %3, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.gost_cipher_st, ptr %199, i32 0, i32 7
  %201 = load ptr, ptr %200, align 8, !tbaa !19
  %202 = icmp ne ptr %201, null
  br i1 %202, label %203, label %207

203:                                              ; preds = %197
  %204 = load ptr, ptr %3, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.gost_cipher_st, ptr %204, i32 0, i32 7
  %206 = load ptr, ptr %205, align 8, !tbaa !19
  br label %221

207:                                              ; preds = %197
  %208 = load ptr, ptr %3, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.gost_cipher_st, ptr %208, i32 0, i32 0
  %210 = load ptr, ptr %209, align 8, !tbaa !13
  %211 = icmp ne ptr %210, null
  br i1 %211, label %212, label %218

212:                                              ; preds = %207
  %213 = load ptr, ptr %3, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.gost_cipher_st, ptr %213, i32 0, i32 0
  %215 = load ptr, ptr %214, align 8, !tbaa !13
  %216 = getelementptr inbounds %struct.gost_cipher_st, ptr %215, i32 0, i32 7
  %217 = load ptr, ptr %216, align 8, !tbaa !19
  br label %219

218:                                              ; preds = %207
  br label %219

219:                                              ; preds = %218, %212
  %220 = phi ptr [ %217, %212 ], [ null, %218 ]
  br label %221

221:                                              ; preds = %219, %203
  %222 = phi ptr [ %206, %203 ], [ %220, %219 ]
  %223 = call i32 @EVP_CIPHER_meth_set_init(ptr noundef %198, ptr noundef %222)
  %224 = icmp ne i32 %223, 0
  br i1 %224, label %225, label %393

225:                                              ; preds = %221
  %226 = load ptr, ptr %6, align 8, !tbaa !5
  %227 = load ptr, ptr %3, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.gost_cipher_st, ptr %227, i32 0, i32 8
  %229 = load ptr, ptr %228, align 8, !tbaa !20
  %230 = icmp ne ptr %229, null
  br i1 %230, label %231, label %235

231:                                              ; preds = %225
  %232 = load ptr, ptr %3, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.gost_cipher_st, ptr %232, i32 0, i32 8
  %234 = load ptr, ptr %233, align 8, !tbaa !20
  br label %249

235:                                              ; preds = %225
  %236 = load ptr, ptr %3, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.gost_cipher_st, ptr %236, i32 0, i32 0
  %238 = load ptr, ptr %237, align 8, !tbaa !13
  %239 = icmp ne ptr %238, null
  br i1 %239, label %240, label %246

240:                                              ; preds = %235
  %241 = load ptr, ptr %3, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.gost_cipher_st, ptr %241, i32 0, i32 0
  %243 = load ptr, ptr %242, align 8, !tbaa !13
  %244 = getelementptr inbounds %struct.gost_cipher_st, ptr %243, i32 0, i32 8
  %245 = load ptr, ptr %244, align 8, !tbaa !20
  br label %247

246:                                              ; preds = %235
  br label %247

247:                                              ; preds = %246, %240
  %248 = phi ptr [ %245, %240 ], [ null, %246 ]
  br label %249

249:                                              ; preds = %247, %231
  %250 = phi ptr [ %234, %231 ], [ %248, %247 ]
  %251 = call i32 @EVP_CIPHER_meth_set_do_cipher(ptr noundef %226, ptr noundef %250)
  %252 = icmp ne i32 %251, 0
  br i1 %252, label %253, label %393

253:                                              ; preds = %249
  %254 = load ptr, ptr %6, align 8, !tbaa !5
  %255 = load ptr, ptr %3, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.gost_cipher_st, ptr %255, i32 0, i32 9
  %257 = load ptr, ptr %256, align 8, !tbaa !21
  %258 = icmp ne ptr %257, null
  br i1 %258, label %259, label %263

259:                                              ; preds = %253
  %260 = load ptr, ptr %3, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.gost_cipher_st, ptr %260, i32 0, i32 9
  %262 = load ptr, ptr %261, align 8, !tbaa !21
  br label %277

263:                                              ; preds = %253
  %264 = load ptr, ptr %3, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.gost_cipher_st, ptr %264, i32 0, i32 0
  %266 = load ptr, ptr %265, align 8, !tbaa !13
  %267 = icmp ne ptr %266, null
  br i1 %267, label %268, label %274

268:                                              ; preds = %263
  %269 = load ptr, ptr %3, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.gost_cipher_st, ptr %269, i32 0, i32 0
  %271 = load ptr, ptr %270, align 8, !tbaa !13
  %272 = getelementptr inbounds %struct.gost_cipher_st, ptr %271, i32 0, i32 9
  %273 = load ptr, ptr %272, align 8, !tbaa !21
  br label %275

274:                                              ; preds = %263
  br label %275

275:                                              ; preds = %274, %268
  %276 = phi ptr [ %273, %268 ], [ null, %274 ]
  br label %277

277:                                              ; preds = %275, %259
  %278 = phi ptr [ %262, %259 ], [ %276, %275 ]
  %279 = call i32 @EVP_CIPHER_meth_set_cleanup(ptr noundef %254, ptr noundef %278)
  %280 = icmp ne i32 %279, 0
  br i1 %280, label %281, label %393

281:                                              ; preds = %277
  %282 = load ptr, ptr %6, align 8, !tbaa !5
  %283 = load ptr, ptr %3, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.gost_cipher_st, ptr %283, i32 0, i32 10
  %285 = load i32, ptr %284, align 8, !tbaa !22
  %286 = icmp ne i32 %285, 0
  br i1 %286, label %287, label %291

287:                                              ; preds = %281
  %288 = load ptr, ptr %3, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.gost_cipher_st, ptr %288, i32 0, i32 10
  %290 = load i32, ptr %289, align 8, !tbaa !22
  br label %305

291:                                              ; preds = %281
  %292 = load ptr, ptr %3, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.gost_cipher_st, ptr %292, i32 0, i32 0
  %294 = load ptr, ptr %293, align 8, !tbaa !13
  %295 = icmp ne ptr %294, null
  br i1 %295, label %296, label %302

296:                                              ; preds = %291
  %297 = load ptr, ptr %3, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.gost_cipher_st, ptr %297, i32 0, i32 0
  %299 = load ptr, ptr %298, align 8, !tbaa !13
  %300 = getelementptr inbounds %struct.gost_cipher_st, ptr %299, i32 0, i32 10
  %301 = load i32, ptr %300, align 8, !tbaa !22
  br label %303

302:                                              ; preds = %291
  br label %303

303:                                              ; preds = %302, %296
  %304 = phi i32 [ %301, %296 ], [ 0, %302 ]
  br label %305

305:                                              ; preds = %303, %287
  %306 = phi i32 [ %290, %287 ], [ %304, %303 ]
  %307 = call i32 @EVP_CIPHER_meth_set_impl_ctx_size(ptr noundef %282, i32 noundef %306)
  %308 = icmp ne i32 %307, 0
  br i1 %308, label %309, label %393

309:                                              ; preds = %305
  %310 = load ptr, ptr %6, align 8, !tbaa !5
  %311 = load ptr, ptr %3, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.gost_cipher_st, ptr %311, i32 0, i32 11
  %313 = load ptr, ptr %312, align 8, !tbaa !23
  %314 = icmp ne ptr %313, null
  br i1 %314, label %315, label %319

315:                                              ; preds = %309
  %316 = load ptr, ptr %3, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.gost_cipher_st, ptr %316, i32 0, i32 11
  %318 = load ptr, ptr %317, align 8, !tbaa !23
  br label %333

319:                                              ; preds = %309
  %320 = load ptr, ptr %3, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.gost_cipher_st, ptr %320, i32 0, i32 0
  %322 = load ptr, ptr %321, align 8, !tbaa !13
  %323 = icmp ne ptr %322, null
  br i1 %323, label %324, label %330

324:                                              ; preds = %319
  %325 = load ptr, ptr %3, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.gost_cipher_st, ptr %325, i32 0, i32 0
  %327 = load ptr, ptr %326, align 8, !tbaa !13
  %328 = getelementptr inbounds %struct.gost_cipher_st, ptr %327, i32 0, i32 11
  %329 = load ptr, ptr %328, align 8, !tbaa !23
  br label %331

330:                                              ; preds = %319
  br label %331

331:                                              ; preds = %330, %324
  %332 = phi ptr [ %329, %324 ], [ null, %330 ]
  br label %333

333:                                              ; preds = %331, %315
  %334 = phi ptr [ %318, %315 ], [ %332, %331 ]
  %335 = call i32 @EVP_CIPHER_meth_set_set_asn1_params(ptr noundef %310, ptr noundef %334)
  %336 = icmp ne i32 %335, 0
  br i1 %336, label %337, label %393

337:                                              ; preds = %333
  %338 = load ptr, ptr %6, align 8, !tbaa !5
  %339 = load ptr, ptr %3, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.gost_cipher_st, ptr %339, i32 0, i32 12
  %341 = load ptr, ptr %340, align 8, !tbaa !24
  %342 = icmp ne ptr %341, null
  br i1 %342, label %343, label %347

343:                                              ; preds = %337
  %344 = load ptr, ptr %3, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.gost_cipher_st, ptr %344, i32 0, i32 12
  %346 = load ptr, ptr %345, align 8, !tbaa !24
  br label %361

347:                                              ; preds = %337
  %348 = load ptr, ptr %3, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.gost_cipher_st, ptr %348, i32 0, i32 0
  %350 = load ptr, ptr %349, align 8, !tbaa !13
  %351 = icmp ne ptr %350, null
  br i1 %351, label %352, label %358

352:                                              ; preds = %347
  %353 = load ptr, ptr %3, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.gost_cipher_st, ptr %353, i32 0, i32 0
  %355 = load ptr, ptr %354, align 8, !tbaa !13
  %356 = getelementptr inbounds %struct.gost_cipher_st, ptr %355, i32 0, i32 12
  %357 = load ptr, ptr %356, align 8, !tbaa !24
  br label %359

358:                                              ; preds = %347
  br label %359

359:                                              ; preds = %358, %352
  %360 = phi ptr [ %357, %352 ], [ null, %358 ]
  br label %361

361:                                              ; preds = %359, %343
  %362 = phi ptr [ %346, %343 ], [ %360, %359 ]
  %363 = call i32 @EVP_CIPHER_meth_set_get_asn1_params(ptr noundef %338, ptr noundef %362)
  %364 = icmp ne i32 %363, 0
  br i1 %364, label %365, label %393

365:                                              ; preds = %361
  %366 = load ptr, ptr %6, align 8, !tbaa !5
  %367 = load ptr, ptr %3, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.gost_cipher_st, ptr %367, i32 0, i32 13
  %369 = load ptr, ptr %368, align 8, !tbaa !25
  %370 = icmp ne ptr %369, null
  br i1 %370, label %371, label %375

371:                                              ; preds = %365
  %372 = load ptr, ptr %3, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.gost_cipher_st, ptr %372, i32 0, i32 13
  %374 = load ptr, ptr %373, align 8, !tbaa !25
  br label %389

375:                                              ; preds = %365
  %376 = load ptr, ptr %3, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.gost_cipher_st, ptr %376, i32 0, i32 0
  %378 = load ptr, ptr %377, align 8, !tbaa !13
  %379 = icmp ne ptr %378, null
  br i1 %379, label %380, label %386

380:                                              ; preds = %375
  %381 = load ptr, ptr %3, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.gost_cipher_st, ptr %381, i32 0, i32 0
  %383 = load ptr, ptr %382, align 8, !tbaa !13
  %384 = getelementptr inbounds %struct.gost_cipher_st, ptr %383, i32 0, i32 13
  %385 = load ptr, ptr %384, align 8, !tbaa !25
  br label %387

386:                                              ; preds = %375
  br label %387

387:                                              ; preds = %386, %380
  %388 = phi ptr [ %385, %380 ], [ null, %386 ]
  br label %389

389:                                              ; preds = %387, %371
  %390 = phi ptr [ %374, %371 ], [ %388, %387 ]
  %391 = call i32 @EVP_CIPHER_meth_set_ctrl(ptr noundef %366, ptr noundef %390)
  %392 = icmp ne i32 %391, 0
  br i1 %392, label %395, label %393

393:                                              ; preds = %389, %361, %333, %305, %277, %249, %221, %191, %187, %159
  %394 = load ptr, ptr %6, align 8, !tbaa !5
  call void @EVP_CIPHER_meth_free(ptr noundef %394)
  store ptr null, ptr %6, align 8, !tbaa !5
  br label %395

395:                                              ; preds = %393, %389
  %396 = load ptr, ptr %6, align 8, !tbaa !5
  %397 = load ptr, ptr %3, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.gost_cipher_st, ptr %397, i32 0, i32 2
  store ptr %396, ptr %398, align 8, !tbaa !9
  %399 = load ptr, ptr %3, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.gost_cipher_st, ptr %399, i32 0, i32 2
  %401 = load ptr, ptr %400, align 8, !tbaa !9
  store ptr %401, ptr %2, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  br label %402

402:                                              ; preds = %395, %11
  %403 = load ptr, ptr %2, align 8
  ret ptr %403
}

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

; Function Attrs: noreturn
declare void @OPENSSL_die(ptr noundef, ptr noundef, i32 noundef) #2

declare ptr @EVP_CIPHER_meth_new(i32 noundef, i32 noundef, i32 noundef) #3

declare i32 @EVP_CIPHER_meth_set_iv_length(ptr noundef, i32 noundef) #3

declare i32 @EVP_CIPHER_meth_set_flags(ptr noundef, i64 noundef) #3

declare i32 @EVP_CIPHER_meth_set_init(ptr noundef, ptr noundef) #3

declare i32 @EVP_CIPHER_meth_set_do_cipher(ptr noundef, ptr noundef) #3

declare i32 @EVP_CIPHER_meth_set_cleanup(ptr noundef, ptr noundef) #3

declare i32 @EVP_CIPHER_meth_set_impl_ctx_size(ptr noundef, i32 noundef) #3

declare i32 @EVP_CIPHER_meth_set_set_asn1_params(ptr noundef, ptr noundef) #3

declare i32 @EVP_CIPHER_meth_set_get_asn1_params(ptr noundef, ptr noundef) #3

declare i32 @EVP_CIPHER_meth_set_ctrl(ptr noundef, ptr noundef) #3

declare void @EVP_CIPHER_meth_free(ptr noundef) #3

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

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

!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, !6, i64 16}
!10 = !{!"gost_cipher_st", !6, i64 0, !11, i64 8, !6, i64 16, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !6, i64 40, !6, i64 48, !6, i64 56, !11, i64 64, !6, i64 72, !6, i64 80, !6, i64 88}
!11 = !{!"int", !7, i64 0}
!12 = !{!10, !11, i64 36}
!13 = !{!10, !6, i64 0}
!14 = !{!11, !11, i64 0}
!15 = !{!10, !11, i64 24}
!16 = !{!10, !11, i64 32}
!17 = !{!10, !11, i64 8}
!18 = !{!10, !11, i64 28}
!19 = !{!10, !6, i64 40}
!20 = !{!10, !6, i64 48}
!21 = !{!10, !6, i64 56}
!22 = !{!10, !11, i64 64}
!23 = !{!10, !6, i64 72}
!24 = !{!10, !6, i64 80}
!25 = !{!10, !6, i64 88}


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

@.str = external hidden unnamed_addr constant [34 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [48 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local ptr @GOST_init_cipher(ptr nocapture noundef %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds i8, ptr %0, i64 16
  %3 = load ptr, ptr %2, align 8, !tbaa !5
  %.not = icmp eq ptr %3, null
  br i1 %.not, label %4, label %146

4:                                                ; preds = %1
  %5 = getelementptr inbounds i8, ptr %0, i64 36
  %6 = load i32, ptr %5, align 4, !tbaa !11
  %7 = load ptr, ptr %0, align 8, !tbaa !12
  %.not97 = icmp eq ptr %7, null
  br i1 %.not97, label %.sink.split, label %.thread

.thread:                                          ; preds = %4
  %8 = getelementptr inbounds i8, ptr %7, i64 36
  %9 = load i32, ptr %8, align 4, !tbaa !11
  %10 = or i32 %9, %6
  %11 = getelementptr inbounds i8, ptr %0, i64 24
  %12 = load i32, ptr %11, align 8, !tbaa !13
  %.not98136 = icmp eq i32 %12, 0
  br i1 %.not98136, label %.sink.split, label %15

.sink.split:                                      ; preds = %.thread, %4
  %.sink139 = phi ptr [ %0, %4 ], [ %7, %.thread ]
  %.ph = phi i32 [ %6, %4 ], [ %10, %.thread ]
  %13 = getelementptr inbounds i8, ptr %.sink139, i64 24
  %14 = load i32, ptr %13, align 8, !tbaa !13
  br label %15

15:                                               ; preds = %.sink.split, %.thread
  %16 = phi i32 [ %10, %.thread ], [ %.ph, %.sink.split ]
  %17 = phi i32 [ %12, %.thread ], [ %14, %.sink.split ]
  %18 = and i32 %16, 983047
  switch i32 %18, label %24 [
    i32 2, label %19
    i32 1, label %19
    i32 65538, label %19
  ]

19:                                               ; preds = %15, %15, %15
  %.not100 = icmp eq i32 %17, 1
  br i1 %.not100, label %20, label %21

20:                                               ; preds = %19
  tail call void @OPENSSL_die(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 103) #3
  unreachable

21:                                               ; preds = %19
  %22 = and i32 %16, 256
  %.not101 = icmp eq i32 %22, 0
  br i1 %.not101, label %30, label %23

23:                                               ; preds = %21
  tail call void @OPENSSL_die(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 104) #3
  unreachable

24:                                               ; preds = %15
  %25 = icmp eq i32 %17, 1
  br i1 %25, label %27, label %26

26:                                               ; preds = %24
  tail call void @OPENSSL_die(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 107) #3
  unreachable

27:                                               ; preds = %24
  %28 = and i32 %16, 256
  %.not102 = icmp eq i32 %28, 0
  br i1 %.not102, label %29, label %30

29:                                               ; preds = %27
  tail call void @OPENSSL_die(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 108) #3
  unreachable

30:                                               ; preds = %27, %21
  %31 = getelementptr inbounds i8, ptr %0, i64 32
  %32 = load i32, ptr %31, align 8, !tbaa !14
  %.not103 = icmp eq i32 %32, 0
  br i1 %.not103, label %33, label %37

33:                                               ; preds = %30
  br i1 %.not97, label %40, label %34

34:                                               ; preds = %33
  %35 = getelementptr inbounds i8, ptr %7, i64 32
  %36 = load i32, ptr %35, align 8, !tbaa !14
  %.not105 = icmp eq i32 %36, 0
  br i1 %.not105, label %40, label %37

37:                                               ; preds = %30, %34
  %38 = and i32 %16, 16
  %.not107 = icmp eq i32 %38, 0
  br i1 %.not107, label %39, label %43

39:                                               ; preds = %37
  tail call void @OPENSSL_die(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i32 noundef 112) #3
  unreachable

40:                                               ; preds = %33, %34
  %41 = and i32 %16, 16
  %.not106 = icmp eq i32 %41, 0
  br i1 %.not106, label %43, label %42

42:                                               ; preds = %40
  tail call void @OPENSSL_die(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, i32 noundef 114) #3
  unreachable

43:                                               ; preds = %40, %37
  %44 = getelementptr inbounds i8, ptr %0, i64 8
  %45 = load i32, ptr %44, align 8, !tbaa !15
  %46 = getelementptr inbounds i8, ptr %0, i64 28
  %47 = load i32, ptr %46, align 4, !tbaa !16
  %.not108 = icmp ne i32 %47, 0
  %brmerge = or i1 %.not97, %.not108
  br i1 %brmerge, label %51, label %48

48:                                               ; preds = %43
  %49 = getelementptr inbounds i8, ptr %7, i64 28
  %50 = load i32, ptr %49, align 4, !tbaa !16
  br label %51

51:                                               ; preds = %43, %48
  %52 = phi i32 [ %50, %48 ], [ %47, %43 ]
  %53 = tail call ptr @EVP_CIPHER_meth_new(i32 noundef %45, i32 noundef %17, i32 noundef %52) #4
  %.not110 = icmp eq ptr %53, null
  br i1 %.not110, label %144, label %54

54:                                               ; preds = %51
  %55 = load i32, ptr %31, align 8, !tbaa !14
  %.not111 = icmp eq i32 %55, 0
  br i1 %.not111, label %56, label %61

56:                                               ; preds = %54
  %57 = load ptr, ptr %0, align 8, !tbaa !12
  %.not112 = icmp eq ptr %57, null
  br i1 %.not112, label %61, label %58

58:                                               ; preds = %56
  %59 = getelementptr inbounds i8, ptr %57, i64 32
  %60 = load i32, ptr %59, align 8, !tbaa !14
  br label %61

61:                                               ; preds = %54, %58, %56
  %62 = phi i32 [ %60, %58 ], [ 0, %56 ], [ %55, %54 ]
  %63 = tail call i32 @EVP_CIPHER_meth_set_iv_length(ptr noundef nonnull %53, i32 noundef %62) #4
  %.not113 = icmp eq i32 %63, 0
  br i1 %.not113, label %144, label %64

64:                                               ; preds = %61
  %65 = sext i32 %16 to i64
  %66 = tail call i32 @EVP_CIPHER_meth_set_flags(ptr noundef nonnull %53, i64 noundef %65) #4
  %.not114 = icmp eq i32 %66, 0
  br i1 %.not114, label %144, label %67

67:                                               ; preds = %64
  %68 = getelementptr inbounds i8, ptr %0, i64 40
  %69 = load ptr, ptr %68, align 8, !tbaa !17
  %.not115 = icmp eq ptr %69, null
  br i1 %.not115, label %70, label %75

70:                                               ; preds = %67
  %71 = load ptr, ptr %0, align 8, !tbaa !12
  %.not116 = icmp eq ptr %71, null
  br i1 %.not116, label %75, label %72

72:                                               ; preds = %70
  %73 = getelementptr inbounds i8, ptr %71, i64 40
  %74 = load ptr, ptr %73, align 8, !tbaa !17
  br label %75

75:                                               ; preds = %67, %72, %70
  %76 = phi ptr [ %74, %72 ], [ null, %70 ], [ %69, %67 ]
  %77 = tail call i32 @EVP_CIPHER_meth_set_init(ptr noundef nonnull %53, ptr noundef %76) #4
  %.not117 = icmp eq i32 %77, 0
  br i1 %.not117, label %144, label %78

78:                                               ; preds = %75
  %79 = getelementptr inbounds i8, ptr %0, i64 48
  %80 = load ptr, ptr %79, align 8, !tbaa !18
  %.not118 = icmp eq ptr %80, null
  br i1 %.not118, label %81, label %86

81:                                               ; preds = %78
  %82 = load ptr, ptr %0, align 8, !tbaa !12
  %.not119 = icmp eq ptr %82, null
  br i1 %.not119, label %86, label %83

83:                                               ; preds = %81
  %84 = getelementptr inbounds i8, ptr %82, i64 48
  %85 = load ptr, ptr %84, align 8, !tbaa !18
  br label %86

86:                                               ; preds = %78, %83, %81
  %87 = phi ptr [ %85, %83 ], [ null, %81 ], [ %80, %78 ]
  %88 = tail call i32 @EVP_CIPHER_meth_set_do_cipher(ptr noundef nonnull %53, ptr noundef %87) #4
  %.not120 = icmp eq i32 %88, 0
  br i1 %.not120, label %144, label %89

89:                                               ; preds = %86
  %90 = getelementptr inbounds i8, ptr %0, i64 56
  %91 = load ptr, ptr %90, align 8, !tbaa !19
  %.not121 = icmp eq ptr %91, null
  br i1 %.not121, label %92, label %97

92:                                               ; preds = %89
  %93 = load ptr, ptr %0, align 8, !tbaa !12
  %.not122 = icmp eq ptr %93, null
  br i1 %.not122, label %97, label %94

94:                                               ; preds = %92
  %95 = getelementptr inbounds i8, ptr %93, i64 56
  %96 = load ptr, ptr %95, align 8, !tbaa !19
  br label %97

97:                                               ; preds = %89, %94, %92
  %98 = phi ptr [ %96, %94 ], [ null, %92 ], [ %91, %89 ]
  %99 = tail call i32 @EVP_CIPHER_meth_set_cleanup(ptr noundef nonnull %53, ptr noundef %98) #4
  %.not123 = icmp eq i32 %99, 0
  br i1 %.not123, label %144, label %100

100:                                              ; preds = %97
  %101 = getelementptr inbounds i8, ptr %0, i64 64
  %102 = load i32, ptr %101, align 8, !tbaa !20
  %.not124 = icmp eq i32 %102, 0
  br i1 %.not124, label %103, label %108

103:                                              ; preds = %100
  %104 = load ptr, ptr %0, align 8, !tbaa !12
  %.not125 = icmp eq ptr %104, null
  br i1 %.not125, label %108, label %105

105:                                              ; preds = %103
  %106 = getelementptr inbounds i8, ptr %104, i64 64
  %107 = load i32, ptr %106, align 8, !tbaa !20
  br label %108

108:                                              ; preds = %100, %105, %103
  %109 = phi i32 [ %107, %105 ], [ 0, %103 ], [ %102, %100 ]
  %110 = tail call i32 @EVP_CIPHER_meth_set_impl_ctx_size(ptr noundef nonnull %53, i32 noundef %109) #4
  %.not126 = icmp eq i32 %110, 0
  br i1 %.not126, label %144, label %111

111:                                              ; preds = %108
  %112 = getelementptr inbounds i8, ptr %0, i64 72
  %113 = load ptr, ptr %112, align 8, !tbaa !21
  %.not127 = icmp eq ptr %113, null
  br i1 %.not127, label %114, label %119

114:                                              ; preds = %111
  %115 = load ptr, ptr %0, align 8, !tbaa !12
  %.not128 = icmp eq ptr %115, null
  br i1 %.not128, label %119, label %116

116:                                              ; preds = %114
  %117 = getelementptr inbounds i8, ptr %115, i64 72
  %118 = load ptr, ptr %117, align 8, !tbaa !21
  br label %119

119:                                              ; preds = %111, %116, %114
  %120 = phi ptr [ %118, %116 ], [ null, %114 ], [ %113, %111 ]
  %121 = tail call i32 @EVP_CIPHER_meth_set_set_asn1_params(ptr noundef nonnull %53, ptr noundef %120) #4
  %.not129 = icmp eq i32 %121, 0
  br i1 %.not129, label %144, label %122

122:                                              ; preds = %119
  %123 = getelementptr inbounds i8, ptr %0, i64 80
  %124 = load ptr, ptr %123, align 8, !tbaa !22
  %.not130 = icmp eq ptr %124, null
  br i1 %.not130, label %125, label %130

125:                                              ; preds = %122
  %126 = load ptr, ptr %0, align 8, !tbaa !12
  %.not131 = icmp eq ptr %126, null
  br i1 %.not131, label %130, label %127

127:                                              ; preds = %125
  %128 = getelementptr inbounds i8, ptr %126, i64 80
  %129 = load ptr, ptr %128, align 8, !tbaa !22
  br label %130

130:                                              ; preds = %122, %127, %125
  %131 = phi ptr [ %129, %127 ], [ null, %125 ], [ %124, %122 ]
  %132 = tail call i32 @EVP_CIPHER_meth_set_get_asn1_params(ptr noundef nonnull %53, ptr noundef %131) #4
  %.not132 = icmp eq i32 %132, 0
  br i1 %.not132, label %144, label %133

133:                                              ; preds = %130
  %134 = getelementptr inbounds i8, ptr %0, i64 88
  %135 = load ptr, ptr %134, align 8, !tbaa !23
  %.not133 = icmp eq ptr %135, null
  br i1 %.not133, label %136, label %141

136:                                              ; preds = %133
  %137 = load ptr, ptr %0, align 8, !tbaa !12
  %.not134 = icmp eq ptr %137, null
  br i1 %.not134, label %141, label %138

138:                                              ; preds = %136
  %139 = getelementptr inbounds i8, ptr %137, i64 88
  %140 = load ptr, ptr %139, align 8, !tbaa !23
  br label %141

141:                                              ; preds = %133, %138, %136
  %142 = phi ptr [ %140, %138 ], [ null, %136 ], [ %135, %133 ]
  %143 = tail call i32 @EVP_CIPHER_meth_set_ctrl(ptr noundef nonnull %53, ptr noundef %142) #4
  %.not135 = icmp eq i32 %143, 0
  br i1 %.not135, label %144, label %145

144:                                              ; preds = %141, %130, %119, %108, %97, %86, %75, %64, %61, %51
  tail call void @EVP_CIPHER_meth_free(ptr noundef %53) #4
  br label %145

145:                                              ; preds = %144, %141
  %.0 = phi ptr [ %53, %141 ], [ null, %144 ]
  store ptr %.0, ptr %2, align 8, !tbaa !5
  br label %146

146:                                              ; preds = %1, %145
  %.072 = phi ptr [ %.0, %145 ], [ %3, %1 ]
  ret ptr %.072
}

; Function Attrs: noreturn
declare void @OPENSSL_die(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

declare ptr @EVP_CIPHER_meth_new(i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare i32 @EVP_CIPHER_meth_set_iv_length(ptr noundef, i32 noundef) local_unnamed_addr #2

declare i32 @EVP_CIPHER_meth_set_flags(ptr noundef, i64 noundef) local_unnamed_addr #2

declare i32 @EVP_CIPHER_meth_set_init(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @EVP_CIPHER_meth_set_do_cipher(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @EVP_CIPHER_meth_set_cleanup(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @EVP_CIPHER_meth_set_impl_ctx_size(ptr noundef, i32 noundef) local_unnamed_addr #2

declare i32 @EVP_CIPHER_meth_set_set_asn1_params(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @EVP_CIPHER_meth_set_get_asn1_params(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @EVP_CIPHER_meth_set_ctrl(ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @EVP_CIPHER_meth_free(ptr noundef) local_unnamed_addr #2

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { noreturn "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noreturn nounwind }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 16}
!6 = !{!"gost_cipher_st", !7, i64 0, !10, i64 8, !7, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !7, i64 40, !7, i64 48, !7, i64 56, !10, i64 64, !7, i64 72, !7, i64 80, !7, i64 88}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!6, !10, i64 36}
!12 = !{!6, !7, i64 0}
!13 = !{!6, !10, i64 24}
!14 = !{!6, !10, i64 32}
!15 = !{!6, !10, i64 8}
!16 = !{!6, !10, i64 28}
!17 = !{!6, !7, i64 40}
!18 = !{!6, !7, i64 48}
!19 = !{!6, !7, i64 56}
!20 = !{!6, !10, i64 64}
!21 = !{!6, !7, i64 72}
!22 = !{!6, !7, i64 80}
!23 = !{!6, !7, i64 88}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass