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

; 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_result = type { i32 }
%struct.s2n_stuffer = type { %struct.s2n_blob, i32, i32, i32, i8 }
%struct.s2n_blob = type { ptr, i32, i32, i8 }
%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 }
%struct.s2n_crypto_parameters = type { ptr, %struct.s2n_session_key, %struct.s2n_session_key, %struct.s2n_hmac_state, %struct.s2n_hmac_state, [16 x i8], [16 x i8], [8 x i8], [8 x i8] }
%struct.s2n_session_key = type { ptr }
%struct.s2n_hmac_state = type { i32, i16, i32, i16, i8, %struct.s2n_hash_state, %struct.s2n_hash_state, %struct.s2n_hash_state, %struct.s2n_hash_state, [128 x i8], [64 x i8] }
%struct.s2n_hash_state = type { ptr, i32, i8, i64, %union.anon.0 }
%union.anon.0 = type { %struct.s2n_hash_evp_digest }
%struct.s2n_hash_evp_digest = type { %struct.s2n_evp_digest, %struct.s2n_evp_digest }
%struct.s2n_evp_digest = type { ptr, ptr }
%struct.s2n_cipher_suite = type { i8, ptr, ptr, [2 x i8], ptr, i32, ptr, [2 x ptr], i8, ptr, ptr, i32, i8 }
%struct.s2n_record_algorithm = type { ptr, i32, i32, i64 }
%struct.s2n_cipher = type { i32, %union.anon.1, i8, ptr, ptr, ptr, ptr, ptr, ptr }
%union.anon.1 = type { %struct.s2n_composite_cipher }
%struct.s2n_composite_cipher = type { i8, i8, i8, ptr, ptr, ptr, ptr }
%struct.s2n_aead_cipher = type { i8, i8, i8, ptr, ptr }
%struct.s2n_cbc_cipher = type { i8, i8, ptr, ptr }
%struct.s2n_key_material = type { [160 x i8], %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob }

