; LLVM IR from aws/s2n-tls :: tests/unit (s2n_self_talk_npn_test)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.s2n_debug_info = type { ptr, ptr }
%struct.s2n_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 }

@_s2n_debug_info = external thread_local global %struct.s2n_debug_info, align 8
@s2n_errno = external thread_local global i32, align 4
@.str.56 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [93 x i8], align 1

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

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

declare i32 @s2n_calculate_stacktrace() #2

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @s2n_sslv2_client_hello_parse(ptr noundef %0) #6 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %struct.s2n_stuffer, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i16, align 2
  %9 = alloca i16, align 2
  %10 = alloca i16, align 2
  %11 = alloca i16, align 2
  %12 = alloca ptr, align 8
  %13 = alloca %struct.s2n_blob, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  %14 = load ptr, ptr %3, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct.s2n_connection, ptr %14, i32 0, i32 71
  store ptr %15, ptr %4, align 8, !tbaa !5
  %16 = load ptr, ptr %4, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.s2n_client_hello, ptr %16, i32 0, i32 7
  %18 = load i8, ptr %17, align 2
  %19 = and i8 %18, -33
  %20 = or i8 %19, 32
  store i8 %20, ptr %17, align 2
  call void @llvm.lifetime.start.p0(i64 40, ptr %5) #7
  call void @llvm.memset.p0.i64(ptr align 8 %5, i8 0, i64 40, i1 false)
  br label %21

21:                                               ; preds = %1
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.s2n_client_hello, ptr %22, i32 0, i32 0
  %24 = call i32 @s2n_stuffer_init(ptr noundef %5, ptr noundef %23)
  %25 = icmp sgt i32 %24, -1
  br i1 %25, label %27, label %26

26:                                               ; preds = %21
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %420

27:                                               ; preds = %21
  br label %28

28:                                               ; preds = %27
  br label %29

29:                                               ; preds = %28
  br label %30

30:                                               ; preds = %29
  %31 = load ptr, ptr %4, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.s2n_client_hello, ptr %31, i32 0, i32 0
  %33 = getelementptr inbounds %struct.s2n_blob, ptr %32, i32 0, i32 1
  %34 = load i32, ptr %33, align 8, !tbaa !9
  %35 = call i32 @s2n_stuffer_skip_write(ptr noundef %5, i32 noundef %34)
  %36 = icmp sgt i32 %35, -1
  br i1 %36, label %38, label %37

37:                                               ; preds = %30
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %420

38:                                               ; preds = %30
  br label %39

39:                                               ; preds = %38
  br label %40

40:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  store ptr %5, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %8) #7
  store i16 0, ptr %8, align 2, !tbaa !15
  br label %41

41:                                               ; preds = %40
  %42 = load ptr, ptr %7, align 8, !tbaa !5
  %43 = call i32 @s2n_stuffer_read_uint16(ptr noundef %42, ptr noundef %8)
  %44 = icmp sgt i32 %43, -1
  br i1 %44, label %46, label %45

45:                                               ; preds = %41
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %419

46:                                               ; preds = %41
  br label %47

47:                                               ; preds = %46
  br label %48

48:                                               ; preds = %47
  br label %49

49:                                               ; preds = %48
  %50 = load i16, ptr %8, align 2, !tbaa !15
  %51 = zext i16 %50 to i32
  %52 = icmp sgt i32 %51, 0
  br i1 %52, label %86, label %53

53:                                               ; preds = %49
  br label %54

54:                                               ; preds = %53
  br label %55

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

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

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

76:                                               ; preds = %71, %64
  %77 = phi ptr [ %70, %64 ], [ %75, %71 ]
  %78 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %79 = getelementptr inbounds %struct.s2n_debug_info, ptr %78, i32 0, i32 1
  store ptr %77, ptr %79, align 8, !tbaa !18
  %80 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544322, ptr %80, align 4, !tbaa !19
  %81 = call i32 @s2n_calculate_stacktrace()
  br label %82

82:                                               ; preds = %76
  br label %83

83:                                               ; preds = %82
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %419

84:                                               ; No predecessors!
  br label %85

85:                                               ; preds = %84
  br label %86

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

87:                                               ; preds = %86
  br label %88

88:                                               ; preds = %87
  br label %89

89:                                               ; preds = %88
  %90 = load i16, ptr %8, align 2, !tbaa !15
  %91 = zext i16 %90 to i32
  %92 = srem i32 %91, 3
  %93 = icmp eq i32 %92, 0
  br i1 %93, label %127, label %94

94:                                               ; preds = %89
  br label %95

95:                                               ; preds = %94
  br label %96

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

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

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

