; LLVM IR from aws/s2n-tls :: tls (s2n_connection)

; 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.s2n_debug_info = type { ptr, ptr }
%struct.s2n_signature_scheme = type { i16, ptr, i32, i32, i8, i8, i16, ptr }
%struct.s2n_stuffer = type { %struct.s2n_blob, i32, i32, i32, i8 }
%struct.s2n_blob = type { ptr, i32, i32, i8 }
%struct.s2n_result = type { i32 }
%struct.s2n_connection = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, [22 x i8], [22 x i8], [22 x i8], i32, i32, %struct.s2n_timer, i64, i64, [32 x i8], i8, i8, i8, i8, i8, i8, i8, ptr, ptr, %struct.s2n_secrets, ptr, ptr, %struct.s2n_kex_parameters, %struct.s2n_handshake_parameters, %struct.s2n_psk_parameters, ptr, i8, i32, [5 x i8], %struct.s2n_stuffer, %struct.s2n_stuffer, %struct.s2n_stuffer, %struct.s2n_stuffer, i32, i64, [2 x i8], %struct.s2n_stuffer, i8, i8, i8, i8, %struct.s2n_atomic_flag, %struct.s2n_atomic_flag, %struct.s2n_handshake, i16, i32, i16, i64, i8, i64, i64, i64, %struct.s2n_atomic_flag, %struct.s2n_atomic_flag, [256 x i8], [256 x i8], i32, %struct.s2n_blob, i32, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_client_hello, %struct.s2n_x509_validator, ptr, ptr, i8, i32, %struct.s2n_blob, i32, %struct.s2n_ticket_fields, [138 x i8], %struct.s2n_stuffer, %struct.s2n_blob, %struct.s2n_blob, i8, i8, i8, i16, i16, i32, i32, %struct.s2n_blob, i32, %struct.s2n_post_handshake, %struct.s2n_atomic_flag, i8, i8 }
%struct.s2n_timer = type { i64 }
%struct.s2n_secrets = type { %union.anon, i32 }
%union.anon = type { %struct.s2n_tls13_secrets }
%struct.s2n_tls13_secrets = type { [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], i32 }
%struct.s2n_kex_parameters = type { %struct.s2n_dh_params, %struct.s2n_ecc_evp_params, [4 x ptr], %struct.s2n_ecc_evp_params, %struct.s2n_kem_group_params, %struct.s2n_kem_group_params, [8 x ptr], %struct.s2n_kem_params, %struct.s2n_blob, %struct.s2n_blob }
%struct.s2n_dh_params = type { ptr }
%struct.s2n_ecc_evp_params = type { ptr, ptr }
%struct.s2n_kem_group_params = type { ptr, %struct.s2n_kem_params, %struct.s2n_ecc_evp_params }
%struct.s2n_kem_params = type { ptr, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, i8 }
%struct.s2n_handshake_parameters = type { %struct.s2n_pkey, %struct.s2n_pkey, %struct.s2n_blob, i32, %struct.s2n_sig_scheme_list, ptr, ptr, ptr, [4 x ptr], [4 x ptr], i8, i8, [32 x i8], [32 x i8] }
%struct.s2n_pkey = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.s2n_sig_scheme_list = type { [128 x i16], i8 }
%struct.s2n_psk_parameters = type { i32, %struct.s2n_array, i16, i16, ptr, i32 }
%struct.s2n_array = type { %struct.s2n_blob, i32, i32 }
%struct.s2n_handshake = type { %struct.s2n_stuffer, ptr, [8 x i8], [48 x i8], [48 x i8], i8, i32, i32, i32, i32, %struct.s2n_offered_early_data, i8, i32 }
%struct.s2n_offered_early_data = type { ptr }
%struct.s2n_client_hello = type { %struct.s2n_blob, %struct.s2n_parsed_extensions_list, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, i8, i8, i8 }
%struct.s2n_parsed_extensions_list = type { [21 x %struct.s2n_parsed_extension], %struct.s2n_blob, i16 }
%struct.s2n_parsed_extension = type { %struct.s2n_blob, i16, i16, i8 }
%struct.s2n_x509_validator = type { ptr, ptr, i8, i8, i16, ptr, i32, ptr, %struct.s2n_cert_validation_info, i8 }
%struct.s2n_cert_validation_info = type { i8, [3 x i8] }
%struct.s2n_ticket_fields = type { %struct.s2n_blob, i32 }
%struct.s2n_post_handshake = type { %struct.s2n_stuffer, [4 x i8] }
%struct.s2n_atomic_flag = type { i32 }

@_s2n_debug_info = external thread_local global %struct.s2n_debug_info, align 8
@s2n_errno = external thread_local global i32, align 4
@.str.15 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [91 x i8], align 1
@s2n_null_sig_scheme = external constant %struct.s2n_signature_scheme, align 8
@s2n_highest_protocol_version = external global i8, align 1
@s2n_unknown_protocol_version = external global i8, align 1

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

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

