; LLVM IR from aws/s2n-tls :: tests/fuzz (s2n_memory_leak_negative_test)

; 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_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_stuffer = type { %struct.s2n_blob, i32, i32, i32, i8 }
%struct.s2n_blob = type { ptr, i32, i32, i8 }
%struct.s2n_post_handshake = type { %struct.s2n_stuffer, [4 x i8] }
%struct.s2n_atomic_flag = type { i32 }

@.str = external hidden unnamed_addr constant [113 x i8], align 1
@_s2n_debug_info = external thread_local global %struct.s2n_debug_info, align 8
@s2n_errno = external thread_local global i32, align 4
@certificate_chain = external hidden global [3248 x i8], align 16
@private_key = external hidden global [1680 x i8], align 16
@dhparams = external hidden global [425 x i8], align 16
@.str.1 = external hidden unnamed_addr constant [113 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [113 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [113 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [113 x i8], align 1
@MAX_NEGOTIATION_ATTEMPTS = external hidden global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local i32 @s2n_fuzz_test(ptr noundef %0, i64 noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca [2 x i32], align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i64 %1, ptr %5, align 8, !tbaa !9
  br label %18

18:                                               ; preds = %2
  %19 = load i64, ptr %5, align 8, !tbaa !9
  %20 = icmp ult i64 %19, 5
  br i1 %20, label %21, label %22

21:                                               ; preds = %18
  store i32 0, ptr %3, align 4
  br label %444

22:                                               ; preds = %18
  br label %23

23:                                               ; preds = %22
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  br label %24

24:                                               ; preds = %23
  %25 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 0
  %26 = call i32 @pipe(ptr noundef %25) #6
  %27 = icmp sgt i32 %26, -1
  br i1 %27, label %29, label %28

28:                                               ; preds = %24
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %443

29:                                               ; preds = %24
  br label %30

30:                                               ; preds = %29
  br label %31

31:                                               ; preds = %30
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  store i32 0, ptr %8, align 4, !tbaa !11
  br label %32

32:                                               ; preds = %54, %31
  %33 = load i32, ptr %8, align 4, !tbaa !11
  %34 = icmp slt i32 %33, 2
  br i1 %34, label %36, label %35

35:                                               ; preds = %32
  store i32 6, ptr %7, align 4
  br label %57

36:                                               ; preds = %32
  br label %37

37:                                               ; preds = %36
  %38 = load i32, ptr %8, align 4, !tbaa !11
  %39 = sext i32 %38 to i64
  %40 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 %39
  %41 = load i32, ptr %40, align 4, !tbaa !11
  %42 = load i32, ptr %8, align 4, !tbaa !11
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 %43
  %45 = load i32, ptr %44, align 4, !tbaa !11
  %46 = call i32 (i32, i32, ...) @fcntl(i32 noundef %45, i32 noundef 3)
  %47 = or i32 %46, 2048
  %48 = call i32 (i32, i32, ...) @fcntl(i32 noundef %41, i32 noundef 4, i32 noundef %47)
  %49 = icmp sgt i32 %48, -1
  br i1 %49, label %51, label %50

50:                                               ; preds = %37
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %57

51:                                               ; preds = %37
  br label %52

52:                                               ; preds = %51
  br label %53

53:                                               ; preds = %52
  br label %54

54:                                               ; preds = %53
  %55 = load i32, ptr %8, align 4, !tbaa !11
  %56 = add nsw i32 %55, 1
  store i32 %56, ptr %8, align 4, !tbaa !11
  br label %32, !llvm.loop !13

57:                                               ; preds = %50, %35
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  %58 = load i32, ptr %7, align 4
  switch i32 %58, label %443 [
    i32 6, label %59
  ]

59:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  br label %60

60:                                               ; preds = %59
  %61 = call ptr @s2n_config_new()
  store ptr %61, ptr %9, align 8, !tbaa !5
  %62 = icmp ne ptr %61, null
  br i1 %62, label %96, label %63

63:                                               ; preds = %60
  br label %64

64:                                               ; preds = %63
  br label %65

65:                                               ; preds = %64
  %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
  store ptr @.str, ptr %67, align 8, !tbaa !15
  %68 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %69 = getelementptr inbounds %struct.s2n_debug_info, ptr %68, i32 0, i32 0
  %70 = load ptr, ptr %69, align 8, !tbaa !15
  %71 = getelementptr inbounds i8, ptr %70, i64 21
  %72 = call ptr @strrchr(ptr noundef %71, i32 noundef 47) #7
  %73 = icmp ne ptr %72, null
  br i1 %73, label %74, label %81

74:                                               ; preds = %65
  %75 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %76 = getelementptr inbounds %struct.s2n_debug_info, ptr %75, i32 0, i32 0
  %77 = load ptr, ptr %76, align 8, !tbaa !15
  %78 = getelementptr inbounds i8, ptr %77, i64 21
  %79 = call ptr @strrchr(ptr noundef %78, i32 noundef 47) #7
  %80 = getelementptr inbounds i8, ptr %79, i64 1
  br label %86

81:                                               ; preds = %65
  %82 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %83 = getelementptr inbounds %struct.s2n_debug_info, ptr %82, i32 0, i32 0
  %84 = load ptr, ptr %83, align 8, !tbaa !15
  %85 = getelementptr inbounds i8, ptr %84, i64 21
  br label %86

86:                                               ; preds = %81, %74
  %87 = phi ptr [ %80, %74 ], [ %85, %81 ]
  %88 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %89 = getelementptr inbounds %struct.s2n_debug_info, ptr %88, i32 0, i32 1
  store ptr %87, ptr %89, align 8, !tbaa !17
  %90 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %90, align 4, !tbaa !11
  %91 = call i32 @s2n_calculate_stacktrace()
  br label %92

92:                                               ; preds = %86
  br label %93

93:                                               ; preds = %92
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %442

94:                                               ; No predecessors!
  br label %95

95:                                               ; preds = %94
  br label %96

96:                                               ; preds = %95, %60
  br label %97

97:                                               ; preds = %96
  br label %98

98:                                               ; preds = %97
  br label %99

99:                                               ; preds = %98
  %100 = load ptr, ptr %9, align 8, !tbaa !5
  %101 = call i32 @s2n_config_add_cert_chain_and_key(ptr noundef %100, ptr noundef @certificate_chain, ptr noundef @private_key)
  %102 = icmp sgt i32 %101, -1
  br i1 %102, label %104, label %103

103:                                              ; preds = %99
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %442

104:                                              ; preds = %99
  br label %105

105:                                              ; preds = %104
  br label %106

106:                                              ; preds = %105
  br label %107

107:                                              ; preds = %106
  %108 = load ptr, ptr %9, align 8, !tbaa !5
  %109 = call i32 @s2n_config_add_dhparams(ptr noundef %108, ptr noundef @dhparams)
  %110 = icmp sgt i32 %109, -1
  br i1 %110, label %112, label %111

111:                                              ; preds = %107
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %442

112:                                              ; preds = %107
  br label %113

113:                                              ; preds = %112
  br label %114

114:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  br label %115

115:                                              ; preds = %114
  %116 = call ptr @s2n_connection_new(i32 noundef 0)
  store ptr %116, ptr %10, align 8, !tbaa !5
  %117 = icmp ne ptr %116, null
  br i1 %117, label %151, label %118

118:                                              ; preds = %115
  br label %119

119:                                              ; preds = %118
  br label %120

120:                                              ; preds = %119
  %121 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %122 = getelementptr inbounds %struct.s2n_debug_info, ptr %121, i32 0, i32 0
  store ptr @.str.1, ptr %122, align 8, !tbaa !15
  %123 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %124 = getelementptr inbounds %struct.s2n_debug_info, ptr %123, i32 0, i32 0
  %125 = load ptr, ptr %124, align 8, !tbaa !15
  %126 = getelementptr inbounds i8, ptr %125, i64 21
  %127 = call ptr @strrchr(ptr noundef %126, i32 noundef 47) #7
  %128 = icmp ne ptr %127, null
  br i1 %128, label %129, label %136

129:                                              ; preds = %120
  %130 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %131 = getelementptr inbounds %struct.s2n_debug_info, ptr %130, i32 0, i32 0
  %132 = load ptr, ptr %131, align 8, !tbaa !15
  %133 = getelementptr inbounds i8, ptr %132, i64 21
  %134 = call ptr @strrchr(ptr noundef %133, i32 noundef 47) #7
  %135 = getelementptr inbounds i8, ptr %134, i64 1
  br label %141

136:                                              ; preds = %120
  %137 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %138 = getelementptr inbounds %struct.s2n_debug_info, ptr %137, i32 0, i32 0
  %139 = load ptr, ptr %138, align 8, !tbaa !15
  %140 = getelementptr inbounds i8, ptr %139, i64 21
  br label %141

141:                                              ; preds = %136, %129
  %142 = phi ptr [ %135, %129 ], [ %140, %136 ]
  %143 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %144 = getelementptr inbounds %struct.s2n_debug_info, ptr %143, i32 0, i32 1
  store ptr %142, ptr %144, align 8, !tbaa !17
  %145 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %145, align 4, !tbaa !11
  %146 = call i32 @s2n_calculate_stacktrace()
  br label %147

147:                                              ; preds = %141
  br label %148

148:                                              ; preds = %147
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %441

149:                                              ; No predecessors!
  br label %150

150:                                              ; preds = %149
  br label %151

151:                                              ; preds = %150, %115
  br label %152

152:                                              ; preds = %151
  br label %153

153:                                              ; preds = %152
  br label %154

154:                                              ; preds = %153
  %155 = load ptr, ptr %10, align 8, !tbaa !5
  %156 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 0
  %157 = load i32, ptr %156, align 4, !tbaa !11
  %158 = call i32 @s2n_connection_set_read_fd(ptr noundef %155, i32 noundef %157)
  %159 = icmp sgt i32 %158, -1
  br i1 %159, label %161, label %160

160:                                              ; preds = %154
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %441

161:                                              ; preds = %154
  br label %162

162:                                              ; preds = %161
  br label %163

163:                                              ; preds = %162
  br label %164

164:                                              ; preds = %163
  %165 = load ptr, ptr %10, align 8, !tbaa !5
  %166 = load ptr, ptr %9, align 8, !tbaa !5
  %167 = call i32 @s2n_connection_set_config(ptr noundef %165, ptr noundef %166)
  %168 = icmp sgt i32 %167, -1
  br i1 %168, label %170, label %169

169:                                              ; preds = %164
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %441

170:                                              ; preds = %164
  br label %171

171:                                              ; preds = %170
  br label %172

172:                                              ; preds = %171
  br label %173

173:                                              ; preds = %172
  %174 = load ptr, ptr %10, align 8, !tbaa !5
  %175 = call i32 @s2n_connection_set_blinding(ptr noundef %174, i32 noundef 1)
  %176 = icmp sgt i32 %175, -1
  br i1 %176, label %178, label %177

177:                                              ; preds = %173
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %441

178:                                              ; preds = %173
  br label %179

179:                                              ; preds = %178
  br label %180

180:                                              ; preds = %179
  %181 = load ptr, ptr %10, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.s2n_connection, ptr %181, i32 0, i32 17
  store i64 0, ptr %182, align 8, !tbaa !18
  br label %183

183:                                              ; preds = %180
  %184 = load ptr, ptr %10, align 8, !tbaa !5
  %185 = call i32 @s2n_connection_set_write_fd(ptr noundef %184, i32 noundef -1)
  %186 = icmp sgt i32 %185, -1
  br i1 %186, label %188, label %187

187:                                              ; preds = %183
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %441

188:                                              ; preds = %183
  br label %189

189:                                              ; preds = %188
  br label %190

190:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %191 = call ptr @s2n_config_new()
  store ptr %191, ptr %11, align 8, !tbaa !5
  br label %192

192:                                              ; preds = %190
  %193 = load ptr, ptr %11, align 8, !tbaa !5
  %194 = icmp ne ptr %193, null
  br i1 %194, label %228, label %195

195:                                              ; preds = %192
  br label %196

196:                                              ; preds = %195
  br label %197

197:                                              ; preds = %196
  %198 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %199 = getelementptr inbounds %struct.s2n_debug_info, ptr %198, i32 0, i32 0
  store ptr @.str.2, ptr %199, align 8, !tbaa !15
  %200 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %201 = getelementptr inbounds %struct.s2n_debug_info, ptr %200, i32 0, i32 0
  %202 = load ptr, ptr %201, align 8, !tbaa !15
  %203 = getelementptr inbounds i8, ptr %202, i64 21
  %204 = call ptr @strrchr(ptr noundef %203, i32 noundef 47) #7
  %205 = icmp ne ptr %204, null
  br i1 %205, label %206, label %213

206:                                              ; preds = %197
  %207 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %208 = getelementptr inbounds %struct.s2n_debug_info, ptr %207, i32 0, i32 0
  %209 = load ptr, ptr %208, align 8, !tbaa !15
  %210 = getelementptr inbounds i8, ptr %209, i64 21
  %211 = call ptr @strrchr(ptr noundef %210, i32 noundef 47) #7
  %212 = getelementptr inbounds i8, ptr %211, i64 1
  br label %218

213:                                              ; preds = %197
  %214 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %215 = getelementptr inbounds %struct.s2n_debug_info, ptr %214, i32 0, i32 0
  %216 = load ptr, ptr %215, align 8, !tbaa !15
  %217 = getelementptr inbounds i8, ptr %216, i64 21
  br label %218

218:                                              ; preds = %213, %206
  %219 = phi ptr [ %212, %206 ], [ %217, %213 ]
  %220 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %221 = getelementptr inbounds %struct.s2n_debug_info, ptr %220, i32 0, i32 1
  store ptr %219, ptr %221, align 8, !tbaa !17
  %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()
  br label %224

224:                                              ; preds = %218
  br label %225

225:                                              ; preds = %224
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %440

226:                                              ; No predecessors!
  br label %227

227:                                              ; preds = %226
  br label %228

228:                                              ; preds = %227, %192
  br label %229

229:                                              ; preds = %228
  br label %230

230:                                              ; preds = %229
  %231 = load ptr, ptr %11, align 8, !tbaa !5
  %232 = call i32 @s2n_config_disable_x509_verification(ptr noundef %231)
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  br label %233

233:                                              ; preds = %230
  %234 = call ptr @s2n_connection_new(i32 noundef 1)
  store ptr %234, ptr %12, align 8, !tbaa !5
  %235 = icmp ne ptr %234, null
  br i1 %235, label %269, label %236

236:                                              ; preds = %233
  br label %237

237:                                              ; preds = %236
  br label %238

238:                                              ; preds = %237
  %239 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %240 = getelementptr inbounds %struct.s2n_debug_info, ptr %239, i32 0, i32 0
  store ptr @.str.3, ptr %240, align 8, !tbaa !15
  %241 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %242 = getelementptr inbounds %struct.s2n_debug_info, ptr %241, i32 0, i32 0
  %243 = load ptr, ptr %242, align 8, !tbaa !15
  %244 = getelementptr inbounds i8, ptr %243, i64 21
  %245 = call ptr @strrchr(ptr noundef %244, i32 noundef 47) #7
  %246 = icmp ne ptr %245, null
  br i1 %246, label %247, label %254

247:                                              ; preds = %238
  %248 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %249 = getelementptr inbounds %struct.s2n_debug_info, ptr %248, i32 0, i32 0
  %250 = load ptr, ptr %249, align 8, !tbaa !15
  %251 = getelementptr inbounds i8, ptr %250, i64 21
  %252 = call ptr @strrchr(ptr noundef %251, i32 noundef 47) #7
  %253 = getelementptr inbounds i8, ptr %252, i64 1
  br label %259

254:                                              ; preds = %238
  %255 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %256 = getelementptr inbounds %struct.s2n_debug_info, ptr %255, i32 0, i32 0
  %257 = load ptr, ptr %256, align 8, !tbaa !15
  %258 = getelementptr inbounds i8, ptr %257, i64 21
  br label %259

259:                                              ; preds = %254, %247
  %260 = phi ptr [ %253, %247 ], [ %258, %254 ]
  %261 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %262 = getelementptr inbounds %struct.s2n_debug_info, ptr %261, i32 0, i32 1
  store ptr %260, ptr %262, align 8, !tbaa !17
  %263 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %263, align 4, !tbaa !11
  %264 = call i32 @s2n_calculate_stacktrace()
  br label %265

265:                                              ; preds = %259
  br label %266

266:                                              ; preds = %265
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %439

267:                                              ; No predecessors!
  br label %268

268:                                              ; preds = %267
  br label %269

269:                                              ; preds = %268, %233
  br label %270

270:                                              ; preds = %269
  br label %271

271:                                              ; preds = %270
  br label %272

272:                                              ; preds = %271
  %273 = load ptr, ptr %12, align 8, !tbaa !5
  %274 = load ptr, ptr %11, align 8, !tbaa !5
  %275 = call i32 @s2n_connection_set_config(ptr noundef %273, ptr noundef %274)
  %276 = icmp sgt i32 %275, -1
  br i1 %276, label %278, label %277

277:                                              ; preds = %272
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %439

278:                                              ; preds = %272
  br label %279

279:                                              ; preds = %278
  br label %280

280:                                              ; preds = %279
  br label %281

281:                                              ; preds = %280
  %282 = load ptr, ptr %12, align 8, !tbaa !5
  %283 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 1
  %284 = load i32, ptr %283, align 4, !tbaa !11
  %285 = call i32 @s2n_connection_set_write_fd(ptr noundef %282, i32 noundef %284)
  %286 = icmp sgt i32 %285, -1
  br i1 %286, label %288, label %287

287:                                              ; preds = %281
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %439

288:                                              ; preds = %281
  br label %289

289:                                              ; preds = %288
  br label %290

290:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %291 = load ptr, ptr %12, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.s2n_connection, ptr %291, i32 0, i32 41
  store ptr %292, ptr %13, align 8, !tbaa !5
  br label %293

293:                                              ; preds = %290
  %294 = load ptr, ptr %13, align 8, !tbaa !5
  %295 = load ptr, ptr %4, align 8, !tbaa !5
  %296 = load i64, ptr %5, align 8, !tbaa !9
  %297 = trunc i64 %296 to i32
  %298 = call i32 @s2n_stuffer_write_bytes(ptr noundef %294, ptr noundef %295, i32 noundef %297)
  %299 = icmp sgt i32 %298, -1
  br i1 %299, label %301, label %300

300:                                              ; preds = %293
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %438

301:                                              ; preds = %293
  br label %302

302:                                              ; preds = %301
  br label %303

303:                                              ; preds = %302
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  br label %304

304:                                              ; preds = %303
  %305 = load ptr, ptr %12, align 8, !tbaa !5
  %306 = call i32 @s2n_flush(ptr noundef %305, ptr noundef %14)
  %307 = icmp sgt i32 %306, -1
  br i1 %307, label %309, label %308

308:                                              ; preds = %304
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %437

309:                                              ; preds = %304
  br label %310

310:                                              ; preds = %309
  br label %311

311:                                              ; preds = %310
  br label %312

312:                                              ; preds = %311
  %313 = load i32, ptr %14, align 4, !tbaa !11
  %314 = icmp eq i32 %313, 0
  br i1 %314, label %348, label %315

315:                                              ; preds = %312
  br label %316

316:                                              ; preds = %315
  br label %317

317:                                              ; preds = %316
  %318 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %319 = getelementptr inbounds %struct.s2n_debug_info, ptr %318, i32 0, i32 0
  store ptr @.str.4, ptr %319, align 8, !tbaa !15
  %320 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %321 = getelementptr inbounds %struct.s2n_debug_info, ptr %320, i32 0, i32 0
  %322 = load ptr, ptr %321, align 8, !tbaa !15
  %323 = getelementptr inbounds i8, ptr %322, i64 21
  %324 = call ptr @strrchr(ptr noundef %323, i32 noundef 47) #7
  %325 = icmp ne ptr %324, null
  br i1 %325, label %326, label %333

326:                                              ; preds = %317
  %327 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %328 = getelementptr inbounds %struct.s2n_debug_info, ptr %327, i32 0, i32 0
  %329 = load ptr, ptr %328, align 8, !tbaa !15
  %330 = getelementptr inbounds i8, ptr %329, i64 21
  %331 = call ptr @strrchr(ptr noundef %330, i32 noundef 47) #7
  %332 = getelementptr inbounds i8, ptr %331, i64 1
  br label %338

333:                                              ; preds = %317
  %334 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %335 = getelementptr inbounds %struct.s2n_debug_info, ptr %334, i32 0, i32 0
  %336 = load ptr, ptr %335, align 8, !tbaa !15
  %337 = getelementptr inbounds i8, ptr %336, i64 21
  br label %338

338:                                              ; preds = %333, %326
  %339 = phi ptr [ %332, %326 ], [ %337, %333 ]
  %340 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %341 = getelementptr inbounds %struct.s2n_debug_info, ptr %340, i32 0, i32 1
  store ptr %339, ptr %341, align 8, !tbaa !17
  %342 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653194, ptr %342, align 4, !tbaa !11
  %343 = call i32 @s2n_calculate_stacktrace()
  br label %344

344:                                              ; preds = %338
  br label %345

345:                                              ; preds = %344
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %437

346:                                              ; No predecessors!
  br label %347

347:                                              ; preds = %346
  br label %348

348:                                              ; preds = %347, %312
  br label %349

349:                                              ; preds = %348
  br label %350

350:                                              ; preds = %349
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  store i32 0, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  br label %351

351:                                              ; preds = %363, %350
  %352 = load ptr, ptr %10, align 8, !tbaa !5
  %353 = call i32 @s2n_negotiate(ptr noundef %352, ptr noundef %16)
  %354 = load i32, ptr %15, align 4, !tbaa !11
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr %15, align 4, !tbaa !11
  br label %356

356:                                              ; preds = %351
  %357 = load i32, ptr %16, align 4, !tbaa !11
  %358 = icmp ne i32 %357, 0
  br i1 %358, label %363, label %359

359:                                              ; preds = %356
  %360 = load i32, ptr %15, align 4, !tbaa !11
  %361 = load i32, ptr @MAX_NEGOTIATION_ATTEMPTS, align 4, !tbaa !11
  %362 = icmp slt i32 %360, %361
  br label %363

363:                                              ; preds = %359, %356
  %364 = phi i1 [ false, %356 ], [ %362, %359 ]
  br i1 %364, label %351, label %365, !llvm.loop !45

365:                                              ; preds = %363
  br label %366

366:                                              ; preds = %365
  %367 = load ptr, ptr %10, align 8, !tbaa !5
  %368 = call i32 @s2n_connection_wipe(ptr noundef %367)
  %369 = icmp sgt i32 %368, -1
  br i1 %369, label %371, label %370

370:                                              ; preds = %366
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %436

371:                                              ; preds = %366
  br label %372

372:                                              ; preds = %371
  br label %373

373:                                              ; preds = %372
  br label %374

374:                                              ; preds = %373
  %375 = load ptr, ptr %12, align 8, !tbaa !5
  %376 = call i32 @s2n_connection_wipe(ptr noundef %375)
  %377 = icmp sgt i32 %376, -1
  br i1 %377, label %379, label %378

378:                                              ; preds = %374
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %436

379:                                              ; preds = %374
  br label %380

380:                                              ; preds = %379
  br label %381

381:                                              ; preds = %380
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 0, ptr %17, align 4, !tbaa !11
  br label %382

382:                                              ; preds = %398, %381
  %383 = load i32, ptr %17, align 4, !tbaa !11
  %384 = icmp slt i32 %383, 2
  br i1 %384, label %386, label %385

385:                                              ; preds = %382
  store i32 67, ptr %7, align 4
  br label %401

386:                                              ; preds = %382
  br label %387

387:                                              ; preds = %386
  %388 = load i32, ptr %17, align 4, !tbaa !11
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 %389
  %391 = load i32, ptr %390, align 4, !tbaa !11
  %392 = call i32 @close(i32 noundef %391)
  %393 = icmp sgt i32 %392, -1
  br i1 %393, label %395, label %394

394:                                              ; preds = %387
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %401

395:                                              ; preds = %387
  br label %396

396:                                              ; preds = %395
  br label %397

397:                                              ; preds = %396
  br label %398

398:                                              ; preds = %397
  %399 = load i32, ptr %17, align 4, !tbaa !11
  %400 = add nsw i32 %399, 1
  store i32 %400, ptr %17, align 4, !tbaa !11
  br label %382, !llvm.loop !46

401:                                              ; preds = %394, %385
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  %402 = load i32, ptr %7, align 4
  switch i32 %402, label %436 [
    i32 67, label %403
  ]

403:                                              ; preds = %401
  br label %404

404:                                              ; preds = %403
  %405 = load ptr, ptr %9, align 8, !tbaa !5
  %406 = call i32 @s2n_config_free(ptr noundef %405)
  %407 = icmp sgt i32 %406, -1
  br i1 %407, label %409, label %408

408:                                              ; preds = %404
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %436

409:                                              ; preds = %404
  br label %410

410:                                              ; preds = %409
  br label %411

411:                                              ; preds = %410
  br label %412

412:                                              ; preds = %411
  %413 = load ptr, ptr %10, align 8, !tbaa !5
  %414 = call i32 @s2n_connection_free(ptr noundef %413)
  %415 = icmp sgt i32 %414, -1
  br i1 %415, label %417, label %416

416:                                              ; preds = %412
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %436

417:                                              ; preds = %412
  br label %418

418:                                              ; preds = %417
  br label %419

419:                                              ; preds = %418
  br label %420

420:                                              ; preds = %419
  %421 = load ptr, ptr %12, align 8, !tbaa !5
  %422 = call i32 @s2n_connection_free(ptr noundef %421)
  %423 = icmp sgt i32 %422, -1
  br i1 %423, label %425, label %424

424:                                              ; preds = %420
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %436

425:                                              ; preds = %420
  br label %426

426:                                              ; preds = %425
  br label %427

427:                                              ; preds = %426
  br label %428

428:                                              ; preds = %427
  %429 = load ptr, ptr %11, align 8, !tbaa !5
  %430 = call i32 @s2n_config_free(ptr noundef %429)
  %431 = icmp sgt i32 %430, -1
  br i1 %431, label %433, label %432

432:                                              ; preds = %428
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %436

433:                                              ; preds = %428
  br label %434

434:                                              ; preds = %433
  br label %435

435:                                              ; preds = %434
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %436

436:                                              ; preds = %435, %432, %424, %416, %408, %401, %378, %370
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %437

437:                                              ; preds = %436, %345, %308
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %438

438:                                              ; preds = %437, %300
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  br label %439

439:                                              ; preds = %438, %287, %277, %266
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  br label %440

440:                                              ; preds = %439, %225
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  br label %441

441:                                              ; preds = %440, %187, %177, %169, %160, %148
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  br label %442

442:                                              ; preds = %441, %111, %103, %93
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  br label %443

443:                                              ; preds = %442, %57, %28
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  br label %444

444:                                              ; preds = %443, %21
  %445 = load i32, ptr %3, align 4
  ret i32 %445
}

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

; Function Attrs: nounwind
declare i32 @pipe(ptr noundef) #2

declare i32 @fcntl(i32 noundef, i32 noundef, ...) #3

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

declare ptr @s2n_config_new() #3

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

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

declare i32 @s2n_calculate_stacktrace() #3

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

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

declare ptr @s2n_connection_new(i32 noundef) #3

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

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

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

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

declare i32 @s2n_config_disable_x509_verification(ptr noundef) #3

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

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

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

declare i32 @s2n_connection_wipe(ptr noundef) #3

declare i32 @close(i32 noundef) #3

declare i32 @s2n_config_free(ptr noundef) #3

declare i32 @s2n_connection_free(ptr noundef) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !6, i64 0}
!16 = !{!"s2n_debug_info", !6, i64 0, !6, i64 8}
!17 = !{!16, !6, i64 8}
!18 = !{!19, !10, i64 176}
!19 = !{!"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, !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, !12, i64 148, !12, i64 152, !20, i64 160, !10, i64 168, !10, 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, !21, i64 240, !6, i64 632, !6, i64 640, !22, i64 648, !29, i64 1144, !32, i64 1688, !6, i64 1752, !7, i64 1760, !12, i64 1764, !7, i64 1768, !35, i64 1776, !35, i64 1816, !35, i64 1856, !35, i64 1896, !12, i64 1936, !10, i64 1944, !7, i64 1952, !35, i64 1960, !7, i64 2000, !7, i64 2001, !7, i64 2002, !28, i64 2003, !36, i64 2004, !36, i64 2008, !37, i64 2016, !34, i64 2208, !12, i64 2212, !34, i64 2216, !10, i64 2224, !7, i64 2232, !10, i64 2240, !10, i64 2248, !10, i64 2256, !36, i64 2264, !36, i64 2268, !7, i64 2272, !7, i64 2528, !12, i64 2784, !27, i64 2792, !12, i64 2816, !27, i64 2824, !27, i64 2848, !27, i64 2872, !39, i64 2896, !41, i64 3704, !6, i64 3760, !6, i64 3768, !7, i64 3776, !12, i64 3780, !27, i64 3784, !12, i64 3808, !43, i64 3816, !7, i64 3848, !35, i64 3992, !27, i64 4032, !27, i64 4056, !28, i64 4080, !28, i64 4081, !28, i64 4082, !34, i64 4084, !34, i64 4086, !12, i64 4088, !12, i64 4092, !27, i64 4096, !12, i64 4120, !44, i64 4128, !36, i64 4176, !7, i64 4180, !7, i64 4181}
!20 = !{!"s2n_timer", !10, i64 0}
!21 = !{!"s2n_secrets", !7, i64 0, !12, i64 388}
!22 = !{!"s2n_kex_parameters", !23, i64 0, !24, i64 8, !7, i64 24, !24, i64 56, !25, i64 72, !25, i64 184, !7, i64 296, !26, i64 360, !27, i64 448, !27, i64 472}
!23 = !{!"s2n_dh_params", !6, i64 0}
!24 = !{!"s2n_ecc_evp_params", !6, i64 0, !6, i64 8}
!25 = !{!"s2n_kem_group_params", !6, i64 0, !26, i64 8, !24, i64 96}
!26 = !{!"s2n_kem_params", !6, i64 0, !27, i64 8, !27, i64 32, !27, i64 56, !28, i64 80}
!27 = !{!"s2n_blob", !6, i64 0, !12, i64 8, !12, i64 12, !12, i64 16}
!28 = !{!"_Bool", !7, i64 0}
!29 = !{!"s2n_handshake_parameters", !30, i64 0, !30, i64 48, !27, i64 96, !12, i64 120, !31, 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}
!30 = !{!"s2n_pkey", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!31 = !{!"s2n_sig_scheme_list", !7, i64 0, !7, i64 256}
!32 = !{!"s2n_psk_parameters", !12, i64 0, !33, i64 8, !34, i64 40, !34, i64 42, !6, i64 48, !12, i64 56}
!33 = !{!"s2n_array", !27, i64 0, !12, i64 24, !12, i64 28}
!34 = !{!"short", !7, i64 0}
!35 = !{!"s2n_stuffer", !27, i64 0, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 36, !12, i64 36}
!36 = !{!"", !12, i64 0}
!37 = !{!"s2n_handshake", !35, i64 0, !6, i64 40, !7, i64 48, !7, i64 56, !7, i64 104, !7, i64 152, !12, i64 156, !12, i64 160, !12, i64 164, !12, i64 168, !38, i64 176, !12, i64 184, !12, i64 184, !12, i64 184, !12, i64 184, !12, i64 188}
!38 = !{!"s2n_offered_early_data", !6, i64 0}
!39 = !{!"s2n_client_hello", !27, i64 0, !40, i64 24, !27, i64 728, !27, i64 752, !27, i64 776, !7, i64 800, !7, i64 801, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802, !12, i64 802}
!40 = !{!"", !7, i64 0, !27, i64 672, !34, i64 696}
!41 = !{!"s2n_x509_validator", !6, i64 0, !6, i64 8, !7, i64 16, !7, i64 17, !34, i64 18, !6, i64 24, !12, i64 32, !6, i64 40, !42, i64 48, !28, i64 52}
!42 = !{!"s2n_cert_validation_info", !12, i64 0, !12, i64 0}
!43 = !{!"s2n_ticket_fields", !27, i64 0, !12, i64 24}
!44 = !{!"s2n_post_handshake", !35, i64 0, !7, i64 40}
!45 = distinct !{!45, !14}
!46 = distinct !{!46, !14}


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

@.str = external hidden unnamed_addr constant [113 x i8], align 1
@_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
@certificate_chain = external hidden global [3248 x i8], align 16
@private_key = external hidden global [1680 x i8], align 16
@dhparams = external hidden global [425 x i8], align 16
@.str.1 = external hidden unnamed_addr constant [113 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [113 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [113 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [113 x i8], align 1
@MAX_NEGOTIATION_ATTEMPTS = external hidden local_unnamed_addr global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @s2n_fuzz_test(ptr noundef %0, i64 noundef %1) local_unnamed_addr #0 {
  %3 = alloca [2 x i32], align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = icmp ult i64 %1, 5
  br i1 %6, label %138, label %7

7:                                                ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #6
  %8 = call i32 @pipe(ptr noundef nonnull %3) #6
  %9 = icmp sgt i32 %8, -1
  br i1 %9, label %.preheader64.preheader, label %.loopexit65

.preheader64.preheader:                           ; preds = %7
  %10 = load i32, ptr %3, align 4, !tbaa !5
  %11 = call i32 (i32, i32, ...) @fcntl(i32 noundef %10, i32 noundef 3) #6
  %12 = or i32 %11, 2048
  %13 = call i32 (i32, i32, ...) @fcntl(i32 noundef %10, i32 noundef 4, i32 noundef %12) #6
  %14 = icmp sgt i32 %13, -1
  br i1 %14, label %.preheader64.1, label %.loopexit65

.preheader64.1:                                   ; preds = %.preheader64.preheader
  %15 = getelementptr inbounds i8, ptr %3, i64 4
  %16 = load i32, ptr %15, align 4, !tbaa !5
  %17 = call i32 (i32, i32, ...) @fcntl(i32 noundef %16, i32 noundef 3) #6
  %18 = or i32 %17, 2048
  %19 = call i32 (i32, i32, ...) @fcntl(i32 noundef %16, i32 noundef 4, i32 noundef %18) #6
  %20 = icmp sgt i32 %19, -1
  br i1 %20, label %.critedge, label %.loopexit65

.critedge:                                        ; preds = %.preheader64.1
  %21 = call ptr @s2n_config_new() #6
  %.not = icmp eq ptr %21, null
  br i1 %.not, label %22, label %30

22:                                               ; preds = %.critedge
  %23 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str, ptr %23, align 8, !tbaa !9
  %24 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str, i64 21), i32 noundef 47) #7
  %.not53 = icmp eq ptr %24, null
  %25 = getelementptr inbounds i8, ptr %24, i64 1
  %26 = select i1 %.not53, ptr getelementptr inbounds (i8, ptr @.str, i64 21), ptr %25
  %27 = getelementptr inbounds i8, ptr %23, i64 8
  store ptr %26, ptr %27, align 8, !tbaa !12
  %28 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %28, align 4, !tbaa !5
  %29 = call i32 @s2n_calculate_stacktrace() #6
  br label %.loopexit65

30:                                               ; preds = %.critedge
  %31 = call i32 @s2n_config_add_cert_chain_and_key(ptr noundef nonnull %21, ptr noundef nonnull @certificate_chain, ptr noundef nonnull @private_key) #6
  %32 = icmp sgt i32 %31, -1
  br i1 %32, label %33, label %.loopexit65

33:                                               ; preds = %30
  %34 = call i32 @s2n_config_add_dhparams(ptr noundef nonnull %21, ptr noundef nonnull @dhparams) #6
  %35 = icmp sgt i32 %34, -1
  br i1 %35, label %36, label %.loopexit65

36:                                               ; preds = %33
  %37 = call ptr @s2n_connection_new(i32 noundef 0) #6
  %.not54 = icmp eq ptr %37, null
  br i1 %.not54, label %38, label %46

38:                                               ; preds = %36
  %39 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.1, ptr %39, align 8, !tbaa !9
  %40 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.1, i64 21), i32 noundef 47) #7
  %.not55 = icmp eq ptr %40, null
  %41 = getelementptr inbounds i8, ptr %40, i64 1
  %42 = select i1 %.not55, ptr getelementptr inbounds (i8, ptr @.str.1, i64 21), ptr %41
  %43 = getelementptr inbounds i8, ptr %39, i64 8
  store ptr %42, ptr %43, align 8, !tbaa !12
  %44 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %44, align 4, !tbaa !5
  %45 = call i32 @s2n_calculate_stacktrace() #6
  br label %.loopexit65

46:                                               ; preds = %36
  %47 = load i32, ptr %3, align 4, !tbaa !5
  %48 = call i32 @s2n_connection_set_read_fd(ptr noundef nonnull %37, i32 noundef %47) #6
  %49 = icmp sgt i32 %48, -1
  br i1 %49, label %50, label %.loopexit65

50:                                               ; preds = %46
  %51 = call i32 @s2n_connection_set_config(ptr noundef nonnull %37, ptr noundef nonnull %21) #6
  %52 = icmp sgt i32 %51, -1
  br i1 %52, label %53, label %.loopexit65

53:                                               ; preds = %50
  %54 = call i32 @s2n_connection_set_blinding(ptr noundef nonnull %37, i32 noundef 1) #6
  %55 = icmp sgt i32 %54, -1
  br i1 %55, label %56, label %.loopexit65

56:                                               ; preds = %53
  %57 = getelementptr inbounds i8, ptr %37, i64 176
  store i64 0, ptr %57, align 8, !tbaa !13
  %58 = call i32 @s2n_connection_set_write_fd(ptr noundef nonnull %37, i32 noundef -1) #6
  %59 = icmp sgt i32 %58, -1
  br i1 %59, label %60, label %.loopexit65

60:                                               ; preds = %56
  %61 = call ptr @s2n_config_new() #6
  %.not56 = icmp eq ptr %61, null
  br i1 %.not56, label %62, label %70

62:                                               ; preds = %60
  %63 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.2, ptr %63, align 8, !tbaa !9
  %64 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.2, i64 21), i32 noundef 47) #7
  %.not57 = icmp eq ptr %64, null
  %65 = getelementptr inbounds i8, ptr %64, i64 1
  %66 = select i1 %.not57, ptr getelementptr inbounds (i8, ptr @.str.2, i64 21), ptr %65
  %67 = getelementptr inbounds i8, ptr %63, i64 8
  store ptr %66, ptr %67, align 8, !tbaa !12
  %68 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %68, align 4, !tbaa !5
  %69 = call i32 @s2n_calculate_stacktrace() #6
  br label %.loopexit65

70:                                               ; preds = %60
  %71 = call i32 @s2n_config_disable_x509_verification(ptr noundef nonnull %61) #6
  %72 = call ptr @s2n_connection_new(i32 noundef 1) #6
  %.not58 = icmp eq ptr %72, null
  br i1 %.not58, label %73, label %81

73:                                               ; preds = %70
  %74 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.3, ptr %74, align 8, !tbaa !9
  %75 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.3, i64 21), i32 noundef 47) #7
  %.not59 = icmp eq ptr %75, null
  %76 = getelementptr inbounds i8, ptr %75, i64 1
  %77 = select i1 %.not59, ptr getelementptr inbounds (i8, ptr @.str.3, i64 21), ptr %76
  %78 = getelementptr inbounds i8, ptr %74, i64 8
  store ptr %77, ptr %78, align 8, !tbaa !12
  %79 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %79, align 4, !tbaa !5
  %80 = call i32 @s2n_calculate_stacktrace() #6
  br label %.loopexit65