@.str = external hidden unnamed_addr constant [83 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
@.str.1 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [84 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @s2n_key_material_init(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca %struct.s2n_result, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i8, align 1
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca %struct.s2n_stuffer, align 8
  %12 = alloca %struct.s2n_blob, align 8
  %13 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  br label %14

14:                                               ; preds = %2
  %15 = load ptr, ptr %4, align 8, !tbaa !5
  %16 = icmp ne ptr %15, null
  br i1 %16, label %49, label %17

17:                                               ; preds = %14
  br label %18

18:                                               ; preds = %17
  br label %19

19:                                               ; preds = %18
  %20 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %21 = getelementptr inbounds %struct.s2n_debug_info, ptr %20, i32 0, i32 0
  store ptr @.str, ptr %21, align 8, !tbaa !9
  %22 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %23 = getelementptr inbounds %struct.s2n_debug_info, ptr %22, i32 0, i32 0
  %24 = load ptr, ptr %23, align 8, !tbaa !9
  %25 = getelementptr inbounds i8, ptr %24, i64 21
  %26 = call ptr @strrchr(ptr noundef %25, i32 noundef 47) #6
  %27 = icmp ne ptr %26, null
  br i1 %27, label %28, label %35

28:                                               ; preds = %19
  %29 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %30 = getelementptr inbounds %struct.s2n_debug_info, ptr %29, i32 0, i32 0
  %31 = load ptr, ptr %30, align 8, !tbaa !9
  %32 = getelementptr inbounds i8, ptr %31, i64 21
  %33 = call ptr @strrchr(ptr noundef %32, i32 noundef 47) #6
  %34 = getelementptr inbounds i8, ptr %33, i64 1
  br label %40

35:                                               ; preds = %19
  %36 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %37 = getelementptr inbounds %struct.s2n_debug_info, ptr %36, i32 0, i32 0
  %38 = load ptr, ptr %37, align 8, !tbaa !9
  %39 = getelementptr inbounds i8, ptr %38, i64 21
  br label %40

40:                                               ; preds = %35, %28
  %41 = phi ptr [ %34, %28 ], [ %39, %35 ]
  %42 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %43 = getelementptr inbounds %struct.s2n_debug_info, ptr %42, i32 0, i32 1
  store ptr %41, ptr %43, align 8, !tbaa !11
  %44 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %44, align 4, !tbaa !12
  %45 = call i32 @s2n_calculate_stacktrace()
  br label %46

46:                                               ; preds = %40
  %47 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %47, align 4, !tbaa !14
  br label %679

48:                                               ; No predecessors!
  br label %49

49:                                               ; preds = %48, %14
  br label %50

50:                                               ; preds = %49
  br label %51

51:                                               ; preds = %50
  %52 = load ptr, ptr %5, align 8, !tbaa !5
  %53 = icmp ne ptr %52, null
  br i1 %53, label %86, 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.1, 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) #6
  %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) #6
  %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
  %84 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %84, align 4, !tbaa !14
  br label %679

85:                                               ; No predecessors!
  br label %86

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

87:                                               ; preds = %86
  br label %88

88:                                               ; preds = %87
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.s2n_connection, ptr %89, i32 0, i32 27
  %91 = load ptr, ptr %90, align 8, !tbaa !16
  %92 = icmp ne ptr %91, null
  br i1 %92, label %125, label %93

93:                                               ; preds = %88
  br label %94

94:                                               ; preds = %93
  br label %95

95:                                               ; preds = %94
  %96 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %97 = getelementptr inbounds %struct.s2n_debug_info, ptr %96, i32 0, i32 0
  store ptr @.str.2, ptr %97, align 8, !tbaa !9
  %98 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %99 = getelementptr inbounds %struct.s2n_debug_info, ptr %98, i32 0, i32 0
  %100 = load ptr, ptr %99, align 8, !tbaa !9
  %101 = getelementptr inbounds i8, ptr %100, i64 21
  %102 = call ptr @strrchr(ptr noundef %101, i32 noundef 47) #6
  %103 = icmp ne ptr %102, null
  br i1 %103, label %104, label %111

104:                                              ; preds = %95
  %105 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %106 = getelementptr inbounds %struct.s2n_debug_info, ptr %105, i32 0, i32 0
  %107 = load ptr, ptr %106, align 8, !tbaa !9
  %108 = getelementptr inbounds i8, ptr %107, i64 21
  %109 = call ptr @strrchr(ptr noundef %108, i32 noundef 47) #6
  %110 = getelementptr inbounds i8, ptr %109, i64 1
  br label %116

111:                                              ; preds = %95
  %112 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %113 = getelementptr inbounds %struct.s2n_debug_info, ptr %112, i32 0, i32 0
  %114 = load ptr, ptr %113, align 8, !tbaa !9
  %115 = getelementptr inbounds i8, ptr %114, i64 21
  br label %116

116:                                              ; preds = %111, %104
  %117 = phi ptr [ %110, %104 ], [ %115, %111 ]
  %118 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %119 = getelementptr inbounds %struct.s2n_debug_info, ptr %118, i32 0, i32 1
  store ptr %117, ptr %119, align 8, !tbaa !11
  %120 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %120, align 4, !tbaa !12
  %121 = call i32 @s2n_calculate_stacktrace()
  br label %122

122:                                              ; preds = %116
  %123 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %123, align 4, !tbaa !14
  br label %679

124:                                              ; No predecessors!
  br label %125

125:                                              ; preds = %124, %88
  br label %126

126:                                              ; preds = %125
  br label %127

127:                                              ; preds = %126
  %128 = load ptr, ptr %5, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.s2n_connection, ptr %128, i32 0, i32 27
  %130 = load ptr, ptr %129, align 8, !tbaa !16
  %131 = getelementptr inbounds %struct.s2n_crypto_parameters, ptr %130, i32 0, i32 0
  %132 = load ptr, ptr %131, align 8, !tbaa !43
  %133 = icmp ne ptr %132, null
  br i1 %133, label %166, label %134

134:                                              ; preds = %127
  br label %135

135:                                              ; preds = %134
  br label %136

136:                                              ; preds = %135
  %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
  store ptr @.str.3, ptr %138, align 8, !tbaa !9
  %139 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %140 = getelementptr inbounds %struct.s2n_debug_info, ptr %139, i32 0, i32 0
  %141 = load ptr, ptr %140, align 8, !tbaa !9
  %142 = getelementptr inbounds i8, ptr %141, i64 21
  %143 = call ptr @strrchr(ptr noundef %142, i32 noundef 47) #6
  %144 = icmp ne ptr %143, null
  br i1 %144, label %145, label %152

145:                                              ; preds = %136
  %146 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %147 = getelementptr inbounds %struct.s2n_debug_info, ptr %146, i32 0, i32 0
  %148 = load ptr, ptr %147, align 8, !tbaa !9
  %149 = getelementptr inbounds i8, ptr %148, i64 21
  %150 = call ptr @strrchr(ptr noundef %149, i32 noundef 47) #6
  %151 = getelementptr inbounds i8, ptr %150, i64 1
  br label %157

152:                                              ; preds = %136
  %153 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %154 = getelementptr inbounds %struct.s2n_debug_info, ptr %153, i32 0, i32 0
  %155 = load ptr, ptr %154, align 8, !tbaa !9
  %156 = getelementptr inbounds i8, ptr %155, i64 21
  br label %157

157:                                              ; preds = %152, %145
  %158 = phi ptr [ %151, %145 ], [ %156, %152 ]
  %159 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %160 = getelementptr inbounds %struct.s2n_debug_info, ptr %159, i32 0, i32 1
  store ptr %158, ptr %160, align 8, !tbaa !11
  %161 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %161, align 4, !tbaa !12
  %162 = call i32 @s2n_calculate_stacktrace()
  br label %163

163:                                              ; preds = %157
  %164 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %164, align 4, !tbaa !14
  br label %679

165:                                              ; No predecessors!
  br label %166

166:                                              ; preds = %165, %127
  br label %167

167:                                              ; preds = %166
  br label %168

168:                                              ; preds = %167
  %169 = load ptr, ptr %5, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.s2n_connection, ptr %169, i32 0, i32 27
  %171 = load ptr, ptr %170, align 8, !tbaa !16
  %172 = getelementptr inbounds %struct.s2n_crypto_parameters, ptr %171, i32 0, i32 0
  %173 = load ptr, ptr %172, align 8, !tbaa !43
  %174 = getelementptr inbounds %struct.s2n_cipher_suite, ptr %173, i32 0, i32 6
  %175 = load ptr, ptr %174, align 8, !tbaa !48
  %176 = icmp ne ptr %175, null
  br i1 %176, label %209, label %177

177:                                              ; preds = %168
  br label %178

178:                                              ; preds = %177
  br label %179

179:                                              ; preds = %178
  %180 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %181 = getelementptr inbounds %struct.s2n_debug_info, ptr %180, i32 0, i32 0
  store ptr @.str.4, ptr %181, align 8, !tbaa !9
  %182 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %183 = getelementptr inbounds %struct.s2n_debug_info, ptr %182, i32 0, i32 0
  %184 = load ptr, ptr %183, align 8, !tbaa !9
  %185 = getelementptr inbounds i8, ptr %184, i64 21
  %186 = call ptr @strrchr(ptr noundef %185, i32 noundef 47) #6
  %187 = icmp ne ptr %186, null
  br i1 %187, label %188, label %195

188:                                              ; preds = %179
  %189 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %190 = getelementptr inbounds %struct.s2n_debug_info, ptr %189, i32 0, i32 0
  %191 = load ptr, ptr %190, align 8, !tbaa !9
  %192 = getelementptr inbounds i8, ptr %191, i64 21
  %193 = call ptr @strrchr(ptr noundef %192, i32 noundef 47) #6
  %194 = getelementptr inbounds i8, ptr %193, i64 1
  br label %200

195:                                              ; preds = %179
  %196 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %197 = getelementptr inbounds %struct.s2n_debug_info, ptr %196, i32 0, i32 0
  %198 = load ptr, ptr %197, align 8, !tbaa !9
  %199 = getelementptr inbounds i8, ptr %198, i64 21
  br label %200

200:                                              ; preds = %195, %188
  %201 = phi ptr [ %194, %188 ], [ %199, %195 ]
  %202 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %203 = getelementptr inbounds %struct.s2n_debug_info, ptr %202, i32 0, i32 1
  store ptr %201, ptr %203, align 8, !tbaa !11
  %204 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %204, align 4, !tbaa !12
  %205 = call i32 @s2n_calculate_stacktrace()
  br label %206

206:                                              ; preds = %200
  %207 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %207, align 4, !tbaa !14
  br label %679

208:                                              ; No predecessors!
  br label %209

209:                                              ; preds = %208, %168
  br label %210

210:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  %211 = load ptr, ptr %5, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.s2n_connection, ptr %211, i32 0, i32 27
  %213 = load ptr, ptr %212, align 8, !tbaa !16
  %214 = getelementptr inbounds %struct.s2n_crypto_parameters, ptr %213, i32 0, i32 0
  %215 = load ptr, ptr %214, align 8, !tbaa !43
  %216 = getelementptr inbounds %struct.s2n_cipher_suite, ptr %215, i32 0, i32 6
  %217 = load ptr, ptr %216, align 8, !tbaa !48
  %218 = getelementptr inbounds %struct.s2n_record_algorithm, ptr %217, i32 0, i32 0
  %219 = load ptr, ptr %218, align 8, !tbaa !50
  store ptr %219, ptr %6, align 8, !tbaa !5
  br label %220

220:                                              ; preds = %210
  %221 = load ptr, ptr %6, align 8, !tbaa !5
  %222 = icmp ne ptr %221, null
  br i1 %222, label %257, label %223

223:                                              ; preds = %220
  br label %224

224:                                              ; preds = %223
  br label %225

225:                                              ; preds = %224
  %226 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %227 = getelementptr inbounds %struct.s2n_debug_info, ptr %226, i32 0, i32 0
  store ptr @.str.5, ptr %227, align 8, !tbaa !9
  %228 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %229 = getelementptr inbounds %struct.s2n_debug_info, ptr %228, i32 0, i32 0
  %230 = load ptr, ptr %229, align 8, !tbaa !9
  %231 = getelementptr inbounds i8, ptr %230, i64 21
  %232 = call ptr @strrchr(ptr noundef %231, i32 noundef 47) #6
  %233 = icmp ne ptr %232, null
  br i1 %233, label %234, label %241

234:                                              ; preds = %225
  %235 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %236 = getelementptr inbounds %struct.s2n_debug_info, ptr %235, i32 0, i32 0
  %237 = load ptr, ptr %236, align 8, !tbaa !9
  %238 = getelementptr inbounds i8, ptr %237, i64 21
  %239 = call ptr @strrchr(ptr noundef %238, i32 noundef 47) #6
  %240 = getelementptr inbounds i8, ptr %239, i64 1
  br label %246

241:                                              ; preds = %225
  %242 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %243 = getelementptr inbounds %struct.s2n_debug_info, ptr %242, i32 0, i32 0
  %244 = load ptr, ptr %243, align 8, !tbaa !9
  %245 = getelementptr inbounds i8, ptr %244, i64 21
  br label %246

246:                                              ; preds = %241, %234
  %247 = phi ptr [ %240, %234 ], [ %245, %241 ]
  %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 1
  store ptr %247, ptr %249, align 8, !tbaa !11
  %250 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %250, align 4, !tbaa !12
  %251 = call i32 @s2n_calculate_stacktrace()
  br label %252

252:                                              ; preds = %246
  br label %253

253:                                              ; preds = %252
  %254 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %254, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %678

255:                                              ; No predecessors!
  br label %256

256:                                              ; preds = %255
  br label %257

257:                                              ; preds = %256, %220
  br label %258

258:                                              ; preds = %257
  br label %259

259:                                              ; preds = %258
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #7
  store i8 0, ptr %8, align 1, !tbaa !52
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  store i32 0, ptr %9, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !12
  %260 = load ptr, ptr %6, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.s2n_cipher, ptr %260, i32 0, i32 0
  %262 = load i32, ptr %261, align 8, !tbaa !53
  %263 = icmp eq i32 %262, 3
  br i1 %263, label %264, label %269

264:                                              ; preds = %259
  %265 = load ptr, ptr %6, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.s2n_cipher, ptr %265, i32 0, i32 1
  %267 = getelementptr inbounds %struct.s2n_composite_cipher, ptr %266, i32 0, i32 2
  %268 = load i8, ptr %267, align 2, !tbaa !52
  store i8 %268, ptr %8, align 1, !tbaa !52
  br label %287

269:                                              ; preds = %259
  br label %270

270:                                              ; preds = %269
  %271 = load ptr, ptr %5, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.s2n_connection, ptr %271, i32 0, i32 27
  %273 = load ptr, ptr %272, align 8, !tbaa !16
  %274 = getelementptr inbounds %struct.s2n_crypto_parameters, ptr %273, i32 0, i32 0
  %275 = load ptr, ptr %274, align 8, !tbaa !43
  %276 = getelementptr inbounds %struct.s2n_cipher_suite, ptr %275, i32 0, i32 6
  %277 = load ptr, ptr %276, align 8, !tbaa !48
  %278 = getelementptr inbounds %struct.s2n_record_algorithm, ptr %277, i32 0, i32 1
  %279 = load i32, ptr %278, align 8, !tbaa !55
  %280 = call i32 @s2n_hmac_digest_size(i32 noundef %279, ptr noundef %8)
  %281 = icmp sgt i32 %280, -1
  br i1 %281, label %284, label %282

282:                                              ; preds = %270
  %283 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %283, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %677

284:                                              ; preds = %270
  br label %285

285:                                              ; preds = %284
  br label %286

286:                                              ; preds = %285
  br label %287

287:                                              ; preds = %286, %264
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.s2n_cipher, ptr %288, i32 0, i32 2
  %290 = load i8, ptr %289, align 8, !tbaa !56
  %291 = zext i8 %290 to i32
  store i32 %291, ptr %9, align 4, !tbaa !12
  %292 = load ptr, ptr %5, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.s2n_connection, ptr %292, i32 0, i32 23
  %294 = load i8, ptr %293, align 4, !tbaa !57
  %295 = zext i8 %294 to i32
  %296 = icmp sle i32 %295, 31
  br i1 %296, label %302, label %297

297:                                              ; preds = %287
  %298 = load ptr, ptr %6, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.s2n_cipher, ptr %298, i32 0, i32 0
  %300 = load i32, ptr %299, align 8, !tbaa !53
  %301 = icmp eq i32 %300, 2
  br i1 %301, label %302, label %326

302:                                              ; preds = %297, %287
  %303 = load ptr, ptr %6, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.s2n_cipher, ptr %303, i32 0, i32 0
  %305 = load i32, ptr %304, align 8, !tbaa !53
  switch i32 %305, label %324 [
    i32 2, label %306
    i32 1, label %312
    i32 3, label %318
  ]

306:                                              ; preds = %302
  %307 = load ptr, ptr %6, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.s2n_cipher, ptr %307, i32 0, i32 1
  %309 = getelementptr inbounds %struct.s2n_aead_cipher, ptr %308, i32 0, i32 0
  %310 = load i8, ptr %309, align 8, !tbaa !52
  %311 = zext i8 %310 to i32
  store i32 %311, ptr %10, align 4, !tbaa !12
  br label %325

312:                                              ; preds = %302
  %313 = load ptr, ptr %6, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.s2n_cipher, ptr %313, i32 0, i32 1
  %315 = getelementptr inbounds %struct.s2n_cbc_cipher, ptr %314, i32 0, i32 0
  %316 = load i8, ptr %315, align 8, !tbaa !52
  %317 = zext i8 %316 to i32
  store i32 %317, ptr %10, align 4, !tbaa !12
  br label %325

318:                                              ; preds = %302
  %319 = load ptr, ptr %6, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.s2n_cipher, ptr %319, i32 0, i32 1
  %321 = getelementptr inbounds %struct.s2n_composite_cipher, ptr %320, i32 0, i32 0
  %322 = load i8, ptr %321, align 8, !tbaa !52
  %323 = zext i8 %322 to i32
  store i32 %323, ptr %10, align 4, !tbaa !12
  br label %325

324:                                              ; preds = %302
  br label %325

325:                                              ; preds = %324, %318, %312, %306
  br label %326

326:                                              ; preds = %325, %297
  call void @llvm.lifetime.start.p0(i64 40, ptr %11) #7
  call void @llvm.memset.p0.i64(ptr align 8 %11, i8 0, i64 40, i1 false)
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #7
  call void @llvm.memset.p0.i64(ptr align 8 %12, i8 0, i64 24, i1 false)
  br label %327

327:                                              ; preds = %326
  %328 = load ptr, ptr %4, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.s2n_key_material, ptr %328, i32 0, i32 0
  %330 = getelementptr inbounds [160 x i8], ptr %329, i64 0, i64 0
  %331 = call i32 @s2n_blob_init(ptr noundef %12, ptr noundef %330, i32 noundef 160)
  %332 = icmp sgt i32 %331, -1
  br i1 %332, label %335, label %333

333:                                              ; preds = %327
  %334 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %334, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %676

335:                                              ; preds = %327
  br label %336

336:                                              ; preds = %335
  br label %337

337:                                              ; preds = %336
  br label %338

338:                                              ; preds = %337
  %339 = call i32 @s2n_stuffer_init_written(ptr noundef %11, ptr noundef %12)
  %340 = icmp sgt i32 %339, -1
  br i1 %340, label %343, label %341

341:                                              ; preds = %338
  %342 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %342, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %676

343:                                              ; preds = %338
  br label %344

344:                                              ; preds = %343
  br label %345

345:                                              ; preds = %344
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  store ptr null, ptr %13, align 8, !tbaa !5
  %346 = load i8, ptr %8, align 1, !tbaa !52
  %347 = zext i8 %346 to i32
  %348 = call ptr @s2n_stuffer_raw_read(ptr noundef %11, i32 noundef %347)
  store ptr %348, ptr %13, align 8, !tbaa !5
  br label %349

349:                                              ; preds = %345
  %350 = load ptr, ptr %13, align 8, !tbaa !5
  %351 = icmp ne ptr %350, null
  br i1 %351, label %386, label %352

352:                                              ; preds = %349
  br label %353

353:                                              ; preds = %352
  br label %354

354:                                              ; preds = %353
  %355 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %356 = getelementptr inbounds %struct.s2n_debug_info, ptr %355, i32 0, i32 0
  store ptr @.str.6, ptr %356, align 8, !tbaa !9
  %357 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %358 = getelementptr inbounds %struct.s2n_debug_info, ptr %357, i32 0, i32 0
  %359 = load ptr, ptr %358, align 8, !tbaa !9
  %360 = getelementptr inbounds i8, ptr %359, i64 21
  %361 = call ptr @strrchr(ptr noundef %360, i32 noundef 47) #6
  %362 = icmp ne ptr %361, null
  br i1 %362, label %363, label %370

363:                                              ; preds = %354
  %364 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %365 = getelementptr inbounds %struct.s2n_debug_info, ptr %364, i32 0, i32 0
  %366 = load ptr, ptr %365, align 8, !tbaa !9
  %367 = getelementptr inbounds i8, ptr %366, i64 21
  %368 = call ptr @strrchr(ptr noundef %367, i32 noundef 47) #6
  %369 = getelementptr inbounds i8, ptr %368, i64 1
  br label %375

370:                                              ; preds = %354
  %371 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %372 = getelementptr inbounds %struct.s2n_debug_info, ptr %371, i32 0, i32 0
  %373 = load ptr, ptr %372, align 8, !tbaa !9
  %374 = getelementptr inbounds i8, ptr %373, i64 21
  br label %375

375:                                              ; preds = %370, %363
  %376 = phi ptr [ %369, %363 ], [ %374, %370 ]
  %377 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %378 = getelementptr inbounds %struct.s2n_debug_info, ptr %377, i32 0, i32 1
  store ptr %376, ptr %378, align 8, !tbaa !11
  %379 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %379, align 4, !tbaa !12
  %380 = call i32 @s2n_calculate_stacktrace()
  br label %381

381:                                              ; preds = %375
  br label %382

382:                                              ; preds = %381
  %383 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %383, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

384:                                              ; No predecessors!
  br label %385

385:                                              ; preds = %384
  br label %386

386:                                              ; preds = %385, %349
  br label %387

387:                                              ; preds = %386
  br label %388

388:                                              ; preds = %387
  br label %389

389:                                              ; preds = %388
  %390 = load ptr, ptr %4, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.s2n_key_material, ptr %390, i32 0, i32 1
  %392 = load ptr, ptr %13, align 8, !tbaa !5
  %393 = load i8, ptr %8, align 1, !tbaa !52
  %394 = zext i8 %393 to i32
  %395 = call i32 @s2n_blob_init(ptr noundef %391, ptr noundef %392, i32 noundef %394)
  %396 = icmp sgt i32 %395, -1
  br i1 %396, label %399, label %397

397:                                              ; preds = %389
  %398 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %398, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

399:                                              ; preds = %389
  br label %400

400:                                              ; preds = %399
  br label %401

401:                                              ; preds = %400
  %402 = load i8, ptr %8, align 1, !tbaa !52
  %403 = zext i8 %402 to i32
  %404 = call ptr @s2n_stuffer_raw_read(ptr noundef %11, i32 noundef %403)
  store ptr %404, ptr %13, align 8, !tbaa !5
  br label %405

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

408:                                              ; preds = %405
  br label %409

409:                                              ; preds = %408
  br label %410

410:                                              ; preds = %409
  %411 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %412 = getelementptr inbounds %struct.s2n_debug_info, ptr %411, i32 0, i32 0
  store ptr @.str.7, ptr %412, align 8, !tbaa !9
  %413 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %414 = getelementptr inbounds %struct.s2n_debug_info, ptr %413, i32 0, i32 0
  %415 = load ptr, ptr %414, align 8, !tbaa !9
  %416 = getelementptr inbounds i8, ptr %415, i64 21
  %417 = call ptr @strrchr(ptr noundef %416, i32 noundef 47) #6
  %418 = icmp ne ptr %417, null
  br i1 %418, label %419, label %426

419:                                              ; preds = %410
  %420 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %421 = getelementptr inbounds %struct.s2n_debug_info, ptr %420, i32 0, i32 0
  %422 = load ptr, ptr %421, align 8, !tbaa !9
  %423 = getelementptr inbounds i8, ptr %422, i64 21
  %424 = call ptr @strrchr(ptr noundef %423, i32 noundef 47) #6
  %425 = getelementptr inbounds i8, ptr %424, i64 1
  br label %431

426:                                              ; preds = %410
  %427 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %428 = getelementptr inbounds %struct.s2n_debug_info, ptr %427, i32 0, i32 0
  %429 = load ptr, ptr %428, align 8, !tbaa !9
  %430 = getelementptr inbounds i8, ptr %429, i64 21
  br label %431

431:                                              ; preds = %426, %419
  %432 = phi ptr [ %425, %419 ], [ %430, %426 ]
  %433 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %434 = getelementptr inbounds %struct.s2n_debug_info, ptr %433, i32 0, i32 1
  store ptr %432, ptr %434, align 8, !tbaa !11
  %435 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %435, align 4, !tbaa !12
  %436 = call i32 @s2n_calculate_stacktrace()
  br label %437

437:                                              ; preds = %431
  br label %438

438:                                              ; preds = %437
  %439 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %439, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

440:                                              ; No predecessors!
  br label %441

441:                                              ; preds = %440
  br label %442

442:                                              ; preds = %441, %405
  br label %443

443:                                              ; preds = %442
  br label %444

444:                                              ; preds = %443
  br label %445

445:                                              ; preds = %444
  %446 = load ptr, ptr %4, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.s2n_key_material, ptr %446, i32 0, i32 2
  %448 = load ptr, ptr %13, align 8, !tbaa !5
  %449 = load i8, ptr %8, align 1, !tbaa !52
  %450 = zext i8 %449 to i32
  %451 = call i32 @s2n_blob_init(ptr noundef %447, ptr noundef %448, i32 noundef %450)
  %452 = icmp sgt i32 %451, -1
  br i1 %452, label %455, label %453

453:                                              ; preds = %445
  %454 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %454, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

455:                                              ; preds = %445
  br label %456

456:                                              ; preds = %455
  br label %457

457:                                              ; preds = %456
  %458 = load i32, ptr %9, align 4, !tbaa !12
  %459 = call ptr @s2n_stuffer_raw_read(ptr noundef %11, i32 noundef %458)
  store ptr %459, ptr %13, align 8, !tbaa !5
  br label %460

460:                                              ; preds = %457
  %461 = load ptr, ptr %13, align 8, !tbaa !5
  %462 = icmp ne ptr %461, null
  br i1 %462, label %497, label %463

463:                                              ; preds = %460
  br label %464

464:                                              ; preds = %463
  br label %465

465:                                              ; preds = %464
  %466 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %467 = getelementptr inbounds %struct.s2n_debug_info, ptr %466, i32 0, i32 0
  store ptr @.str.8, ptr %467, align 8, !tbaa !9
  %468 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %469 = getelementptr inbounds %struct.s2n_debug_info, ptr %468, i32 0, i32 0
  %470 = load ptr, ptr %469, align 8, !tbaa !9
  %471 = getelementptr inbounds i8, ptr %470, i64 21
  %472 = call ptr @strrchr(ptr noundef %471, i32 noundef 47) #6
  %473 = icmp ne ptr %472, null
  br i1 %473, label %474, label %481

474:                                              ; preds = %465
  %475 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %476 = getelementptr inbounds %struct.s2n_debug_info, ptr %475, i32 0, i32 0
  %477 = load ptr, ptr %476, align 8, !tbaa !9
  %478 = getelementptr inbounds i8, ptr %477, i64 21
  %479 = call ptr @strrchr(ptr noundef %478, i32 noundef 47) #6
  %480 = getelementptr inbounds i8, ptr %479, i64 1
  br label %486

481:                                              ; preds = %465
  %482 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %483 = getelementptr inbounds %struct.s2n_debug_info, ptr %482, i32 0, i32 0
  %484 = load ptr, ptr %483, align 8, !tbaa !9
  %485 = getelementptr inbounds i8, ptr %484, i64 21
  br label %486

486:                                              ; preds = %481, %474
  %487 = phi ptr [ %480, %474 ], [ %485, %481 ]
  %488 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %489 = getelementptr inbounds %struct.s2n_debug_info, ptr %488, i32 0, i32 1
  store ptr %487, ptr %489, align 8, !tbaa !11
  %490 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %490, align 4, !tbaa !12
  %491 = call i32 @s2n_calculate_stacktrace()
  br label %492

492:                                              ; preds = %486
  br label %493

493:                                              ; preds = %492
  %494 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %494, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

495:                                              ; No predecessors!
  br label %496

496:                                              ; preds = %495
  br label %497

497:                                              ; preds = %496, %460
  br label %498

498:                                              ; preds = %497
  br label %499

499:                                              ; preds = %498
  br label %500

500:                                              ; preds = %499
  %501 = load ptr, ptr %4, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.s2n_key_material, ptr %501, i32 0, i32 3
  %503 = load ptr, ptr %13, align 8, !tbaa !5
  %504 = load i32, ptr %9, align 4, !tbaa !12
  %505 = call i32 @s2n_blob_init(ptr noundef %502, ptr noundef %503, i32 noundef %504)
  %506 = icmp sgt i32 %505, -1
  br i1 %506, label %509, label %507

507:                                              ; preds = %500
  %508 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %508, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

509:                                              ; preds = %500
  br label %510

510:                                              ; preds = %509
  br label %511

511:                                              ; preds = %510
  %512 = load i32, ptr %9, align 4, !tbaa !12
  %513 = call ptr @s2n_stuffer_raw_read(ptr noundef %11, i32 noundef %512)
  store ptr %513, ptr %13, align 8, !tbaa !5
  br label %514

514:                                              ; preds = %511
  %515 = load ptr, ptr %13, align 8, !tbaa !5
  %516 = icmp ne ptr %515, null
  br i1 %516, label %551, label %517

517:                                              ; preds = %514
  br label %518

518:                                              ; preds = %517
  br label %519

519:                                              ; preds = %518
  %520 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %521 = getelementptr inbounds %struct.s2n_debug_info, ptr %520, i32 0, i32 0
  store ptr @.str.9, ptr %521, align 8, !tbaa !9
  %522 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %523 = getelementptr inbounds %struct.s2n_debug_info, ptr %522, i32 0, i32 0
  %524 = load ptr, ptr %523, align 8, !tbaa !9
  %525 = getelementptr inbounds i8, ptr %524, i64 21
  %526 = call ptr @strrchr(ptr noundef %525, i32 noundef 47) #6
  %527 = icmp ne ptr %526, null
  br i1 %527, label %528, label %535

528:                                              ; preds = %519
  %529 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %530 = getelementptr inbounds %struct.s2n_debug_info, ptr %529, i32 0, i32 0
  %531 = load ptr, ptr %530, align 8, !tbaa !9
  %532 = getelementptr inbounds i8, ptr %531, i64 21
  %533 = call ptr @strrchr(ptr noundef %532, i32 noundef 47) #6
  %534 = getelementptr inbounds i8, ptr %533, i64 1
  br label %540

535:                                              ; preds = %519
  %536 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %537 = getelementptr inbounds %struct.s2n_debug_info, ptr %536, i32 0, i32 0
  %538 = load ptr, ptr %537, align 8, !tbaa !9
  %539 = getelementptr inbounds i8, ptr %538, i64 21
  br label %540

540:                                              ; preds = %535, %528
  %541 = phi ptr [ %534, %528 ], [ %539, %535 ]
  %542 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %543 = getelementptr inbounds %struct.s2n_debug_info, ptr %542, i32 0, i32 1
  store ptr %541, ptr %543, align 8, !tbaa !11
  %544 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %544, align 4, !tbaa !12
  %545 = call i32 @s2n_calculate_stacktrace()
  br label %546

546:                                              ; preds = %540
  br label %547

547:                                              ; preds = %546
  %548 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %548, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

549:                                              ; No predecessors!
  br label %550

550:                                              ; preds = %549
  br label %551

551:                                              ; preds = %550, %514
  br label %552

552:                                              ; preds = %551
  br label %553

553:                                              ; preds = %552
  br label %554

554:                                              ; preds = %553
  %555 = load ptr, ptr %4, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.s2n_key_material, ptr %555, i32 0, i32 4
  %557 = load ptr, ptr %13, align 8, !tbaa !5
  %558 = load i32, ptr %9, align 4, !tbaa !12
  %559 = call i32 @s2n_blob_init(ptr noundef %556, ptr noundef %557, i32 noundef %558)
  %560 = icmp sgt i32 %559, -1
  br i1 %560, label %563, label %561

561:                                              ; preds = %554
  %562 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %562, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

563:                                              ; preds = %554
  br label %564

564:                                              ; preds = %563
  br label %565

565:                                              ; preds = %564
  %566 = load i32, ptr %10, align 4, !tbaa !12
  %567 = call ptr @s2n_stuffer_raw_read(ptr noundef %11, i32 noundef %566)
  store ptr %567, ptr %13, align 8, !tbaa !5
  br label %568

568:                                              ; preds = %565
  %569 = load ptr, ptr %13, align 8, !tbaa !5
  %570 = icmp ne ptr %569, null
  br i1 %570, label %605, label %571

571:                                              ; preds = %568
  br label %572

572:                                              ; preds = %571
  br label %573

573:                                              ; preds = %572
  %574 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %575 = getelementptr inbounds %struct.s2n_debug_info, ptr %574, i32 0, i32 0
  store ptr @.str.10, ptr %575, align 8, !tbaa !9
  %576 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %577 = getelementptr inbounds %struct.s2n_debug_info, ptr %576, i32 0, i32 0
  %578 = load ptr, ptr %577, align 8, !tbaa !9
  %579 = getelementptr inbounds i8, ptr %578, i64 21
  %580 = call ptr @strrchr(ptr noundef %579, i32 noundef 47) #6
  %581 = icmp ne ptr %580, null
  br i1 %581, label %582, label %589

582:                                              ; preds = %573
  %583 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %584 = getelementptr inbounds %struct.s2n_debug_info, ptr %583, i32 0, i32 0
  %585 = load ptr, ptr %584, align 8, !tbaa !9
  %586 = getelementptr inbounds i8, ptr %585, i64 21
  %587 = call ptr @strrchr(ptr noundef %586, i32 noundef 47) #6
  %588 = getelementptr inbounds i8, ptr %587, i64 1
  br label %594

589:                                              ; preds = %573
  %590 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %591 = getelementptr inbounds %struct.s2n_debug_info, ptr %590, i32 0, i32 0
  %592 = load ptr, ptr %591, align 8, !tbaa !9
  %593 = getelementptr inbounds i8, ptr %592, i64 21
  br label %594

594:                                              ; preds = %589, %582
  %595 = phi ptr [ %588, %582 ], [ %593, %589 ]
  %596 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %597 = getelementptr inbounds %struct.s2n_debug_info, ptr %596, i32 0, i32 1
  store ptr %595, ptr %597, align 8, !tbaa !11
  %598 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %598, align 4, !tbaa !12
  %599 = call i32 @s2n_calculate_stacktrace()
  br label %600

600:                                              ; preds = %594
  br label %601

601:                                              ; preds = %600
  %602 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %602, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

603:                                              ; No predecessors!
  br label %604

604:                                              ; preds = %603
  br label %605

605:                                              ; preds = %604, %568
  br label %606

606:                                              ; preds = %605
  br label %607

607:                                              ; preds = %606
  br label %608

608:                                              ; preds = %607
  %609 = load ptr, ptr %4, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.s2n_key_material, ptr %609, i32 0, i32 5
  %611 = load ptr, ptr %13, align 8, !tbaa !5
  %612 = load i32, ptr %10, align 4, !tbaa !12
  %613 = call i32 @s2n_blob_init(ptr noundef %610, ptr noundef %611, i32 noundef %612)
  %614 = icmp sgt i32 %613, -1
  br i1 %614, label %617, label %615

615:                                              ; preds = %608
  %616 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %616, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

617:                                              ; preds = %608
  br label %618

618:                                              ; preds = %617
  br label %619

619:                                              ; preds = %618
  %620 = load i32, ptr %10, align 4, !tbaa !12
  %621 = call ptr @s2n_stuffer_raw_read(ptr noundef %11, i32 noundef %620)
  store ptr %621, ptr %13, align 8, !tbaa !5
  br label %622

622:                                              ; preds = %619
  %623 = load ptr, ptr %13, align 8, !tbaa !5
  %624 = icmp ne ptr %623, null
  br i1 %624, label %659, label %625

625:                                              ; preds = %622
  br label %626

626:                                              ; preds = %625
  br label %627

627:                                              ; preds = %626
  %628 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %629 = getelementptr inbounds %struct.s2n_debug_info, ptr %628, i32 0, i32 0
  store ptr @.str.11, ptr %629, align 8, !tbaa !9
  %630 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %631 = getelementptr inbounds %struct.s2n_debug_info, ptr %630, i32 0, i32 0
  %632 = load ptr, ptr %631, align 8, !tbaa !9
  %633 = getelementptr inbounds i8, ptr %632, i64 21
  %634 = call ptr @strrchr(ptr noundef %633, i32 noundef 47) #6
  %635 = icmp ne ptr %634, null
  br i1 %635, label %636, label %643

636:                                              ; preds = %627
  %637 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %638 = getelementptr inbounds %struct.s2n_debug_info, ptr %637, i32 0, i32 0
  %639 = load ptr, ptr %638, align 8, !tbaa !9
  %640 = getelementptr inbounds i8, ptr %639, i64 21
  %641 = call ptr @strrchr(ptr noundef %640, i32 noundef 47) #6
  %642 = getelementptr inbounds i8, ptr %641, i64 1
  br label %648

643:                                              ; preds = %627
  %644 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %645 = getelementptr inbounds %struct.s2n_debug_info, ptr %644, i32 0, i32 0
  %646 = load ptr, ptr %645, align 8, !tbaa !9
  %647 = getelementptr inbounds i8, ptr %646, i64 21
  br label %648

648:                                              ; preds = %643, %636
  %649 = phi ptr [ %642, %636 ], [ %647, %643 ]
  %650 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %651 = getelementptr inbounds %struct.s2n_debug_info, ptr %650, i32 0, i32 1
  store ptr %649, ptr %651, align 8, !tbaa !11
  %652 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %652, align 4, !tbaa !12
  %653 = call i32 @s2n_calculate_stacktrace()
  br label %654

654:                                              ; preds = %648
  br label %655

655:                                              ; preds = %654
  %656 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %656, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

657:                                              ; No predecessors!
  br label %658

658:                                              ; preds = %657
  br label %659

659:                                              ; preds = %658, %622
  br label %660

660:                                              ; preds = %659
  br label %661

661:                                              ; preds = %660
  br label %662

662:                                              ; preds = %661
  %663 = load ptr, ptr %4, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.s2n_key_material, ptr %663, i32 0, i32 6
  %665 = load ptr, ptr %13, align 8, !tbaa !5
  %666 = load i32, ptr %10, align 4, !tbaa !12
  %667 = call i32 @s2n_blob_init(ptr noundef %664, ptr noundef %665, i32 noundef %666)
  %668 = icmp sgt i32 %667, -1
  br i1 %668, label %671, label %669

669:                                              ; preds = %662
  %670 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 -1, ptr %670, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

671:                                              ; preds = %662
  br label %672

672:                                              ; preds = %671
  br label %673

673:                                              ; preds = %672
  %674 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  store i32 0, ptr %674, align 4, !tbaa !14
  store i32 1, ptr %7, align 4
  br label %675

675:                                              ; preds = %673, %669, %655, %615, %601, %561, %547, %507, %493, %453, %438, %397, %382
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  br label %676

676:                                              ; preds = %675, %341, %333
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %11) #7
  br label %677