declare i32 @s2n_blob_zero(ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @s2n_result_is_ok(i32) #3

declare i32 @s2n_prf_new(ptr noundef) #2

declare i32 @s2n_handshake_hashes_new(ptr noundef) #2

declare i32 @s2n_stuffer_growable_alloc(ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @s2n_connection_wipe(ptr noundef %0) #4 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca %struct.s2n_stuffer, align 8
  %7 = alloca %struct.s2n_stuffer, align 8
  %8 = alloca %struct.s2n_stuffer, align 8
  %9 = alloca %struct.s2n_stuffer, align 8
  %10 = alloca %struct.s2n_stuffer, align 8
  %11 = alloca %struct.s2n_stuffer, align 8
  %12 = alloca %struct.s2n_result, align 4
  %13 = alloca i32, align 4
  %14 = alloca %struct.s2n_result, align 4
  %15 = alloca ptr, align 8
  %16 = alloca %struct.s2n_result, align 4
  %17 = alloca %struct.s2n_result, align 4
  %18 = alloca ptr, align 8
  %19 = alloca %struct.s2n_result, align 4
  %20 = alloca %struct.s2n_result, align 4
  %21 = alloca ptr, align 8
  %22 = alloca %struct.s2n_result, align 4
  %23 = alloca %struct.s2n_result, align 4
  %24 = alloca ptr, align 8
  %25 = alloca %struct.s2n_result, align 4
  %26 = alloca i64, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i64, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i64, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i64, align 8
  %33 = alloca ptr, align 8
  %34 = alloca i64, align 8
  %35 = alloca ptr, align 8
  %36 = alloca i64, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i64, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i64, align 8
  %41 = alloca ptr, align 8
  %42 = alloca i64, align 8
  %43 = alloca ptr, align 8
  %44 = alloca i64, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i64, align 8
  %47 = alloca ptr, align 8
  %48 = alloca i64, align 8
  %49 = alloca ptr, align 8
  %50 = alloca %struct.s2n_result, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  br label %51

51:                                               ; preds = %1
  %52 = load ptr, ptr %3, align 8, !tbaa !5
  %53 = icmp ne ptr %52, null
  br i1 %53, label %85, label %54

54:                                               ; preds = %51
  br label %55

55:                                               ; preds = %54
  br label %56

56:                                               ; preds = %55
  %57 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %58 = getelementptr inbounds %struct.s2n_debug_info, ptr %57, i32 0, i32 0
  store ptr @.str.15, ptr %58, align 8, !tbaa !9
  %59 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %60 = getelementptr inbounds %struct.s2n_debug_info, ptr %59, i32 0, i32 0
  %61 = load ptr, ptr %60, align 8, !tbaa !9
  %62 = getelementptr inbounds i8, ptr %61, i64 21
  %63 = call ptr @strrchr(ptr noundef %62, i32 noundef 47) #8
  %64 = icmp ne ptr %63, null
  br i1 %64, label %65, label %72

65:                                               ; preds = %56
  %66 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %67 = getelementptr inbounds %struct.s2n_debug_info, ptr %66, i32 0, i32 0
  %68 = load ptr, ptr %67, align 8, !tbaa !9
  %69 = getelementptr inbounds i8, ptr %68, i64 21
  %70 = call ptr @strrchr(ptr noundef %69, i32 noundef 47) #8
  %71 = getelementptr inbounds i8, ptr %70, i64 1
  br label %77

72:                                               ; preds = %56
  %73 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %74 = getelementptr inbounds %struct.s2n_debug_info, ptr %73, i32 0, i32 0
  %75 = load ptr, ptr %74, align 8, !tbaa !9
  %76 = getelementptr inbounds i8, ptr %75, i64 21
  br label %77

77:                                               ; preds = %72, %65
  %78 = phi ptr [ %71, %65 ], [ %76, %72 ]
  %79 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %80 = getelementptr inbounds %struct.s2n_debug_info, ptr %79, i32 0, i32 1
  store ptr %78, ptr %80, align 8, !tbaa !11
  %81 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %81, align 4, !tbaa !12
  %82 = call i32 @s2n_calculate_stacktrace()
  br label %83

83:                                               ; preds = %77
  store i32 -1, ptr %2, align 4
  br label %1324

84:                                               ; No predecessors!
  br label %85

85:                                               ; preds = %84, %51
  br label %86

86:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #9
  %87 = load ptr, ptr %3, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.s2n_connection, ptr %87, i32 0, i32 13
  %89 = load i32, ptr %88, align 4, !tbaa !14
  store i32 %89, ptr %4, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  %90 = load ptr, ptr %3, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.s2n_connection, ptr %90, i32 0, i32 1
  %92 = load ptr, ptr %91, align 8, !tbaa !42
  store ptr %92, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %6) #9
  call void @llvm.memset.p0.i64(ptr align 8 %6, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr %7) #9
  call void @llvm.memset.p0.i64(ptr align 8 %7, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr %8) #9
  call void @llvm.memset.p0.i64(ptr align 8 %8, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr %9) #9
  call void @llvm.memset.p0.i64(ptr align 8 %9, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr %10) #9
  call void @llvm.memset.p0.i64(ptr align 8 %10, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr %11) #9
  call void @llvm.memset.p0.i64(ptr align 8 %11, i8 0, i64 40, i1 false)
  %93 = load ptr, ptr %3, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.s2n_connection, ptr %93, i32 0, i32 52
  %95 = getelementptr inbounds %struct.s2n_handshake, ptr %94, i32 0, i32 1
  %96 = load ptr, ptr %95, align 8, !tbaa !43
  %97 = icmp ne ptr %96, null
  br i1 %97, label %112, label %98

98:                                               ; preds = %86
  br label %99

99:                                               ; preds = %98
  %100 = load ptr, ptr %3, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.s2n_connection, ptr %100, i32 0, i32 52
  %102 = getelementptr inbounds %struct.s2n_handshake, ptr %101, i32 0, i32 1
  %103 = call i32 @s2n_handshake_hashes_new(ptr noundef %102)
  %104 = getelementptr inbounds %struct.s2n_result, ptr %12, i32 0, i32 0
  store i32 %103, ptr %104, align 4
  %105 = getelementptr inbounds %struct.s2n_result, ptr %12, i32 0, i32 0
  %106 = load i32, ptr %105, align 4
  %107 = call zeroext i1 @s2n_result_is_ok(i32 %106)
  br i1 %107, label %109, label %108

108:                                              ; preds = %99
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1323

109:                                              ; preds = %99
  br label %110

110:                                              ; preds = %109
  br label %111

111:                                              ; preds = %110
  br label %112

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

113:                                              ; preds = %112
  %114 = load ptr, ptr %3, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.s2n_connection, ptr %114, i32 0, i32 52
  %116 = getelementptr inbounds %struct.s2n_handshake, ptr %115, i32 0, i32 1
  %117 = load ptr, ptr %116, align 8, !tbaa !43
  %118 = call i32 @s2n_handshake_hashes_wipe(ptr noundef %117)
  %119 = getelementptr inbounds %struct.s2n_result, ptr %14, i32 0, i32 0
  store i32 %118, ptr %119, align 4
  %120 = getelementptr inbounds %struct.s2n_result, ptr %14, i32 0, i32 0
  %121 = load i32, ptr %120, align 4
  %122 = call zeroext i1 @s2n_result_is_ok(i32 %121)
  br i1 %122, label %124, label %123

123:                                              ; preds = %113
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1323

124:                                              ; preds = %113
  br label %125

125:                                              ; preds = %124
  br label %126

126:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %127 = load ptr, ptr %3, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.s2n_connection, ptr %127, i32 0, i32 52
  %129 = getelementptr inbounds %struct.s2n_handshake, ptr %128, i32 0, i32 1
  %130 = load ptr, ptr %129, align 8, !tbaa !43
  store ptr %130, ptr %15, align 8, !tbaa !5
  %131 = load ptr, ptr %3, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.s2n_connection, ptr %131, i32 0, i32 34
  %133 = load ptr, ptr %132, align 8, !tbaa !44
  %134 = icmp ne ptr %133, null
  br i1 %134, label %147, label %135

135:                                              ; preds = %126
  br label %136

136:                                              ; preds = %135
  %137 = load ptr, ptr %3, align 8, !tbaa !5
  %138 = call i32 @s2n_prf_new(ptr noundef %137)
  %139 = getelementptr inbounds %struct.s2n_result, ptr %16, i32 0, i32 0
  store i32 %138, ptr %139, align 4
  %140 = getelementptr inbounds %struct.s2n_result, ptr %16, i32 0, i32 0
  %141 = load i32, ptr %140, align 4
  %142 = call zeroext i1 @s2n_result_is_ok(i32 %141)
  br i1 %142, label %144, label %143

143:                                              ; preds = %136
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1322

144:                                              ; preds = %136
  br label %145

145:                                              ; preds = %144
  br label %146

146:                                              ; preds = %145
  br label %147

147:                                              ; preds = %146, %126
  br label %148

148:                                              ; preds = %147
  %149 = load ptr, ptr %3, align 8, !tbaa !5
  %150 = call i32 @s2n_prf_wipe(ptr noundef %149)
  %151 = getelementptr inbounds %struct.s2n_result, ptr %17, i32 0, i32 0
  store i32 %150, ptr %151, align 4
  %152 = getelementptr inbounds %struct.s2n_result, ptr %17, i32 0, i32 0
  %153 = load i32, ptr %152, align 4
  %154 = call zeroext i1 @s2n_result_is_ok(i32 %153)
  br i1 %154, label %156, label %155

155:                                              ; preds = %148
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1322

156:                                              ; preds = %148
  br label %157

157:                                              ; preds = %156
  br label %158

158:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %159 = load ptr, ptr %3, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.s2n_connection, ptr %159, i32 0, i32 34
  %161 = load ptr, ptr %160, align 8, !tbaa !44
  store ptr %161, ptr %18, align 8, !tbaa !5
  %162 = load ptr, ptr %3, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.s2n_connection, ptr %162, i32 0, i32 26
  %164 = load ptr, ptr %163, align 8, !tbaa !45
  %165 = icmp ne ptr %164, null
  br i1 %165, label %179, label %166

166:                                              ; preds = %158
  br label %167

167:                                              ; preds = %166
  %168 = load ptr, ptr %3, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.s2n_connection, ptr %168, i32 0, i32 26
  %170 = call i32 @s2n_crypto_parameters_new(ptr noundef %169)
  %171 = getelementptr inbounds %struct.s2n_result, ptr %19, i32 0, i32 0
  store i32 %170, ptr %171, align 4
  %172 = getelementptr inbounds %struct.s2n_result, ptr %19, i32 0, i32 0
  %173 = load i32, ptr %172, align 4
  %174 = call zeroext i1 @s2n_result_is_ok(i32 %173)
  br i1 %174, label %176, label %175

175:                                              ; preds = %167
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1321

176:                                              ; preds = %167
  br label %177

177:                                              ; preds = %176
  br label %178

178:                                              ; preds = %177
  br label %193

179:                                              ; preds = %158
  br label %180

180:                                              ; preds = %179
  %181 = load ptr, ptr %3, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.s2n_connection, ptr %181, i32 0, i32 26
  %183 = load ptr, ptr %182, align 8, !tbaa !45
  %184 = call i32 @s2n_crypto_parameters_wipe(ptr noundef %183)
  %185 = getelementptr inbounds %struct.s2n_result, ptr %20, i32 0, i32 0
  store i32 %184, ptr %185, align 4
  %186 = getelementptr inbounds %struct.s2n_result, ptr %20, i32 0, i32 0
  %187 = load i32, ptr %186, align 4
  %188 = call zeroext i1 @s2n_result_is_ok(i32 %187)
  br i1 %188, label %190, label %189

189:                                              ; preds = %180
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1321

190:                                              ; preds = %180
  br label %191

191:                                              ; preds = %190
  br label %192

192:                                              ; preds = %191
  br label %193

193:                                              ; preds = %192, %178
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %194 = load ptr, ptr %3, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.s2n_connection, ptr %194, i32 0, i32 26
  %196 = load ptr, ptr %195, align 8, !tbaa !45
  store ptr %196, ptr %21, align 8, !tbaa !5
  %197 = load ptr, ptr %3, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.s2n_connection, ptr %197, i32 0, i32 27
  %199 = load ptr, ptr %198, align 8, !tbaa !46
  %200 = icmp ne ptr %199, null
  br i1 %200, label %214, label %201

201:                                              ; preds = %193
  br label %202

202:                                              ; preds = %201
  %203 = load ptr, ptr %3, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.s2n_connection, ptr %203, i32 0, i32 27
  %205 = call i32 @s2n_crypto_parameters_new(ptr noundef %204)
  %206 = getelementptr inbounds %struct.s2n_result, ptr %22, i32 0, i32 0
  store i32 %205, ptr %206, align 4
  %207 = getelementptr inbounds %struct.s2n_result, ptr %22, i32 0, i32 0
  %208 = load i32, ptr %207, align 4
  %209 = call zeroext i1 @s2n_result_is_ok(i32 %208)
  br i1 %209, label %211, label %210

210:                                              ; preds = %202
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1320

211:                                              ; preds = %202
  br label %212

212:                                              ; preds = %211
  br label %213

213:                                              ; preds = %212
  br label %228

214:                                              ; preds = %193
  br label %215

215:                                              ; preds = %214
  %216 = load ptr, ptr %3, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.s2n_connection, ptr %216, i32 0, i32 27
  %218 = load ptr, ptr %217, align 8, !tbaa !46
  %219 = call i32 @s2n_crypto_parameters_wipe(ptr noundef %218)
  %220 = getelementptr inbounds %struct.s2n_result, ptr %23, i32 0, i32 0
  store i32 %219, ptr %220, align 4
  %221 = getelementptr inbounds %struct.s2n_result, ptr %23, i32 0, i32 0
  %222 = load i32, ptr %221, align 4
  %223 = call zeroext i1 @s2n_result_is_ok(i32 %222)
  br i1 %223, label %225, label %224

224:                                              ; preds = %215
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1320

225:                                              ; preds = %215
  br label %226

226:                                              ; preds = %225
  br label %227

227:                                              ; preds = %226
  br label %228

228:                                              ; preds = %227, %213
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %229 = load ptr, ptr %3, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.s2n_connection, ptr %229, i32 0, i32 27
  %231 = load ptr, ptr %230, align 8, !tbaa !46
  store ptr %231, ptr %24, align 8, !tbaa !5
  br label %232

232:                                              ; preds = %228
  %233 = load ptr, ptr %3, align 8, !tbaa !5
  %234 = call i32 @s2n_connection_wipe_keys(ptr noundef %233)
  %235 = icmp sgt i32 %234, -1
  br i1 %235, label %237, label %236

236:                                              ; preds = %232
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

237:                                              ; preds = %232
  br label %238

238:                                              ; preds = %237
  br label %239

239:                                              ; preds = %238
  br label %240

240:                                              ; preds = %239
  %241 = load ptr, ptr %3, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.s2n_connection, ptr %241, i32 0, i32 45
  %243 = call i32 @s2n_stuffer_wipe(ptr noundef %242)
  %244 = icmp sgt i32 %243, -1
  br i1 %244, label %246, label %245

245:                                              ; preds = %240
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

246:                                              ; preds = %240
  br label %247

247:                                              ; preds = %246
  br label %248

248:                                              ; preds = %247
  br label %249

249:                                              ; preds = %248
  %250 = load ptr, ptr %3, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.s2n_connection, ptr %250, i32 0, i32 81
  %252 = call i32 @s2n_stuffer_wipe(ptr noundef %251)
  %253 = icmp sgt i32 %252, -1
  br i1 %253, label %255, label %254

254:                                              ; preds = %249
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

255:                                              ; preds = %249
  br label %256

256:                                              ; preds = %255
  br label %257

257:                                              ; preds = %256
  br label %258

258:                                              ; preds = %257
  %259 = load ptr, ptr %3, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.s2n_connection, ptr %259, i32 0, i32 52
  %261 = getelementptr inbounds %struct.s2n_handshake, ptr %260, i32 0, i32 0
  %262 = call i32 @s2n_stuffer_wipe(ptr noundef %261)
  %263 = icmp sgt i32 %262, -1
  br i1 %263, label %265, label %264

264:                                              ; preds = %258
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

265:                                              ; preds = %258
  br label %266

266:                                              ; preds = %265
  br label %267

267:                                              ; preds = %266
  br label %268

268:                                              ; preds = %267
  %269 = load ptr, ptr %3, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.s2n_connection, ptr %269, i32 0, i32 93
  %271 = getelementptr inbounds %struct.s2n_post_handshake, ptr %270, i32 0, i32 0
  %272 = call i32 @s2n_stuffer_wipe(ptr noundef %271)
  %273 = icmp sgt i32 %272, -1
  br i1 %273, label %275, label %274

274:                                              ; preds = %268
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

275:                                              ; preds = %268
  br label %276

276:                                              ; preds = %275
  br label %277

277:                                              ; preds = %276
  br label %278

278:                                              ; preds = %277
  %279 = load ptr, ptr %3, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.s2n_connection, ptr %279, i32 0, i32 71
  %281 = getelementptr inbounds %struct.s2n_client_hello, ptr %280, i32 0, i32 0
  %282 = call i32 @s2n_blob_zero(ptr noundef %281)
  %283 = icmp sgt i32 %282, -1
  br i1 %283, label %285, label %284

284:                                              ; preds = %278
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

285:                                              ; preds = %278
  br label %286

286:                                              ; preds = %285
  br label %287

287:                                              ; preds = %286
  br label %288

288:                                              ; preds = %287
  %289 = load ptr, ptr %3, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.s2n_connection, ptr %289, i32 0, i32 38
  %291 = call i32 @s2n_stuffer_wipe(ptr noundef %290)
  %292 = icmp sgt i32 %291, -1
  br i1 %292, label %294, label %293

293:                                              ; preds = %288
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

294:                                              ; preds = %288
  br label %295

295:                                              ; preds = %294
  br label %296

296:                                              ; preds = %295
  br label %297

297:                                              ; preds = %296
  %298 = load ptr, ptr %3, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.s2n_connection, ptr %298, i32 0, i32 39
  %300 = call i32 @s2n_stuffer_wipe(ptr noundef %299)
  %301 = icmp sgt i32 %300, -1
  br i1 %301, label %303, label %302

302:                                              ; preds = %297
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

303:                                              ; preds = %297
  br label %304

304:                                              ; preds = %303
  br label %305

305:                                              ; preds = %304
  br label %306

306:                                              ; preds = %305
  %307 = load ptr, ptr %3, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.s2n_connection, ptr %307, i32 0, i32 41
  %309 = call i32 @s2n_stuffer_wipe(ptr noundef %308)
  %310 = icmp sgt i32 %309, -1
  br i1 %310, label %312, label %311

311:                                              ; preds = %306
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

312:                                              ; preds = %306
  br label %313

313:                                              ; preds = %312
  br label %314

314:                                              ; preds = %313
  br label %315

315:                                              ; preds = %314
  %316 = load ptr, ptr %3, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.s2n_connection, ptr %316, i32 0, i32 93
  %318 = getelementptr inbounds %struct.s2n_post_handshake, ptr %317, i32 0, i32 0
  %319 = call i32 @s2n_stuffer_free(ptr noundef %318)
  %320 = icmp sgt i32 %319, -1
  br i1 %320, label %322, label %321

321:                                              ; preds = %315
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

322:                                              ; preds = %315
  br label %323

323:                                              ; preds = %322
  br label %324

324:                                              ; preds = %323
  br label %325

325:                                              ; preds = %324
  %326 = load ptr, ptr %3, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.s2n_connection, ptr %326, i32 0, i32 40
  %328 = call i32 @s2n_stuffer_free(ptr noundef %327)
  %329 = icmp sgt i32 %328, -1
  br i1 %329, label %331, label %330

330:                                              ; preds = %325
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

331:                                              ; preds = %325
  br label %332

332:                                              ; preds = %331
  br label %333

333:                                              ; preds = %332
  br label %334

334:                                              ; preds = %333
  %335 = load ptr, ptr %3, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.s2n_connection, ptr %335, i32 0, i32 33
  %337 = call i32 @s2n_psk_parameters_wipe(ptr noundef %336)
  %338 = getelementptr inbounds %struct.s2n_result, ptr %25, i32 0, i32 0
  store i32 %337, ptr %338, align 4
  %339 = getelementptr inbounds %struct.s2n_result, ptr %25, i32 0, i32 0
  %340 = load i32, ptr %339, align 4
  %341 = call zeroext i1 @s2n_result_is_ok(i32 %340)
  br i1 %341, label %343, label %342

342:                                              ; preds = %334
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

343:                                              ; preds = %334
  br label %344

344:                                              ; preds = %343
  br label %345

345:                                              ; preds = %344
  br label %346

346:                                              ; preds = %345
  %347 = load ptr, ptr %3, align 8, !tbaa !5
  %348 = call i32 @s2n_connection_wipe_io(ptr noundef %347)
  %349 = icmp sgt i32 %348, -1
  br i1 %349, label %351, label %350

350:                                              ; preds = %346
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

351:                                              ; preds = %346
  br label %352

352:                                              ; preds = %351
  br label %353

353:                                              ; preds = %352
  br label %354

354:                                              ; preds = %353
  %355 = load ptr, ptr %3, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.s2n_connection, ptr %355, i32 0, i32 77
  %357 = call i32 @s2n_free(ptr noundef %356)
  %358 = icmp sgt i32 %357, -1
  br i1 %358, label %360, label %359

359:                                              ; preds = %354
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

360:                                              ; preds = %354
  br label %361

361:                                              ; preds = %360
  br label %362

362:                                              ; preds = %361
  br label %363

363:                                              ; preds = %362
  %364 = load ptr, ptr %3, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.s2n_connection, ptr %364, i32 0, i32 66
  %366 = call i32 @s2n_free(ptr noundef %365)
  %367 = icmp sgt i32 %366, -1
  br i1 %367, label %369, label %368

368:                                              ; preds = %363
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

369:                                              ; preds = %363
  br label %370

370:                                              ; preds = %369
  br label %371

371:                                              ; preds = %370
  br label %372

372:                                              ; preds = %371
  %373 = load ptr, ptr %3, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.s2n_connection, ptr %373, i32 0, i32 82
  %375 = call i32 @s2n_free(ptr noundef %374)
  %376 = icmp sgt i32 %375, -1
  br i1 %376, label %378, label %377

377:                                              ; preds = %372
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

378:                                              ; preds = %372
  br label %379

379:                                              ; preds = %378
  br label %380

380:                                              ; preds = %379
  br label %381

381:                                              ; preds = %380
  %382 = load ptr, ptr %3, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.s2n_connection, ptr %382, i32 0, i32 69
  %384 = call i32 @s2n_free(ptr noundef %383)
  %385 = icmp sgt i32 %384, -1
  br i1 %385, label %387, label %386

386:                                              ; preds = %381
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

387:                                              ; preds = %381
  br label %388

388:                                              ; preds = %387
  br label %389

389:                                              ; preds = %388
  br label %390

390:                                              ; preds = %389
  %391 = load ptr, ptr %3, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.s2n_connection, ptr %391, i32 0, i32 70
  %393 = call i32 @s2n_free(ptr noundef %392)
  %394 = icmp sgt i32 %393, -1
  br i1 %394, label %396, label %395

395:                                              ; preds = %390
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

396:                                              ; preds = %390
  br label %397

397:                                              ; preds = %396
  br label %398

398:                                              ; preds = %397
  br label %399

399:                                              ; preds = %398
  %400 = load ptr, ptr %3, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.s2n_connection, ptr %400, i32 0, i32 91
  %402 = call i32 @s2n_free(ptr noundef %401)
  %403 = icmp sgt i32 %402, -1
  br i1 %403, label %405, label %404

404:                                              ; preds = %399
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

405:                                              ; preds = %399
  br label %406

406:                                              ; preds = %405
  br label %407

407:                                              ; preds = %406
  br label %408

408:                                              ; preds = %407
  %409 = load ptr, ptr %3, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.s2n_connection, ptr %409, i32 0, i32 79
  %411 = getelementptr inbounds %struct.s2n_ticket_fields, ptr %410, i32 0, i32 0
  %412 = call i32 @s2n_free(ptr noundef %411)
  %413 = icmp sgt i32 %412, -1
  br i1 %413, label %415, label %414

414:                                              ; preds = %408
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

415:                                              ; preds = %408
  br label %416

416:                                              ; preds = %415
  br label %417

417:                                              ; preds = %416
  br label %418

418:                                              ; preds = %417
  %419 = load ptr, ptr %3, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.s2n_connection, ptr %419, i32 0, i32 83
  %421 = call i32 @s2n_free(ptr noundef %420)
  %422 = icmp sgt i32 %421, -1
  br i1 %422, label %424, label %423

423:                                              ; preds = %418
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

424:                                              ; preds = %418
  br label %425

425:                                              ; preds = %424
  br label %426

426:                                              ; preds = %425
  br label %427

427:                                              ; preds = %426
  %428 = load ptr, ptr %3, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.s2n_connection, ptr %428, i32 0, i32 52
  %430 = getelementptr inbounds %struct.s2n_handshake, ptr %429, i32 0, i32 0
  %431 = call i32 @s2n_stuffer_resize(ptr noundef %430, i32 noundef 17413)
  %432 = icmp sgt i32 %431, -1
  br i1 %432, label %434, label %433

433:                                              ; preds = %427
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

434:                                              ; preds = %427
  br label %435

435:                                              ; preds = %434
  br label %436

436:                                              ; preds = %435
  br label %437

437:                                              ; preds = %436
  %438 = load ptr, ptr %3, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.s2n_connection, ptr %438, i32 0, i32 71
  %440 = getelementptr inbounds %struct.s2n_client_hello, ptr %439, i32 0, i32 0
  %441 = call i32 @s2n_free(ptr noundef %440)
  %442 = icmp sgt i32 %441, -1
  br i1 %442, label %444, label %443

443:                                              ; preds = %437
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

444:                                              ; preds = %437
  br label %445

445:                                              ; preds = %444
  br label %446

446:                                              ; preds = %445
  br label %447

447:                                              ; preds = %446
  %448 = load ptr, ptr %3, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.s2n_connection, ptr %448, i32 0, i32 39
  %450 = call i32 @s2n_stuffer_resize(ptr noundef %449, i32 noundef 0)
  %451 = icmp sgt i32 %450, -1
  br i1 %451, label %453, label %452

452:                                              ; preds = %447
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

453:                                              ; preds = %447
  br label %454

454:                                              ; preds = %453
  br label %455

455:                                              ; preds = %454
  br label %456

456:                                              ; preds = %455
  %457 = load ptr, ptr %3, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.s2n_connection, ptr %457, i32 0, i32 41
  %459 = call i32 @s2n_stuffer_resize(ptr noundef %458, i32 noundef 0)
  %460 = icmp sgt i32 %459, -1
  br i1 %460, label %462, label %461

461:                                              ; preds = %456
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

462:                                              ; preds = %456
  br label %463

463:                                              ; preds = %462
  br label %464

464:                                              ; preds = %463
  %465 = load ptr, ptr %3, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.s2n_connection, ptr %465, i32 0, i32 3
  store ptr null, ptr %466, align 8, !tbaa !47
  %467 = load ptr, ptr %3, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.s2n_connection, ptr %467, i32 0, i32 75
  store i8 0, ptr %468, align 8, !tbaa !48
  %469 = load ptr, ptr %3, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.s2n_connection, ptr %469, i32 0, i32 73
  store ptr null, ptr %470, align 8, !tbaa !49
  %471 = load ptr, ptr %3, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.s2n_connection, ptr %471, i32 0, i32 74
  store ptr null, ptr %472, align 8, !tbaa !50
  br label %473

473:                                              ; preds = %464
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  store i64 40, ptr %26, align 8, !tbaa !51
  %474 = load i64, ptr %26, align 8, !tbaa !51
  %475 = icmp ne i64 %474, 0
  %476 = xor i1 %475, true
  %477 = xor i1 %476, true
  %478 = zext i1 %477 to i32
  %479 = sext i32 %478 to i64
  %480 = call i64 @llvm.expect.i64(i64 %479, i64 1)
  %481 = icmp ne i64 %480, 0
  br i1 %481, label %482, label %529

482:                                              ; preds = %473
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  %483 = load ptr, ptr %3, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.s2n_connection, ptr %483, i32 0, i32 45
  %485 = load i64, ptr %26, align 8, !tbaa !51
  %486 = call ptr @s2n_ensure_memmove_trace(ptr noundef %6, ptr noundef %484, i64 noundef %485)
  store ptr %486, ptr %27, align 8, !tbaa !5
  br label %487

487:                                              ; preds = %482
  %488 = load ptr, ptr %27, align 8, !tbaa !5
  %489 = icmp ne ptr %488, null
  br i1 %489, label %523, label %490

490:                                              ; preds = %487
  br label %491

491:                                              ; preds = %490
  br label %492

492:                                              ; preds = %491
  %493 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %494 = getelementptr inbounds %struct.s2n_debug_info, ptr %493, i32 0, i32 0
  store ptr @.str.16, ptr %494, align 8, !tbaa !9
  %495 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %496 = getelementptr inbounds %struct.s2n_debug_info, ptr %495, i32 0, i32 0
  %497 = load ptr, ptr %496, align 8, !tbaa !9
  %498 = getelementptr inbounds i8, ptr %497, i64 21
  %499 = call ptr @strrchr(ptr noundef %498, i32 noundef 47) #8
  %500 = icmp ne ptr %499, null
  br i1 %500, label %501, label %508

501:                                              ; preds = %492
  %502 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %503 = getelementptr inbounds %struct.s2n_debug_info, ptr %502, i32 0, i32 0
  %504 = load ptr, ptr %503, align 8, !tbaa !9
  %505 = getelementptr inbounds i8, ptr %504, i64 21
  %506 = call ptr @strrchr(ptr noundef %505, i32 noundef 47) #8
  %507 = getelementptr inbounds i8, ptr %506, i64 1
  br label %513

508:                                              ; preds = %492
  %509 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %510 = getelementptr inbounds %struct.s2n_debug_info, ptr %509, i32 0, i32 0
  %511 = load ptr, ptr %510, align 8, !tbaa !9
  %512 = getelementptr inbounds i8, ptr %511, i64 21
  br label %513

513:                                              ; preds = %508, %501
  %514 = phi ptr [ %507, %501 ], [ %512, %508 ]
  %515 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %516 = getelementptr inbounds %struct.s2n_debug_info, ptr %515, i32 0, i32 1
  store ptr %514, ptr %516, align 8, !tbaa !11
  %517 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %517, align 4, !tbaa !12
  %518 = call i32 @s2n_calculate_stacktrace()
  br label %519

519:                                              ; preds = %513
  br label %520

520:                                              ; preds = %519
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %526

521:                                              ; No predecessors!
  br label %522

522:                                              ; preds = %521
  br label %523

523:                                              ; preds = %522, %487
  br label %524

524:                                              ; preds = %523
  br label %525

525:                                              ; preds = %524
  store i32 0, ptr %13, align 4
  br label %526

526:                                              ; preds = %525, %520
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  %527 = load i32, ptr %13, align 4
  switch i32 %527, label %530 [
    i32 0, label %528
  ]

528:                                              ; preds = %526
  br label %529

529:                                              ; preds = %528, %473
  store i32 0, ptr %13, align 4
  br label %530

530:                                              ; preds = %529, %526
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  %531 = load i32, ptr %13, align 4
  switch i32 %531, label %1319 [
    i32 0, label %532
  ]

532:                                              ; preds = %530
  br label %533

533:                                              ; preds = %532
  br label %534

534:                                              ; preds = %533
  br label %535

535:                                              ; preds = %534
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  store i64 40, ptr %28, align 8, !tbaa !51
  %536 = load i64, ptr %28, align 8, !tbaa !51
  %537 = icmp ne i64 %536, 0
  %538 = xor i1 %537, true
  %539 = xor i1 %538, true
  %540 = zext i1 %539 to i32
  %541 = sext i32 %540 to i64
  %542 = call i64 @llvm.expect.i64(i64 %541, i64 1)
  %543 = icmp ne i64 %542, 0
  br i1 %543, label %544, label %591

544:                                              ; preds = %535
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %545 = load ptr, ptr %3, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.s2n_connection, ptr %545, i32 0, i32 81
  %547 = load i64, ptr %28, align 8, !tbaa !51
  %548 = call ptr @s2n_ensure_memmove_trace(ptr noundef %7, ptr noundef %546, i64 noundef %547)
  store ptr %548, ptr %29, align 8, !tbaa !5
  br label %549

549:                                              ; preds = %544
  %550 = load ptr, ptr %29, align 8, !tbaa !5
  %551 = icmp ne ptr %550, null
  br i1 %551, label %585, label %552

552:                                              ; preds = %549
  br label %553

553:                                              ; preds = %552
  br label %554

554:                                              ; preds = %553
  %555 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %556 = getelementptr inbounds %struct.s2n_debug_info, ptr %555, i32 0, i32 0
  store ptr @.str.17, ptr %556, align 8, !tbaa !9
  %557 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %558 = getelementptr inbounds %struct.s2n_debug_info, ptr %557, i32 0, i32 0
  %559 = load ptr, ptr %558, align 8, !tbaa !9
  %560 = getelementptr inbounds i8, ptr %559, i64 21
  %561 = call ptr @strrchr(ptr noundef %560, i32 noundef 47) #8
  %562 = icmp ne ptr %561, null
  br i1 %562, label %563, label %570

563:                                              ; preds = %554
  %564 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %565 = getelementptr inbounds %struct.s2n_debug_info, ptr %564, i32 0, i32 0
  %566 = load ptr, ptr %565, align 8, !tbaa !9
  %567 = getelementptr inbounds i8, ptr %566, i64 21
  %568 = call ptr @strrchr(ptr noundef %567, i32 noundef 47) #8
  %569 = getelementptr inbounds i8, ptr %568, i64 1
  br label %575

570:                                              ; preds = %554
  %571 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %572 = getelementptr inbounds %struct.s2n_debug_info, ptr %571, i32 0, i32 0
  %573 = load ptr, ptr %572, align 8, !tbaa !9
  %574 = getelementptr inbounds i8, ptr %573, i64 21
  br label %575

575:                                              ; preds = %570, %563
  %576 = phi ptr [ %569, %563 ], [ %574, %570 ]
  %577 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %578 = getelementptr inbounds %struct.s2n_debug_info, ptr %577, i32 0, i32 1
  store ptr %576, ptr %578, align 8, !tbaa !11
  %579 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %579, align 4, !tbaa !12
  %580 = call i32 @s2n_calculate_stacktrace()
  br label %581

581:                                              ; preds = %575
  br label %582

582:                                              ; preds = %581
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %588

583:                                              ; No predecessors!
  br label %584

584:                                              ; preds = %583
  br label %585

585:                                              ; preds = %584, %549
  br label %586

586:                                              ; preds = %585
  br label %587

587:                                              ; preds = %586
  store i32 0, ptr %13, align 4
  br label %588

588:                                              ; preds = %587, %582
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  %589 = load i32, ptr %13, align 4
  switch i32 %589, label %592 [
    i32 0, label %590
  ]

590:                                              ; preds = %588
  br label %591

591:                                              ; preds = %590, %535
  store i32 0, ptr %13, align 4
  br label %592

592:                                              ; preds = %591, %588
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  %593 = load i32, ptr %13, align 4
  switch i32 %593, label %1319 [
    i32 0, label %594
  ]

594:                                              ; preds = %592
  br label %595

595:                                              ; preds = %594
  br label %596

596:                                              ; preds = %595
  br label %597

597:                                              ; preds = %596
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  store i64 40, ptr %30, align 8, !tbaa !51
  %598 = load i64, ptr %30, align 8, !tbaa !51
  %599 = icmp ne i64 %598, 0
  %600 = xor i1 %599, true
  %601 = xor i1 %600, true
  %602 = zext i1 %601 to i32
  %603 = sext i32 %602 to i64
  %604 = call i64 @llvm.expect.i64(i64 %603, i64 1)
  %605 = icmp ne i64 %604, 0
  br i1 %605, label %606, label %654

606:                                              ; preds = %597
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %607 = load ptr, ptr %3, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.s2n_connection, ptr %607, i32 0, i32 52
  %609 = getelementptr inbounds %struct.s2n_handshake, ptr %608, i32 0, i32 0
  %610 = load i64, ptr %30, align 8, !tbaa !51
  %611 = call ptr @s2n_ensure_memmove_trace(ptr noundef %8, ptr noundef %609, i64 noundef %610)
  store ptr %611, ptr %31, align 8, !tbaa !5
  br label %612

612:                                              ; preds = %606
  %613 = load ptr, ptr %31, align 8, !tbaa !5
  %614 = icmp ne ptr %613, null
  br i1 %614, label %648, label %615

615:                                              ; preds = %612
  br label %616

616:                                              ; preds = %615
  br label %617

617:                                              ; preds = %616
  %618 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %619 = getelementptr inbounds %struct.s2n_debug_info, ptr %618, i32 0, i32 0
  store ptr @.str.18, ptr %619, align 8, !tbaa !9
  %620 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %621 = getelementptr inbounds %struct.s2n_debug_info, ptr %620, i32 0, i32 0
  %622 = load ptr, ptr %621, align 8, !tbaa !9
  %623 = getelementptr inbounds i8, ptr %622, i64 21
  %624 = call ptr @strrchr(ptr noundef %623, i32 noundef 47) #8
  %625 = icmp ne ptr %624, null
  br i1 %625, label %626, label %633

626:                                              ; preds = %617
  %627 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %628 = getelementptr inbounds %struct.s2n_debug_info, ptr %627, i32 0, i32 0
  %629 = load ptr, ptr %628, align 8, !tbaa !9
  %630 = getelementptr inbounds i8, ptr %629, i64 21
  %631 = call ptr @strrchr(ptr noundef %630, i32 noundef 47) #8
  %632 = getelementptr inbounds i8, ptr %631, i64 1
  br label %638

633:                                              ; preds = %617
  %634 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %635 = getelementptr inbounds %struct.s2n_debug_info, ptr %634, i32 0, i32 0
  %636 = load ptr, ptr %635, align 8, !tbaa !9
  %637 = getelementptr inbounds i8, ptr %636, i64 21
  br label %638

638:                                              ; preds = %633, %626
  %639 = phi ptr [ %632, %626 ], [ %637, %633 ]
  %640 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %641 = getelementptr inbounds %struct.s2n_debug_info, ptr %640, i32 0, i32 1
  store ptr %639, ptr %641, align 8, !tbaa !11
  %642 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %642, align 4, !tbaa !12
  %643 = call i32 @s2n_calculate_stacktrace()
  br label %644

644:                                              ; preds = %638
  br label %645

645:                                              ; preds = %644
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %651

646:                                              ; No predecessors!
  br label %647

647:                                              ; preds = %646
  br label %648

648:                                              ; preds = %647, %612
  br label %649

649:                                              ; preds = %648
  br label %650

650:                                              ; preds = %649
  store i32 0, ptr %13, align 4
  br label %651

651:                                              ; preds = %650, %645
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  %652 = load i32, ptr %13, align 4
  switch i32 %652, label %655 [
    i32 0, label %653
  ]

653:                                              ; preds = %651
  br label %654

654:                                              ; preds = %653, %597
  store i32 0, ptr %13, align 4
  br label %655

655:                                              ; preds = %654, %651
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  %656 = load i32, ptr %13, align 4
  switch i32 %656, label %1319 [
    i32 0, label %657
  ]

657:                                              ; preds = %655
  br label %658

658:                                              ; preds = %657
  br label %659

659:                                              ; preds = %658
  br label %660

660:                                              ; preds = %659
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  store i64 40, ptr %32, align 8, !tbaa !51
  %661 = load i64, ptr %32, align 8, !tbaa !51
  %662 = icmp ne i64 %661, 0
  %663 = xor i1 %662, true
  %664 = xor i1 %663, true
  %665 = zext i1 %664 to i32
  %666 = sext i32 %665 to i64
  %667 = call i64 @llvm.expect.i64(i64 %666, i64 1)
  %668 = icmp ne i64 %667, 0
  br i1 %668, label %669, label %716

669:                                              ; preds = %660
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  %670 = load ptr, ptr %3, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.s2n_connection, ptr %670, i32 0, i32 38
  %672 = load i64, ptr %32, align 8, !tbaa !51
  %673 = call ptr @s2n_ensure_memmove_trace(ptr noundef %9, ptr noundef %671, i64 noundef %672)
  store ptr %673, ptr %33, align 8, !tbaa !5
  br label %674

674:                                              ; preds = %669
  %675 = load ptr, ptr %33, align 8, !tbaa !5
  %676 = icmp ne ptr %675, null
  br i1 %676, label %710, label %677

677:                                              ; preds = %674
  br label %678

678:                                              ; preds = %677
  br label %679

679:                                              ; preds = %678
  %680 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %681 = getelementptr inbounds %struct.s2n_debug_info, ptr %680, i32 0, i32 0
  store ptr @.str.19, ptr %681, align 8, !tbaa !9
  %682 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %683 = getelementptr inbounds %struct.s2n_debug_info, ptr %682, i32 0, i32 0
  %684 = load ptr, ptr %683, align 8, !tbaa !9
  %685 = getelementptr inbounds i8, ptr %684, i64 21
  %686 = call ptr @strrchr(ptr noundef %685, i32 noundef 47) #8
  %687 = icmp ne ptr %686, null
  br i1 %687, label %688, label %695

688:                                              ; preds = %679
  %689 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %690 = getelementptr inbounds %struct.s2n_debug_info, ptr %689, i32 0, i32 0
  %691 = load ptr, ptr %690, align 8, !tbaa !9
  %692 = getelementptr inbounds i8, ptr %691, i64 21
  %693 = call ptr @strrchr(ptr noundef %692, i32 noundef 47) #8
  %694 = getelementptr inbounds i8, ptr %693, i64 1
  br label %700

695:                                              ; preds = %679
  %696 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %697 = getelementptr inbounds %struct.s2n_debug_info, ptr %696, i32 0, i32 0
  %698 = load ptr, ptr %697, align 8, !tbaa !9
  %699 = getelementptr inbounds i8, ptr %698, i64 21
  br label %700

700:                                              ; preds = %695, %688
  %701 = phi ptr [ %694, %688 ], [ %699, %695 ]
  %702 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %703 = getelementptr inbounds %struct.s2n_debug_info, ptr %702, i32 0, i32 1
  store ptr %701, ptr %703, align 8, !tbaa !11
  %704 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %704, align 4, !tbaa !12
  %705 = call i32 @s2n_calculate_stacktrace()
  br label %706

706:                                              ; preds = %700
  br label %707

707:                                              ; preds = %706
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %713

708:                                              ; No predecessors!
  br label %709

709:                                              ; preds = %708
  br label %710

710:                                              ; preds = %709, %674
  br label %711

711:                                              ; preds = %710
  br label %712

712:                                              ; preds = %711
  store i32 0, ptr %13, align 4
  br label %713

713:                                              ; preds = %712, %707
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  %714 = load i32, ptr %13, align 4
  switch i32 %714, label %717 [
    i32 0, label %715
  ]

715:                                              ; preds = %713
  br label %716

716:                                              ; preds = %715, %660
  store i32 0, ptr %13, align 4
  br label %717

717:                                              ; preds = %716, %713
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  %718 = load i32, ptr %13, align 4
  switch i32 %718, label %1319 [
    i32 0, label %719
  ]

719:                                              ; preds = %717
  br label %720

720:                                              ; preds = %719
  br label %721

721:                                              ; preds = %720
  br label %722

722:                                              ; preds = %721
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  store i64 40, ptr %34, align 8, !tbaa !51
  %723 = load i64, ptr %34, align 8, !tbaa !51
  %724 = icmp ne i64 %723, 0
  %725 = xor i1 %724, true
  %726 = xor i1 %725, true
  %727 = zext i1 %726 to i32
  %728 = sext i32 %727 to i64
  %729 = call i64 @llvm.expect.i64(i64 %728, i64 1)
  %730 = icmp ne i64 %729, 0
  br i1 %730, label %731, label %778

731:                                              ; preds = %722
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %732 = load ptr, ptr %3, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.s2n_connection, ptr %732, i32 0, i32 39
  %734 = load i64, ptr %34, align 8, !tbaa !51
  %735 = call ptr @s2n_ensure_memmove_trace(ptr noundef %10, ptr noundef %733, i64 noundef %734)
  store ptr %735, ptr %35, align 8, !tbaa !5
  br label %736

736:                                              ; preds = %731
  %737 = load ptr, ptr %35, align 8, !tbaa !5
  %738 = icmp ne ptr %737, null
  br i1 %738, label %772, label %739

739:                                              ; preds = %736
  br label %740

740:                                              ; preds = %739
  br label %741

741:                                              ; preds = %740
  %742 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %743 = getelementptr inbounds %struct.s2n_debug_info, ptr %742, i32 0, i32 0
  store ptr @.str.20, ptr %743, align 8, !tbaa !9
  %744 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %745 = getelementptr inbounds %struct.s2n_debug_info, ptr %744, i32 0, i32 0
  %746 = load ptr, ptr %745, align 8, !tbaa !9
  %747 = getelementptr inbounds i8, ptr %746, i64 21
  %748 = call ptr @strrchr(ptr noundef %747, i32 noundef 47) #8
  %749 = icmp ne ptr %748, null
  br i1 %749, label %750, label %757

750:                                              ; preds = %741
  %751 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %752 = getelementptr inbounds %struct.s2n_debug_info, ptr %751, i32 0, i32 0
  %753 = load ptr, ptr %752, align 8, !tbaa !9
  %754 = getelementptr inbounds i8, ptr %753, i64 21
  %755 = call ptr @strrchr(ptr noundef %754, i32 noundef 47) #8
  %756 = getelementptr inbounds i8, ptr %755, i64 1
  br label %762

757:                                              ; preds = %741
  %758 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %759 = getelementptr inbounds %struct.s2n_debug_info, ptr %758, i32 0, i32 0
  %760 = load ptr, ptr %759, align 8, !tbaa !9
  %761 = getelementptr inbounds i8, ptr %760, i64 21
  br label %762

762:                                              ; preds = %757, %750
  %763 = phi ptr [ %756, %750 ], [ %761, %757 ]
  %764 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %765 = getelementptr inbounds %struct.s2n_debug_info, ptr %764, i32 0, i32 1
  store ptr %763, ptr %765, align 8, !tbaa !11
  %766 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %766, align 4, !tbaa !12
  %767 = call i32 @s2n_calculate_stacktrace()
  br label %768

768:                                              ; preds = %762
  br label %769

769:                                              ; preds = %768
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %775

770:                                              ; No predecessors!
  br label %771

771:                                              ; preds = %770
  br label %772

772:                                              ; preds = %771, %736
  br label %773

773:                                              ; preds = %772
  br label %774

774:                                              ; preds = %773
  store i32 0, ptr %13, align 4
  br label %775

775:                                              ; preds = %774, %769
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  %776 = load i32, ptr %13, align 4
  switch i32 %776, label %779 [
    i32 0, label %777
  ]

777:                                              ; preds = %775
  br label %778

778:                                              ; preds = %777, %722
  store i32 0, ptr %13, align 4
  br label %779

779:                                              ; preds = %778, %775
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  %780 = load i32, ptr %13, align 4
  switch i32 %780, label %1319 [
    i32 0, label %781
  ]

781:                                              ; preds = %779
  br label %782

782:                                              ; preds = %781
  br label %783

783:                                              ; preds = %782
  br label %784

784:                                              ; preds = %783
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  store i64 40, ptr %36, align 8, !tbaa !51
  %785 = load i64, ptr %36, align 8, !tbaa !51
  %786 = icmp ne i64 %785, 0
  %787 = xor i1 %786, true
  %788 = xor i1 %787, true
  %789 = zext i1 %788 to i32
  %790 = sext i32 %789 to i64
  %791 = call i64 @llvm.expect.i64(i64 %790, i64 1)
  %792 = icmp ne i64 %791, 0
  br i1 %792, label %793, label %840

793:                                              ; preds = %784
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %794 = load ptr, ptr %3, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.s2n_connection, ptr %794, i32 0, i32 41
  %796 = load i64, ptr %36, align 8, !tbaa !51
  %797 = call ptr @s2n_ensure_memmove_trace(ptr noundef %11, ptr noundef %795, i64 noundef %796)
  store ptr %797, ptr %37, align 8, !tbaa !5
  br label %798

798:                                              ; preds = %793
  %799 = load ptr, ptr %37, align 8, !tbaa !5
  %800 = icmp ne ptr %799, null
  br i1 %800, label %834, label %801

801:                                              ; preds = %798
  br label %802

802:                                              ; preds = %801
  br label %803

803:                                              ; preds = %802
  %804 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %805 = getelementptr inbounds %struct.s2n_debug_info, ptr %804, i32 0, i32 0
  store ptr @.str.21, ptr %805, align 8, !tbaa !9
  %806 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %807 = getelementptr inbounds %struct.s2n_debug_info, ptr %806, i32 0, i32 0
  %808 = load ptr, ptr %807, align 8, !tbaa !9
  %809 = getelementptr inbounds i8, ptr %808, i64 21
  %810 = call ptr @strrchr(ptr noundef %809, i32 noundef 47) #8
  %811 = icmp ne ptr %810, null
  br i1 %811, label %812, label %819

812:                                              ; preds = %803
  %813 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %814 = getelementptr inbounds %struct.s2n_debug_info, ptr %813, i32 0, i32 0
  %815 = load ptr, ptr %814, align 8, !tbaa !9
  %816 = getelementptr inbounds i8, ptr %815, i64 21
  %817 = call ptr @strrchr(ptr noundef %816, i32 noundef 47) #8
  %818 = getelementptr inbounds i8, ptr %817, i64 1
  br label %824

819:                                              ; preds = %803
  %820 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %821 = getelementptr inbounds %struct.s2n_debug_info, ptr %820, i32 0, i32 0
  %822 = load ptr, ptr %821, align 8, !tbaa !9
  %823 = getelementptr inbounds i8, ptr %822, i64 21
  br label %824

824:                                              ; preds = %819, %812
  %825 = phi ptr [ %818, %812 ], [ %823, %819 ]
  %826 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %827 = getelementptr inbounds %struct.s2n_debug_info, ptr %826, i32 0, i32 1
  store ptr %825, ptr %827, align 8, !tbaa !11
  %828 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %828, align 4, !tbaa !12
  %829 = call i32 @s2n_calculate_stacktrace()
  br label %830

830:                                              ; preds = %824
  br label %831

831:                                              ; preds = %830
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %837

832:                                              ; No predecessors!
  br label %833

833:                                              ; preds = %832
  br label %834

834:                                              ; preds = %833, %798
  br label %835

835:                                              ; preds = %834
  br label %836

836:                                              ; preds = %835
  store i32 0, ptr %13, align 4
  br label %837

837:                                              ; preds = %836, %831
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  %838 = load i32, ptr %13, align 4
  switch i32 %838, label %841 [
    i32 0, label %839
  ]

839:                                              ; preds = %837
  br label %840

840:                                              ; preds = %839, %784
  store i32 0, ptr %13, align 4
  br label %841

841:                                              ; preds = %840, %837
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  %842 = load i32, ptr %13, align 4
  switch i32 %842, label %1319 [
    i32 0, label %843
  ]

843:                                              ; preds = %841
  br label %844

844:                                              ; preds = %843
  br label %845

845:                                              ; preds = %844
  br label %846

846:                                              ; preds = %845
  %847 = load ptr, ptr %3, align 8, !tbaa !5
  %848 = load i32, ptr %4, align 4, !tbaa !12
  %849 = load ptr, ptr %5, align 8, !tbaa !5
  %850 = call i32 @s2n_connection_zero(ptr noundef %847, i32 noundef %848, ptr noundef %849)
  %851 = icmp sgt i32 %850, -1
  br i1 %851, label %853, label %852

852:                                              ; preds = %846
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

853:                                              ; preds = %846
  br label %854

854:                                              ; preds = %853
  br label %855

855:                                              ; preds = %854
  br label %856

856:                                              ; preds = %855
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  store i64 40, ptr %38, align 8, !tbaa !51
  %857 = load i64, ptr %38, align 8, !tbaa !51
  %858 = icmp ne i64 %857, 0
  %859 = xor i1 %858, true
  %860 = xor i1 %859, true
  %861 = zext i1 %860 to i32
  %862 = sext i32 %861 to i64
  %863 = call i64 @llvm.expect.i64(i64 %862, i64 1)
  %864 = icmp ne i64 %863, 0
  br i1 %864, label %865, label %912

865:                                              ; preds = %856
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  %866 = load ptr, ptr %3, align 8, !tbaa !5
  %867 = getelementptr inbounds %struct.s2n_connection, ptr %866, i32 0, i32 45
  %868 = load i64, ptr %38, align 8, !tbaa !51
  %869 = call ptr @s2n_ensure_memmove_trace(ptr noundef %867, ptr noundef %6, i64 noundef %868)
  store ptr %869, ptr %39, align 8, !tbaa !5
  br label %870

870:                                              ; preds = %865
  %871 = load ptr, ptr %39, align 8, !tbaa !5
  %872 = icmp ne ptr %871, null
  br i1 %872, label %906, label %873

873:                                              ; preds = %870
  br label %874

874:                                              ; preds = %873
  br label %875

875:                                              ; preds = %874
  %876 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %877 = getelementptr inbounds %struct.s2n_debug_info, ptr %876, i32 0, i32 0
  store ptr @.str.22, ptr %877, align 8, !tbaa !9
  %878 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %879 = getelementptr inbounds %struct.s2n_debug_info, ptr %878, i32 0, i32 0
  %880 = load ptr, ptr %879, align 8, !tbaa !9
  %881 = getelementptr inbounds i8, ptr %880, i64 21
  %882 = call ptr @strrchr(ptr noundef %881, i32 noundef 47) #8
  %883 = icmp ne ptr %882, null
  br i1 %883, label %884, label %891

884:                                              ; preds = %875
  %885 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %886 = getelementptr inbounds %struct.s2n_debug_info, ptr %885, i32 0, i32 0
  %887 = load ptr, ptr %886, align 8, !tbaa !9
  %888 = getelementptr inbounds i8, ptr %887, i64 21
  %889 = call ptr @strrchr(ptr noundef %888, i32 noundef 47) #8
  %890 = getelementptr inbounds i8, ptr %889, i64 1
  br label %896

891:                                              ; preds = %875
  %892 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %893 = getelementptr inbounds %struct.s2n_debug_info, ptr %892, i32 0, i32 0
  %894 = load ptr, ptr %893, align 8, !tbaa !9
  %895 = getelementptr inbounds i8, ptr %894, i64 21
  br label %896

896:                                              ; preds = %891, %884
  %897 = phi ptr [ %890, %884 ], [ %895, %891 ]
  %898 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %899 = getelementptr inbounds %struct.s2n_debug_info, ptr %898, i32 0, i32 1
  store ptr %897, ptr %899, align 8, !tbaa !11
  %900 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %900, align 4, !tbaa !12
  %901 = call i32 @s2n_calculate_stacktrace()
  br label %902

902:                                              ; preds = %896
  br label %903

903:                                              ; preds = %902
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %909

904:                                              ; No predecessors!
  br label %905

905:                                              ; preds = %904
  br label %906

906:                                              ; preds = %905, %870
  br label %907

907:                                              ; preds = %906
  br label %908

908:                                              ; preds = %907
  store i32 0, ptr %13, align 4
  br label %909

909:                                              ; preds = %908, %903
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  %910 = load i32, ptr %13, align 4
  switch i32 %910, label %913 [
    i32 0, label %911
  ]

911:                                              ; preds = %909
  br label %912

912:                                              ; preds = %911, %856
  store i32 0, ptr %13, align 4
  br label %913

913:                                              ; preds = %912, %909
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  %914 = load i32, ptr %13, align 4
  switch i32 %914, label %1319 [
    i32 0, label %915
  ]

915:                                              ; preds = %913
  br label %916

916:                                              ; preds = %915
  br label %917

917:                                              ; preds = %916
  br label %918

918:                                              ; preds = %917
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  store i64 40, ptr %40, align 8, !tbaa !51
  %919 = load i64, ptr %40, align 8, !tbaa !51
  %920 = icmp ne i64 %919, 0
  %921 = xor i1 %920, true
  %922 = xor i1 %921, true
  %923 = zext i1 %922 to i32
  %924 = sext i32 %923 to i64
  %925 = call i64 @llvm.expect.i64(i64 %924, i64 1)
  %926 = icmp ne i64 %925, 0
  br i1 %926, label %927, label %974

927:                                              ; preds = %918
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %928 = load ptr, ptr %3, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.s2n_connection, ptr %928, i32 0, i32 81
  %930 = load i64, ptr %40, align 8, !tbaa !51
  %931 = call ptr @s2n_ensure_memmove_trace(ptr noundef %929, ptr noundef %7, i64 noundef %930)
  store ptr %931, ptr %41, align 8, !tbaa !5
  br label %932

932:                                              ; preds = %927
  %933 = load ptr, ptr %41, align 8, !tbaa !5
  %934 = icmp ne ptr %933, null
  br i1 %934, label %968, label %935

935:                                              ; preds = %932
  br label %936

936:                                              ; preds = %935
  br label %937

937:                                              ; preds = %936
  %938 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %939 = getelementptr inbounds %struct.s2n_debug_info, ptr %938, i32 0, i32 0
  store ptr @.str.23, ptr %939, align 8, !tbaa !9
  %940 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %941 = getelementptr inbounds %struct.s2n_debug_info, ptr %940, i32 0, i32 0
  %942 = load ptr, ptr %941, align 8, !tbaa !9
  %943 = getelementptr inbounds i8, ptr %942, i64 21
  %944 = call ptr @strrchr(ptr noundef %943, i32 noundef 47) #8
  %945 = icmp ne ptr %944, null
  br i1 %945, label %946, label %953

946:                                              ; preds = %937
  %947 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %948 = getelementptr inbounds %struct.s2n_debug_info, ptr %947, i32 0, i32 0
  %949 = load ptr, ptr %948, align 8, !tbaa !9
  %950 = getelementptr inbounds i8, ptr %949, i64 21
  %951 = call ptr @strrchr(ptr noundef %950, i32 noundef 47) #8
  %952 = getelementptr inbounds i8, ptr %951, i64 1
  br label %958

953:                                              ; preds = %937
  %954 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %955 = getelementptr inbounds %struct.s2n_debug_info, ptr %954, i32 0, i32 0
  %956 = load ptr, ptr %955, align 8, !tbaa !9
  %957 = getelementptr inbounds i8, ptr %956, i64 21
  br label %958

958:                                              ; preds = %953, %946
  %959 = phi ptr [ %952, %946 ], [ %957, %953 ]
  %960 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %961 = getelementptr inbounds %struct.s2n_debug_info, ptr %960, i32 0, i32 1
  store ptr %959, ptr %961, align 8, !tbaa !11
  %962 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %962, align 4, !tbaa !12
  %963 = call i32 @s2n_calculate_stacktrace()
  br label %964

964:                                              ; preds = %958
  br label %965

965:                                              ; preds = %964
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %971

966:                                              ; No predecessors!
  br label %967

967:                                              ; preds = %966
  br label %968

968:                                              ; preds = %967, %932
  br label %969

969:                                              ; preds = %968
  br label %970

970:                                              ; preds = %969
  store i32 0, ptr %13, align 4
  br label %971

971:                                              ; preds = %970, %965
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  %972 = load i32, ptr %13, align 4
  switch i32 %972, label %975 [
    i32 0, label %973
  ]

973:                                              ; preds = %971
  br label %974

974:                                              ; preds = %973, %918
  store i32 0, ptr %13, align 4
  br label %975

975:                                              ; preds = %974, %971
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  %976 = load i32, ptr %13, align 4
  switch i32 %976, label %1319 [
    i32 0, label %977
  ]

977:                                              ; preds = %975
  br label %978

978:                                              ; preds = %977
  br label %979

979:                                              ; preds = %978
  br label %980

980:                                              ; preds = %979
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  store i64 40, ptr %42, align 8, !tbaa !51
  %981 = load i64, ptr %42, align 8, !tbaa !51
  %982 = icmp ne i64 %981, 0
  %983 = xor i1 %982, true
  %984 = xor i1 %983, true
  %985 = zext i1 %984 to i32
  %986 = sext i32 %985 to i64
  %987 = call i64 @llvm.expect.i64(i64 %986, i64 1)
  %988 = icmp ne i64 %987, 0
  br i1 %988, label %989, label %1037

989:                                              ; preds = %980
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %990 = load ptr, ptr %3, align 8, !tbaa !5
  %991 = getelementptr inbounds %struct.s2n_connection, ptr %990, i32 0, i32 52
  %992 = getelementptr inbounds %struct.s2n_handshake, ptr %991, i32 0, i32 0
  %993 = load i64, ptr %42, align 8, !tbaa !51
  %994 = call ptr @s2n_ensure_memmove_trace(ptr noundef %992, ptr noundef %8, i64 noundef %993)
  store ptr %994, ptr %43, align 8, !tbaa !5
  br label %995

995:                                              ; preds = %989
  %996 = load ptr, ptr %43, align 8, !tbaa !5
  %997 = icmp ne ptr %996, null
  br i1 %997, label %1031, label %998

998:                                              ; preds = %995
  br label %999

999:                                              ; preds = %998
  br label %1000

1000:                                             ; preds = %999
  %1001 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1002 = getelementptr inbounds %struct.s2n_debug_info, ptr %1001, i32 0, i32 0
  store ptr @.str.24, ptr %1002, align 8, !tbaa !9
  %1003 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1004 = getelementptr inbounds %struct.s2n_debug_info, ptr %1003, i32 0, i32 0
  %1005 = load ptr, ptr %1004, align 8, !tbaa !9
  %1006 = getelementptr inbounds i8, ptr %1005, i64 21
  %1007 = call ptr @strrchr(ptr noundef %1006, i32 noundef 47) #8
  %1008 = icmp ne ptr %1007, null
  br i1 %1008, label %1009, label %1016

1009:                                             ; preds = %1000
  %1010 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1011 = getelementptr inbounds %struct.s2n_debug_info, ptr %1010, i32 0, i32 0
  %1012 = load ptr, ptr %1011, align 8, !tbaa !9
  %1013 = getelementptr inbounds i8, ptr %1012, i64 21
  %1014 = call ptr @strrchr(ptr noundef %1013, i32 noundef 47) #8
  %1015 = getelementptr inbounds i8, ptr %1014, i64 1
  br label %1021

1016:                                             ; preds = %1000
  %1017 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1018 = getelementptr inbounds %struct.s2n_debug_info, ptr %1017, i32 0, i32 0
  %1019 = load ptr, ptr %1018, align 8, !tbaa !9
  %1020 = getelementptr inbounds i8, ptr %1019, i64 21
  br label %1021

1021:                                             ; preds = %1016, %1009
  %1022 = phi ptr [ %1015, %1009 ], [ %1020, %1016 ]
  %1023 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1024 = getelementptr inbounds %struct.s2n_debug_info, ptr %1023, i32 0, i32 1
  store ptr %1022, ptr %1024, align 8, !tbaa !11
  %1025 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %1025, align 4, !tbaa !12
  %1026 = call i32 @s2n_calculate_stacktrace()
  br label %1027

1027:                                             ; preds = %1021
  br label %1028

1028:                                             ; preds = %1027
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1034

1029:                                             ; No predecessors!
  br label %1030

1030:                                             ; preds = %1029
  br label %1031

1031:                                             ; preds = %1030, %995
  br label %1032

1032:                                             ; preds = %1031
  br label %1033

1033:                                             ; preds = %1032
  store i32 0, ptr %13, align 4
  br label %1034

1034:                                             ; preds = %1033, %1028
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  %1035 = load i32, ptr %13, align 4
  switch i32 %1035, label %1038 [
    i32 0, label %1036
  ]

1036:                                             ; preds = %1034
  br label %1037

1037:                                             ; preds = %1036, %980
  store i32 0, ptr %13, align 4
  br label %1038

1038:                                             ; preds = %1037, %1034
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  %1039 = load i32, ptr %13, align 4
  switch i32 %1039, label %1319 [
    i32 0, label %1040
  ]

1040:                                             ; preds = %1038
  br label %1041

1041:                                             ; preds = %1040
  br label %1042

1042:                                             ; preds = %1041
  br label %1043

1043:                                             ; preds = %1042
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  store i64 40, ptr %44, align 8, !tbaa !51
  %1044 = load i64, ptr %44, align 8, !tbaa !51
  %1045 = icmp ne i64 %1044, 0
  %1046 = xor i1 %1045, true
  %1047 = xor i1 %1046, true
  %1048 = zext i1 %1047 to i32
  %1049 = sext i32 %1048 to i64
  %1050 = call i64 @llvm.expect.i64(i64 %1049, i64 1)
  %1051 = icmp ne i64 %1050, 0
  br i1 %1051, label %1052, label %1099

1052:                                             ; preds = %1043
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %1053 = load ptr, ptr %3, align 8, !tbaa !5
  %1054 = getelementptr inbounds %struct.s2n_connection, ptr %1053, i32 0, i32 38
  %1055 = load i64, ptr %44, align 8, !tbaa !51
  %1056 = call ptr @s2n_ensure_memmove_trace(ptr noundef %1054, ptr noundef %9, i64 noundef %1055)
  store ptr %1056, ptr %45, align 8, !tbaa !5
  br label %1057

1057:                                             ; preds = %1052
  %1058 = load ptr, ptr %45, align 8, !tbaa !5
  %1059 = icmp ne ptr %1058, null
  br i1 %1059, label %1093, label %1060

1060:                                             ; preds = %1057
  br label %1061

1061:                                             ; preds = %1060
  br label %1062

1062:                                             ; preds = %1061
  %1063 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1064 = getelementptr inbounds %struct.s2n_debug_info, ptr %1063, i32 0, i32 0
  store ptr @.str.25, ptr %1064, align 8, !tbaa !9
  %1065 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1066 = getelementptr inbounds %struct.s2n_debug_info, ptr %1065, i32 0, i32 0
  %1067 = load ptr, ptr %1066, align 8, !tbaa !9
  %1068 = getelementptr inbounds i8, ptr %1067, i64 21
  %1069 = call ptr @strrchr(ptr noundef %1068, i32 noundef 47) #8
  %1070 = icmp ne ptr %1069, null
  br i1 %1070, label %1071, label %1078

1071:                                             ; preds = %1062
  %1072 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1073 = getelementptr inbounds %struct.s2n_debug_info, ptr %1072, i32 0, i32 0
  %1074 = load ptr, ptr %1073, align 8, !tbaa !9
  %1075 = getelementptr inbounds i8, ptr %1074, i64 21
  %1076 = call ptr @strrchr(ptr noundef %1075, i32 noundef 47) #8
  %1077 = getelementptr inbounds i8, ptr %1076, i64 1
  br label %1083

1078:                                             ; preds = %1062
  %1079 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1080 = getelementptr inbounds %struct.s2n_debug_info, ptr %1079, i32 0, i32 0
  %1081 = load ptr, ptr %1080, align 8, !tbaa !9
  %1082 = getelementptr inbounds i8, ptr %1081, i64 21
  br label %1083

1083:                                             ; preds = %1078, %1071
  %1084 = phi ptr [ %1077, %1071 ], [ %1082, %1078 ]
  %1085 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1086 = getelementptr inbounds %struct.s2n_debug_info, ptr %1085, i32 0, i32 1
  store ptr %1084, ptr %1086, align 8, !tbaa !11
  %1087 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %1087, align 4, !tbaa !12
  %1088 = call i32 @s2n_calculate_stacktrace()
  br label %1089

1089:                                             ; preds = %1083
  br label %1090

1090:                                             ; preds = %1089
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1096

1091:                                             ; No predecessors!
  br label %1092

1092:                                             ; preds = %1091
  br label %1093

1093:                                             ; preds = %1092, %1057
  br label %1094

1094:                                             ; preds = %1093
  br label %1095

1095:                                             ; preds = %1094
  store i32 0, ptr %13, align 4
  br label %1096

1096:                                             ; preds = %1095, %1090
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  %1097 = load i32, ptr %13, align 4
  switch i32 %1097, label %1100 [
    i32 0, label %1098
  ]

1098:                                             ; preds = %1096
  br label %1099

1099:                                             ; preds = %1098, %1043
  store i32 0, ptr %13, align 4
  br label %1100

1100:                                             ; preds = %1099, %1096
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  %1101 = load i32, ptr %13, align 4
  switch i32 %1101, label %1319 [
    i32 0, label %1102
  ]

1102:                                             ; preds = %1100
  br label %1103

1103:                                             ; preds = %1102
  br label %1104

1104:                                             ; preds = %1103
  br label %1105

1105:                                             ; preds = %1104
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  store i64 40, ptr %46, align 8, !tbaa !51
  %1106 = load i64, ptr %46, align 8, !tbaa !51
  %1107 = icmp ne i64 %1106, 0
  %1108 = xor i1 %1107, true
  %1109 = xor i1 %1108, true
  %1110 = zext i1 %1109 to i32
  %1111 = sext i32 %1110 to i64
  %1112 = call i64 @llvm.expect.i64(i64 %1111, i64 1)
  %1113 = icmp ne i64 %1112, 0
  br i1 %1113, label %1114, label %1161

1114:                                             ; preds = %1105
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %1115 = load ptr, ptr %3, align 8, !tbaa !5
  %1116 = getelementptr inbounds %struct.s2n_connection, ptr %1115, i32 0, i32 39
  %1117 = load i64, ptr %46, align 8, !tbaa !51
  %1118 = call ptr @s2n_ensure_memmove_trace(ptr noundef %1116, ptr noundef %10, i64 noundef %1117)
  store ptr %1118, ptr %47, align 8, !tbaa !5
  br label %1119

1119:                                             ; preds = %1114
  %1120 = load ptr, ptr %47, align 8, !tbaa !5
  %1121 = icmp ne ptr %1120, null
  br i1 %1121, label %1155, label %1122

1122:                                             ; preds = %1119
  br label %1123

1123:                                             ; preds = %1122
  br label %1124

1124:                                             ; preds = %1123
  %1125 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1126 = getelementptr inbounds %struct.s2n_debug_info, ptr %1125, i32 0, i32 0
  store ptr @.str.26, ptr %1126, align 8, !tbaa !9
  %1127 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1128 = getelementptr inbounds %struct.s2n_debug_info, ptr %1127, i32 0, i32 0
  %1129 = load ptr, ptr %1128, align 8, !tbaa !9
  %1130 = getelementptr inbounds i8, ptr %1129, i64 21
  %1131 = call ptr @strrchr(ptr noundef %1130, i32 noundef 47) #8
  %1132 = icmp ne ptr %1131, null
  br i1 %1132, label %1133, label %1140

1133:                                             ; preds = %1124
  %1134 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1135 = getelementptr inbounds %struct.s2n_debug_info, ptr %1134, i32 0, i32 0
  %1136 = load ptr, ptr %1135, align 8, !tbaa !9
  %1137 = getelementptr inbounds i8, ptr %1136, i64 21
  %1138 = call ptr @strrchr(ptr noundef %1137, i32 noundef 47) #8
  %1139 = getelementptr inbounds i8, ptr %1138, i64 1
  br label %1145

1140:                                             ; preds = %1124
  %1141 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1142 = getelementptr inbounds %struct.s2n_debug_info, ptr %1141, i32 0, i32 0
  %1143 = load ptr, ptr %1142, align 8, !tbaa !9
  %1144 = getelementptr inbounds i8, ptr %1143, i64 21
  br label %1145

1145:                                             ; preds = %1140, %1133
  %1146 = phi ptr [ %1139, %1133 ], [ %1144, %1140 ]
  %1147 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1148 = getelementptr inbounds %struct.s2n_debug_info, ptr %1147, i32 0, i32 1
  store ptr %1146, ptr %1148, align 8, !tbaa !11
  %1149 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %1149, align 4, !tbaa !12
  %1150 = call i32 @s2n_calculate_stacktrace()
  br label %1151

1151:                                             ; preds = %1145
  br label %1152

1152:                                             ; preds = %1151
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1158

1153:                                             ; No predecessors!
  br label %1154

1154:                                             ; preds = %1153
  br label %1155

1155:                                             ; preds = %1154, %1119
  br label %1156

1156:                                             ; preds = %1155
  br label %1157

1157:                                             ; preds = %1156
  store i32 0, ptr %13, align 4
  br label %1158

1158:                                             ; preds = %1157, %1152
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  %1159 = load i32, ptr %13, align 4
  switch i32 %1159, label %1162 [
    i32 0, label %1160
  ]

1160:                                             ; preds = %1158
  br label %1161

1161:                                             ; preds = %1160, %1105
  store i32 0, ptr %13, align 4
  br label %1162

1162:                                             ; preds = %1161, %1158
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  %1163 = load i32, ptr %13, align 4
  switch i32 %1163, label %1319 [
    i32 0, label %1164
  ]

1164:                                             ; preds = %1162
  br label %1165

1165:                                             ; preds = %1164
  br label %1166

1166:                                             ; preds = %1165
  br label %1167

1167:                                             ; preds = %1166
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  store i64 40, ptr %48, align 8, !tbaa !51
  %1168 = load i64, ptr %48, align 8, !tbaa !51
  %1169 = icmp ne i64 %1168, 0
  %1170 = xor i1 %1169, true
  %1171 = xor i1 %1170, true
  %1172 = zext i1 %1171 to i32
  %1173 = sext i32 %1172 to i64
  %1174 = call i64 @llvm.expect.i64(i64 %1173, i64 1)
  %1175 = icmp ne i64 %1174, 0
  br i1 %1175, label %1176, label %1223

1176:                                             ; preds = %1167
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  %1177 = load ptr, ptr %3, align 8, !tbaa !5
  %1178 = getelementptr inbounds %struct.s2n_connection, ptr %1177, i32 0, i32 41
  %1179 = load i64, ptr %48, align 8, !tbaa !51
  %1180 = call ptr @s2n_ensure_memmove_trace(ptr noundef %1178, ptr noundef %11, i64 noundef %1179)
  store ptr %1180, ptr %49, align 8, !tbaa !5
  br label %1181

1181:                                             ; preds = %1176
  %1182 = load ptr, ptr %49, align 8, !tbaa !5
  %1183 = icmp ne ptr %1182, null
  br i1 %1183, label %1217, label %1184

1184:                                             ; preds = %1181
  br label %1185

1185:                                             ; preds = %1184
  br label %1186

1186:                                             ; preds = %1185
  %1187 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1188 = getelementptr inbounds %struct.s2n_debug_info, ptr %1187, i32 0, i32 0
  store ptr @.str.27, ptr %1188, align 8, !tbaa !9
  %1189 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1190 = getelementptr inbounds %struct.s2n_debug_info, ptr %1189, i32 0, i32 0
  %1191 = load ptr, ptr %1190, align 8, !tbaa !9
  %1192 = getelementptr inbounds i8, ptr %1191, i64 21
  %1193 = call ptr @strrchr(ptr noundef %1192, i32 noundef 47) #8
  %1194 = icmp ne ptr %1193, null
  br i1 %1194, label %1195, label %1202

1195:                                             ; preds = %1186
  %1196 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1197 = getelementptr inbounds %struct.s2n_debug_info, ptr %1196, i32 0, i32 0
  %1198 = load ptr, ptr %1197, align 8, !tbaa !9
  %1199 = getelementptr inbounds i8, ptr %1198, i64 21
  %1200 = call ptr @strrchr(ptr noundef %1199, i32 noundef 47) #8
  %1201 = getelementptr inbounds i8, ptr %1200, i64 1
  br label %1207

1202:                                             ; preds = %1186
  %1203 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1204 = getelementptr inbounds %struct.s2n_debug_info, ptr %1203, i32 0, i32 0
  %1205 = load ptr, ptr %1204, align 8, !tbaa !9
  %1206 = getelementptr inbounds i8, ptr %1205, i64 21
  br label %1207

1207:                                             ; preds = %1202, %1195
  %1208 = phi ptr [ %1201, %1195 ], [ %1206, %1202 ]
  %1209 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1210 = getelementptr inbounds %struct.s2n_debug_info, ptr %1209, i32 0, i32 1
  store ptr %1208, ptr %1210, align 8, !tbaa !11
  %1211 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %1211, align 4, !tbaa !12
  %1212 = call i32 @s2n_calculate_stacktrace()
  br label %1213

1213:                                             ; preds = %1207
  br label %1214

1214:                                             ; preds = %1213
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1220

1215:                                             ; No predecessors!
  br label %1216

1216:                                             ; preds = %1215
  br label %1217

1217:                                             ; preds = %1216, %1181
  br label %1218

1218:                                             ; preds = %1217
  br label %1219

1219:                                             ; preds = %1218
  store i32 0, ptr %13, align 4
  br label %1220

1220:                                             ; preds = %1219, %1214
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  %1221 = load i32, ptr %13, align 4
  switch i32 %1221, label %1224 [
    i32 0, label %1222
  ]

1222:                                             ; preds = %1220
  br label %1223

1223:                                             ; preds = %1222, %1167
  store i32 0, ptr %13, align 4
  br label %1224

1224:                                             ; preds = %1223, %1220
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  %1225 = load i32, ptr %13, align 4
  switch i32 %1225, label %1319 [
    i32 0, label %1226
  ]

1226:                                             ; preds = %1224
  br label %1227

1227:                                             ; preds = %1226
  br label %1228

1228:                                             ; preds = %1227
  br label %1229

1229:                                             ; preds = %1228
  %1230 = load ptr, ptr %3, align 8, !tbaa !5
  %1231 = getelementptr inbounds %struct.s2n_connection, ptr %1230, i32 0, i32 40
  %1232 = call i32 @s2n_stuffer_growable_alloc(ptr noundef %1231, i32 noundef 0)
  %1233 = icmp sgt i32 %1232, -1
  br i1 %1233, label %1235, label %1234

1234:                                             ; preds = %1229
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

1235:                                             ; preds = %1229
  br label %1236

1236:                                             ; preds = %1235
  br label %1237

1237:                                             ; preds = %1236
  %1238 = load ptr, ptr %15, align 8, !tbaa !5
  %1239 = load ptr, ptr %3, align 8, !tbaa !5
  %1240 = getelementptr inbounds %struct.s2n_connection, ptr %1239, i32 0, i32 52
  %1241 = getelementptr inbounds %struct.s2n_handshake, ptr %1240, i32 0, i32 1
  store ptr %1238, ptr %1241, align 8, !tbaa !43
  %1242 = load ptr, ptr %18, align 8, !tbaa !5
  %1243 = load ptr, ptr %3, align 8, !tbaa !5
  %1244 = getelementptr inbounds %struct.s2n_connection, ptr %1243, i32 0, i32 34
  store ptr %1242, ptr %1244, align 8, !tbaa !44
  %1245 = load ptr, ptr %21, align 8, !tbaa !5
  %1246 = load ptr, ptr %3, align 8, !tbaa !5
  %1247 = getelementptr inbounds %struct.s2n_connection, ptr %1246, i32 0, i32 26
  store ptr %1245, ptr %1247, align 8, !tbaa !45
  %1248 = load ptr, ptr %24, align 8, !tbaa !5
  %1249 = load ptr, ptr %3, align 8, !tbaa !5
  %1250 = getelementptr inbounds %struct.s2n_connection, ptr %1249, i32 0, i32 27
  store ptr %1248, ptr %1250, align 8, !tbaa !46
  %1251 = load ptr, ptr %3, align 8, !tbaa !5
  %1252 = getelementptr inbounds %struct.s2n_connection, ptr %1251, i32 0, i32 26
  %1253 = load ptr, ptr %1252, align 8, !tbaa !45
  %1254 = load ptr, ptr %3, align 8, !tbaa !5
  %1255 = getelementptr inbounds %struct.s2n_connection, ptr %1254, i32 0, i32 29
  store ptr %1253, ptr %1255, align 8, !tbaa !52
  %1256 = load ptr, ptr %3, align 8, !tbaa !5
  %1257 = getelementptr inbounds %struct.s2n_connection, ptr %1256, i32 0, i32 26
  %1258 = load ptr, ptr %1257, align 8, !tbaa !45
  %1259 = load ptr, ptr %3, align 8, !tbaa !5
  %1260 = getelementptr inbounds %struct.s2n_connection, ptr %1259, i32 0, i32 30
  store ptr %1258, ptr %1260, align 8, !tbaa !53
  %1261 = load ptr, ptr %3, align 8, !tbaa !5
  %1262 = getelementptr inbounds %struct.s2n_connection, ptr %1261, i32 0, i32 32
  %1263 = getelementptr inbounds %struct.s2n_handshake_parameters, ptr %1262, i32 0, i32 6
  store ptr @s2n_null_sig_scheme, ptr %1263, align 8, !tbaa !54
  %1264 = load ptr, ptr %3, align 8, !tbaa !5
  %1265 = getelementptr inbounds %struct.s2n_connection, ptr %1264, i32 0, i32 32
  %1266 = getelementptr inbounds %struct.s2n_handshake_parameters, ptr %1265, i32 0, i32 5
  store ptr @s2n_null_sig_scheme, ptr %1266, align 8, !tbaa !55
  br label %1267

1267:                                             ; preds = %1237
  %1268 = load ptr, ptr %3, align 8, !tbaa !5
  %1269 = getelementptr inbounds %struct.s2n_connection, ptr %1268, i32 0, i32 33
  %1270 = call i32 @s2n_psk_parameters_init(ptr noundef %1269)
  %1271 = getelementptr inbounds %struct.s2n_result, ptr %50, i32 0, i32 0
  store i32 %1270, ptr %1271, align 4
  %1272 = getelementptr inbounds %struct.s2n_result, ptr %50, i32 0, i32 0
  %1273 = load i32, ptr %1272, align 4
  %1274 = call zeroext i1 @s2n_result_is_ok(i32 %1273)
  br i1 %1274, label %1276, label %1275

1275:                                             ; preds = %1267
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

1276:                                             ; preds = %1267
  br label %1277

1277:                                             ; preds = %1276
  br label %1278

1278:                                             ; preds = %1277
  %1279 = load ptr, ptr %3, align 8, !tbaa !5
  %1280 = getelementptr inbounds %struct.s2n_connection, ptr %1279, i32 0, i32 92
  store i32 604800, ptr %1280, align 8, !tbaa !56
  br label %1281

1281:                                             ; preds = %1278
  %1282 = load ptr, ptr %3, align 8, !tbaa !5
  %1283 = getelementptr inbounds %struct.s2n_connection, ptr %1282, i32 0, i32 52
  %1284 = call i32 @s2n_handshake_require_all_hashes(ptr noundef %1283)
  %1285 = icmp sgt i32 %1284, -1
  br i1 %1285, label %1287, label %1286

1286:                                             ; preds = %1281
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

1287:                                             ; preds = %1281
  br label %1288

1288:                                             ; preds = %1287
  br label %1289

1289:                                             ; preds = %1288
  %1290 = load ptr, ptr %3, align 8, !tbaa !5
  %1291 = getelementptr inbounds %struct.s2n_connection, ptr %1290, i32 0, i32 13
  %1292 = load i32, ptr %1291, align 4, !tbaa !14
  %1293 = icmp eq i32 %1292, 0
  br i1 %1293, label %1294, label %1304

1294:                                             ; preds = %1289
  %1295 = load i8, ptr @s2n_highest_protocol_version, align 1, !tbaa !57
  %1296 = load ptr, ptr %3, align 8, !tbaa !5
  %1297 = getelementptr inbounds %struct.s2n_connection, ptr %1296, i32 0, i32 22
  store i8 %1295, ptr %1297, align 1, !tbaa !58
  %1298 = load i8, ptr @s2n_unknown_protocol_version, align 1, !tbaa !57
  %1299 = load ptr, ptr %3, align 8, !tbaa !5
  %1300 = getelementptr inbounds %struct.s2n_connection, ptr %1299, i32 0, i32 21
  store i8 %1298, ptr %1300, align 2, !tbaa !59
  %1301 = load i8, ptr @s2n_unknown_protocol_version, align 1, !tbaa !57
  %1302 = load ptr, ptr %3, align 8, !tbaa !5
  %1303 = getelementptr inbounds %struct.s2n_connection, ptr %1302, i32 0, i32 23
  store i8 %1301, ptr %1303, align 4, !tbaa !60
  br label %1314

1304:                                             ; preds = %1289
  %1305 = load i8, ptr @s2n_unknown_protocol_version, align 1, !tbaa !57
  %1306 = load ptr, ptr %3, align 8, !tbaa !5
  %1307 = getelementptr inbounds %struct.s2n_connection, ptr %1306, i32 0, i32 22
  store i8 %1305, ptr %1307, align 1, !tbaa !58
  %1308 = load i8, ptr @s2n_highest_protocol_version, align 1, !tbaa !57
  %1309 = load ptr, ptr %3, align 8, !tbaa !5
  %1310 = getelementptr inbounds %struct.s2n_connection, ptr %1309, i32 0, i32 21
  store i8 %1308, ptr %1310, align 2, !tbaa !59
  %1311 = load i8, ptr @s2n_highest_protocol_version, align 1, !tbaa !57
  %1312 = load ptr, ptr %3, align 8, !tbaa !5
  %1313 = getelementptr inbounds %struct.s2n_connection, ptr %1312, i32 0, i32 23
  store i8 %1311, ptr %1313, align 4, !tbaa !60
  br label %1314

1314:                                             ; preds = %1304, %1294
  %1315 = load ptr, ptr %3, align 8, !tbaa !5
  %1316 = getelementptr inbounds %struct.s2n_connection, ptr %1315, i32 0, i32 14
  store i32 0, ptr %1316, align 8, !tbaa !61
  %1317 = load ptr, ptr %3, align 8, !tbaa !5
  %1318 = getelementptr inbounds %struct.s2n_connection, ptr %1317, i32 0, i32 76
  store i32 0, ptr %1318, align 4, !tbaa !62
  store i32 0, ptr %2, align 4
  store i32 1, ptr %13, align 4
  br label %1319

1319:                                             ; preds = %1314, %1286, %1275, %1234, %1224, %1162, %1100, %1038, %975, %913, %852, %841, %779, %717, %655, %592, %530, %461, %452, %443, %433, %423, %414, %404, %395, %386, %377, %368, %359, %350, %342, %330, %321, %311, %302, %293, %284, %274, %264, %254, %245, %236
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %1320

1320:                                             ; preds = %1319, %224, %210
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  br label %1321

1321:                                             ; preds = %1320, %189, %175
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  br label %1322

1322:                                             ; preds = %1321, %155, %143
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  br label %1323

1323:                                             ; preds = %1322, %123, %108
  call void @llvm.lifetime.end.p0(i64 40, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #9
  br label %1324

1324:                                             ; preds = %1323, %83
  %1325 = load i32, ptr %2, align 4
  ret i32 %1325
}

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #5

; Function Attrs: nounwind willreturn memory(read)
declare ptr @strrchr(ptr noundef, i32 noundef) #6

declare i32 @s2n_calculate_stacktrace() #2

; Function Attrs: nounwind uwtable
declare hidden i32 @s2n_connection_wipe_keys(ptr noundef) #4

declare i32 @s2n_psk_parameters_wipe(ptr noundef) #2

declare i32 @s2n_free(ptr noundef) #2

declare i32 @s2n_stuffer_free(ptr noundef) #2

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i64 @llvm.expect.i64(i64, i64) #7

declare i32 @s2n_stuffer_resize(ptr noundef, i32 noundef) #2

declare i32 @s2n_stuffer_wipe(ptr noundef) #2

declare i32 @s2n_handshake_hashes_wipe(ptr noundef) #2

declare i32 @s2n_prf_wipe(ptr noundef) #2

declare i32 @s2n_crypto_parameters_new(ptr noundef) #2

declare i32 @s2n_crypto_parameters_wipe(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @s2n_connection_wipe_io(ptr noundef) #4

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

; Function Attrs: nounwind uwtable
declare hidden i32 @s2n_connection_zero(ptr noundef, i32 noundef, ptr noundef) #4

declare i32 @s2n_psk_parameters_init(ptr noundef) #2

declare i32 @s2n_handshake_require_all_hashes(ptr noundef) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = { inlinehint 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 #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = { nocallback nofree nosync nounwind willreturn memory(none) }
attributes #8 = { nounwind willreturn memory(read) }
attributes #9 = { 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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"s2n_debug_info", !6, i64 0, !6, i64 8}
!11 = !{!10, !6, i64 8}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !13, i64 148}
!15 = !{!"s2n_connection", !13, i64 0, !13, i64 0, !13, i64 0, !13, i64 0, !13, i64 0, !13, i64 0, !13, i64 0, !13, i64 0, !13, i64 1, !13, i64 1, !13, i64 1, !13, i64 1, !13, i64 1, !13, i64 1, !13, i64 1, !13, i64 1, !13, i64 2, !13, i64 2, !13, i64 2, !13, i64 2, !13, i64 2, !13, i64 2, !13, i64 2, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !7, i64 80, !7, i64 102, !7, i64 124, !13, i64 148, !13, i64 152, !16, i64 160, !17, i64 168, !17, i64 176, !7, i64 184, !7, i64 216, !7, i64 217, !7, i64 218, !7, i64 219, !7, i64 220, !7, i64 221, !7, i64 222, !6, i64 224, !6, i64 232, !18, i64 240, !6, i64 632, !6, i64 640, !19, i64 648, !26, i64 1144, !29, i64 1688, !6, i64 1752, !7, i64 1760, !13, i64 1764, !7, i64 1768, !32, i64 1776, !32, i64 1816, !32, i64 1856, !32, i64 1896, !13, i64 1936, !17, i64 1944, !7, i64 1952, !32, i64 1960, !7, i64 2000, !7, i64 2001, !7, i64 2002, !25, i64 2003, !33, i64 2004, !33, i64 2008, !34, i64 2016, !31, i64 2208, !13, i64 2212, !31, i64 2216, !17, i64 2224, !7, i64 2232, !17, i64 2240, !17, i64 2248, !17, i64 2256, !33, i64 2264, !33, i64 2268, !7, i64 2272, !7, i64 2528, !13, i64 2784, !24, i64 2792, !13, i64 2816, !24, i64 2824, !24, i64 2848, !24, i64 2872, !36, i64 2896, !38, i64 3704, !6, i64 3760, !6, i64 3768, !7, i64 3776, !13, i64 3780, !24, i64 3784, !13, i64 3808, !40, i64 3816, !7, i64 3848, !32, i64 3992, !24, i64 4032, !24, i64 4056, !25, i64 4080, !25, i64 4081, !25, i64 4082, !31, i64 4084, !31, i64 4086, !13, i64 4088, !13, i64 4092, !24, i64 4096, !13, i64 4120, !41, i64 4128, !33, i64 4176, !7, i64 4180, !7, i64 4181}
!16 = !{!"s2n_timer", !17, i64 0}
!17 = !{!"long", !7, i64 0}
!18 = !{!"s2n_secrets", !7, i64 0, !13, i64 388}
!19 = !{!"s2n_kex_parameters", !20, i64 0, !21, i64 8, !7, i64 24, !21, i64 56, !22, i64 72, !22, i64 184, !7, i64 296, !23, i64 360, !24, i64 448, !24, i64 472}
!20 = !{!"s2n_dh_params", !6, i64 0}
!21 = !{!"s2n_ecc_evp_params", !6, i64 0, !6, i64 8}
!22 = !{!"s2n_kem_group_params", !6, i64 0, !23, i64 8, !21, i64 96}
!23 = !{!"s2n_kem_params", !6, i64 0, !24, i64 8, !24, i64 32, !24, i64 56, !25, i64 80}
!24 = !{!"s2n_blob", !6, i64 0, !13, i64 8, !13, i64 12, !13, i64 16}
!25 = !{!"_Bool", !7, i64 0}
!26 = !{!"s2n_handshake_parameters", !27, i64 0, !27, i64 48, !24, i64 96, !13, i64 120, !28, i64 124, !6, i64 384, !6, i64 392, !6, i64 400, !7, i64 408, !7, i64 440, !7, i64 472, !7, i64 473, !7, i64 474, !7, i64 506}
!27 = !{!"s2n_pkey", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!28 = !{!"s2n_sig_scheme_list", !7, i64 0, !7, i64 256}
!29 = !{!"s2n_psk_parameters", !13, i64 0, !30, i64 8, !31, i64 40, !31, i64 42, !6, i64 48, !13, i64 56}
!30 = !{!"s2n_array", !24, i64 0, !13, i64 24, !13, i64 28}
!31 = !{!"short", !7, i64 0}
!32 = !{!"s2n_stuffer", !24, i64 0, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 36, !13, i64 36}
!33 = !{!"", !13, i64 0}
!34 = !{!"s2n_handshake", !32, i64 0, !6, i64 40, !7, i64 48, !7, i64 56, !7, i64 104, !7, i64 152, !13, i64 156, !13, i64 160, !13, i64 164, !13, i64 168, !35, i64 176, !13, i64 184, !13, i64 184, !13, i64 184, !13, i64 184, !13, i64 188}
!35 = !{!"s2n_offered_early_data", !6, i64 0}
!36 = !{!"s2n_client_hello", !24, i64 0, !37, i64 24, !24, i64 728, !24, i64 752, !24, i64 776, !7, i64 800, !7, i64 801, !13, i64 802, !13, i64 802, !13, i64 802, !13, i64 802, !13, i64 802, !13, i64 802, !13, i64 802}
!37 = !{!"", !7, i64 0, !24, i64 672, !31, i64 696}
!38 = !{!"s2n_x509_validator", !6, i64 0, !6, i64 8, !7, i64 16, !7, i64 17, !31, i64 18, !6, i64 24, !13, i64 32, !6, i64 40, !39, i64 48, !25, i64 52}
!39 = !{!"s2n_cert_validation_info", !13, i64 0, !13, i64 0}
!40 = !{!"s2n_ticket_fields", !24, i64 0, !13, i64 24}
!41 = !{!"s2n_post_handshake", !32, i64 0, !7, i64 40}
!42 = !{!15, !6, i64 8}
!43 = !{!15, !6, i64 2056}
!44 = !{!15, !6, i64 1752}
!45 = !{!15, !6, i64 224}
!46 = !{!15, !6, i64 232}
!47 = !{!15, !6, i64 24}
!48 = !{!15, !7, i64 3776}
!49 = !{!15, !6, i64 3760}
!50 = !{!15, !6, i64 3768}
!51 = !{!17, !17, i64 0}
!52 = !{!15, !6, i64 632}
!53 = !{!15, !6, i64 640}
!54 = !{!15, !6, i64 1536}
!55 = !{!15, !6, i64 1528}
!56 = !{!15, !13, i64 4120}
!57 = !{!7, !7, i64 0}
!58 = !{!15, !7, i64 219}
!59 = !{!15, !7, i64 218}
!60 = !{!15, !7, i64 220}
!61 = !{!15, !13, i64 152}
!62 = !{!15, !13, i64 3780}


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

%struct.s2n_debug_info = type { ptr, ptr }
%struct.s2n_signature_scheme = type { i16, ptr, i32, i32, i8, i8, i16, ptr }
%struct.s2n_stuffer = type { %struct.s2n_blob, i32, i32, i32, i8 }
%struct.s2n_blob = type { ptr, i32, i32, i8 }

@_s2n_debug_info = external thread_local local_unnamed_addr global %struct.s2n_debug_info, align 8
@s2n_errno = external thread_local local_unnamed_addr global i32, align 4
@.str.15 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [91 x i8], align 1
@s2n_null_sig_scheme = external constant %struct.s2n_signature_scheme, align 8
@s2n_highest_protocol_version = external local_unnamed_addr global i8, align 1
@s2n_unknown_protocol_version = external local_unnamed_addr global i8, align 1

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

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

declare i32 @s2n_blob_zero(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @s2n_result_is_ok(i32) local_unnamed_addr #3

declare i32 @s2n_prf_new(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_handshake_hashes_new(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @s2n_connection_wipe(ptr noundef %0) local_unnamed_addr #4 {
  %2 = alloca %struct.s2n_stuffer, align 8
  %3 = alloca %struct.s2n_stuffer, align 8
  %4 = alloca %struct.s2n_stuffer, align 8
  %5 = alloca %struct.s2n_stuffer, align 8
  %6 = alloca %struct.s2n_stuffer, align 8
  %7 = alloca %struct.s2n_stuffer, align 8
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %8, label %16

8:                                                ; preds = %1
  %9 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.15, ptr %9, align 8, !tbaa !5
  %10 = tail call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.15, i64 21), i32 noundef 47) #7
  %.not221 = icmp eq ptr %10, null
  %11 = getelementptr inbounds i8, ptr %10, i64 1
  %12 = select i1 %.not221, ptr getelementptr inbounds (i8, ptr @.str.15, i64 21), ptr %11
  %13 = getelementptr inbounds i8, ptr %9, i64 8
  store ptr %12, ptr %13, align 8, !tbaa !10
  %14 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %14, align 4, !tbaa !11
  %15 = tail call i32 @s2n_calculate_stacktrace() #8
  br label %278

16:                                               ; preds = %1
  %17 = getelementptr inbounds i8, ptr %0, i64 148
  %18 = load i32, ptr %17, align 4, !tbaa !13
  %19 = getelementptr inbounds i8, ptr %0, i64 8
  %20 = load ptr, ptr %19, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %2) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %2, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %3) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %3, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %4, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %5) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %5, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %6) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %6, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %7, i8 0, i64 40, i1 false)
  %21 = getelementptr inbounds i8, ptr %0, i64 2016
  %22 = getelementptr inbounds i8, ptr %0, i64 2056
  %23 = load ptr, ptr %22, align 8, !tbaa !42
  %.not222 = icmp eq ptr %23, null
  br i1 %.not222, label %24, label %27