81:                                               ; preds = %70
  %82 = call i32 @s2n_connection_set_config(ptr noundef nonnull %72, ptr noundef nonnull %61) #6
  %83 = icmp sgt i32 %82, -1
  br i1 %83, label %84, label %.loopexit65

84:                                               ; preds = %81
  %85 = load i32, ptr %15, align 4, !tbaa !5
  %86 = call i32 @s2n_connection_set_write_fd(ptr noundef nonnull %72, i32 noundef %85) #6
  %87 = icmp sgt i32 %86, -1
  br i1 %87, label %88, label %.loopexit65

88:                                               ; preds = %84
  %89 = getelementptr inbounds i8, ptr %72, i64 1896
  %90 = trunc i64 %1 to i32
  %91 = call i32 @s2n_stuffer_write_bytes(ptr noundef nonnull %89, ptr noundef %0, i32 noundef %90) #6
  %92 = icmp sgt i32 %91, -1
  br i1 %92, label %93, label %.loopexit65

93:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #6
  %94 = call i32 @s2n_flush(ptr noundef nonnull %72, ptr noundef nonnull %4) #6
  %95 = icmp sgt i32 %94, -1
  br i1 %95, label %96, label %137

96:                                               ; preds = %93
  %97 = load i32, ptr %4, align 4, !tbaa !5
  %98 = icmp eq i32 %97, 0
  br i1 %98, label %107, label %99