677:                                              ; preds = %676, %282
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #7
  br label %678

678:                                              ; preds = %677, %253
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  br label %679

679:                                              ; preds = %678, %206, %163, %122, %83, %46
  %680 = getelementptr inbounds %struct.s2n_result, ptr %3, i32 0, i32 0
  %681 = load i32, ptr %680, align 4
  ret i32 %681
}

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

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

declare i32 @s2n_calculate_stacktrace() #3

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

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

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

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

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

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

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

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 speculatable willreturn memory(none) }
attributes #2 = { 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 #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 willreturn memory(argmem: readwrite) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nounwind willreturn memory(read) }
attributes #7 = { 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 0}
!15 = !{!"", !13, i64 0}
!16 = !{!17, !6, i64 232}
!17 = !{!"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, !18, i64 160, !19, i64 168, !19, 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, !20, i64 240, !6, i64 632, !6, i64 640, !21, i64 648, !28, i64 1144, !31, i64 1688, !6, i64 1752, !7, i64 1760, !13, i64 1764, !7, i64 1768, !34, i64 1776, !34, i64 1816, !34, i64 1856, !34, i64 1896, !13, i64 1936, !19, i64 1944, !7, i64 1952, !34, i64 1960, !7, i64 2000, !7, i64 2001, !7, i64 2002, !27, i64 2003, !15, i64 2004, !15, i64 2008, !35, i64 2016, !33, i64 2208, !13, i64 2212, !33, i64 2216, !19, i64 2224, !7, i64 2232, !19, i64 2240, !19, i64 2248, !19, i64 2256, !15, i64 2264, !15, i64 2268, !7, i64 2272, !7, i64 2528, !13, i64 2784, !26, i64 2792, !13, i64 2816, !26, i64 2824, !26, i64 2848, !26, i64 2872, !37, i64 2896, !39, i64 3704, !6, i64 3760, !6, i64 3768, !7, i64 3776, !13, i64 3780, !26, i64 3784, !13, i64 3808, !41, i64 3816, !7, i64 3848, !34, i64 3992, !26, i64 4032, !26, i64 4056, !27, i64 4080, !27, i64 4081, !27, i64 4082, !33, i64 4084, !33, i64 4086, !13, i64 4088, !13, i64 4092, !26, i64 4096, !13, i64 4120, !42, i64 4128, !15, i64 4176, !7, i64 4180, !7, i64 4181}
!18 = !{!"s2n_timer", !19, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = !{!"s2n_secrets", !7, i64 0, !13, i64 388}
!21 = !{!"s2n_kex_parameters", !22, i64 0, !23, i64 8, !7, i64 24, !23, i64 56, !24, i64 72, !24, i64 184, !7, i64 296, !25, i64 360, !26, i64 448, !26, i64 472}
!22 = !{!"s2n_dh_params", !6, i64 0}
!23 = !{!"s2n_ecc_evp_params", !6, i64 0, !6, i64 8}
!24 = !{!"s2n_kem_group_params", !6, i64 0, !25, i64 8, !23, i64 96}
!25 = !{!"s2n_kem_params", !6, i64 0, !26, i64 8, !26, i64 32, !26, i64 56, !27, i64 80}
!26 = !{!"s2n_blob", !6, i64 0, !13, i64 8, !13, i64 12, !13, i64 16}
!27 = !{!"_Bool", !7, i64 0}
!28 = !{!"s2n_handshake_parameters", !29, i64 0, !29, i64 48, !26, i64 96, !13, i64 120, !30, 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}
!29 = !{!"s2n_pkey", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!30 = !{!"s2n_sig_scheme_list", !7, i64 0, !7, i64 256}
!31 = !{!"s2n_psk_parameters", !13, i64 0, !32, i64 8, !33, i64 40, !33, i64 42, !6, i64 48, !13, i64 56}
!32 = !{!"s2n_array", !26, i64 0, !13, i64 24, !13, i64 28}
!33 = !{!"short", !7, i64 0}
!34 = !{!"s2n_stuffer", !26, i64 0, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 36, !13, i64 36}
!35 = !{!"s2n_handshake", !34, 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, !36, i64 176, !13, i64 184, !13, i64 184, !13, i64 184, !13, i64 184, !13, i64 188}
!36 = !{!"s2n_offered_early_data", !6, i64 0}
!37 = !{!"s2n_client_hello", !26, i64 0, !38, i64 24, !26, i64 728, !26, i64 752, !26, 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}
!38 = !{!"", !7, i64 0, !26, i64 672, !33, i64 696}
!39 = !{!"s2n_x509_validator", !6, i64 0, !6, i64 8, !7, i64 16, !7, i64 17, !33, i64 18, !6, i64 24, !13, i64 32, !6, i64 40, !40, i64 48, !27, i64 52}
!40 = !{!"s2n_cert_validation_info", !13, i64 0, !13, i64 0}
!41 = !{!"s2n_ticket_fields", !26, i64 0, !13, i64 24}
!42 = !{!"s2n_post_handshake", !34, i64 0, !7, i64 40}
!43 = !{!44, !6, i64 0}
!44 = !{!"s2n_crypto_parameters", !6, i64 0, !45, i64 8, !45, i64 16, !46, i64 24, !46, i64 456, !7, i64 888, !7, i64 904, !7, i64 920, !7, i64 928}
!45 = !{!"s2n_session_key", !6, i64 0}
!46 = !{!"s2n_hmac_state", !13, i64 0, !33, i64 4, !13, i64 8, !33, i64 12, !7, i64 14, !47, i64 16, !47, i64 72, !47, i64 128, !47, i64 184, !7, i64 240, !7, i64 368}
!47 = !{!"s2n_hash_state", !6, i64 0, !13, i64 8, !7, i64 12, !19, i64 16, !7, i64 24}
!48 = !{!49, !6, i64 48}
!49 = !{!"s2n_cipher_suite", !13, i64 0, !6, i64 8, !6, i64 16, !7, i64 24, !6, i64 32, !13, i64 40, !6, i64 48, !7, i64 56, !7, i64 72, !6, i64 80, !6, i64 88, !13, i64 96, !7, i64 100}
!50 = !{!51, !6, i64 0}
!51 = !{!"s2n_record_algorithm", !6, i64 0, !13, i64 8, !13, i64 12, !19, i64 16}
!52 = !{!7, !7, i64 0}
!53 = !{!54, !13, i64 0}
!54 = !{!"s2n_cipher", !13, i64 0, !7, i64 8, !7, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96}
!55 = !{!51, !13, i64 8}
!56 = !{!54, !7, i64 48}
!57 = !{!17, !7, i64 220}


; 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_stuffer = type { %struct.s2n_blob, i32, i32, i32, i8 }
%struct.s2n_blob = type { ptr, i32, i32, i8 }

@.str = external hidden unnamed_addr constant [83 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
@.str.1 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [84 x i8], align 1

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

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

14:                                               ; preds = %2
  %.not68 = icmp eq ptr %1, null
  br i1 %.not68, label %15, label %23

15:                                               ; preds = %14
  %16 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.1, ptr %16, align 8, !tbaa !5
  %17 = tail call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.1, i64 21), i32 noundef 47) #6
  %.not69 = icmp eq ptr %17, null
  %18 = getelementptr inbounds i8, ptr %17, i64 1
  %19 = select i1 %.not69, ptr getelementptr inbounds (i8, ptr @.str.1, i64 21), ptr %18
  %20 = getelementptr inbounds i8, ptr %16, i64 8
  store ptr %19, ptr %20, align 8, !tbaa !10
  %21 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %21, align 4, !tbaa !11
  %22 = tail call i32 @s2n_calculate_stacktrace() #7
  br label %188

23:                                               ; preds = %14
  %24 = getelementptr inbounds i8, ptr %1, i64 232
  %25 = load ptr, ptr %24, align 8, !tbaa !13
  %.not70 = icmp eq ptr %25, null
  br i1 %.not70, label %26, label %34

26:                                               ; preds = %23
  %27 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.2, ptr %27, align 8, !tbaa !5
  %28 = tail call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.2, i64 21), i32 noundef 47) #6
  %.not71 = icmp eq ptr %28, null
  %29 = getelementptr inbounds i8, ptr %28, i64 1
  %30 = select i1 %.not71, ptr getelementptr inbounds (i8, ptr @.str.2, i64 21), ptr %29
  %31 = getelementptr inbounds i8, ptr %27, i64 8
  store ptr %30, ptr %31, align 8, !tbaa !10
  %32 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %32, align 4, !tbaa !11
  %33 = tail call i32 @s2n_calculate_stacktrace() #7
  br label %188