24:                                               ; preds = %16
  %25 = tail call i32 @s2n_handshake_hashes_new(ptr noundef nonnull %22) #8
  %26 = tail call zeroext i1 @s2n_result_is_ok(i32 %25)
  br i1 %26, label %._crit_edge, label %277

._crit_edge:                                      ; preds = %24
  %.pre = load ptr, ptr %22, align 8, !tbaa !42
  br label %27

27:                                               ; preds = %._crit_edge, %16
  %28 = phi ptr [ %.pre, %._crit_edge ], [ %23, %16 ]
  %29 = tail call i32 @s2n_handshake_hashes_wipe(ptr noundef %28) #8
  %30 = tail call zeroext i1 @s2n_result_is_ok(i32 %29)
  br i1 %30, label %31, label %277

31:                                               ; preds = %27
  %32 = load ptr, ptr %22, align 8, !tbaa !42
  %33 = getelementptr inbounds i8, ptr %0, i64 1752
  %34 = load ptr, ptr %33, align 8, !tbaa !43
  %.not223 = icmp eq ptr %34, null
  br i1 %.not223, label %35, label %38

35:                                               ; preds = %31
  %36 = tail call i32 @s2n_prf_new(ptr noundef nonnull %0) #8
  %37 = tail call zeroext i1 @s2n_result_is_ok(i32 %36)
  br i1 %37, label %38, label %277