99:                                               ; preds = %96
  %100 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.4, ptr %100, align 8, !tbaa !9
  %101 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.4, i64 21), i32 noundef 47) #7
  %.not60 = icmp eq ptr %101, null
  %102 = getelementptr inbounds i8, ptr %101, i64 1
  %103 = select i1 %.not60, ptr getelementptr inbounds (i8, ptr @.str.4, i64 21), ptr %102
  %104 = getelementptr inbounds i8, ptr %100, i64 8
  store ptr %103, ptr %104, align 8, !tbaa !12
  %105 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653194, ptr %105, align 4, !tbaa !5
  %106 = call i32 @s2n_calculate_stacktrace() #6
  br label %137

107:                                              ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #6
  br label %108

108:                                              ; preds = %108, %107
  %.038 = phi i32 [ 0, %107 ], [ %110, %108 ]
  %109 = call i32 @s2n_negotiate(ptr noundef nonnull %37, ptr noundef nonnull %5) #6
  %110 = add nuw nsw i32 %.038, 1
  %111 = load i32, ptr %5, align 4, !tbaa !5
  %.not61 = icmp eq i32 %111, 0
  %112 = load i32, ptr @MAX_NEGOTIATION_ATTEMPTS, align 4
  %113 = icmp slt i32 %110, %112
  %114 = select i1 %.not61, i1 %113, i1 false
  br i1 %114, label %108, label %115, !llvm.loop !41

