; LLVM IR from PacktPublishing/Demystifying-Cryptography-with-OpenSSL-3 :: Chapter11 (tls-client-memory-bio)

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

@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [124 x i8], align 1
@__PRETTY_FUNCTION__.run_tls_client = external hidden unnamed_addr constant [69 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [49 x i8], align 1
@stdout = external global ptr, align 8
@.str.24 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [38 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: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @run_tls_client(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #2 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  store i32 1, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  store ptr null, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  store ptr null, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  store ptr null, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  store ptr null, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %32 = call noalias ptr @malloc(i64 noundef 16384) #8
  store ptr %32, ptr %17, align 8, !tbaa !5
  %33 = load ptr, ptr %17, align 8, !tbaa !5
  %34 = icmp ne ptr %33, null
  br i1 %34, label %35, label %36

35:                                               ; preds = %4
  br label %37

36:                                               ; preds = %4
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.4, i32 noundef 62, ptr noundef @__PRETTY_FUNCTION__.run_tls_client) #9
  unreachable

37:                                               ; preds = %35
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %38 = call noalias ptr @malloc(i64 noundef 16384) #8
  store ptr %38, ptr %18, align 8, !tbaa !5
  %39 = load ptr, ptr %18, align 8, !tbaa !5
  %40 = icmp ne ptr %39, null
  br i1 %40, label %41, label %42

41:                                               ; preds = %37
  br label %43

42:                                               ; preds = %37
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.4, i32 noundef 64, ptr noundef @__PRETTY_FUNCTION__.run_tls_client) #9
  unreachable

43:                                               ; preds = %41
  call void @ERR_clear_error()
  %44 = call ptr @TLS_client_method()
  %45 = call ptr @SSL_CTX_new(ptr noundef %44)
  store ptr %45, ptr %12, align 8, !tbaa !5
  %46 = load ptr, ptr %12, align 8, !tbaa !5
  %47 = icmp ne ptr %46, null
  br i1 %47, label %48, label %49

48:                                               ; preds = %43
  br label %50

49:                                               ; preds = %43
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.4, i32 noundef 69, ptr noundef @__PRETTY_FUNCTION__.run_tls_client) #9
  unreachable

50:                                               ; preds = %48
  %51 = load ptr, ptr %8, align 8, !tbaa !5
  %52 = icmp ne ptr %51, null
  br i1 %52, label %53, label %57

53:                                               ; preds = %50
  %54 = load ptr, ptr %12, align 8, !tbaa !5
  %55 = load ptr, ptr %8, align 8, !tbaa !5
  %56 = call i32 @SSL_CTX_load_verify_locations(ptr noundef %54, ptr noundef %55, ptr noundef null)
  store i32 %56, ptr %11, align 4, !tbaa !9
  br label %60

57:                                               ; preds = %50
  %58 = load ptr, ptr %12, align 8, !tbaa !5
  %59 = call i32 @SSL_CTX_set_default_verify_paths(ptr noundef %58)
  store i32 %59, ptr %11, align 4, !tbaa !9
  br label %60

60:                                               ; preds = %57, %53
  %61 = load i32, ptr %11, align 4, !tbaa !9
  %62 = icmp sle i32 %61, 0
  br i1 %62, label %63, label %70

63:                                               ; preds = %60
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  %65 = icmp ne ptr %64, null
  br i1 %65, label %66, label %69

66:                                               ; preds = %63
  %67 = load ptr, ptr %9, align 8, !tbaa !5
  %68 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %67, ptr noundef @.str.7) #7
  br label %69

69:                                               ; preds = %66, %63
  br label %397

70:                                               ; preds = %60
  %71 = load ptr, ptr %12, align 8, !tbaa !5
  call void @SSL_CTX_set_verify(ptr noundef %71, i32 noundef 1, ptr noundef null)
  %72 = load ptr, ptr %6, align 8, !tbaa !5
  %73 = call ptr @BIO_new_connect(ptr noundef %72)
  store ptr %73, ptr %13, align 8, !tbaa !5
  %74 = load ptr, ptr %13, align 8, !tbaa !5
  %75 = icmp ne ptr %74, null
  br i1 %75, label %76, label %77

76:                                               ; preds = %70
  br label %78

77:                                               ; preds = %70
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.4, i32 noundef 88, ptr noundef @__PRETTY_FUNCTION__.run_tls_client) #9
  unreachable

78:                                               ; preds = %76
  %79 = load ptr, ptr %13, align 8, !tbaa !5
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = call i64 @BIO_ctrl(ptr noundef %79, i32 noundef 100, i64 noundef 1, ptr noundef %80)
  %82 = load ptr, ptr %13, align 8, !tbaa !5
  %83 = call i64 @BIO_ctrl(ptr noundef %82, i32 noundef 101, i64 noundef 0, ptr noundef null)
  %84 = trunc i64 %83 to i32
  store i32 %84, ptr %11, align 4, !tbaa !9
  %85 = load i32, ptr %11, align 4, !tbaa !9
  %86 = icmp sle i32 %85, 0
  br i1 %86, label %87, label %96

87:                                               ; preds = %78
  %88 = load ptr, ptr %9, align 8, !tbaa !5
  %89 = icmp ne ptr %88, null
  br i1 %89, label %90, label %95

90:                                               ; preds = %87
  %91 = load ptr, ptr %9, align 8, !tbaa !5
  %92 = load ptr, ptr %6, align 8, !tbaa !5
  %93 = load ptr, ptr %7, align 8, !tbaa !5
  %94 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %91, ptr noundef @.str.9, ptr noundef %92, ptr noundef %93) #7
  br label %95

95:                                               ; preds = %90, %87
  br label %397

96:                                               ; preds = %78
  %97 = call ptr @BIO_s_mem()
  %98 = call ptr @BIO_new(ptr noundef %97)
  store ptr %98, ptr %14, align 8, !tbaa !5
  %99 = load ptr, ptr %14, align 8, !tbaa !5
  %100 = icmp ne ptr %99, null
  br i1 %100, label %101, label %102

101:                                              ; preds = %96
  br label %103

102:                                              ; preds = %96
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.4, i32 noundef 103, ptr noundef @__PRETTY_FUNCTION__.run_tls_client) #9
  unreachable

103:                                              ; preds = %101
  %104 = load ptr, ptr %14, align 8, !tbaa !5
  %105 = call i64 @BIO_ctrl(ptr noundef %104, i32 noundef 130, i64 noundef -1, ptr noundef null)
  %106 = call ptr @BIO_s_mem()
  %107 = call ptr @BIO_new(ptr noundef %106)
  store ptr %107, ptr %15, align 8, !tbaa !5
  %108 = load ptr, ptr %15, align 8, !tbaa !5
  %109 = icmp ne ptr %108, null
  br i1 %109, label %110, label %111