34:                                               ; preds = %23
  %35 = load ptr, ptr %25, align 8, !tbaa !41
  %.not72 = icmp eq ptr %35, null
  br i1 %.not72, label %36, label %44

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

44:                                               ; preds = %34
  %45 = getelementptr inbounds i8, ptr %35, i64 48
  %46 = load ptr, ptr %45, align 8, !tbaa !46
  %.not74 = icmp eq ptr %46, null
  br i1 %.not74, label %47, label %55

47:                                               ; preds = %44
  %48 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.4, ptr %48, align 8, !tbaa !5
  %49 = tail call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.4, i64 21), i32 noundef 47) #6
  %.not75 = icmp eq ptr %49, null
  %50 = getelementptr inbounds i8, ptr %49, i64 1
  %51 = select i1 %.not75, ptr getelementptr inbounds (i8, ptr @.str.4, i64 21), ptr %50
  %52 = getelementptr inbounds i8, ptr %48, i64 8
  store ptr %51, ptr %52, align 8, !tbaa !10
  %53 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %53, align 4, !tbaa !11
  %54 = tail call i32 @s2n_calculate_stacktrace() #7
  br label %188

55:                                               ; preds = %44
  %56 = load ptr, ptr %46, align 8, !tbaa !48
  %.not76 = icmp eq ptr %56, null
  br i1 %.not76, label %57, label %65