115:                                              ; preds = %108
  %116 = call i32 @s2n_connection_wipe(ptr noundef nonnull %37) #6
  %117 = icmp sgt i32 %116, -1
  br i1 %117, label %118, label %.loopexit

118:                                              ; preds = %115
  %119 = call i32 @s2n_connection_wipe(ptr noundef nonnull %72) #6
  %120 = icmp sgt i32 %119, -1
  br i1 %120, label %.preheader.preheader, label %.loopexit

.preheader.preheader:                             ; preds = %118
  %121 = load i32, ptr %3, align 4, !tbaa !5
  %122 = call i32 @close(i32 noundef %121) #6
  %123 = icmp sgt i32 %122, -1
  br i1 %123, label %.preheader.1, label %.loopexit

.preheader.1:                                     ; preds = %.preheader.preheader
  %124 = load i32, ptr %15, align 4, !tbaa !5
  %125 = call i32 @close(i32 noundef %124) #6
  %126 = icmp sgt i32 %125, -1
  br i1 %126, label %.critedge63, label %.loopexit

.critedge63:                                      ; preds = %.preheader.1
  %127 = call i32 @s2n_config_free(ptr noundef nonnull %21) #6
  %128 = icmp sgt i32 %127, -1
  br i1 %128, label %129, label %.loopexit