117:                                              ; preds = %112, %105
  %118 = phi ptr [ %111, %105 ], [ %116, %112 ]
  %119 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %120 = getelementptr inbounds %struct.s2n_debug_info, ptr %119, i32 0, i32 1
  store ptr %118, ptr %120, align 8, !tbaa !18
  %121 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544322, ptr %121, align 4, !tbaa !19
  %122 = call i32 @s2n_calculate_stacktrace()
  br label %123

123:                                              ; preds = %117
  br label %124

124:                                              ; preds = %123
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %419

125:                                              ; No predecessors!
  br label %126

126:                                              ; preds = %125
  br label %127

127:                                              ; preds = %126, %89
  br label %128

128:                                              ; preds = %127
  br label %129

129:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 2, ptr %9) #7
  store i16 0, ptr %9, align 2, !tbaa !15
  br label %130

130:                                              ; preds = %129
  %131 = load ptr, ptr %7, align 8, !tbaa !5
  %132 = call i32 @s2n_stuffer_read_uint16(ptr noundef %131, ptr noundef %9)
  %133 = icmp sgt i32 %132, -1
  br i1 %133, label %135, label %134

134:                                              ; preds = %130
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %418

135:                                              ; preds = %130
  br label %136

136:                                              ; preds = %135
  br label %137

137:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 2, ptr %10) #7
  store i16 0, ptr %10, align 2, !tbaa !15
  br label %138

138:                                              ; preds = %137
  %139 = load ptr, ptr %7, align 8, !tbaa !5
  %140 = call i32 @s2n_stuffer_read_uint16(ptr noundef %139, ptr noundef %10)
  %141 = icmp sgt i32 %140, -1
  br i1 %141, label %143, label %142

142:                                              ; preds = %138
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %417

143:                                              ; preds = %138
  br label %144

144:                                              ; preds = %143
  br label %145

145:                                              ; preds = %144
  br label %146

146:                                              ; preds = %145
  %147 = load i16, ptr %10, align 2, !tbaa !15
  %148 = zext i16 %147 to i32
  %149 = icmp sgt i32 %148, 32
  br i1 %149, label %150, label %183

150:                                              ; preds = %146
  br label %151

151:                                              ; preds = %150
  br label %152

152:                                              ; preds = %151
  %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
  store ptr @.str.58, ptr %154, align 8, !tbaa !16
  %155 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %156 = getelementptr inbounds %struct.s2n_debug_info, ptr %155, i32 0, i32 0
  %157 = load ptr, ptr %156, align 8, !tbaa !16
  %158 = getelementptr inbounds i8, ptr %157, i64 21
  %159 = call ptr @strrchr(ptr noundef %158, i32 noundef 47) #8
  %160 = icmp ne ptr %159, null
  br i1 %160, label %161, label %168

161:                                              ; preds = %152
  %162 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %163 = getelementptr inbounds %struct.s2n_debug_info, ptr %162, i32 0, i32 0
  %164 = load ptr, ptr %163, align 8, !tbaa !16
  %165 = getelementptr inbounds i8, ptr %164, i64 21
  %166 = call ptr @strrchr(ptr noundef %165, i32 noundef 47) #8
  %167 = getelementptr inbounds i8, ptr %166, i64 1
  br label %173

168:                                              ; preds = %152
  %169 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %170 = getelementptr inbounds %struct.s2n_debug_info, ptr %169, i32 0, i32 0
  %171 = load ptr, ptr %170, align 8, !tbaa !16
  %172 = getelementptr inbounds i8, ptr %171, i64 21
  br label %173

173:                                              ; preds = %168, %161
  %174 = phi ptr [ %167, %161 ], [ %172, %168 ]
  %175 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %176 = getelementptr inbounds %struct.s2n_debug_info, ptr %175, i32 0, i32 1
  store ptr %174, ptr %176, align 8, !tbaa !18
  %177 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544322, ptr %177, align 4, !tbaa !19
  %178 = call i32 @s2n_calculate_stacktrace()
  br label %179

179:                                              ; preds = %173
  br label %180

180:                                              ; preds = %179
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %417

181:                                              ; No predecessors!
  br label %182

182:                                              ; preds = %181
  br label %183

183:                                              ; preds = %182, %146
  br label %184

184:                                              ; preds = %183
  br label %185