110:                                              ; preds = %103
  br label %112

111:                                              ; preds = %103
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.4, i32 noundef 107, ptr noundef @__PRETTY_FUNCTION__.run_tls_client) #9
  unreachable

112:                                              ; preds = %110
  %113 = load ptr, ptr %15, align 8, !tbaa !5
  %114 = call i64 @BIO_ctrl(ptr noundef %113, i32 noundef 130, i64 noundef -1, ptr noundef null)
  %115 = load ptr, ptr %12, align 8, !tbaa !5
  %116 = call ptr @SSL_new(ptr noundef %115)
  store ptr %116, ptr %16, align 8, !tbaa !5
  %117 = load ptr, ptr %16, align 8, !tbaa !5
  %118 = icmp ne ptr %117, null
  br i1 %118, label %119, label %120

119:                                              ; preds = %112
  br label %121

120:                                              ; preds = %112
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.4, i32 noundef 111, ptr noundef @__PRETTY_FUNCTION__.run_tls_client) #9
  unreachable

121:                                              ; preds = %119
  %122 = load ptr, ptr %16, align 8, !tbaa !5
  %123 = load ptr, ptr %14, align 8, !tbaa !5
  %124 = load ptr, ptr %15, align 8, !tbaa !5
  call void @SSL_set_bio(ptr noundef %122, ptr noundef %123, ptr noundef %124)
  %125 = load ptr, ptr %16, align 8, !tbaa !5
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  %127 = call i64 @SSL_ctrl(ptr noundef %125, i32 noundef 55, i64 noundef 0, ptr noundef %126)
  %128 = trunc i64 %127 to i32
  store i32 %128, ptr %11, align 4, !tbaa !9
  %129 = load i32, ptr %11, align 4, !tbaa !9
  %130 = icmp eq i32 %129, 1
  br i1 %130, label %131, label %132

131:                                              ; preds = %121
  br label %133

132:                                              ; preds = %121
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.4, i32 noundef 116, ptr noundef @__PRETTY_FUNCTION__.run_tls_client) #9
  unreachable

133:                                              ; preds = %131
  %134 = load ptr, ptr %16, align 8, !tbaa !5
  %135 = load ptr, ptr %6, align 8, !tbaa !5
  %136 = call i32 @SSL_set1_host(ptr noundef %134, ptr noundef %135)
  store i32 %136, ptr %11, align 4, !tbaa !9
  %137 = load i32, ptr %11, align 4, !tbaa !9
  %138 = icmp eq i32 %137, 1
  br i1 %138, label %139, label %140

139:                                              ; preds = %133
  br label %141

140:                                              ; preds = %133
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.4, i32 noundef 119, ptr noundef @__PRETTY_FUNCTION__.run_tls_client) #9
  unreachable

141:                                              ; preds = %139
  br label %142

142:                                              ; preds = %180, %141
  br label %143

143:                                              ; preds = %142
  %144 = load ptr, ptr %16, align 8, !tbaa !5
  %145 = call i32 @SSL_connect(ptr noundef %144)
  store i32 %145, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  %146 = load ptr, ptr %16, align 8, !tbaa !5
  %147 = load i32, ptr %11, align 4, !tbaa !9
  %148 = call i32 @SSL_get_error(ptr noundef %146, i32 noundef %147)
  store i32 %148, ptr %19, align 4, !tbaa !9
  %149 = load i32, ptr %19, align 4, !tbaa !9
  %150 = icmp eq i32 %149, 2
  br i1 %150, label %159, label %151

151:                                              ; preds = %143
  %152 = load i32, ptr %19, align 4, !tbaa !9
  %153 = icmp eq i32 %152, 3
  br i1 %153, label %159, label %154

154:                                              ; preds = %151
  %155 = load ptr, ptr %15, align 8, !tbaa !5
  %156 = call i64 @BIO_ctrl(ptr noundef %155, i32 noundef 10, i64 noundef 0, ptr noundef null)
  %157 = trunc i64 %156 to i32
  %158 = icmp ne i32 %157, 0
  br i1 %158, label %159, label %179

159:                                              ; preds = %154, %151, %143
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  %160 = load ptr, ptr %14, align 8, !tbaa !5
  %161 = load ptr, ptr %15, align 8, !tbaa !5
  %162 = load ptr, ptr %13, align 8, !tbaa !5
  %163 = load ptr, ptr %16, align 8, !tbaa !5
  %164 = call i32 @SSL_want(ptr noundef %163)
  %165 = icmp eq i32 %164, 3
  %166 = zext i1 %165 to i32
  %167 = call i32 @service_bios(ptr noundef %160, ptr noundef %161, ptr noundef %162, i32 noundef %166)
  store i32 %167, ptr %20, align 4, !tbaa !9
  %168 = load i32, ptr %20, align 4, !tbaa !9
  %169 = icmp ne i32 %168, 1
  br i1 %169, label %170, label %177

170:                                              ; preds = %159
  %171 = load ptr, ptr %9, align 8, !tbaa !5
  %172 = icmp ne ptr %171, null
  br i1 %172, label %173, label %176

173:                                              ; preds = %170
  %174 = load ptr, ptr %9, align 8, !tbaa !5
  %175 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %174, ptr noundef @.str.14) #7
  br label %176

176:                                              ; preds = %173, %170
  store i32 2, ptr %21, align 4
  br label %178

177:                                              ; preds = %159
  store i32 3, ptr %21, align 4
  br label %178

178:                                              ; preds = %177, %176
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %180

179:                                              ; preds = %154
  store i32 4, ptr %21, align 4
  br label %180

180:                                              ; preds = %179, %178
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  %181 = load i32, ptr %21, align 4
  switch i32 %181, label %428 [
    i32 3, label %142
    i32 4, label %182
    i32 2, label %397
  ]

182:                                              ; preds = %180
  %183 = load i32, ptr %11, align 4, !tbaa !9
  %184 = icmp sle i32 %183, 0
  br i1 %184, label %185, label %195

185:                                              ; preds = %182
  %186 = load ptr, ptr %9, align 8, !tbaa !5
  %187 = icmp ne ptr %186, null
  br i1 %187, label %188, label %194

188:                                              ; preds = %185
  %189 = load ptr, ptr %9, align 8, !tbaa !5
  %190 = load ptr, ptr %16, align 8, !tbaa !5
  %191 = load i32, ptr %11, align 4, !tbaa !9
  %192 = call i32 @SSL_get_error(ptr noundef %190, i32 noundef %191)
  %193 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %189, ptr noundef @.str.15, i32 noundef %192) #7
  br label %194