38:                                               ; preds = %31, %35
  %39 = tail call i32 @s2n_prf_wipe(ptr noundef nonnull %0) #8
  %40 = tail call zeroext i1 @s2n_result_is_ok(i32 %39)
  br i1 %40, label %41, label %277

41:                                               ; preds = %38
  %42 = load ptr, ptr %33, align 8, !tbaa !43
  %43 = getelementptr inbounds i8, ptr %0, i64 224
  %44 = load ptr, ptr %43, align 8, !tbaa !44
  %.not224 = icmp eq ptr %44, null
  br i1 %.not224, label %45, label %48

45:                                               ; preds = %41
  %46 = tail call i32 @s2n_crypto_parameters_new(ptr noundef nonnull %43) #8
  %47 = tail call zeroext i1 @s2n_result_is_ok(i32 %46)
  br i1 %47, label %51, label %277

48:                                               ; preds = %41
  %49 = tail call i32 @s2n_crypto_parameters_wipe(ptr noundef nonnull %44) #8
  %50 = tail call zeroext i1 @s2n_result_is_ok(i32 %49)
  br i1 %50, label %51, label %277

51:                                               ; preds = %48, %45
  %52 = load ptr, ptr %43, align 8, !tbaa !44
  %53 = getelementptr inbounds i8, ptr %0, i64 232
  %54 = load ptr, ptr %53, align 8, !tbaa !45
  %.not225 = icmp eq ptr %54, null
  br i1 %.not225, label %55, label %58