185:                                              ; preds = %184
  %186 = load i16, ptr %8, align 2, !tbaa !15
  %187 = zext i16 %186 to i32
  %188 = load ptr, ptr %4, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.s2n_client_hello, ptr %188, i32 0, i32 2
  %190 = getelementptr inbounds %struct.s2n_blob, ptr %189, i32 0, i32 1
  store i32 %187, ptr %190, align 8, !tbaa !20
  %191 = load ptr, ptr %7, align 8, !tbaa !5
  %192 = load i16, ptr %8, align 2, !tbaa !15
  %193 = zext i16 %192 to i32
  %194 = call ptr @s2n_stuffer_raw_read(ptr noundef %191, i32 noundef %193)
  %195 = load ptr, ptr %4, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.s2n_client_hello, ptr %195, i32 0, i32 2
  %197 = getelementptr inbounds %struct.s2n_blob, ptr %196, i32 0, i32 0
  store ptr %194, ptr %197, align 8, !tbaa !21
  br label %198

198:                                              ; preds = %185
  %199 = load ptr, ptr %4, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.s2n_client_hello, ptr %199, i32 0, i32 2
  %201 = getelementptr inbounds %struct.s2n_blob, ptr %200, i32 0, i32 0
  %202 = load ptr, ptr %201, align 8, !tbaa !21
  %203 = icmp ne ptr %202, null
  br i1 %203, label %237, label %204

204:                                              ; preds = %198
  br label %205

205:                                              ; preds = %204
  br label %206

206:                                              ; preds = %205
  %207 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %208 = getelementptr inbounds %struct.s2n_debug_info, ptr %207, i32 0, i32 0
  store ptr @.str.59, ptr %208, align 8, !tbaa !16
  %209 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %210 = getelementptr inbounds %struct.s2n_debug_info, ptr %209, i32 0, i32 0
  %211 = load ptr, ptr %210, align 8, !tbaa !16
  %212 = getelementptr inbounds i8, ptr %211, i64 21
  %213 = call ptr @strrchr(ptr noundef %212, i32 noundef 47) #8
  %214 = icmp ne ptr %213, null
  br i1 %214, label %215, label %222

215:                                              ; preds = %206
  %216 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %217 = getelementptr inbounds %struct.s2n_debug_info, ptr %216, i32 0, i32 0
  %218 = load ptr, ptr %217, align 8, !tbaa !16
  %219 = getelementptr inbounds i8, ptr %218, i64 21
  %220 = call ptr @strrchr(ptr noundef %219, i32 noundef 47) #8
  %221 = getelementptr inbounds i8, ptr %220, i64 1
  br label %227

222:                                              ; preds = %206
  %223 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %224 = getelementptr inbounds %struct.s2n_debug_info, ptr %223, i32 0, i32 0
  %225 = load ptr, ptr %224, align 8, !tbaa !16
  %226 = getelementptr inbounds i8, ptr %225, i64 21
  br label %227

227:                                              ; preds = %222, %215
  %228 = phi ptr [ %221, %215 ], [ %226, %222 ]
  %229 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %230 = getelementptr inbounds %struct.s2n_debug_info, ptr %229, i32 0, i32 1
  store ptr %228, ptr %230, align 8, !tbaa !18
  %231 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %231, align 4, !tbaa !19
  %232 = call i32 @s2n_calculate_stacktrace()
  br label %233

233:                                              ; preds = %227
  br label %234

234:                                              ; preds = %233
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %417

235:                                              ; No predecessors!
  br label %236

236:                                              ; preds = %235
  br label %237

237:                                              ; preds = %236, %198
  br label %238

238:                                              ; preds = %237
  br label %239

239:                                              ; preds = %238
  br label %240

240:                                              ; preds = %239
  %241 = load i16, ptr %9, align 2, !tbaa !15
  %242 = zext i16 %241 to i32
  %243 = load ptr, ptr %7, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.s2n_stuffer, ptr %243, i32 0, i32 2
  %245 = load i32, ptr %244, align 4, !tbaa !22
  %246 = load ptr, ptr %7, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.s2n_stuffer, ptr %246, i32 0, i32 1
  %248 = load i32, ptr %247, align 8, !tbaa !24
  %249 = sub i32 %245, %248
  %250 = icmp ugt i32 %242, %249
  br i1 %250, label %251, label %284

251:                                              ; preds = %240
  br label %252

252:                                              ; preds = %251
  br label %253

253:                                              ; preds = %252
  %254 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %255 = getelementptr inbounds %struct.s2n_debug_info, ptr %254, i32 0, i32 0
  store ptr @.str.60, ptr %255, align 8, !tbaa !16
  %256 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %257 = getelementptr inbounds %struct.s2n_debug_info, ptr %256, i32 0, i32 0
  %258 = load ptr, ptr %257, align 8, !tbaa !16
  %259 = getelementptr inbounds i8, ptr %258, i64 21
  %260 = call ptr @strrchr(ptr noundef %259, i32 noundef 47) #8
  %261 = icmp ne ptr %260, null
  br i1 %261, label %262, label %269