194:                                              ; preds = %188, %185
  br label %397

195:                                              ; preds = %182
  %196 = load ptr, ptr %18, align 8, !tbaa !5
  %197 = load ptr, ptr %6, align 8, !tbaa !5
  %198 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %196, i64 noundef 16384, ptr noundef @.str.16, ptr noundef %197) #7
  %199 = load ptr, ptr %18, align 8, !tbaa !5
  %200 = call i64 @strlen(ptr noundef %199) #10
  %201 = trunc i64 %200 to i32
  store i32 %201, ptr %22, align 4, !tbaa !9
  %202 = call i32 (ptr, ...) @printf(ptr noundef @.str.17)
  %203 = load ptr, ptr %18, align 8, !tbaa !5
  %204 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, ptr noundef %203)
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %205

205:                                              ; preds = %268, %195
  %206 = load i32, ptr %23, align 4, !tbaa !9
  %207 = load i32, ptr %22, align 4, !tbaa !9
  %208 = icmp slt i32 %206, %207
  br i1 %208, label %209, label %270

209:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  %210 = load ptr, ptr %16, align 8, !tbaa !5
  %211 = load ptr, ptr %18, align 8, !tbaa !5
  %212 = load i32, ptr %23, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds i8, ptr %211, i64 %213
  %215 = load i32, ptr %22, align 4, !tbaa !9
  %216 = load i32, ptr %23, align 4, !tbaa !9
  %217 = sub nsw i32 %215, %216
  %218 = call i32 @SSL_write(ptr noundef %210, ptr noundef %214, i32 noundef %217)
  store i32 %218, ptr %24, align 4, !tbaa !9
  %219 = load i32, ptr %24, align 4, !tbaa !9
  %220 = icmp sgt i32 %219, 0
  br i1 %220, label %221, label %225

221:                                              ; preds = %209
  %222 = load i32, ptr %24, align 4, !tbaa !9
  %223 = load i32, ptr %23, align 4, !tbaa !9
  %224 = add nsw i32 %223, %222
  store i32 %224, ptr %23, align 4, !tbaa !9
  store i32 5, ptr %21, align 4
  br label %268, !llvm.loop !11

225:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %226 = load ptr, ptr %16, align 8, !tbaa !5
  %227 = load i32, ptr %11, align 4, !tbaa !9
  %228 = call i32 @SSL_get_error(ptr noundef %226, i32 noundef %227)
  store i32 %228, ptr %25, align 4, !tbaa !9
  %229 = load i32, ptr %25, align 4, !tbaa !9
  %230 = icmp eq i32 %229, 2
  br i1 %230, label %239, label %231

231:                                              ; preds = %225
  %232 = load i32, ptr %25, align 4, !tbaa !9
  %233 = icmp eq i32 %232, 3
  br i1 %233, label %239, label %234

234:                                              ; preds = %231
  %235 = load ptr, ptr %15, align 8, !tbaa !5
  %236 = call i64 @BIO_ctrl(ptr noundef %235, i32 noundef 10, i64 noundef 0, ptr noundef null)
  %237 = trunc i64 %236 to i32
  %238 = icmp ne i32 %237, 0
  br i1 %238, label %239, label %259

239:                                              ; preds = %234, %231, %225
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %240 = load ptr, ptr %14, align 8, !tbaa !5
  %241 = load ptr, ptr %15, align 8, !tbaa !5
  %242 = load ptr, ptr %13, align 8, !tbaa !5
  %243 = load ptr, ptr %16, align 8, !tbaa !5
  %244 = call i32 @SSL_want(ptr noundef %243)
  %245 = icmp eq i32 %244, 3
  %246 = zext i1 %245 to i32
  %247 = call i32 @service_bios(ptr noundef %240, ptr noundef %241, ptr noundef %242, i32 noundef %246)
  store i32 %247, ptr %26, align 4, !tbaa !9
  %248 = load i32, ptr %26, align 4, !tbaa !9
  %249 = icmp ne i32 %248, 1
  br i1 %249, label %250, label %257

250:                                              ; preds = %239
  %251 = load ptr, ptr %9, align 8, !tbaa !5
  %252 = icmp ne ptr %251, null
  br i1 %252, label %253, label %256

253:                                              ; preds = %250
  %254 = load ptr, ptr %9, align 8, !tbaa !5
  %255 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %254, ptr noundef @.str.19) #7
  br label %256

256:                                              ; preds = %253, %250
  store i32 2, ptr %21, align 4
  br label %258

257:                                              ; preds = %239
  store i32 5, ptr %21, align 4
  br label %258, !llvm.loop !11

258:                                              ; preds = %257, %256
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %267

259:                                              ; preds = %234
  %260 = load ptr, ptr %9, align 8, !tbaa !5
  %261 = icmp ne ptr %260, null
  br i1 %261, label %262, label %266

262:                                              ; preds = %259
  %263 = load ptr, ptr %9, align 8, !tbaa !5
  %264 = load i32, ptr %25, align 4, !tbaa !9
  %265 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %263, ptr noundef @.str.20, i32 noundef %264) #7
  br label %266

266:                                              ; preds = %262, %259
  store i32 2, ptr %21, align 4
  br label %267

267:                                              ; preds = %266, %258
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %268

268:                                              ; preds = %267, %221
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  %269 = load i32, ptr %21, align 4
  switch i32 %269, label %428 [
    i32 5, label %205
    i32 2, label %397
  ]

270:                                              ; preds = %205
  %271 = call i32 (ptr, ...) @printf(ptr noundef @.str.21)
  %272 = call i32 (ptr, ...) @printf(ptr noundef @.str.22)
  br label %273

273:                                              ; preds = %342, %270
  %274 = load ptr, ptr %16, align 8, !tbaa !5
  %275 = call i32 @SSL_get_shutdown(ptr noundef %274)
  %276 = and i32 %275, 2
  %277 = icmp ne i32 %276, 2
  br i1 %277, label %278, label %344

278:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  store i32 1, ptr %27, align 4, !tbaa !9
  %279 = load ptr, ptr %14, align 8, !tbaa !5
  %280 = call i64 @BIO_ctrl(ptr noundef %279, i32 noundef 10, i64 noundef 0, ptr noundef null)
  %281 = trunc i64 %280 to i32
  %282 = icmp ne i32 %281, 0
  br i1 %282, label %288, label %283