55:                                               ; preds = %51
  %56 = tail call i32 @s2n_crypto_parameters_new(ptr noundef nonnull %53) #8
  %57 = tail call zeroext i1 @s2n_result_is_ok(i32 %56)
  br i1 %57, label %61, label %277

58:                                               ; preds = %51
  %59 = tail call i32 @s2n_crypto_parameters_wipe(ptr noundef nonnull %54) #8
  %60 = tail call zeroext i1 @s2n_result_is_ok(i32 %59)
  br i1 %60, label %61, label %277

61:                                               ; preds = %58, %55
  %62 = load ptr, ptr %53, align 8, !tbaa !45
  %63 = tail call i32 @s2n_connection_wipe_keys(ptr noundef nonnull %0)
  %64 = icmp sgt i32 %63, -1
  br i1 %64, label %65, label %277

65:                                               ; preds = %61
  %66 = getelementptr inbounds i8, ptr %0, i64 1960
  %67 = tail call i32 @s2n_stuffer_wipe(ptr noundef nonnull %66) #8
  %68 = icmp sgt i32 %67, -1
  br i1 %68, label %69, label %277

69:                                               ; preds = %65
  %70 = getelementptr inbounds i8, ptr %0, i64 3992
  %71 = tail call i32 @s2n_stuffer_wipe(ptr noundef nonnull %70) #8
  %72 = icmp sgt i32 %71, -1
  br i1 %72, label %73, label %277