262:                                              ; preds = %253
  %263 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %264 = getelementptr inbounds %struct.s2n_debug_info, ptr %263, i32 0, i32 0
  %265 = load ptr, ptr %264, align 8, !tbaa !16
  %266 = getelementptr inbounds i8, ptr %265, i64 21
  %267 = call ptr @strrchr(ptr noundef %266, i32 noundef 47) #8
  %268 = getelementptr inbounds i8, ptr %267, i64 1
  br label %274

269:                                              ; preds = %253
  %270 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %271 = getelementptr inbounds %struct.s2n_debug_info, ptr %270, i32 0, i32 0
  %272 = load ptr, ptr %271, align 8, !tbaa !16
  %273 = getelementptr inbounds i8, ptr %272, i64 21
  br label %274

274:                                              ; preds = %269, %262
  %275 = phi ptr [ %268, %262 ], [ %273, %269 ]
  %276 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %277 = getelementptr inbounds %struct.s2n_debug_info, ptr %276, i32 0, i32 1
  store ptr %275, ptr %277, align 8, !tbaa !18
  %278 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544322, ptr %278, align 4, !tbaa !19
  %279 = call i32 @s2n_calculate_stacktrace()
  br label %280

280:                                              ; preds = %274
  br label %281

281:                                              ; preds = %280
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %417

282:                                              ; No predecessors!
  br label %283

283:                                              ; preds = %282
  br label %284

284:                                              ; preds = %283, %240
  br label %285

285:                                              ; preds = %284
  br label %286

286:                                              ; preds = %285
  br label %287

287:                                              ; preds = %286
  %288 = load ptr, ptr %4, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.s2n_client_hello, ptr %288, i32 0, i32 3
  %290 = load ptr, ptr %7, align 8, !tbaa !5
  %291 = load i16, ptr %9, align 2, !tbaa !15
  %292 = zext i16 %291 to i32
  %293 = call ptr @s2n_stuffer_raw_read(ptr noundef %290, i32 noundef %292)
  %294 = load i16, ptr %9, align 2, !tbaa !15
  %295 = zext i16 %294 to i32
  %296 = call i32 @s2n_blob_init(ptr noundef %289, ptr noundef %293, i32 noundef %295)
  %297 = icmp sgt i32 %296, -1
  br i1 %297, label %299, label %298

298:                                              ; preds = %287
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %417

299:                                              ; preds = %287
  br label %300

300:                                              ; preds = %299
  br label %301

301:                                              ; preds = %300
  %302 = load i16, ptr %9, align 2, !tbaa !15
  %303 = zext i16 %302 to i32
  %304 = icmp sgt i32 %303, 0
  br i1 %304, label %305, label %383

305:                                              ; preds = %301
  %306 = load i16, ptr %9, align 2, !tbaa !15
  %307 = zext i16 %306 to i32
  %308 = icmp sle i32 %307, 32
  br i1 %308, label %309, label %383

309:                                              ; preds = %305
  br label %310

310:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 2, ptr %11) #7
  %311 = load i16, ptr %9, align 2, !tbaa !15
  store i16 %311, ptr %11, align 2, !tbaa !15
  %312 = load i16, ptr %11, align 2, !tbaa !15
  %313 = icmp ne i16 %312, 0
  %314 = xor i1 %313, true
  %315 = xor i1 %314, true
  %316 = zext i1 %315 to i32
  %317 = sext i32 %316 to i64
  %318 = call i64 @llvm.expect.i64(i64 %317, i64 1)
  %319 = icmp ne i64 %318, 0
  br i1 %319, label %320, label %373

320:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %321 = load ptr, ptr %3, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.s2n_connection, ptr %321, i32 0, i32 18
  %323 = getelementptr inbounds [32 x i8], ptr %322, i64 0, i64 0
  %324 = load ptr, ptr %4, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.s2n_client_hello, ptr %324, i32 0, i32 3
  %326 = getelementptr inbounds %struct.s2n_blob, ptr %325, i32 0, i32 0
  %327 = load ptr, ptr %326, align 8, !tbaa !25
  %328 = load i16, ptr %11, align 2, !tbaa !15
  %329 = zext i16 %328 to i64
  %330 = call ptr @s2n_ensure_memmove_trace(ptr noundef %323, ptr noundef %327, i64 noundef %329)
  store ptr %330, ptr %12, align 8, !tbaa !5
  br label %331

331:                                              ; preds = %320
  %332 = load ptr, ptr %12, align 8, !tbaa !5
  %333 = icmp ne ptr %332, null
  br i1 %333, label %367, label %334

334:                                              ; preds = %331
  br label %335