283:                                              ; preds = %278
  %284 = load ptr, ptr %14, align 8, !tbaa !5
  %285 = load ptr, ptr %15, align 8, !tbaa !5
  %286 = load ptr, ptr %13, align 8, !tbaa !5
  %287 = call i32 @service_bios(ptr noundef %284, ptr noundef %285, ptr noundef %286, i32 noundef 1)
  store i32 %287, ptr %27, align 4, !tbaa !9
  br label %288

288:                                              ; preds = %283, %278
  %289 = load i32, ptr %27, align 4, !tbaa !9
  %290 = icmp ne i32 %289, 1
  br i1 %290, label %291, label %298

291:                                              ; preds = %288
  %292 = load ptr, ptr %9, align 8, !tbaa !5
  %293 = icmp ne ptr %292, null
  br i1 %293, label %294, label %297

294:                                              ; preds = %291
  %295 = load ptr, ptr %9, align 8, !tbaa !5
  %296 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %295, ptr noundef @.str.23) #7
  br label %297

297:                                              ; preds = %294, %291
  store i32 2, ptr %21, align 4
  br label %342

298:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %299 = load ptr, ptr %16, align 8, !tbaa !5
  %300 = load ptr, ptr %17, align 8, !tbaa !5
  %301 = call i32 @SSL_read(ptr noundef %299, ptr noundef %300, i32 noundef 16384)
  store i32 %301, ptr %28, align 4, !tbaa !9
  %302 = load i32, ptr %28, align 4, !tbaa !9
  %303 = icmp sgt i32 %302, 0
  br i1 %303, label %304, label %310

304:                                              ; preds = %298
  %305 = load ptr, ptr %17, align 8, !tbaa !5
  %306 = load i32, ptr %28, align 4, !tbaa !9
  %307 = sext i32 %306 to i64
  %308 = load ptr, ptr @stdout, align 8, !tbaa !5
  %309 = call i64 @fwrite(ptr noundef %305, i64 noundef 1, i64 noundef %307, ptr noundef %308)
  store i32 7, ptr %21, align 4
  br label %341, !llvm.loop !13

310:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  %311 = load ptr, ptr %16, align 8, !tbaa !5
  %312 = load i32, ptr %11, align 4, !tbaa !9
  %313 = call i32 @SSL_get_error(ptr noundef %311, i32 noundef %312)
  store i32 %313, ptr %29, align 4, !tbaa !9
  %314 = load i32, ptr %29, align 4, !tbaa !9
  %315 = icmp eq i32 %314, 0
  br i1 %315, label %327, label %316

316:                                              ; preds = %310
  %317 = load i32, ptr %29, align 4, !tbaa !9
  %318 = icmp eq i32 %317, 2
  br i1 %318, label %327, label %319

319:                                              ; preds = %316
  %320 = load i32, ptr %29, align 4, !tbaa !9
  %321 = icmp eq i32 %320, 3
  br i1 %321, label %327, label %322

322:                                              ; preds = %319
  %323 = load ptr, ptr %15, align 8, !tbaa !5
  %324 = call i64 @BIO_ctrl(ptr noundef %323, i32 noundef 10, i64 noundef 0, ptr noundef null)
  %325 = trunc i64 %324 to i32
  %326 = icmp ne i32 %325, 0
  br i1 %326, label %327, label %328

327:                                              ; preds = %322, %319, %316, %310
  store i32 7, ptr %21, align 4
  br label %340, !llvm.loop !13

328:                                              ; preds = %322
  %329 = load i32, ptr %29, align 4, !tbaa !9
  %330 = icmp eq i32 %329, 6
  br i1 %330, label %331, label %332

331:                                              ; preds = %328
  store i32 8, ptr %21, align 4
  br label %340

332:                                              ; preds = %328
  %333 = load ptr, ptr %9, align 8, !tbaa !5
  %334 = icmp ne ptr %333, null
  br i1 %334, label %335, label %339

335:                                              ; preds = %332
  %336 = load ptr, ptr %9, align 8, !tbaa !5
  %337 = load i32, ptr %29, align 4, !tbaa !9
  %338 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %336, ptr noundef @.str.24, i32 noundef %337) #7
  br label %339

339:                                              ; preds = %335, %332
  store i32 2, ptr %21, align 4
  br label %340

340:                                              ; preds = %339, %331, %327
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  br label %341

341:                                              ; preds = %340, %304
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %342

342:                                              ; preds = %341, %297
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  %343 = load i32, ptr %21, align 4
  switch i32 %343, label %428 [
    i32 7, label %273
    i32 8, label %344
    i32 2, label %397
  ]

344:                                              ; preds = %342, %273
  %345 = call i32 (ptr, ...) @printf(ptr noundef @.str.25)
  br label %346

346:                                              ; preds = %384, %344
  br label %347

347:                                              ; preds = %346
  %348 = load ptr, ptr %16, align 8, !tbaa !5
  %349 = call i32 @SSL_shutdown(ptr noundef %348)
  store i32 %349, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  %350 = load ptr, ptr %16, align 8, !tbaa !5
  %351 = load i32, ptr %11, align 4, !tbaa !9
  %352 = call i32 @SSL_get_error(ptr noundef %350, i32 noundef %351)
  store i32 %352, ptr %30, align 4, !tbaa !9
  %353 = load i32, ptr %30, align 4, !tbaa !9
  %354 = icmp eq i32 %353, 2
  br i1 %354, label %363, label %355

355:                                              ; preds = %347
  %356 = load i32, ptr %30, align 4, !tbaa !9
  %357 = icmp eq i32 %356, 3
  br i1 %357, label %363, label %358

358:                                              ; preds = %355
  %359 = load ptr, ptr %15, align 8, !tbaa !5
  %360 = call i64 @BIO_ctrl(ptr noundef %359, i32 noundef 10, i64 noundef 0, ptr noundef null)
  %361 = trunc i64 %360 to i32
  %362 = icmp ne i32 %361, 0
  br i1 %362, label %363, label %383

363:                                              ; preds = %358, %355, %347
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  %364 = load ptr, ptr %14, align 8, !tbaa !5
  %365 = load ptr, ptr %15, align 8, !tbaa !5
  %366 = load ptr, ptr %13, align 8, !tbaa !5
  %367 = load ptr, ptr %16, align 8, !tbaa !5
  %368 = call i32 @SSL_want(ptr noundef %367)
  %369 = icmp eq i32 %368, 3
  %370 = zext i1 %369 to i32
  %371 = call i32 @service_bios(ptr noundef %364, ptr noundef %365, ptr noundef %366, i32 noundef %370)
  store i32 %371, ptr %31, align 4, !tbaa !9
  %372 = load i32, ptr %31, align 4, !tbaa !9
  %373 = icmp ne i32 %372, 1
  br i1 %373, label %374, label %381