73:                                               ; preds = %69
  %74 = tail call i32 @s2n_stuffer_wipe(ptr noundef nonnull %21) #8
  %75 = icmp sgt i32 %74, -1
  br i1 %75, label %76, label %277

76:                                               ; preds = %73
  %77 = getelementptr inbounds i8, ptr %0, i64 4128
  %78 = tail call i32 @s2n_stuffer_wipe(ptr noundef nonnull %77) #8
  %79 = icmp sgt i32 %78, -1
  br i1 %79, label %80, label %277

80:                                               ; preds = %76
  %81 = getelementptr inbounds i8, ptr %0, i64 2896
  %82 = tail call i32 @s2n_blob_zero(ptr noundef nonnull %81) #8
  %83 = icmp sgt i32 %82, -1
  br i1 %83, label %84, label %277

84:                                               ; preds = %80
  %85 = getelementptr inbounds i8, ptr %0, i64 1776
  %86 = tail call i32 @s2n_stuffer_wipe(ptr noundef nonnull %85) #8
  %87 = icmp sgt i32 %86, -1
  br i1 %87, label %88, label %277

88:                                               ; preds = %84
  %89 = getelementptr inbounds i8, ptr %0, i64 1816
  %90 = tail call i32 @s2n_stuffer_wipe(ptr noundef nonnull %89) #8
  %91 = icmp sgt i32 %90, -1
  br i1 %91, label %92, label %277