335:                                              ; preds = %334
  br label %336

336:                                              ; preds = %335
  %337 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %338 = getelementptr inbounds %struct.s2n_debug_info, ptr %337, i32 0, i32 0
  store ptr @.str.61, ptr %338, align 8, !tbaa !16
  %339 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %340 = getelementptr inbounds %struct.s2n_debug_info, ptr %339, i32 0, i32 0
  %341 = load ptr, ptr %340, align 8, !tbaa !16
  %342 = getelementptr inbounds i8, ptr %341, i64 21
  %343 = call ptr @strrchr(ptr noundef %342, i32 noundef 47) #8
  %344 = icmp ne ptr %343, null
  br i1 %344, label %345, label %352

345:                                              ; preds = %336
  %346 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %347 = getelementptr inbounds %struct.s2n_debug_info, ptr %346, i32 0, i32 0
  %348 = load ptr, ptr %347, align 8, !tbaa !16
  %349 = getelementptr inbounds i8, ptr %348, i64 21
  %350 = call ptr @strrchr(ptr noundef %349, i32 noundef 47) #8
  %351 = getelementptr inbounds i8, ptr %350, i64 1
  br label %357

352:                                              ; preds = %336
  %353 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %354 = getelementptr inbounds %struct.s2n_debug_info, ptr %353, i32 0, i32 0
  %355 = load ptr, ptr %354, align 8, !tbaa !16
  %356 = getelementptr inbounds i8, ptr %355, i64 21
  br label %357

357:                                              ; preds = %352, %345
  %358 = phi ptr [ %351, %345 ], [ %356, %352 ]
  %359 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %360 = getelementptr inbounds %struct.s2n_debug_info, ptr %359, i32 0, i32 1
  store ptr %358, ptr %360, align 8, !tbaa !18
  %361 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %361, align 4, !tbaa !19
  %362 = call i32 @s2n_calculate_stacktrace()
  br label %363

363:                                              ; preds = %357
  br label %364

364:                                              ; preds = %363
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %370

365:                                              ; No predecessors!
  br label %366

366:                                              ; preds = %365
  br label %367

367:                                              ; preds = %366, %331
  br label %368

368:                                              ; preds = %367
  br label %369

369:                                              ; preds = %368
  store i32 0, ptr %6, align 4
  br label %370

370:                                              ; preds = %369, %364
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  %371 = load i32, ptr %6, align 4
  switch i32 %371, label %374 [
    i32 0, label %372
  ]

372:                                              ; preds = %370
  br label %373

373:                                              ; preds = %372, %310
  store i32 0, ptr %6, align 4
  br label %374

374:                                              ; preds = %373, %370
  call void @llvm.lifetime.end.p0(i64 2, ptr %11) #7
  %375 = load i32, ptr %6, align 4
  switch i32 %375, label %417 [
    i32 0, label %376
  ]

376:                                              ; preds = %374
  br label %377

377:                                              ; preds = %376
  br label %378

378:                                              ; preds = %377
  %379 = load i16, ptr %9, align 2, !tbaa !15
  %380 = trunc i16 %379 to i8
  %381 = load ptr, ptr %3, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.s2n_connection, ptr %381, i32 0, i32 19
  store i8 %380, ptr %382, align 8, !tbaa !26
  br label %383

383:                                              ; preds = %378, %305, %301
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #7
  call void @llvm.memset.p0.i64(ptr align 8 %13, i8 0, i64 24, i1 false)
  br label %384

384:                                              ; preds = %383
  %385 = load ptr, ptr %3, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.s2n_connection, ptr %385, i32 0, i32 32
  %387 = getelementptr inbounds %struct.s2n_handshake_parameters, ptr %386, i32 0, i32 12
  %388 = getelementptr inbounds [32 x i8], ptr %387, i64 0, i64 0
  %389 = call i32 @s2n_blob_init(ptr noundef %13, ptr noundef %388, i32 noundef 32)
  %390 = icmp sgt i32 %389, -1
  br i1 %390, label %392, label %391

391:                                              ; preds = %384
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %416

392:                                              ; preds = %384
  br label %393

393:                                              ; preds = %392
  br label %394