57:                                               ; preds = %55
  %58 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.5, ptr %58, align 8, !tbaa !5
  %59 = tail call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.5, i64 21), i32 noundef 47) #6
  %.not77 = icmp eq ptr %59, null
  %60 = getelementptr inbounds i8, ptr %59, i64 1
  %61 = select i1 %.not77, ptr getelementptr inbounds (i8, ptr @.str.5, i64 21), ptr %60
  %62 = getelementptr inbounds i8, ptr %58, i64 8
  store ptr %61, ptr %62, align 8, !tbaa !10
  %63 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %63, align 4, !tbaa !11
  %64 = tail call i32 @s2n_calculate_stacktrace() #7
  br label %188

65:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #7
  store i8 0, ptr %3, align 1, !tbaa !50
  %66 = load i32, ptr %56, align 8, !tbaa !51
  %67 = icmp eq i32 %66, 3
  br i1 %67, label %68, label %71

68:                                               ; preds = %65
  %69 = getelementptr inbounds i8, ptr %56, i64 10
  %70 = load i8, ptr %69, align 2, !tbaa !50
  store i8 %70, ptr %3, align 1, !tbaa !50
  br label %76

71:                                               ; preds = %65
  %72 = getelementptr inbounds i8, ptr %46, i64 8
  %73 = load i32, ptr %72, align 8, !tbaa !53
  %74 = call i32 @s2n_hmac_digest_size(i32 noundef %73, ptr noundef nonnull %3) #7
  %75 = icmp sgt i32 %74, -1
  br i1 %75, label %76, label %187