92:                                               ; preds = %88
  %93 = getelementptr inbounds i8, ptr %0, i64 1896
  %94 = tail call i32 @s2n_stuffer_wipe(ptr noundef nonnull %93) #8
  %95 = icmp sgt i32 %94, -1
  br i1 %95, label %96, label %277

96:                                               ; preds = %92
  %97 = tail call i32 @s2n_stuffer_free(ptr noundef nonnull %77) #8
  %98 = icmp sgt i32 %97, -1
  br i1 %98, label %99, label %277

99:                                               ; preds = %96
  %100 = getelementptr inbounds i8, ptr %0, i64 1856
  %101 = tail call i32 @s2n_stuffer_free(ptr noundef nonnull %100) #8
  %102 = icmp sgt i32 %101, -1
  br i1 %102, label %103, label %277

103:                                              ; preds = %99
  %104 = getelementptr inbounds i8, ptr %0, i64 1688
  %105 = tail call i32 @s2n_psk_parameters_wipe(ptr noundef nonnull %104) #8
  %106 = tail call zeroext i1 @s2n_result_is_ok(i32 %105)
  br i1 %106, label %107, label %277

107:                                              ; preds = %103
  %108 = tail call i32 @s2n_connection_wipe_io(ptr noundef nonnull %0)
  %109 = icmp sgt i32 %108, -1
  br i1 %109, label %110, label %277

110:                                              ; preds = %107
  %111 = getelementptr inbounds i8, ptr %0, i64 3784
  %112 = tail call i32 @s2n_free(ptr noundef nonnull %111) #8
  %113 = icmp sgt i32 %112, -1
  br i1 %113, label %114, label %277

114:                                              ; preds = %110
  %115 = getelementptr inbounds i8, ptr %0, i64 2792
  %116 = tail call i32 @s2n_free(ptr noundef nonnull %115) #8
  %117 = icmp sgt i32 %116, -1
  br i1 %117, label %118, label %277

118:                                              ; preds = %114
  %119 = getelementptr inbounds i8, ptr %0, i64 4032
  %120 = tail call i32 @s2n_free(ptr noundef nonnull %119) #8
  %121 = icmp sgt i32 %120, -1
  br i1 %121, label %122, label %277

122:                                              ; preds = %118
  %123 = getelementptr inbounds i8, ptr %0, i64 2848
  %124 = tail call i32 @s2n_free(ptr noundef nonnull %123) #8
  %125 = icmp sgt i32 %124, -1
  br i1 %125, label %126, label %277

126:                                              ; preds = %122
  %127 = getelementptr inbounds i8, ptr %0, i64 2872
  %128 = tail call i32 @s2n_free(ptr noundef nonnull %127) #8
  %129 = icmp sgt i32 %128, -1
  br i1 %129, label %130, label %277

130:                                              ; preds = %126
  %131 = getelementptr inbounds i8, ptr %0, i64 4096
  %132 = tail call i32 @s2n_free(ptr noundef nonnull %131) #8
  %133 = icmp sgt i32 %132, -1
  br i1 %133, label %134, label %277

134:                                              ; preds = %130
  %135 = getelementptr inbounds i8, ptr %0, i64 3816
  %136 = tail call i32 @s2n_free(ptr noundef nonnull %135) #8
  %137 = icmp sgt i32 %136, -1
  br i1 %137, label %138, label %277

138:                                              ; preds = %134
  %139 = getelementptr inbounds i8, ptr %0, i64 4056
  %140 = tail call i32 @s2n_free(ptr noundef nonnull %139) #8
  %141 = icmp sgt i32 %140, -1
  br i1 %141, label %142, label %277

142:                                              ; preds = %138
  %143 = tail call i32 @s2n_stuffer_resize(ptr noundef nonnull %21, i32 noundef 17413) #8
  %144 = icmp sgt i32 %143, -1
  br i1 %144, label %145, label %277

145:                                              ; preds = %142
  %146 = tail call i32 @s2n_free(ptr noundef nonnull %81) #8
  %147 = icmp sgt i32 %146, -1
  br i1 %147, label %148, label %277

148:                                              ; preds = %145
  %149 = tail call i32 @s2n_stuffer_resize(ptr noundef nonnull %89, i32 noundef 0) #8
  %150 = icmp sgt i32 %149, -1
  br i1 %150, label %151, label %277

151:                                              ; preds = %148
  %152 = tail call i32 @s2n_stuffer_resize(ptr noundef nonnull %93, i32 noundef 0) #8
  %153 = icmp sgt i32 %152, -1
  br i1 %153, label %154, label %277

154:                                              ; preds = %151
  %155 = getelementptr inbounds i8, ptr %0, i64 24
  store ptr null, ptr %155, align 8, !tbaa !46
  %156 = getelementptr inbounds i8, ptr %0, i64 3760
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(17) %156, i8 0, i64 17, i1 false)
  %157 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %2, ptr noundef nonnull %66, i64 noundef 40) #8
  %.not226.not.not = icmp eq ptr %157, null
  br i1 %.not226.not.not, label %.critedge, label %.critedge272

.critedge:                                        ; preds = %154
  %158 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.16, ptr %158, align 8, !tbaa !5
  %159 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.16, i64 21), i32 noundef 47) #7
  %.not227 = icmp eq ptr %159, null
  %160 = getelementptr inbounds i8, ptr %159, i64 1
  %161 = select i1 %.not227, ptr getelementptr inbounds (i8, ptr @.str.16, i64 21), ptr %160
  %162 = getelementptr inbounds i8, ptr %158, i64 8
  store ptr %161, ptr %162, align 8, !tbaa !10
  %163 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %163, align 4, !tbaa !11
  %164 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge272:                                     ; preds = %154
  %165 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %3, ptr noundef nonnull %70, i64 noundef 40) #8
  %.not228.not.not = icmp eq ptr %165, null
  br i1 %.not228.not.not, label %.critedge251, label %.critedge273

.critedge251:                                     ; preds = %.critedge272
  %166 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.17, ptr %166, align 8, !tbaa !5
  %167 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.17, i64 21), i32 noundef 47) #7
  %.not229 = icmp eq ptr %167, null
  %168 = getelementptr inbounds i8, ptr %167, i64 1
  %169 = select i1 %.not229, ptr getelementptr inbounds (i8, ptr @.str.17, i64 21), ptr %168
  %170 = getelementptr inbounds i8, ptr %166, i64 8
  store ptr %169, ptr %170, align 8, !tbaa !10
  %171 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %171, align 4, !tbaa !11
  %172 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge273:                                     ; preds = %.critedge272
  %173 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %4, ptr noundef nonnull %21, i64 noundef 40) #8
  %.not230.not.not = icmp eq ptr %173, null
  br i1 %.not230.not.not, label %.critedge253, label %.critedge274

.critedge253:                                     ; preds = %.critedge273
  %174 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.18, ptr %174, align 8, !tbaa !5
  %175 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.18, i64 21), i32 noundef 47) #7
  %.not231 = icmp eq ptr %175, null
  %176 = getelementptr inbounds i8, ptr %175, i64 1
  %177 = select i1 %.not231, ptr getelementptr inbounds (i8, ptr @.str.18, i64 21), ptr %176
  %178 = getelementptr inbounds i8, ptr %174, i64 8
  store ptr %177, ptr %178, align 8, !tbaa !10
  %179 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %179, align 4, !tbaa !11
  %180 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge274:                                     ; preds = %.critedge273
  %181 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %5, ptr noundef nonnull %85, i64 noundef 40) #8
  %.not232.not.not = icmp eq ptr %181, null
  br i1 %.not232.not.not, label %.critedge255, label %.critedge275

.critedge255:                                     ; preds = %.critedge274
  %182 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.19, ptr %182, align 8, !tbaa !5
  %183 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.19, i64 21), i32 noundef 47) #7
  %.not233 = icmp eq ptr %183, null
  %184 = getelementptr inbounds i8, ptr %183, i64 1
  %185 = select i1 %.not233, ptr getelementptr inbounds (i8, ptr @.str.19, i64 21), ptr %184
  %186 = getelementptr inbounds i8, ptr %182, i64 8
  store ptr %185, ptr %186, align 8, !tbaa !10
  %187 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %187, align 4, !tbaa !11
  %188 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge275:                                     ; preds = %.critedge274
  %189 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %6, ptr noundef nonnull %89, i64 noundef 40) #8
  %.not234.not.not = icmp eq ptr %189, null
  br i1 %.not234.not.not, label %.critedge257, label %.critedge276

.critedge257:                                     ; preds = %.critedge275
  %190 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.20, ptr %190, align 8, !tbaa !5
  %191 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.20, i64 21), i32 noundef 47) #7
  %.not235 = icmp eq ptr %191, null
  %192 = getelementptr inbounds i8, ptr %191, i64 1
  %193 = select i1 %.not235, ptr getelementptr inbounds (i8, ptr @.str.20, i64 21), ptr %192
  %194 = getelementptr inbounds i8, ptr %190, i64 8
  store ptr %193, ptr %194, align 8, !tbaa !10
  %195 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %195, align 4, !tbaa !11
  %196 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge276:                                     ; preds = %.critedge275
  %197 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %7, ptr noundef nonnull %93, i64 noundef 40) #8
  %.not236.not.not = icmp eq ptr %197, null
  br i1 %.not236.not.not, label %.critedge259, label %.critedge277

.critedge259:                                     ; preds = %.critedge276
  %198 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.21, ptr %198, align 8, !tbaa !5
  %199 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.21, i64 21), i32 noundef 47) #7
  %.not237 = icmp eq ptr %199, null
  %200 = getelementptr inbounds i8, ptr %199, i64 1
  %201 = select i1 %.not237, ptr getelementptr inbounds (i8, ptr @.str.21, i64 21), ptr %200
  %202 = getelementptr inbounds i8, ptr %198, i64 8
  store ptr %201, ptr %202, align 8, !tbaa !10
  %203 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %203, align 4, !tbaa !11
  %204 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge277:                                     ; preds = %.critedge276
  %205 = call i32 @s2n_connection_zero(ptr noundef nonnull %0, i32 noundef %18, ptr noundef %20)
  %206 = icmp sgt i32 %205, -1
  br i1 %206, label %207, label %277

207:                                              ; preds = %.critedge277
  %208 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %66, ptr noundef nonnull %2, i64 noundef 40) #8
  %.not238.not.not = icmp eq ptr %208, null
  br i1 %.not238.not.not, label %.critedge261, label %.critedge278