129:                                              ; preds = %.critedge63
  %130 = call i32 @s2n_connection_free(ptr noundef nonnull %37) #6
  %131 = icmp sgt i32 %130, -1
  br i1 %131, label %132, label %.loopexit

132:                                              ; preds = %129
  %133 = call i32 @s2n_connection_free(ptr noundef nonnull %72) #6
  %134 = icmp sgt i32 %133, -1
  br i1 %134, label %135, label %.loopexit

135:                                              ; preds = %132
  %136 = call i32 @s2n_config_free(ptr noundef nonnull %61) #6
  %.lobit = ashr i32 %136, 31
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader.preheader, %.preheader.1, %135, %132, %129, %.critedge63, %118, %115
  %.2 = phi i32 [ -1, %115 ], [ -1, %118 ], [ -1, %.critedge63 ], [ -1, %129 ], [ -1, %132 ], [ %.lobit, %135 ], [ -1, %.preheader.1 ], [ -1, %.preheader.preheader ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  br label %137

137:                                              ; preds = %93, %.loopexit, %99
  %.3 = phi i32 [ %.2, %.loopexit ], [ -1, %99 ], [ -1, %93 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  br label %.loopexit65

.loopexit65:                                      ; preds = %.preheader64.preheader, %.preheader64.1, %22, %30, %33, %62, %137, %88, %84, %81, %73, %56, %53, %50, %46, %38, %7
  %.9 = phi i32 [ -1, %7 ], [ -1, %22 ], [ -1, %30 ], [ -1, %33 ], [ -1, %38 ], [ -1, %46 ], [ -1, %50 ], [ -1, %53 ], [ -1, %56 ], [ -1, %62 ], [ -1, %73 ], [ -1, %81 ], [ -1, %84 ], [ %.3, %137 ], [ -1, %88 ], [ -1, %.preheader64.1 ], [ -1, %.preheader64.preheader ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #6
  br label %138

138:                                              ; preds = %2, %.loopexit65
  %.10 = phi i32 [ %.9, %.loopexit65 ], [ 0, %2 ]
  ret i32 %.10
}

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

; Function Attrs: nounwind
declare i32 @pipe(ptr noundef) local_unnamed_addr #2

declare i32 @fcntl(i32 noundef, i32 noundef, ...) local_unnamed_addr #3

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

declare ptr @s2n_config_new() local_unnamed_addr #3

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

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

declare i32 @s2n_calculate_stacktrace() local_unnamed_addr #3

declare i32 @s2n_config_add_cert_chain_and_key(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @s2n_config_add_dhparams(ptr noundef, ptr noundef) local_unnamed_addr #3

declare ptr @s2n_connection_new(i32 noundef) local_unnamed_addr #3

declare i32 @s2n_connection_set_read_fd(ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @s2n_connection_set_config(ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @s2n_connection_set_blinding(ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @s2n_connection_set_write_fd(ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @s2n_config_disable_x509_verification(ptr noundef) local_unnamed_addr #3

declare i32 @s2n_stuffer_write_bytes(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @s2n_flush(ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @s2n_negotiate(ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @s2n_connection_wipe(ptr noundef) local_unnamed_addr #3

declare i32 @close(i32 noundef) local_unnamed_addr #3

declare i32 @s2n_config_free(ptr noundef) local_unnamed_addr #3

declare i32 @s2n_connection_free(ptr noundef) local_unnamed_addr #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"s2n_debug_info", !11, i64 0, !11, i64 8}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = !{!14, !16, i64 176}
!14 = !{!"s2n_connection", !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 0, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 1, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !6, i64 2, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !7, i64 80, !7, i64 102, !7, i64 124, !6, i64 148, !6, i64 152, !15, i64 160, !16, i64 168, !16, 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, !11, i64 224, !11, i64 232, !17, i64 240, !11, i64 632, !11, i64 640, !18, i64 648, !25, i64 1144, !28, i64 1688, !11, i64 1752, !7, i64 1760, !6, i64 1764, !7, i64 1768, !31, i64 1776, !31, i64 1816, !31, i64 1856, !31, i64 1896, !6, i64 1936, !16, i64 1944, !7, i64 1952, !31, i64 1960, !7, i64 2000, !7, i64 2001, !7, i64 2002, !24, i64 2003, !32, i64 2004, !32, i64 2008, !33, i64 2016, !30, i64 2208, !6, i64 2212, !30, i64 2216, !16, i64 2224, !7, i64 2232, !16, i64 2240, !16, i64 2248, !16, i64 2256, !32, i64 2264, !32, i64 2268, !7, i64 2272, !7, i64 2528, !6, i64 2784, !23, i64 2792, !6, i64 2816, !23, i64 2824, !23, i64 2848, !23, i64 2872, !35, i64 2896, !37, i64 3704, !11, i64 3760, !11, i64 3768, !7, i64 3776, !6, i64 3780, !23, i64 3784, !6, i64 3808, !39, i64 3816, !7, 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, !6, i64 4088, !6, i64 4092, !23, i64 4096, !6, i64 4120, !40, i64 4128, !32, i64 4176, !7, i64 4180, !7, i64 4181}
!15 = !{!"s2n_timer", !16, i64 0}
!16 = !{!"long", !7, i64 0}
!17 = !{!"s2n_secrets", !7, i64 0, !6, i64 388}
!18 = !{!"s2n_kex_parameters", !19, i64 0, !20, i64 8, !7, i64 24, !20, i64 56, !21, i64 72, !21, i64 184, !7, i64 296, !22, i64 360, !23, i64 448, !23, i64 472}
!19 = !{!"s2n_dh_params", !11, i64 0}
!20 = !{!"s2n_ecc_evp_params", !11, i64 0, !11, i64 8}
!21 = !{!"s2n_kem_group_params", !11, i64 0, !22, i64 8, !20, i64 96}
!22 = !{!"s2n_kem_params", !11, i64 0, !23, i64 8, !23, i64 32, !23, i64 56, !24, i64 80}
!23 = !{!"s2n_blob", !11, i64 0, !6, i64 8, !6, i64 12, !6, i64 16}
!24 = !{!"_Bool", !7, i64 0}
!25 = !{!"s2n_handshake_parameters", !26, i64 0, !26, i64 48, !23, i64 96, !6, i64 120, !27, i64 124, !11, i64 384, !11, i64 392, !11, i64 400, !7, i64 408, !7, i64 440, !7, i64 472, !7, i64 473, !7, i64 474, !7, i64 506}
!26 = !{!"s2n_pkey", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40}
!27 = !{!"s2n_sig_scheme_list", !7, i64 0, !7, i64 256}
!28 = !{!"s2n_psk_parameters", !6, i64 0, !29, i64 8, !30, i64 40, !30, i64 42, !11, i64 48, !6, i64 56}
!29 = !{!"s2n_array", !23, i64 0, !6, i64 24, !6, i64 28}
!30 = !{!"short", !7, i64 0}
!31 = !{!"s2n_stuffer", !23, i64 0, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 36, !6, i64 36}
!32 = !{!"", !6, i64 0}
!33 = !{!"s2n_handshake", !31, i64 0, !11, i64 40, !7, i64 48, !7, i64 56, !7, i64 104, !7, i64 152, !6, i64 156, !6, i64 160, !6, i64 164, !6, i64 168, !34, i64 176, !6, i64 184, !6, i64 184, !6, i64 184, !6, i64 184, !6, i64 188}
!34 = !{!"s2n_offered_early_data", !11, i64 0}
!35 = !{!"s2n_client_hello", !23, i64 0, !36, i64 24, !23, i64 728, !23, i64 752, !23, i64 776, !7, i64 800, !7, i64 801, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802, !6, i64 802}
!36 = !{!"", !7, i64 0, !23, i64 672, !30, i64 696}
!37 = !{!"s2n_x509_validator", !11, i64 0, !11, i64 8, !7, i64 16, !7, i64 17, !30, i64 18, !11, i64 24, !6, i64 32, !11, i64 40, !38, i64 48, !24, i64 52}
!38 = !{!"s2n_cert_validation_info", !6, i64 0, !6, i64 0}
!39 = !{!"s2n_ticket_fields", !23, i64 0, !6, i64 24}
!40 = !{!"s2n_post_handshake", !31, i64 0, !7, i64 40}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,SROAPass,SimplifyCFGPass