374:                                              ; preds = %363
  %375 = load ptr, ptr %9, align 8, !tbaa !5
  %376 = icmp ne ptr %375, null
  br i1 %376, label %377, label %380

377:                                              ; preds = %374
  %378 = load ptr, ptr %9, align 8, !tbaa !5
  %379 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %378, ptr noundef @.str.26) #7
  br label %380

380:                                              ; preds = %377, %374
  store i32 2, ptr %21, align 4
  br label %382

381:                                              ; preds = %363
  store i32 9, ptr %21, align 4
  br label %382

382:                                              ; preds = %381, %380
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  br label %384

383:                                              ; preds = %358
  store i32 10, ptr %21, align 4
  br label %384

384:                                              ; preds = %383, %382
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  %385 = load i32, ptr %21, align 4
  switch i32 %385, label %428 [
    i32 9, label %346
    i32 10, label %386
    i32 2, label %397
  ]

386:                                              ; preds = %384
  %387 = load i32, ptr %11, align 4, !tbaa !9
  %388 = icmp ne i32 %387, 1
  br i1 %388, label %389, label %396

389:                                              ; preds = %386
  %390 = load ptr, ptr %9, align 8, !tbaa !5
  %391 = icmp ne ptr %390, null
  br i1 %391, label %392, label %395

392:                                              ; preds = %389
  %393 = load ptr, ptr %9, align 8, !tbaa !5
  %394 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %393, ptr noundef @.str.27) #7
  br label %395

395:                                              ; preds = %392, %389
  br label %397

396:                                              ; preds = %386
  br label %398

397:                                              ; preds = %395, %384, %342, %268, %194, %180, %95, %69
  store i32 1, ptr %10, align 4, !tbaa !9
  br label %398

398:                                              ; preds = %397, %396
  %399 = load ptr, ptr %16, align 8, !tbaa !5
  %400 = icmp ne ptr %399, null
  br i1 %400, label %401, label %403

401:                                              ; preds = %398
  %402 = load ptr, ptr %16, align 8, !tbaa !5
  call void @SSL_free(ptr noundef %402)
  br label %403

403:                                              ; preds = %401, %398
  %404 = load ptr, ptr %13, align 8, !tbaa !5
  %405 = icmp ne ptr %404, null
  br i1 %405, label %406, label %408

406:                                              ; preds = %403
  %407 = load ptr, ptr %13, align 8, !tbaa !5
  call void @BIO_free_all(ptr noundef %407)
  br label %408

408:                                              ; preds = %406, %403
  %409 = load ptr, ptr %12, align 8, !tbaa !5
  %410 = icmp ne ptr %409, null
  br i1 %410, label %411, label %413

411:                                              ; preds = %408
  %412 = load ptr, ptr %12, align 8, !tbaa !5
  call void @SSL_CTX_free(ptr noundef %412)
  br label %413

413:                                              ; preds = %411, %408
  %414 = load ptr, ptr %18, align 8, !tbaa !5
  call void @free(ptr noundef %414) #7
  %415 = load ptr, ptr %17, align 8, !tbaa !5
  call void @free(ptr noundef %415) #7
  %416 = call i64 @ERR_peek_error()
  %417 = icmp ne i64 %416, 0
  br i1 %417, label %418, label %426

418:                                              ; preds = %413
  store i32 1, ptr %10, align 4, !tbaa !9
  %419 = load ptr, ptr %9, align 8, !tbaa !5
  %420 = icmp ne ptr %419, null
  br i1 %420, label %421, label %425

421:                                              ; preds = %418
  %422 = load ptr, ptr %9, align 8, !tbaa !5
  %423 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %422, ptr noundef @.str.28) #7
  %424 = load ptr, ptr %9, align 8, !tbaa !5
  call void @ERR_print_errors_fp(ptr noundef %424)
  br label %425

425:                                              ; preds = %421, %418
  call void @ERR_clear_error()
  br label %426

426:                                              ; preds = %425, %413
  %427 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %427, ptr %5, align 4
  store i32 1, ptr %21, align 4
  br label %428

428:                                              ; preds = %426, %384, %342, %268, %180
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  %429 = load i32, ptr %5, align 4
  ret i32 %429
}

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

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #3

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

declare void @ERR_clear_error() #5

declare ptr @SSL_CTX_new(ptr noundef) #5

declare ptr @TLS_client_method() #5

declare i32 @SSL_CTX_load_verify_locations(ptr noundef, ptr noundef, ptr noundef) #5

declare i32 @SSL_CTX_set_default_verify_paths(ptr noundef) #5

declare void @SSL_CTX_set_verify(ptr noundef, i32 noundef, ptr noundef) #5

declare ptr @BIO_new_connect(ptr noundef) #5

declare i64 @BIO_ctrl(ptr noundef, i32 noundef, i64 noundef, ptr noundef) #5

declare ptr @BIO_new(ptr noundef) #5

declare ptr @BIO_s_mem() #5

declare ptr @SSL_new(ptr noundef) #5

declare void @SSL_set_bio(ptr noundef, ptr noundef, ptr noundef) #5

declare i64 @SSL_ctrl(ptr noundef, i32 noundef, i64 noundef, ptr noundef) #5

declare i32 @SSL_set1_host(ptr noundef, ptr noundef) #5

declare i32 @SSL_connect(ptr noundef) #5

declare i32 @SSL_get_error(ptr noundef, i32 noundef) #5

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

declare i32 @SSL_want(ptr noundef) #5

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #1

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

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

declare i32 @SSL_write(ptr noundef, ptr noundef, i32 noundef) #5

declare i32 @SSL_get_shutdown(ptr noundef) #5

declare i32 @SSL_read(ptr noundef, ptr noundef, i32 noundef) #5