.critedge261:                                     ; preds = %207
  %209 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.22, ptr %209, align 8, !tbaa !5
  %210 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.22, i64 21), i32 noundef 47) #7
  %.not239 = icmp eq ptr %210, null
  %211 = getelementptr inbounds i8, ptr %210, i64 1
  %212 = select i1 %.not239, ptr getelementptr inbounds (i8, ptr @.str.22, i64 21), ptr %211
  %213 = getelementptr inbounds i8, ptr %209, i64 8
  store ptr %212, ptr %213, align 8, !tbaa !10
  %214 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %214, align 4, !tbaa !11
  %215 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge278:                                     ; preds = %207
  %216 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %70, ptr noundef nonnull %3, i64 noundef 40) #8
  %.not240.not.not = icmp eq ptr %216, null
  br i1 %.not240.not.not, label %.critedge263, label %.critedge279

.critedge263:                                     ; preds = %.critedge278
  %217 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.23, ptr %217, align 8, !tbaa !5
  %218 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.23, i64 21), i32 noundef 47) #7
  %.not241 = icmp eq ptr %218, null
  %219 = getelementptr inbounds i8, ptr %218, i64 1
  %220 = select i1 %.not241, ptr getelementptr inbounds (i8, ptr @.str.23, i64 21), ptr %219
  %221 = getelementptr inbounds i8, ptr %217, i64 8
  store ptr %220, ptr %221, align 8, !tbaa !10
  %222 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %222, align 4, !tbaa !11
  %223 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge279:                                     ; preds = %.critedge278
  %224 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %21, ptr noundef nonnull %4, i64 noundef 40) #8
  %.not242.not.not = icmp eq ptr %224, null
  br i1 %.not242.not.not, label %.critedge265, label %.critedge280

.critedge265:                                     ; preds = %.critedge279
  %225 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.24, ptr %225, align 8, !tbaa !5
  %226 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.24, i64 21), i32 noundef 47) #7
  %.not243 = icmp eq ptr %226, null
  %227 = getelementptr inbounds i8, ptr %226, i64 1
  %228 = select i1 %.not243, ptr getelementptr inbounds (i8, ptr @.str.24, i64 21), ptr %227
  %229 = getelementptr inbounds i8, ptr %225, i64 8
  store ptr %228, ptr %229, align 8, !tbaa !10
  %230 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %230, align 4, !tbaa !11
  %231 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge280:                                     ; preds = %.critedge279
  %232 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %85, ptr noundef nonnull %5, i64 noundef 40) #8
  %.not244.not.not = icmp eq ptr %232, null
  br i1 %.not244.not.not, label %.critedge267, label %.critedge281

.critedge267:                                     ; preds = %.critedge280
  %233 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.25, ptr %233, align 8, !tbaa !5
  %234 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.25, i64 21), i32 noundef 47) #7
  %.not245 = icmp eq ptr %234, null
  %235 = getelementptr inbounds i8, ptr %234, i64 1
  %236 = select i1 %.not245, ptr getelementptr inbounds (i8, ptr @.str.25, i64 21), ptr %235
  %237 = getelementptr inbounds i8, ptr %233, i64 8
  store ptr %236, ptr %237, align 8, !tbaa !10
  %238 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %238, align 4, !tbaa !11
  %239 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge281:                                     ; preds = %.critedge280
  %240 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %89, ptr noundef nonnull %6, i64 noundef 40) #8
  %.not246.not.not = icmp eq ptr %240, null
  br i1 %.not246.not.not, label %.critedge269, label %.critedge282

.critedge269:                                     ; preds = %.critedge281
  %241 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.26, ptr %241, align 8, !tbaa !5
  %242 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.26, i64 21), i32 noundef 47) #7
  %.not247 = icmp eq ptr %242, null
  %243 = getelementptr inbounds i8, ptr %242, i64 1
  %244 = select i1 %.not247, ptr getelementptr inbounds (i8, ptr @.str.26, i64 21), ptr %243
  %245 = getelementptr inbounds i8, ptr %241, i64 8
  store ptr %244, ptr %245, align 8, !tbaa !10
  %246 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %246, align 4, !tbaa !11
  %247 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge282:                                     ; preds = %.critedge281
  %248 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %93, ptr noundef nonnull %7, i64 noundef 40) #8
  %.not248.not.not = icmp eq ptr %248, null
  br i1 %.not248.not.not, label %.critedge271, label %.critedge283

.critedge271:                                     ; preds = %.critedge282
  %249 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.27, ptr %249, align 8, !tbaa !5
  %250 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.27, i64 21), i32 noundef 47) #7
  %.not249 = icmp eq ptr %250, null
  %251 = getelementptr inbounds i8, ptr %250, i64 1
  %252 = select i1 %.not249, ptr getelementptr inbounds (i8, ptr @.str.27, i64 21), ptr %251
  %253 = getelementptr inbounds i8, ptr %249, i64 8
  store ptr %252, ptr %253, align 8, !tbaa !10
  %254 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %254, align 4, !tbaa !11
  %255 = call i32 @s2n_calculate_stacktrace() #8
  br label %277

.critedge283:                                     ; preds = %.critedge282
  %256 = call i32 @s2n_stuffer_growable_alloc(ptr noundef nonnull %100, i32 noundef 0) #8
  %257 = icmp sgt i32 %256, -1
  br i1 %257, label %258, label %277

258:                                              ; preds = %.critedge283
  store ptr %32, ptr %22, align 8, !tbaa !42
  store ptr %42, ptr %33, align 8, !tbaa !43
  store ptr %52, ptr %43, align 8, !tbaa !44
  store ptr %62, ptr %53, align 8, !tbaa !45
  %259 = getelementptr inbounds i8, ptr %0, i64 632
  store ptr %52, ptr %259, align 8, !tbaa !47
  %260 = getelementptr inbounds i8, ptr %0, i64 640
  store ptr %52, ptr %260, align 8, !tbaa !48
  %261 = getelementptr inbounds i8, ptr %0, i64 1536
  store ptr @s2n_null_sig_scheme, ptr %261, align 8, !tbaa !49
  %262 = getelementptr inbounds i8, ptr %0, i64 1528
  store ptr @s2n_null_sig_scheme, ptr %262, align 8, !tbaa !50
  %263 = call i32 @s2n_psk_parameters_init(ptr noundef nonnull %104) #8
  %264 = call zeroext i1 @s2n_result_is_ok(i32 %263)
  br i1 %264, label %265, label %277

265:                                              ; preds = %258
  %266 = getelementptr inbounds i8, ptr %0, i64 4120
  store i32 604800, ptr %266, align 8, !tbaa !51
  %267 = call i32 @s2n_handshake_require_all_hashes(ptr noundef nonnull %21) #8
  %268 = icmp sgt i32 %267, -1
  br i1 %268, label %269, label %277

269:                                              ; preds = %265
  %270 = load i32, ptr %17, align 4, !tbaa !13
  %271 = icmp eq i32 %270, 0
  %s2n_unknown_protocol_version.val = load i8, ptr @s2n_unknown_protocol_version, align 1
  %s2n_highest_protocol_version.val = load i8, ptr @s2n_highest_protocol_version, align 1
  %.sink284 = select i1 %271, i8 %s2n_unknown_protocol_version.val, i8 %s2n_highest_protocol_version.val
  %.sink285 = select i1 %271, i8 %s2n_highest_protocol_version.val, i8 %s2n_unknown_protocol_version.val
  %272 = getelementptr inbounds i8, ptr %0, i64 219
  store i8 %.sink285, ptr %272, align 1
  %273 = getelementptr inbounds i8, ptr %0, i64 218
  store i8 %.sink284, ptr %273, align 2
  %274 = getelementptr inbounds i8, ptr %0, i64 220
  store i8 %.sink284, ptr %274, align 4
  %275 = getelementptr inbounds i8, ptr %0, i64 152
  store i32 0, ptr %275, align 8, !tbaa !52
  %276 = getelementptr inbounds i8, ptr %0, i64 3780
  store i32 0, ptr %276, align 4, !tbaa !53
  br label %277

277:                                              ; preds = %.critedge271, %.critedge269, %.critedge267, %.critedge265, %.critedge263, %.critedge261, %.critedge259, %.critedge257, %.critedge255, %.critedge253, %.critedge251, %.critedge, %35, %38, %55, %58, %265, %258, %.critedge283, %.critedge277, %151, %148, %145, %142, %138, %134, %130, %126, %122, %118, %114, %110, %107, %103, %99, %96, %92, %88, %84, %80, %76, %73, %69, %65, %61, %269, %48, %45, %27, %24
  %.40 = phi i32 [ -1, %24 ], [ -1, %27 ], [ -1, %35 ], [ -1, %38 ], [ -1, %45 ], [ -1, %48 ], [ -1, %55 ], [ -1, %58 ], [ 0, %269 ], [ -1, %.critedge271 ], [ -1, %.critedge269 ], [ -1, %.critedge267 ], [ -1, %.critedge265 ], [ -1, %.critedge263 ], [ -1, %.critedge261 ], [ -1, %.critedge259 ], [ -1, %.critedge257 ], [ -1, %.critedge255 ], [ -1, %.critedge253 ], [ -1, %.critedge251 ], [ -1, %.critedge ], [ -1, %61 ], [ -1, %65 ], [ -1, %69 ], [ -1, %73 ], [ -1, %76 ], [ -1, %80 ], [ -1, %84 ], [ -1, %88 ], [ -1, %92 ], [ -1, %96 ], [ -1, %99 ], [ -1, %103 ], [ -1, %107 ], [ -1, %110 ], [ -1, %114 ], [ -1, %118 ], [ -1, %122 ], [ -1, %126 ], [ -1, %130 ], [ -1, %134 ], [ -1, %138 ], [ -1, %142 ], [ -1, %145 ], [ -1, %148 ], [ -1, %151 ], [ -1, %.critedge277 ], [ -1, %.critedge283 ], [ -1, %258 ], [ -1, %265 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %2) #8
  br label %278

278:                                              ; preds = %277, %8
  %.41 = phi i32 [ %.40, %277 ], [ -1, %8 ]
  ret i32 %.41
}

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #5

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare ptr @strrchr(ptr noundef, i32 noundef) local_unnamed_addr #6

declare i32 @s2n_calculate_stacktrace() local_unnamed_addr #2

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

declare i32 @s2n_psk_parameters_wipe(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_free(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_stuffer_free(ptr noundef) local_unnamed_addr #2

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

declare i32 @s2n_stuffer_wipe(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_handshake_hashes_wipe(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_prf_wipe(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_crypto_parameters_new(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_crypto_parameters_wipe(ptr noundef) local_unnamed_addr #2

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

declare ptr @s2n_ensure_memmove_trace(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @s2n_connection_zero(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

declare i32 @s2n_psk_parameters_init(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_handshake_require_all_hashes(ptr noundef) local_unnamed_addr #2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
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 = { inlinehint 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 #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { nounwind willreturn memory(read) }
attributes #8 = { 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 0}
!6 = !{!"s2n_debug_info", !7, i64 0, !7, i64 8}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!6, !7, i64 8}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !8, i64 0}
!13 = !{!14, !12, i64 148}
!14 = !{!"s2n_connection", !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 0, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 1, !12, i64 2, !12, i64 2, !12, i64 2, !12, i64 2, !12, i64 2, !12, i64 2, !12, i64 2, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !8, i64 80, !8, i64 102, !8, i64 124, !12, i64 148, !12, i64 152, !15, i64 160, !16, i64 168, !16, i64 176, !8, i64 184, !8, i64 216, !8, i64 217, !8, i64 218, !8, i64 219, !8, i64 220, !8, i64 221, !8, i64 222, !7, i64 224, !7, i64 232, !17, i64 240, !7, i64 632, !7, i64 640, !18, i64 648, !25, i64 1144, !28, i64 1688, !7, i64 1752, !8, i64 1760, !12, i64 1764, !8, i64 1768, !31, i64 1776, !31, i64 1816, !31, i64 1856, !31, i64 1896, !12, i64 1936, !16, i64 1944, !8, i64 1952, !31, i64 1960, !8, i64 2000, !8, i64 2001, !8, i64 2002, !24, i64 2003, !32, i64 2004, !32, i64 2008, !33, i64 2016, !30, i64 2208, !12, i64 2212, !30, i64 2216, !16, i64 2224, !8, i64 2232, !16, i64 2240, !16, i64 2248, !16, i64 2256, !32, i64 2264, !32, i64 2268, !8, i64 2272, !8, i64 2528, !12, i64 2784, !23, i64 2792, !12, i64 2816, !23, i64 2824, !23, i64 2848, !23, i64 2872, !35, i64 2896, !37, i64 3704, !7, i64 3760, !7, i64 3768, !8, i64 3776, !12, i64 3780, !23, i64 3784, !12, i64 3808, !39, i64 3816, !8, i64 3848, !31, i64 3992, !23, i64 4032, !23, i64 4056, !24, i64 4080, !24, i64 4081, !24, i64 4082, !30, i64 4084, !30, i64 4086, !12, i64 4088, !12, i64 4092, !23, i64 4096, !12, i64 4120, !40, i64 4128, !32, i64 4176, !8, i64 4180, !8, i64 4181}
!15 = !{!"s2n_timer", !16, i64 0}
!16 = !{!"long", !8, i64 0}
!17 = !{!"s2n_secrets", !8, i64 0, !12, i64 388}
!18 = !{!"s2n_kex_parameters", !19, i64 0, !20, i64 8, !8, i64 24, !20, i64 56, !21, i64 72, !21, i64 184, !8, i64 296, !22, i64 360, !23, i64 448, !23, i64 472}
!19 = !{!"s2n_dh_params", !7, i64 0}
!20 = !{!"s2n_ecc_evp_params", !7, i64 0, !7, i64 8}
!21 = !{!"s2n_kem_group_params", !7, i64 0, !22, i64 8, !20, i64 96}
!22 = !{!"s2n_kem_params", !7, i64 0, !23, i64 8, !23, i64 32, !23, i64 56, !24, i64 80}
!23 = !{!"s2n_blob", !7, i64 0, !12, i64 8, !12, i64 12, !12, i64 16}
!24 = !{!"_Bool", !8, i64 0}
!25 = !{!"s2n_handshake_parameters", !26, i64 0, !26, i64 48, !23, i64 96, !12, i64 120, !27, i64 124, !7, i64 384, !7, i64 392, !7, i64 400, !8, i64 408, !8, i64 440, !8, i64 472, !8, i64 473, !8, i64 474, !8, i64 506}
!26 = !{!"s2n_pkey", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40}
!27 = !{!"s2n_sig_scheme_list", !8, i64 0, !8, i64 256}
!28 = !{!"s2n_psk_parameters", !12, i64 0, !29, i64 8, !30, i64 40, !30, i64 42, !7, i64 48, !12, i64 56}
!29 = !{!"s2n_array", !23, i64 0, !12, i64 24, !12, i64 28}
!30 = !{!"short", !8, i64 0}
!31 = !{!"s2n_stuffer", !23, i64 0, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 36, !12, i64 36}
!32 = !{!"", !12, i64 0}
!33 = !{!"s2n_handshake", !31, i64 0, !7, i64 40, !8, i64 48, !8, i64 56, !8, i64 104, !8, i64 152, !12, i64 156, !12, i64 160, !12, i64 164, !12, i64 168, !34, i64 176, !12, i64 184, !12, i64 184, !12, i64 184, !12, i64 184, !12, i64 188}
!34 = !{!"s2n_offered_early_data", !7, i64 0}
!35 = !{!"s2n_client_hello", !23, i64 0, !36, i64 24, !23, i64 728, !23, i64 752, !23, i64 776, !8, i64 800, !8, i64 801, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802}
!36 = !{!"", !8, i64 0, !23, i64 672, !30, i64 696}
!37 = !{!"s2n_x509_validator", !7, i64 0, !7, i64 8, !8, i64 16, !8, i64 17, !30, i64 18, !7, i64 24, !12, i64 32, !7, i64 40, !38, i64 48, !24, i64 52}
!38 = !{!"s2n_cert_validation_info", !12, i64 0, !12, i64 0}
!39 = !{!"s2n_ticket_fields", !23, i64 0, !12, i64 24}
!40 = !{!"s2n_post_handshake", !31, i64 0, !8, i64 40}
!41 = !{!14, !7, i64 8}
!42 = !{!14, !7, i64 2056}
!43 = !{!14, !7, i64 1752}
!44 = !{!14, !7, i64 224}
!45 = !{!14, !7, i64 232}
!46 = !{!14, !7, i64 24}
!47 = !{!14, !7, i64 632}
!48 = !{!14, !7, i64 640}
!49 = !{!14, !7, i64 1536}
!50 = !{!14, !7, i64 1528}
!51 = !{!14, !12, i64 4120}
!52 = !{!14, !12, i64 152}
!53 = !{!14, !12, i64 3780}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LowerExpectIntrinsicPass,MemCpyOptPass,MergedLoadStoreMotionPass,SROAPass,SimplifyCFGPass,TailCallElimPass