394:                                              ; preds = %393
  %395 = load i16, ptr %10, align 2, !tbaa !15
  %396 = zext i16 %395 to i32
  %397 = sub nsw i32 32, %396
  %398 = getelementptr inbounds %struct.s2n_blob, ptr %13, i32 0, i32 0
  %399 = load ptr, ptr %398, align 8, !tbaa !49
  %400 = sext i32 %397 to i64
  %401 = getelementptr inbounds i8, ptr %399, i64 %400
  store ptr %401, ptr %398, align 8, !tbaa !49
  %402 = load i16, ptr %10, align 2, !tbaa !15
  %403 = zext i16 %402 to i32
  %404 = sub nsw i32 32, %403
  %405 = getelementptr inbounds %struct.s2n_blob, ptr %13, i32 0, i32 1
  %406 = load i32, ptr %405, align 8, !tbaa !50
  %407 = sub i32 %406, %404
  store i32 %407, ptr %405, align 8, !tbaa !50
  br label %408

408:                                              ; preds = %394
  %409 = load ptr, ptr %7, align 8, !tbaa !5
  %410 = call i32 @s2n_stuffer_read(ptr noundef %409, ptr noundef %13)
  %411 = icmp sgt i32 %410, -1
  br i1 %411, label %413, label %412

412:                                              ; preds = %408
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %416

413:                                              ; preds = %408
  br label %414

414:                                              ; preds = %413
  br label %415

415:                                              ; preds = %414
  store i32 0, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %416

416:                                              ; preds = %415, %412, %391
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #7
  br label %417

417:                                              ; preds = %416, %374, %298, %281, %234, %180, %142
  call void @llvm.lifetime.end.p0(i64 2, ptr %10) #7
  br label %418

418:                                              ; preds = %417, %134
  call void @llvm.lifetime.end.p0(i64 2, ptr %9) #7
  br label %419

419:                                              ; preds = %418, %124, %83, %45
  call void @llvm.lifetime.end.p0(i64 2, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  br label %420

420:                                              ; preds = %419, %37, %26
  call void @llvm.lifetime.end.p0(i64 40, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  %421 = load i32, ptr %2, align 4
  ret i32 %421
}

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

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

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

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

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


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

@_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.56 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [93 x i8], align 1

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

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

declare i32 @s2n_calculate_stacktrace() local_unnamed_addr #2

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @s2n_sslv2_client_hello_parse(ptr noundef %0) local_unnamed_addr #5 {
  %2 = alloca %struct.s2n_stuffer, align 8
  %3 = alloca i16, align 2
  %4 = alloca i16, align 2
  %5 = alloca i16, align 2
  %6 = alloca %struct.s2n_blob, align 8
  %7 = getelementptr inbounds i8, ptr %0, i64 2896
  %8 = getelementptr inbounds i8, ptr %0, i64 3698
  %9 = load i8, ptr %8, align 2
  %10 = or i8 %9, 32
  store i8 %10, ptr %8, align 2
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %2) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %2, i8 0, i64 40, i1 false)
  %11 = call i32 @s2n_stuffer_init(ptr noundef nonnull %2, ptr noundef nonnull %7) #6
  %12 = icmp sgt i32 %11, -1
  br i1 %12, label %13, label %135

13:                                               ; preds = %1
  %14 = getelementptr inbounds i8, ptr %0, i64 2904
  %15 = load i32, ptr %14, align 8, !tbaa !5
  %16 = call i32 @s2n_stuffer_skip_write(ptr noundef nonnull %2, i32 noundef %15) #6
  %17 = icmp sgt i32 %16, -1
  br i1 %17, label %18, label %135

18:                                               ; preds = %13
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %3) #6
  store i16 0, ptr %3, align 2, !tbaa !14
  %19 = call i32 @s2n_stuffer_read_uint16(ptr noundef nonnull %2, ptr noundef nonnull %3) #6
  %20 = icmp sgt i32 %19, -1
  br i1 %20, label %21, label %134

21:                                               ; preds = %18
  %22 = load i16, ptr %3, align 2, !tbaa !14
  %.not = icmp eq i16 %22, 0
  br i1 %.not, label %23, label %31

23:                                               ; preds = %21
  %24 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.56, ptr %24, align 8, !tbaa !15
  %25 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.56, i64 21), i32 noundef 47) #7
  %.not38 = icmp eq ptr %25, null
  %26 = getelementptr inbounds i8, ptr %25, i64 1
  %27 = select i1 %.not38, ptr getelementptr inbounds (i8, ptr @.str.56, i64 21), ptr %26
  %28 = getelementptr inbounds i8, ptr %24, i64 8
  store ptr %27, ptr %28, align 8, !tbaa !17
  %29 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544322, ptr %29, align 4, !tbaa !18
  %30 = call i32 @s2n_calculate_stacktrace() #6
  br label %134

31:                                               ; preds = %21
  %32 = urem i16 %22, 3
  %33 = icmp eq i16 %32, 0
  br i1 %33, label %42, label %34