76:                                               ; preds = %71, %68
  %77 = getelementptr inbounds i8, ptr %56, i64 48
  %78 = load i8, ptr %77, align 8, !tbaa !54
  %79 = zext i8 %78 to i32
  %80 = getelementptr inbounds i8, ptr %1, i64 220
  %81 = load i8, ptr %80, align 4, !tbaa !55
  %82 = icmp ult i8 %81, 32
  %.pr = load i32, ptr %56, align 8, !tbaa !51
  br i1 %82, label %85, label %83

83:                                               ; preds = %76
  %84 = icmp eq i32 %.pr, 2
  br i1 %84, label %.sink.split, label %89

85:                                               ; preds = %76
  %.pr.off = add i32 %.pr, -1
  %switch = icmp ult i32 %.pr.off, 3
  br i1 %switch, label %.sink.split, label %89

.sink.split:                                      ; preds = %85, %83
  %86 = getelementptr inbounds i8, ptr %56, i64 8
  %87 = load i8, ptr %86, align 8, !tbaa !50
  %88 = zext i8 %87 to i32
  br label %89

89:                                               ; preds = %85, %.sink.split, %83
  %.0.shrunk = phi i32 [ 0, %85 ], [ 0, %83 ], [ %88, %.sink.split ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #7
  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 24, ptr nonnull %5) #7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %5, i8 0, i64 24, i1 false)
  %90 = call i32 @s2n_blob_init(ptr noundef nonnull %5, ptr noundef nonnull %0, i32 noundef 160) #7
  %91 = icmp sgt i32 %90, -1
  br i1 %91, label %92, label %186