declare i64 @fwrite(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #5

declare i32 @SSL_shutdown(ptr noundef) #5

declare void @SSL_free(ptr noundef) #5

declare void @BIO_free_all(ptr noundef) #5

declare void @SSL_CTX_free(ptr noundef) #5

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

declare i64 @ERR_peek_error() #5

declare void @ERR_print_errors_fp(ptr noundef) #5

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [124 x i8], align 1
@__PRETTY_FUNCTION__.run_tls_client = external hidden unnamed_addr constant [69 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [49 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.24 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [38 x i8], align 1

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @run_tls_client(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #1 {
  %5 = tail call noalias dereferenceable_or_null(16384) ptr @malloc(i64 noundef 16384) #7
  %.not = icmp eq ptr %5, null
  br i1 %.not, label %6, label %7

6:                                                ; preds = %4
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, i32 noundef 62, ptr noundef nonnull @__PRETTY_FUNCTION__.run_tls_client) #8
  unreachable

7:                                                ; preds = %4
  %8 = tail call noalias dereferenceable_or_null(16384) ptr @malloc(i64 noundef 16384) #7
  %.not183 = icmp eq ptr %8, null
  br i1 %.not183, label %9, label %10

9:                                                ; preds = %7
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.4, i32 noundef 64, ptr noundef nonnull @__PRETTY_FUNCTION__.run_tls_client) #8
  unreachable

10:                                               ; preds = %7
  tail call void @ERR_clear_error() #9
  %11 = tail call ptr @TLS_client_method() #9
  %12 = tail call ptr @SSL_CTX_new(ptr noundef %11) #9
  %.not184 = icmp eq ptr %12, null
  br i1 %.not184, label %13, label %14

13:                                               ; preds = %10
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.4, i32 noundef 69, ptr noundef nonnull @__PRETTY_FUNCTION__.run_tls_client) #8
  unreachable

14:                                               ; preds = %10
  %.not185 = icmp eq ptr %2, null
  br i1 %.not185, label %17, label %15

15:                                               ; preds = %14
  %16 = tail call i32 @SSL_CTX_load_verify_locations(ptr noundef nonnull %12, ptr noundef nonnull %2, ptr noundef null) #9
  br label %19

17:                                               ; preds = %14
  %18 = tail call i32 @SSL_CTX_set_default_verify_paths(ptr noundef nonnull %12) #9
  br label %19

19:                                               ; preds = %17, %15
  %.0148 = phi i32 [ %16, %15 ], [ %18, %17 ]
  %20 = icmp slt i32 %.0148, 1
  br i1 %20, label %21, label %24

21:                                               ; preds = %19
  %.not210 = icmp eq ptr %3, null
  br i1 %.not210, label %.thread236.thread, label %22

22:                                               ; preds = %21
  %23 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.7) #9
  br label %.thread236.thread

24:                                               ; preds = %19
  tail call void @SSL_CTX_set_verify(ptr noundef nonnull %12, i32 noundef 1, ptr noundef null) #9
  %25 = tail call ptr @BIO_new_connect(ptr noundef %0) #9
  %.not186 = icmp eq ptr %25, null
  br i1 %.not186, label %26, label %27

26:                                               ; preds = %24
  tail call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.4, i32 noundef 88, ptr noundef nonnull @__PRETTY_FUNCTION__.run_tls_client) #8
  unreachable

27:                                               ; preds = %24
  %28 = tail call i64 @BIO_ctrl(ptr noundef nonnull %25, i32 noundef 100, i64 noundef 1, ptr noundef %1) #9
  %29 = tail call i64 @BIO_ctrl(ptr noundef nonnull %25, i32 noundef 101, i64 noundef 0, ptr noundef null) #9
  %30 = trunc i64 %29 to i32
  %31 = icmp slt i32 %30, 1
  br i1 %31, label %32, label %35

32:                                               ; preds = %27
  %.not209 = icmp eq ptr %3, null
  br i1 %.not209, label %.thread236.thread248, label %33

33:                                               ; preds = %32
  %34 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.9, ptr noundef %0, ptr noundef %1) #9
  br label %.thread236.thread248

35:                                               ; preds = %27
  %36 = tail call ptr @BIO_s_mem() #9
  %37 = tail call ptr @BIO_new(ptr noundef %36) #9
  %.not187 = icmp eq ptr %37, null
  br i1 %.not187, label %38, label %39

38:                                               ; preds = %35
  tail call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.4, i32 noundef 103, ptr noundef nonnull @__PRETTY_FUNCTION__.run_tls_client) #8
  unreachable

39:                                               ; preds = %35
  %40 = tail call i64 @BIO_ctrl(ptr noundef nonnull %37, i32 noundef 130, i64 noundef -1, ptr noundef null) #9
  %41 = tail call ptr @BIO_s_mem() #9
  %42 = tail call ptr @BIO_new(ptr noundef %41) #9
  %.not188 = icmp eq ptr %42, null
  br i1 %.not188, label %43, label %44

43:                                               ; preds = %39
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.4, i32 noundef 107, ptr noundef nonnull @__PRETTY_FUNCTION__.run_tls_client) #8
  unreachable

44:                                               ; preds = %39
  %45 = tail call i64 @BIO_ctrl(ptr noundef nonnull %42, i32 noundef 130, i64 noundef -1, ptr noundef null) #9
  %46 = tail call ptr @SSL_new(ptr noundef nonnull %12) #9
  %.not189 = icmp eq ptr %46, null
  br i1 %.not189, label %47, label %48

47:                                               ; preds = %44
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.4, i32 noundef 111, ptr noundef nonnull @__PRETTY_FUNCTION__.run_tls_client) #8
  unreachable

48:                                               ; preds = %44
  tail call void @SSL_set_bio(ptr noundef nonnull %46, ptr noundef nonnull %37, ptr noundef nonnull %42) #9
  %49 = tail call i64 @SSL_ctrl(ptr noundef nonnull %46, i32 noundef 55, i64 noundef 0, ptr noundef %0) #9
  %50 = and i64 %49, 4294967295
  %51 = icmp eq i64 %50, 1
  br i1 %51, label %53, label %52

52:                                               ; preds = %48
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.4, i32 noundef 116, ptr noundef nonnull @__PRETTY_FUNCTION__.run_tls_client) #8
  unreachable

53:                                               ; preds = %48
  %54 = tail call i32 @SSL_set1_host(ptr noundef nonnull %46, ptr noundef %0) #9
  %55 = icmp eq i32 %54, 1
  br i1 %55, label %.preheader, label %56

56:                                               ; preds = %53
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.4, i32 noundef 119, ptr noundef nonnull @__PRETTY_FUNCTION__.run_tls_client) #8
  unreachable

.preheader:                                       ; preds = %53, %63
  %57 = tail call i32 @SSL_connect(ptr noundef nonnull %46) #9
  %58 = tail call i32 @SSL_get_error(ptr noundef nonnull %46, i32 noundef %57) #9
  %59 = and i32 %58, -2
  %or.cond = icmp eq i32 %59, 2
  br i1 %or.cond, label %63, label %60

60:                                               ; preds = %.preheader
  %61 = tail call i64 @BIO_ctrl(ptr noundef nonnull %42, i32 noundef 10, i64 noundef 0, ptr noundef null) #9
  %62 = and i64 %61, 4294967295
  %.not190 = icmp eq i64 %62, 0
  br i1 %.not190, label %71, label %63