34:                                               ; preds = %31
  %35 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.57, ptr %35, align 8, !tbaa !15
  %36 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.57, i64 21), i32 noundef 47) #7
  %.not39 = icmp eq ptr %36, null
  %37 = getelementptr inbounds i8, ptr %36, i64 1
  %38 = select i1 %.not39, ptr getelementptr inbounds (i8, ptr @.str.57, i64 21), ptr %37
  %39 = getelementptr inbounds i8, ptr %35, i64 8
  store ptr %38, ptr %39, align 8, !tbaa !17
  %40 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544322, ptr %40, align 4, !tbaa !18
  %41 = call i32 @s2n_calculate_stacktrace() #6
  br label %134

42:                                               ; preds = %31
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %4) #6
  store i16 0, ptr %4, align 2, !tbaa !14
  %43 = call i32 @s2n_stuffer_read_uint16(ptr noundef nonnull %2, ptr noundef nonnull %4) #6
  %44 = icmp sgt i32 %43, -1
  br i1 %44, label %45, label %133

45:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %5) #6
  store i16 0, ptr %5, align 2, !tbaa !14
  %46 = call i32 @s2n_stuffer_read_uint16(ptr noundef nonnull %2, ptr noundef nonnull %5) #6
  %47 = icmp sgt i32 %46, -1
  br i1 %47, label %48, label %132

48:                                               ; preds = %45
  %49 = load i16, ptr %5, align 2, !tbaa !14
  %50 = icmp ugt i16 %49, 32
  br i1 %50, label %51, label %59

51:                                               ; preds = %48
  %52 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.58, ptr %52, align 8, !tbaa !15
  %53 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.58, i64 21), i32 noundef 47) #7
  %.not46 = icmp eq ptr %53, null
  %54 = getelementptr inbounds i8, ptr %53, i64 1
  %55 = select i1 %.not46, ptr getelementptr inbounds (i8, ptr @.str.58, i64 21), ptr %54
  %56 = getelementptr inbounds i8, ptr %52, i64 8
  store ptr %55, ptr %56, align 8, !tbaa !17
  %57 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544322, ptr %57, align 4, !tbaa !18
  %58 = call i32 @s2n_calculate_stacktrace() #6
  br label %132

59:                                               ; preds = %48
  %60 = load i16, ptr %3, align 2, !tbaa !14
  %61 = zext i16 %60 to i32
  %62 = getelementptr inbounds i8, ptr %0, i64 3624
  %63 = getelementptr inbounds i8, ptr %0, i64 3632
  store i32 %61, ptr %63, align 8, !tbaa !19
  %64 = call ptr @s2n_stuffer_raw_read(ptr noundef nonnull %2, i32 noundef %61) #6
  store ptr %64, ptr %62, align 8, !tbaa !20
  %.not40 = icmp eq ptr %64, null
  br i1 %.not40, label %65, label %73

65:                                               ; preds = %59
  %66 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.59, ptr %66, align 8, !tbaa !15
  %67 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.59, i64 21), i32 noundef 47) #7
  %.not41 = icmp eq ptr %67, null
  %68 = getelementptr inbounds i8, ptr %67, i64 1
  %69 = select i1 %.not41, ptr getelementptr inbounds (i8, ptr @.str.59, i64 21), ptr %68
  %70 = getelementptr inbounds i8, ptr %66, i64 8
  store ptr %69, ptr %70, align 8, !tbaa !17
  %71 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %71, align 4, !tbaa !18
  %72 = call i32 @s2n_calculate_stacktrace() #6
  br label %132

73:                                               ; preds = %59
  %74 = load i16, ptr %4, align 2, !tbaa !14
  %75 = zext i16 %74 to i32
  %76 = getelementptr inbounds i8, ptr %2, i64 28
  %77 = load i32, ptr %76, align 4, !tbaa !21
  %78 = getelementptr inbounds i8, ptr %2, i64 24
  %79 = load i32, ptr %78, align 8, !tbaa !23
  %80 = sub i32 %77, %79
  %81 = icmp ult i32 %80, %75
  br i1 %81, label %82, label %90

82:                                               ; preds = %73
  %83 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.60, ptr %83, align 8, !tbaa !15
  %84 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.60, i64 21), i32 noundef 47) #7
  %.not45 = icmp eq ptr %84, null
  %85 = getelementptr inbounds i8, ptr %84, i64 1
  %86 = select i1 %.not45, ptr getelementptr inbounds (i8, ptr @.str.60, i64 21), ptr %85
  %87 = getelementptr inbounds i8, ptr %83, i64 8
  store ptr %86, ptr %87, align 8, !tbaa !17
  %88 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 335544322, ptr %88, align 4, !tbaa !18
  %89 = call i32 @s2n_calculate_stacktrace() #6
  br label %132