92:                                               ; preds = %89
  %93 = call i32 @s2n_stuffer_init_written(ptr noundef nonnull %4, ptr noundef nonnull %5) #7
  %94 = icmp sgt i32 %93, -1
  br i1 %94, label %95, label %186

95:                                               ; preds = %92
  %96 = load i8, ptr %3, align 1, !tbaa !50
  %97 = zext i8 %96 to i32
  %98 = call ptr @s2n_stuffer_raw_read(ptr noundef nonnull %4, i32 noundef %97) #7
  %.not78 = icmp eq ptr %98, null
  br i1 %.not78, label %99, label %107

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

107:                                              ; preds = %95
  %108 = getelementptr inbounds i8, ptr %0, i64 160
  %109 = load i8, ptr %3, align 1, !tbaa !50
  %110 = zext i8 %109 to i32
  %111 = call i32 @s2n_blob_init(ptr noundef nonnull %108, ptr noundef nonnull %98, i32 noundef %110) #7
  %112 = icmp sgt i32 %111, -1
  br i1 %112, label %113, label %186

113:                                              ; preds = %107
  %114 = load i8, ptr %3, align 1, !tbaa !50
  %115 = zext i8 %114 to i32
  %116 = call ptr @s2n_stuffer_raw_read(ptr noundef nonnull %4, i32 noundef %115) #7
  %.not80 = icmp eq ptr %116, null
  br i1 %.not80, label %117, label %125