63:                                               ; preds = %60, %.preheader
  %64 = tail call i32 @SSL_want(ptr noundef nonnull %46) #9
  %65 = icmp eq i32 %64, 3
  %66 = zext i1 %65 to i32
  %67 = tail call i32 @service_bios(ptr noundef nonnull %37, ptr noundef nonnull %42, ptr noundef nonnull %25, i32 noundef %66)
  %.not191 = icmp eq i32 %67, 1
  br i1 %.not191, label %.preheader, label %68

68:                                               ; preds = %63
  %.not192 = icmp eq ptr %3, null
  br i1 %.not192, label %.thread, label %69

69:                                               ; preds = %68
  %70 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.14) #9
  br label %.thread

71:                                               ; preds = %60
  %72 = icmp slt i32 %57, 1
  br i1 %72, label %73, label %77

73:                                               ; preds = %71
  %.not208 = icmp eq ptr %3, null
  br i1 %.not208, label %.thread, label %74

74:                                               ; preds = %73
  %75 = tail call i32 @SSL_get_error(ptr noundef nonnull %46, i32 noundef %57) #9
  %76 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.15, i32 noundef %75) #9
  br label %.thread

77:                                               ; preds = %71
  %78 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %8, i64 noundef 16384, ptr noundef nonnull @.str.16, ptr noundef %0) #9
  %79 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %8) #10
  %80 = trunc i64 %79 to i32
  %81 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17)
  %82 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, ptr noundef nonnull %8)
  %83 = icmp sgt i32 %80, 0
  br i1 %83, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %77, %108
  %.0152260 = phi i32 [ %.1153, %108 ], [ 0, %77 ]
  %84 = zext nneg i32 %.0152260 to i64
  %85 = getelementptr inbounds i8, ptr %8, i64 %84
  %86 = sub nsw i32 %80, %.0152260
  %87 = tail call i32 @SSL_write(ptr noundef nonnull %46, ptr noundef nonnull %85, i32 noundef %86) #9
  %88 = icmp sgt i32 %87, 0
  br i1 %88, label %89, label %91

89:                                               ; preds = %.lr.ph
  %90 = add nuw nsw i32 %87, %.0152260
  br label %108, !llvm.loop !5

91:                                               ; preds = %.lr.ph
  %92 = tail call i32 @SSL_get_error(ptr noundef nonnull %46, i32 noundef %57) #9
  %93 = and i32 %92, -2
  %or.cond3 = icmp eq i32 %93, 2
  br i1 %or.cond3, label %97, label %94

94:                                               ; preds = %91
  %95 = tail call i64 @BIO_ctrl(ptr noundef nonnull %42, i32 noundef 10, i64 noundef 0, ptr noundef null) #9
  %96 = and i64 %95, 4294967295
  %.not204 = icmp eq i64 %96, 0
  br i1 %.not204, label %105, label %97

97:                                               ; preds = %94, %91
  %98 = tail call i32 @SSL_want(ptr noundef nonnull %46) #9
  %99 = icmp eq i32 %98, 3
  %100 = zext i1 %99 to i32
  %101 = tail call i32 @service_bios(ptr noundef nonnull %37, ptr noundef nonnull %42, ptr noundef nonnull %25, i32 noundef %100)
  %.not206 = icmp eq i32 %101, 1
  br i1 %.not206, label %108, label %102, !llvm.loop !5

102:                                              ; preds = %97
  %.not207 = icmp eq ptr %3, null
  br i1 %.not207, label %.thread, label %103

103:                                              ; preds = %102
  %104 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.19) #9
  br label %.thread

105:                                              ; preds = %94
  %.not205 = icmp eq ptr %3, null
  br i1 %.not205, label %.thread, label %106

106:                                              ; preds = %105
  %107 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.20, i32 noundef %92) #9
  br label %.thread

108:                                              ; preds = %97, %89
  %.1153 = phi i32 [ %90, %89 ], [ %.0152260, %97 ]
  %109 = icmp slt i32 %.1153, %80
  br i1 %109, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %108, %77
  %110 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21)
  %111 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22)
  %112 = tail call i32 @SSL_get_shutdown(ptr noundef nonnull %46) #9
  %113 = and i32 %112, 2
  %.not193.not261 = icmp eq i32 %113, 0
  br i1 %.not193.not261, label %.lr.ph263, label %.thread228

.lr.ph263:                                        ; preds = %._crit_edge, %137
  %114 = tail call i64 @BIO_ctrl(ptr noundef nonnull %37, i32 noundef 10, i64 noundef 0, ptr noundef null) #9
  %115 = and i64 %114, 4294967295
  %.not194 = icmp eq i64 %115, 0
  br i1 %.not194, label %116, label %.thread222

116:                                              ; preds = %.lr.ph263
  %117 = tail call i32 @service_bios(ptr noundef nonnull %37, ptr noundef nonnull %42, ptr noundef nonnull %25, i32 noundef 1)
  %.not195 = icmp eq i32 %117, 1
  br i1 %.not195, label %.thread222, label %118

118:                                              ; preds = %116
  %.not198 = icmp eq ptr %3, null
  br i1 %.not198, label %.thread, label %119

119:                                              ; preds = %118
  %120 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.23) #9
  br label %.thread

.thread222:                                       ; preds = %.lr.ph263, %116
  %121 = tail call i32 @SSL_read(ptr noundef nonnull %46, ptr noundef nonnull %5, i32 noundef 16384) #9
  %122 = icmp sgt i32 %121, 0
  br i1 %122, label %123, label %127

123:                                              ; preds = %.thread222
  %124 = zext nneg i32 %121 to i64
  %125 = load ptr, ptr @stdout, align 8, !tbaa !7
  %126 = tail call i64 @fwrite(ptr noundef nonnull %5, i64 noundef 1, i64 noundef %124, ptr noundef %125)
  br label %137, !llvm.loop !11

127:                                              ; preds = %.thread222
  %128 = tail call i32 @SSL_get_error(ptr noundef nonnull %46, i32 noundef %57) #9
  switch i32 %128, label %129 [
    i32 3, label %137
    i32 2, label %137
    i32 0, label %137
  ], !llvm.loop !11

129:                                              ; preds = %127
  %130 = tail call i64 @BIO_ctrl(ptr noundef nonnull %42, i32 noundef 10, i64 noundef 0, ptr noundef null) #9
  %131 = and i64 %130, 4294967295
  %.not196 = icmp eq i64 %131, 0
  br i1 %.not196, label %132, label %137, !llvm.loop !11

132:                                              ; preds = %129
  %133 = icmp eq i32 %128, 6
  br i1 %133, label %.thread228, label %134

134:                                              ; preds = %132
  %.not197 = icmp eq ptr %3, null
  br i1 %.not197, label %.thread, label %135