90:                                               ; preds = %73
  %91 = getelementptr inbounds i8, ptr %0, i64 3648
  %92 = call ptr @s2n_stuffer_raw_read(ptr noundef nonnull %2, i32 noundef %75) #6
  %93 = load i16, ptr %4, align 2, !tbaa !14
  %94 = zext i16 %93 to i32
  %95 = call i32 @s2n_blob_init(ptr noundef nonnull %91, ptr noundef %92, i32 noundef %94) #6
  %96 = icmp sgt i32 %95, -1
  br i1 %96, label %97, label %132

97:                                               ; preds = %90
  %98 = load i16, ptr %4, align 2
  %99 = add i16 %98, -1
  %or.cond = icmp ult i16 %99, 32
  br i1 %or.cond, label %100, label %116

100:                                              ; preds = %97
  %101 = getelementptr inbounds i8, ptr %0, i64 184
  %102 = load ptr, ptr %91, align 8, !tbaa !24
  %103 = zext nneg i16 %98 to i64
  %104 = call ptr @s2n_ensure_memmove_trace(ptr noundef nonnull %101, ptr noundef %102, i64 noundef %103) #6
  %.not43.not = icmp eq ptr %104, null
  br i1 %.not43.not, label %105, label %.critedge48

105:                                              ; preds = %100
  %106 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.61, ptr %106, align 8, !tbaa !15
  %107 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.61, i64 21), i32 noundef 47) #7
  %.not44 = icmp eq ptr %107, null
  %108 = getelementptr inbounds i8, ptr %107, i64 1
  %109 = select i1 %.not44, ptr getelementptr inbounds (i8, ptr @.str.61, i64 21), ptr %108
  %110 = getelementptr inbounds i8, ptr %106, i64 8
  store ptr %109, ptr %110, align 8, !tbaa !17
  %111 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %111, align 4, !tbaa !18
  %112 = call i32 @s2n_calculate_stacktrace() #6
  br label %132

.critedge48:                                      ; preds = %100
  %113 = load i16, ptr %4, align 2, !tbaa !14
  %114 = trunc i16 %113 to i8
  %115 = getelementptr inbounds i8, ptr %0, i64 216
  store i8 %114, ptr %115, align 8, !tbaa !25
  br label %116

116:                                              ; preds = %.critedge48, %97
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %6, i8 0, i64 24, i1 false)
  %117 = getelementptr inbounds i8, ptr %0, i64 1618
  %118 = call i32 @s2n_blob_init(ptr noundef nonnull %6, ptr noundef nonnull %117, i32 noundef 32) #6
  %119 = icmp sgt i32 %118, -1
  br i1 %119, label %120, label %131

120:                                              ; preds = %116
  %121 = load i16, ptr %5, align 2, !tbaa !14
  %122 = zext i16 %121 to i64
  %123 = sub nsw i64 32, %122
  %124 = load ptr, ptr %6, align 8, !tbaa !48
  %125 = getelementptr inbounds i8, ptr %124, i64 %123
  store ptr %125, ptr %6, align 8, !tbaa !48
  %126 = zext i16 %121 to i32
  %.neg = add nsw i32 %126, -32
  %127 = getelementptr inbounds i8, ptr %6, i64 8
  %128 = load i32, ptr %127, align 8, !tbaa !49
  %129 = add i32 %.neg, %128
  store i32 %129, ptr %127, align 8, !tbaa !49
  %130 = call i32 @s2n_stuffer_read(ptr noundef nonnull %2, ptr noundef nonnull %6) #6
  %.lobit = ashr i32 %130, 31
  br label %131

131:                                              ; preds = %120, %116
  %.3 = phi i32 [ -1, %116 ], [ %.lobit, %120 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #6
  br label %132

132:                                              ; preds = %105, %90, %45, %131, %82, %65, %51
  %.4 = phi i32 [ -1, %51 ], [ -1, %82 ], [ %.3, %131 ], [ -1, %65 ], [ -1, %45 ], [ -1, %90 ], [ -1, %105 ]
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %5) #6
  br label %133

133:                                              ; preds = %42, %132
  %.5 = phi i32 [ %.4, %132 ], [ -1, %42 ]
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %4) #6
  br label %134

134:                                              ; preds = %18, %133, %34, %23
  %.6 = phi i32 [ %.5, %133 ], [ -1, %34 ], [ -1, %23 ], [ -1, %18 ]
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %3) #6
  br label %135

135:                                              ; preds = %13, %1, %134
  %.7 = phi i32 [ %.6, %134 ], [ -1, %1 ], [ -1, %13 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %2) #6
  ret i32 %.7
}

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

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

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

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

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


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