117:                                              ; preds = %113
  %118 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.7, ptr %118, align 8, !tbaa !5
  %119 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.7, i64 21), i32 noundef 47) #6
  %.not81 = icmp eq ptr %119, null
  %120 = getelementptr inbounds i8, ptr %119, i64 1
  %121 = select i1 %.not81, ptr getelementptr inbounds (i8, ptr @.str.7, i64 21), ptr %120
  %122 = getelementptr inbounds i8, ptr %118, i64 8
  store ptr %121, ptr %122, align 8, !tbaa !10
  %123 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %123, align 4, !tbaa !11
  %124 = call i32 @s2n_calculate_stacktrace() #7
  br label %186

125:                                              ; preds = %113
  %126 = getelementptr inbounds i8, ptr %0, i64 184
  %127 = load i8, ptr %3, align 1, !tbaa !50
  %128 = zext i8 %127 to i32
  %129 = call i32 @s2n_blob_init(ptr noundef nonnull %126, ptr noundef nonnull %116, i32 noundef %128) #7
  %130 = icmp sgt i32 %129, -1
  br i1 %130, label %131, label %186

131:                                              ; preds = %125
  %132 = call ptr @s2n_stuffer_raw_read(ptr noundef nonnull %4, i32 noundef %79) #7
  %.not82 = icmp eq ptr %132, null
  br i1 %.not82, label %133, label %141

133:                                              ; preds = %131
  %134 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.8, ptr %134, align 8, !tbaa !5
  %135 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.8, i64 21), i32 noundef 47) #6
  %.not83 = icmp eq ptr %135, null
  %136 = getelementptr inbounds i8, ptr %135, i64 1
  %137 = select i1 %.not83, ptr getelementptr inbounds (i8, ptr @.str.8, i64 21), ptr %136
  %138 = getelementptr inbounds i8, ptr %134, i64 8
  store ptr %137, ptr %138, align 8, !tbaa !10
  %139 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %139, align 4, !tbaa !11
  %140 = call i32 @s2n_calculate_stacktrace() #7
  br label %186

141:                                              ; preds = %131
  %142 = getelementptr inbounds i8, ptr %0, i64 208
  %143 = call i32 @s2n_blob_init(ptr noundef nonnull %142, ptr noundef nonnull %132, i32 noundef %79) #7
  %144 = icmp sgt i32 %143, -1
  br i1 %144, label %145, label %186

145:                                              ; preds = %141
  %146 = call ptr @s2n_stuffer_raw_read(ptr noundef nonnull %4, i32 noundef %79) #7
  %.not84 = icmp eq ptr %146, null
  br i1 %.not84, label %147, label %155

147:                                              ; preds = %145
  %148 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.9, ptr %148, align 8, !tbaa !5
  %149 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.9, i64 21), i32 noundef 47) #6
  %.not85 = icmp eq ptr %149, null
  %150 = getelementptr inbounds i8, ptr %149, i64 1
  %151 = select i1 %.not85, ptr getelementptr inbounds (i8, ptr @.str.9, i64 21), ptr %150
  %152 = getelementptr inbounds i8, ptr %148, i64 8
  store ptr %151, ptr %152, align 8, !tbaa !10
  %153 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %153, align 4, !tbaa !11
  %154 = call i32 @s2n_calculate_stacktrace() #7
  br label %186

155:                                              ; preds = %145
  %156 = getelementptr inbounds i8, ptr %0, i64 232
  %157 = call i32 @s2n_blob_init(ptr noundef nonnull %156, ptr noundef nonnull %146, i32 noundef %79) #7
  %158 = icmp sgt i32 %157, -1
  br i1 %158, label %159, label %186

159:                                              ; preds = %155
  %160 = call ptr @s2n_stuffer_raw_read(ptr noundef nonnull %4, i32 noundef %.0.shrunk) #7
  %.not86 = icmp eq ptr %160, null
  br i1 %.not86, label %161, label %169

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

169:                                              ; preds = %159
  %170 = getelementptr inbounds i8, ptr %0, i64 256
  %171 = call i32 @s2n_blob_init(ptr noundef nonnull %170, ptr noundef nonnull %160, i32 noundef %.0.shrunk) #7
  %172 = icmp sgt i32 %171, -1
  br i1 %172, label %173, label %186

173:                                              ; preds = %169
  %174 = call ptr @s2n_stuffer_raw_read(ptr noundef nonnull %4, i32 noundef %.0.shrunk) #7
  %.not88 = icmp eq ptr %174, null
  br i1 %.not88, label %175, label %183

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

183:                                              ; preds = %173
  %184 = getelementptr inbounds i8, ptr %0, i64 280
  %185 = call i32 @s2n_blob_init(ptr noundef nonnull %184, ptr noundef nonnull %174, i32 noundef %.0.shrunk) #7
  %.lobit = ashr i32 %185, 31
  br label %186

186:                                              ; preds = %99, %117, %133, %147, %161, %175, %107, %125, %141, %155, %169, %183, %92, %89
  %.sroa.0.1 = phi i32 [ -1, %89 ], [ -1, %92 ], [ -1, %175 ], [ -1, %161 ], [ -1, %147 ], [ -1, %133 ], [ -1, %117 ], [ -1, %99 ], [ -1, %107 ], [ -1, %125 ], [ -1, %141 ], [ -1, %155 ], [ -1, %169 ], [ %.lobit, %183 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #7
  br label %187

187:                                              ; preds = %71, %186
  %.sroa.0.2 = phi i32 [ %.sroa.0.1, %186 ], [ -1, %71 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #7
  br label %188

188:                                              ; preds = %57, %187, %47, %36, %26, %15, %6
  %.sroa.0.4 = phi i32 [ -1, %47 ], [ -1, %36 ], [ -1, %26 ], [ -1, %15 ], [ -1, %6 ], [ %.sroa.0.2, %187 ], [ -1, %57 ]
  ret i32 %.sroa.0.4
}

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

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

declare i32 @s2n_calculate_stacktrace() local_unnamed_addr #3

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

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

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

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

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

declare ptr @s2n_stuffer_raw_read(ptr 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) #4

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 speculatable willreturn memory(none) }
attributes #2 = { 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 #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 willreturn memory(argmem: readwrite) }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nounwind willreturn memory(read) }
attributes #7 = { 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, !7, i64 232}
!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 = !{!42, !7, i64 0}
!42 = !{!"s2n_crypto_parameters", !7, i64 0, !43, i64 8, !43, i64 16, !44, i64 24, !44, i64 456, !8, i64 888, !8, i64 904, !8, i64 920, !8, i64 928}
!43 = !{!"s2n_session_key", !7, i64 0}
!44 = !{!"s2n_hmac_state", !12, i64 0, !30, i64 4, !12, i64 8, !30, i64 12, !8, i64 14, !45, i64 16, !45, i64 72, !45, i64 128, !45, i64 184, !8, i64 240, !8, i64 368}
!45 = !{!"s2n_hash_state", !7, i64 0, !12, i64 8, !8, i64 12, !16, i64 16, !8, i64 24}
!46 = !{!47, !7, i64 48}
!47 = !{!"s2n_cipher_suite", !12, i64 0, !7, i64 8, !7, i64 16, !8, i64 24, !7, i64 32, !12, i64 40, !7, i64 48, !8, i64 56, !8, i64 72, !7, i64 80, !7, i64 88, !12, i64 96, !8, i64 100}
!48 = !{!49, !7, i64 0}
!49 = !{!"s2n_record_algorithm", !7, i64 0, !12, i64 8, !12, i64 12, !16, i64 16}
!50 = !{!8, !8, i64 0}
!51 = !{!52, !12, i64 0}
!52 = !{!"s2n_cipher", !12, i64 0, !8, i64 8, !8, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96}
!53 = !{!49, !12, i64 8}
!54 = !{!52, !8, i64 48}
!55 = !{!14, !8, i64 220}


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