135:                                              ; preds = %134
  %136 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.24, i32 noundef %128) #9
  br label %.thread

137:                                              ; preds = %123, %129, %127, %127, %127
  %138 = tail call i32 @SSL_get_shutdown(ptr noundef nonnull %46) #9
  %139 = and i32 %138, 2
  %.not193.not = icmp eq i32 %139, 0
  br i1 %.not193.not, label %.lr.ph263, label %.thread228

.thread228:                                       ; preds = %137, %._crit_edge, %132
  %140 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25)
  br label %141

141:                                              ; preds = %148, %.thread228
  %142 = tail call i32 @SSL_shutdown(ptr noundef nonnull %46) #9
  %143 = tail call i32 @SSL_get_error(ptr noundef nonnull %46, i32 noundef %142) #9
  %144 = and i32 %143, -2
  %or.cond9 = icmp eq i32 %144, 2
  br i1 %or.cond9, label %148, label %145

145:                                              ; preds = %141
  %146 = tail call i64 @BIO_ctrl(ptr noundef nonnull %42, i32 noundef 10, i64 noundef 0, ptr noundef null) #9
  %147 = and i64 %146, 4294967295
  %.not199 = icmp eq i64 %147, 0
  br i1 %.not199, label %156, label %148

148:                                              ; preds = %145, %141
  %149 = tail call i32 @SSL_want(ptr noundef nonnull %46) #9
  %150 = icmp eq i32 %149, 3
  %151 = zext i1 %150 to i32
  %152 = tail call i32 @service_bios(ptr noundef nonnull %37, ptr noundef nonnull %42, ptr noundef nonnull %25, i32 noundef %151)
  %.not200 = icmp eq i32 %152, 1
  br i1 %.not200, label %141, label %153

153:                                              ; preds = %148
  %.not201 = icmp eq ptr %3, null
  br i1 %.not201, label %.thread, label %154

154:                                              ; preds = %153
  %155 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.26) #9
  br label %.thread

156:                                              ; preds = %145
  %.not202 = icmp eq i32 %142, 1
  br i1 %.not202, label %.thread, label %157

157:                                              ; preds = %156
  %.not203 = icmp eq ptr %3, null
  br i1 %.not203, label %.thread, label %158

158:                                              ; preds = %157
  %159 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.27) #9
  br label %.thread

.thread:                                          ; preds = %156, %157, %158, %73, %74, %69, %68, %103, %102, %106, %105, %119, %118, %135, %134, %154, %153
  %.0147 = phi i32 [ 0, %156 ], [ 1, %157 ], [ 1, %158 ], [ 1, %73 ], [ 1, %74 ], [ 1, %69 ], [ 1, %68 ], [ 1, %103 ], [ 1, %102 ], [ 1, %106 ], [ 1, %105 ], [ 1, %119 ], [ 1, %118 ], [ 1, %135 ], [ 1, %134 ], [ 1, %154 ], [ 1, %153 ]
  tail call void @SSL_free(ptr noundef nonnull %46) #9
  br label %.thread236.thread248

.thread236.thread248:                             ; preds = %.thread, %33, %32
  %.0147242252 = phi i32 [ %.0147, %.thread ], [ 1, %32 ], [ 1, %33 ]
  tail call void @BIO_free_all(ptr noundef nonnull %25) #9
  br label %.thread236.thread

.thread236.thread:                                ; preds = %22, %21, %.thread236.thread248
  %.0147242246 = phi i32 [ %.0147242252, %.thread236.thread248 ], [ 1, %21 ], [ 1, %22 ]
  tail call void @SSL_CTX_free(ptr noundef nonnull %12) #9
  tail call void @free(ptr noundef %8) #9
  tail call void @free(ptr noundef %5) #9
  %160 = tail call i64 @ERR_peek_error() #9
  %.not213 = icmp eq i64 %160, 0
  br i1 %.not213, label %165, label %161

161:                                              ; preds = %.thread236.thread
  %.not214 = icmp eq ptr %3, null
  br i1 %.not214, label %164, label %162

162:                                              ; preds = %161
  %163 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %3, ptr noundef nonnull @.str.28) #9
  tail call void @ERR_print_errors_fp(ptr noundef nonnull %3) #9
  br label %164

164:                                              ; preds = %162, %161
  tail call void @ERR_clear_error() #9
  br label %165

165:                                              ; preds = %.thread236.thread, %164
  %.0 = phi i32 [ 1, %164 ], [ %.0147242246, %.thread236.thread ]
  ret i32 %.0
}

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #2

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

declare void @ERR_clear_error() local_unnamed_addr #4

declare ptr @SSL_CTX_new(ptr noundef) local_unnamed_addr #4

declare ptr @TLS_client_method() local_unnamed_addr #4

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

declare i32 @SSL_CTX_set_default_verify_paths(ptr noundef) local_unnamed_addr #4

declare void @SSL_CTX_set_verify(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

declare ptr @BIO_new_connect(ptr noundef) local_unnamed_addr #4

declare i64 @BIO_ctrl(ptr noundef, i32 noundef, i64 noundef, ptr noundef) local_unnamed_addr #4

declare ptr @BIO_new(ptr noundef) local_unnamed_addr #4

declare ptr @BIO_s_mem() local_unnamed_addr #4

declare ptr @SSL_new(ptr noundef) local_unnamed_addr #4

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

declare i64 @SSL_ctrl(ptr noundef, i32 noundef, i64 noundef, ptr noundef) local_unnamed_addr #4

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

declare i32 @SSL_connect(ptr noundef) local_unnamed_addr #4

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

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

declare i32 @SSL_want(ptr noundef) local_unnamed_addr #4

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

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

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

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

declare i32 @SSL_get_shutdown(ptr noundef) local_unnamed_addr #4

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

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

declare i32 @SSL_shutdown(ptr noundef) local_unnamed_addr #4

declare void @SSL_free(ptr noundef) local_unnamed_addr #4

declare void @BIO_free_all(ptr noundef) local_unnamed_addr #4

declare void @SSL_CTX_free(ptr noundef) local_unnamed_addr #4

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

declare i64 @ERR_peek_error() local_unnamed_addr #4

declare void @ERR_print_errors_fp(ptr noundef) local_unnamed_addr #4

attributes #0 = { 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 #1 = { 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 #2 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress 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 #6 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind allocsize(0) }
attributes #8 = { noreturn nounwind }
attributes #9 = { nounwind }
attributes #10 = { 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 = distinct !{!5, !6}
!6 = !{!"llvm.loop.mustprogress"}
!7 = !{!8, !8, i64 0}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = distinct !{!11, !6}


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