; LLVM IR from aws/s2n-tls :: tests/unit (s2n_resume_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_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_result = type { i32 }
%struct.s2n_unique_ticket_key = type { %struct.s2n_blob, [32 x i8], [32 x i8] }
%struct.s2n_blob = type { ptr, i32, i32, i8 }
%struct.s2n_session_key = type { ptr }
%struct.s2n_stuffer = type { %struct.s2n_blob, i32, i32, i32, i8 }
%struct.s2n_ticket_key = type { [16 x i8], [32 x i8], [12 x i8], i64 }
%struct.s2n_aead_cipher = type { i8, i8, i8, ptr, ptr }

@_s2n_debug_info = external thread_local global %struct.s2n_debug_info, align 8
@s2n_errno = external thread_local global i32, align 4
@.str.31 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [87 x i8], align 1
@s2n_aes256_gcm = external constant %struct.s2n_cipher, align 8
@.str.34 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [87 x i8], align 1

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

; Function Attrs: 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.end.p0(i64 immarg, ptr nocapture) #0

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

; 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(ptr noundef, ptr noundef) #3

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

; Function Attrs: nounwind uwtable
define dso_local i32 @s2n_resume_encrypt_session_ticket(ptr noundef %0, ptr noundef %1, ptr noundef %2) #6 {
  %4 = alloca %struct.s2n_result, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca %struct.s2n_unique_ticket_key, align 8
  %9 = alloca i32, align 4
  %10 = alloca %struct.s2n_blob, align 8
  %11 = alloca %struct.s2n_result, align 4
  %12 = alloca %struct.s2n_result, align 4
  %13 = alloca %struct.s2n_blob, align 8
  %14 = alloca %struct.s2n_session_key, align 8
  %15 = alloca %struct.s2n_result, align 4
  %16 = alloca %struct.s2n_result, align 4
  %17 = alloca [32 x i8], align 16
  %18 = alloca [28 x i8], align 16
  %19 = alloca %struct.s2n_blob, align 8
  %20 = alloca %struct.s2n_stuffer, align 8
  %21 = alloca [12 x i8], align 1
  %22 = alloca %struct.s2n_blob, align 8
  %23 = alloca %struct.s2n_result, align 4
  %24 = alloca i32, align 4
  %25 = alloca %struct.s2n_result, align 4
  %26 = alloca %struct.s2n_blob, align 8
  %27 = alloca %struct.s2n_stuffer, align 8
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  br label %30

30:                                               ; preds = %3
  %31 = load ptr, ptr %5, align 8, !tbaa !5
  %32 = icmp ne ptr %31, null
  br i1 %32, label %65, label %33

33:                                               ; preds = %30
  br label %34

34:                                               ; preds = %33
  br label %35

35:                                               ; preds = %34
  %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
  store ptr @.str.31, ptr %37, align 8, !tbaa !9
  %38 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %39 = getelementptr inbounds %struct.s2n_debug_info, ptr %38, i32 0, i32 0
  %40 = load ptr, ptr %39, align 8, !tbaa !9
  %41 = getelementptr inbounds i8, ptr %40, i64 21
  %42 = call ptr @strrchr(ptr noundef %41, i32 noundef 47) #8
  %43 = icmp ne ptr %42, null
  br i1 %43, label %44, label %51

44:                                               ; preds = %35
  %45 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %46 = getelementptr inbounds %struct.s2n_debug_info, ptr %45, i32 0, i32 0
  %47 = load ptr, ptr %46, align 8, !tbaa !9
  %48 = getelementptr inbounds i8, ptr %47, i64 21
  %49 = call ptr @strrchr(ptr noundef %48, i32 noundef 47) #8
  %50 = getelementptr inbounds i8, ptr %49, i64 1
  br label %56

51:                                               ; preds = %35
  %52 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %53 = getelementptr inbounds %struct.s2n_debug_info, ptr %52, i32 0, i32 0
  %54 = load ptr, ptr %53, align 8, !tbaa !9
  %55 = getelementptr inbounds i8, ptr %54, i64 21
  br label %56

56:                                               ; preds = %51, %44
  %57 = phi ptr [ %50, %44 ], [ %55, %51 ]
  %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 1
  store ptr %57, ptr %59, align 8, !tbaa !11
  %60 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %60, align 4, !tbaa !12
  %61 = call i32 @s2n_calculate_stacktrace()
  br label %62

62:                                               ; preds = %56
  %63 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %63, align 4, !tbaa !14
  br label %488

64:                                               ; No predecessors!
  br label %65

65:                                               ; preds = %64, %30
  br label %66

66:                                               ; preds = %65
  br label %67

67:                                               ; preds = %66
  %68 = load ptr, ptr %7, align 8, !tbaa !5
  %69 = icmp ne ptr %68, null
  br i1 %69, label %102, label %70

70:                                               ; preds = %67
  br label %71

71:                                               ; preds = %70
  br label %72

72:                                               ; preds = %71
  %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
  store ptr @.str.32, ptr %74, align 8, !tbaa !9
  %75 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %76 = getelementptr inbounds %struct.s2n_debug_info, ptr %75, i32 0, i32 0
  %77 = load ptr, ptr %76, align 8, !tbaa !9
  %78 = getelementptr inbounds i8, ptr %77, i64 21
  %79 = call ptr @strrchr(ptr noundef %78, i32 noundef 47) #8
  %80 = icmp ne ptr %79, null
  br i1 %80, label %81, label %88

81:                                               ; preds = %72
  %82 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %83 = getelementptr inbounds %struct.s2n_debug_info, ptr %82, i32 0, i32 0
  %84 = load ptr, ptr %83, align 8, !tbaa !9
  %85 = getelementptr inbounds i8, ptr %84, i64 21
  %86 = call ptr @strrchr(ptr noundef %85, i32 noundef 47) #8
  %87 = getelementptr inbounds i8, ptr %86, i64 1
  br label %93

88:                                               ; preds = %72
  %89 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %90 = getelementptr inbounds %struct.s2n_debug_info, ptr %89, i32 0, i32 0
  %91 = load ptr, ptr %90, align 8, !tbaa !9
  %92 = getelementptr inbounds i8, ptr %91, i64 21
  br label %93

93:                                               ; preds = %88, %81
  %94 = phi ptr [ %87, %81 ], [ %92, %88 ]
  %95 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %96 = getelementptr inbounds %struct.s2n_debug_info, ptr %95, i32 0, i32 1
  store ptr %94, ptr %96, align 8, !tbaa !11
  %97 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %97, align 4, !tbaa !12
  %98 = call i32 @s2n_calculate_stacktrace()
  br label %99

99:                                               ; preds = %93
  %100 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %100, align 4, !tbaa !14
  br label %488

101:                                              ; No predecessors!
  br label %102

102:                                              ; preds = %101, %67
  br label %103

103:                                              ; preds = %102
  br label %104

104:                                              ; preds = %103
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = icmp ne ptr %105, null
  br i1 %106, label %139, label %107

107:                                              ; preds = %104
  br label %108

108:                                              ; preds = %107
  br label %109

109:                                              ; preds = %108
  %110 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %111 = getelementptr inbounds %struct.s2n_debug_info, ptr %110, i32 0, i32 0
  store ptr @.str.33, ptr %111, align 8, !tbaa !9
  %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
  %116 = call ptr @strrchr(ptr noundef %115, i32 noundef 47) #8
  %117 = icmp ne ptr %116, null
  br i1 %117, label %118, label %125

118:                                              ; preds = %109
  %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 0
  %121 = load ptr, ptr %120, align 8, !tbaa !9
  %122 = getelementptr inbounds i8, ptr %121, i64 21
  %123 = call ptr @strrchr(ptr noundef %122, i32 noundef 47) #8
  %124 = getelementptr inbounds i8, ptr %123, i64 1
  br label %130

125:                                              ; preds = %109
  %126 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %127 = getelementptr inbounds %struct.s2n_debug_info, ptr %126, i32 0, i32 0
  %128 = load ptr, ptr %127, align 8, !tbaa !9
  %129 = getelementptr inbounds i8, ptr %128, i64 21
  br label %130

130:                                              ; preds = %125, %118
  %131 = phi ptr [ %124, %118 ], [ %129, %125 ]
  %132 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %133 = getelementptr inbounds %struct.s2n_debug_info, ptr %132, i32 0, i32 1
  store ptr %131, ptr %133, align 8, !tbaa !11
  %134 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762084, ptr %134, align 4, !tbaa !12
  %135 = call i32 @s2n_calculate_stacktrace()
  br label %136

136:                                              ; preds = %130
  %137 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %137, align 4, !tbaa !14
  br label %488

138:                                              ; No predecessors!
  br label %139

139:                                              ; preds = %138, %104
  br label %140

140:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 88, ptr %8) #9
  call void @llvm.memset.p0.i64(ptr align 8 %8, i8 0, i64 88, i1 false)
  br label %141

141:                                              ; preds = %140
  %142 = getelementptr inbounds %struct.s2n_unique_ticket_key, ptr %8, i32 0, i32 0
  %143 = load ptr, ptr %6, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.s2n_ticket_key, ptr %143, i32 0, i32 1
  %145 = getelementptr inbounds [32 x i8], ptr %144, i64 0, i64 0
  %146 = call i32 @s2n_blob_init(ptr noundef %142, ptr noundef %145, i32 noundef 32)
  %147 = icmp sgt i32 %146, -1
  br i1 %147, label %150, label %148

148:                                              ; preds = %141
  %149 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %149, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %487

150:                                              ; preds = %141
  br label %151

151:                                              ; preds = %150
  br label %152

152:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #9
  call void @llvm.memset.p0.i64(ptr align 8 %10, i8 0, i64 24, i1 false)
  br label %153

153:                                              ; preds = %152
  %154 = getelementptr inbounds %struct.s2n_unique_ticket_key, ptr %8, i32 0, i32 1
  %155 = getelementptr inbounds [32 x i8], ptr %154, i64 0, i64 0
  %156 = call i32 @s2n_blob_init(ptr noundef %10, ptr noundef %155, i32 noundef 32)
  %157 = icmp sgt i32 %156, -1
  br i1 %157, label %160, label %158

158:                                              ; preds = %153
  %159 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %159, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %486

160:                                              ; preds = %153
  br label %161

161:                                              ; preds = %160
  br label %162

162:                                              ; preds = %161
  br label %163

163:                                              ; preds = %162
  %164 = call i32 @s2n_get_public_random_data(ptr noundef %10)
  %165 = getelementptr inbounds %struct.s2n_result, ptr %11, i32 0, i32 0
  store i32 %164, ptr %165, align 4
  %166 = getelementptr inbounds %struct.s2n_result, ptr %11, i32 0, i32 0
  %167 = load i32, ptr %166, align 4
  %168 = call zeroext i1 @s2n_result_is_ok(i32 %167)
  br i1 %168, label %171, label %169

169:                                              ; preds = %163
  %170 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %170, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %486

171:                                              ; preds = %163
  br label %172

172:                                              ; preds = %171
  br label %173

173:                                              ; preds = %172
  br label %174

174:                                              ; preds = %173
  %175 = call i32 @s2n_resume_generate_unique_ticket_key(ptr noundef %8)
  %176 = getelementptr inbounds %struct.s2n_result, ptr %12, i32 0, i32 0
  store i32 %175, ptr %176, align 4
  %177 = getelementptr inbounds %struct.s2n_result, ptr %12, i32 0, i32 0
  %178 = load i32, ptr %177, align 4
  %179 = call zeroext i1 @s2n_result_is_ok(i32 %178)
  br i1 %179, label %182, label %180

180:                                              ; preds = %174
  %181 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %181, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %486

182:                                              ; preds = %174
  br label %183

183:                                              ; preds = %182
  br label %184

184:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #9
  call void @llvm.memset.p0.i64(ptr align 8 %13, i8 0, i64 24, i1 false)
  br label %185

185:                                              ; preds = %184
  %186 = getelementptr inbounds %struct.s2n_unique_ticket_key, ptr %8, i32 0, i32 2
  %187 = getelementptr inbounds [32 x i8], ptr %186, i64 0, i64 0
  %188 = call i32 @s2n_blob_init(ptr noundef %13, ptr noundef %187, i32 noundef 32)
  %189 = icmp sgt i32 %188, -1
  br i1 %189, label %192, label %190

190:                                              ; preds = %185
  %191 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %191, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %485

192:                                              ; preds = %185
  br label %193

193:                                              ; preds = %192
  br label %194

194:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  call void @llvm.memset.p0.i64(ptr align 8 %14, i8 0, i64 8, i1 false)
  br label %195

195:                                              ; preds = %194
  %196 = call i32 @s2n_session_key_alloc(ptr noundef %14)
  %197 = icmp sgt i32 %196, -1
  br i1 %197, label %200, label %198

198:                                              ; preds = %195
  %199 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %199, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %483

200:                                              ; preds = %195
  br label %201

201:                                              ; preds = %200
  br label %202

202:                                              ; preds = %201
  br label %203

203:                                              ; preds = %202
  %204 = load ptr, ptr getelementptr inbounds (%struct.s2n_cipher, ptr @s2n_aes256_gcm, i32 0, i32 4), align 8, !tbaa !16
  %205 = call i32 %204(ptr noundef %14)
  %206 = getelementptr inbounds %struct.s2n_result, ptr %15, i32 0, i32 0
  store i32 %205, ptr %206, align 4
  %207 = getelementptr inbounds %struct.s2n_result, ptr %15, i32 0, i32 0
  %208 = load i32, ptr %207, align 4
  %209 = call zeroext i1 @s2n_result_is_ok(i32 %208)
  br i1 %209, label %212, label %210

210:                                              ; preds = %203
  %211 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %211, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %483

212:                                              ; preds = %203
  br label %213

213:                                              ; preds = %212
  br label %214

214:                                              ; preds = %213
  br label %215

215:                                              ; preds = %214
  %216 = load ptr, ptr getelementptr inbounds (%struct.s2n_cipher, ptr @s2n_aes256_gcm, i32 0, i32 6), align 8, !tbaa !18
  %217 = call i32 %216(ptr noundef %14, ptr noundef %13)
  %218 = getelementptr inbounds %struct.s2n_result, ptr %16, i32 0, i32 0
  store i32 %217, ptr %218, align 4
  %219 = getelementptr inbounds %struct.s2n_result, ptr %16, i32 0, i32 0
  %220 = load i32, ptr %219, align 4
  %221 = call zeroext i1 @s2n_result_is_ok(i32 %220)
  br i1 %221, label %224, label %222

222:                                              ; preds = %215
  %223 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %223, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %483

224:                                              ; preds = %215
  br label %225

225:                                              ; preds = %224
  br label %226

226:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #9
  call void @llvm.memset.p0.i64(ptr align 16 %17, i8 0, i64 32, i1 false)
  br label %227

227:                                              ; preds = %226
  %228 = load ptr, ptr %6, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.s2n_ticket_key, ptr %228, i32 0, i32 1
  %230 = getelementptr inbounds [32 x i8], ptr %229, i64 0, i64 0
  %231 = getelementptr inbounds [32 x i8], ptr %17, i64 0, i64 0
  %232 = call zeroext i1 @s2n_constant_time_equals(ptr noundef %230, ptr noundef %231, i32 noundef 32)
  br i1 %232, label %233, label %267

233:                                              ; preds = %227
  br label %234

234:                                              ; preds = %233
  br label %235

235:                                              ; preds = %234
  %236 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %237 = getelementptr inbounds %struct.s2n_debug_info, ptr %236, i32 0, i32 0
  store ptr @.str.34, ptr %237, align 8, !tbaa !9
  %238 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %239 = getelementptr inbounds %struct.s2n_debug_info, ptr %238, i32 0, i32 0
  %240 = load ptr, ptr %239, align 8, !tbaa !9
  %241 = getelementptr inbounds i8, ptr %240, i64 21
  %242 = call ptr @strrchr(ptr noundef %241, i32 noundef 47) #8
  %243 = icmp ne ptr %242, null
  br i1 %243, label %244, label %251

244:                                              ; preds = %235
  %245 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %246 = getelementptr inbounds %struct.s2n_debug_info, ptr %245, i32 0, i32 0
  %247 = load ptr, ptr %246, align 8, !tbaa !9
  %248 = getelementptr inbounds i8, ptr %247, i64 21
  %249 = call ptr @strrchr(ptr noundef %248, i32 noundef 47) #8
  %250 = getelementptr inbounds i8, ptr %249, i64 1
  br label %256

251:                                              ; preds = %235
  %252 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %253 = getelementptr inbounds %struct.s2n_debug_info, ptr %252, i32 0, i32 0
  %254 = load ptr, ptr %253, align 8, !tbaa !9
  %255 = getelementptr inbounds i8, ptr %254, i64 21
  br label %256

256:                                              ; preds = %251, %244
  %257 = phi ptr [ %250, %244 ], [ %255, %251 ]
  %258 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %259 = getelementptr inbounds %struct.s2n_debug_info, ptr %258, i32 0, i32 1
  store ptr %257, ptr %259, align 8, !tbaa !11
  %260 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653223, ptr %260, align 4, !tbaa !12
  %261 = call i32 @s2n_calculate_stacktrace()
  br label %262

262:                                              ; preds = %256
  br label %263

263:                                              ; preds = %262
  %264 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %264, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %482

265:                                              ; No predecessors!
  br label %266

266:                                              ; preds = %265
  br label %267

267:                                              ; preds = %266, %227
  br label %268

268:                                              ; preds = %267
  br label %269

269:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 28, ptr %18) #9
  call void @llvm.memset.p0.i64(ptr align 16 %18, i8 0, i64 28, i1 false)
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #9
  call void @llvm.memset.p0.i64(ptr align 8 %19, i8 0, i64 24, i1 false)
  br label %270

270:                                              ; preds = %269
  %271 = getelementptr inbounds [28 x i8], ptr %18, i64 0, i64 0
  %272 = call i32 @s2n_blob_init(ptr noundef %19, ptr noundef %271, i32 noundef 28)
  %273 = icmp sgt i32 %272, -1
  br i1 %273, label %276, label %274

274:                                              ; preds = %270
  %275 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %275, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %481

276:                                              ; preds = %270
  br label %277

277:                                              ; preds = %276
  br label %278

278:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 40, ptr %20) #9
  call void @llvm.memset.p0.i64(ptr align 8 %20, i8 0, i64 40, i1 false)
  br label %279

279:                                              ; preds = %278
  %280 = call i32 @s2n_stuffer_init(ptr noundef %20, ptr noundef %19)
  %281 = icmp sgt i32 %280, -1
  br i1 %281, label %284, label %282

282:                                              ; preds = %279
  %283 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %283, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %480

284:                                              ; preds = %279
  br label %285

285:                                              ; preds = %284
  br label %286

286:                                              ; preds = %285
  br label %287

287:                                              ; preds = %286
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.s2n_ticket_key, ptr %288, i32 0, i32 2
  %290 = getelementptr inbounds [12 x i8], ptr %289, i64 0, i64 0
  %291 = call i32 @s2n_stuffer_write_bytes(ptr noundef %20, ptr noundef %290, i32 noundef 12)
  %292 = icmp sgt i32 %291, -1
  br i1 %292, label %295, label %293

293:                                              ; preds = %287
  %294 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %294, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %480

295:                                              ; preds = %287
  br label %296

296:                                              ; preds = %295
  br label %297

297:                                              ; preds = %296
  br label %298

298:                                              ; preds = %297
  %299 = load ptr, ptr %6, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.s2n_ticket_key, ptr %299, i32 0, i32 0
  %301 = getelementptr inbounds [16 x i8], ptr %300, i64 0, i64 0
  %302 = call i32 @s2n_stuffer_write_bytes(ptr noundef %20, ptr noundef %301, i32 noundef 16)
  %303 = icmp sgt i32 %302, -1
  br i1 %303, label %306, label %304

304:                                              ; preds = %298
  %305 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %305, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %480

306:                                              ; preds = %298
  br label %307

307:                                              ; preds = %306
  br label %308

308:                                              ; preds = %307
  br label %309

309:                                              ; preds = %308
  %310 = load ptr, ptr %7, align 8, !tbaa !5
  %311 = call i32 @s2n_stuffer_write_uint8(ptr noundef %310, i8 noundef zeroext 1)
  %312 = icmp sgt i32 %311, -1
  br i1 %312, label %315, label %313

313:                                              ; preds = %309
  %314 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %314, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %480

315:                                              ; preds = %309
  br label %316

316:                                              ; preds = %315
  br label %317

317:                                              ; preds = %316
  br label %318

318:                                              ; preds = %317
  %319 = load ptr, ptr %7, align 8, !tbaa !5
  %320 = load ptr, ptr %6, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.s2n_ticket_key, ptr %320, i32 0, i32 0
  %322 = getelementptr inbounds [16 x i8], ptr %321, i64 0, i64 0
  %323 = call i32 @s2n_stuffer_write_bytes(ptr noundef %319, ptr noundef %322, i32 noundef 16)
  %324 = icmp sgt i32 %323, -1
  br i1 %324, label %327, label %325

325:                                              ; preds = %318
  %326 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %326, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %480

327:                                              ; preds = %318
  br label %328

328:                                              ; preds = %327
  br label %329

329:                                              ; preds = %328
  br label %330

330:                                              ; preds = %329
  %331 = load ptr, ptr %7, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.s2n_unique_ticket_key, ptr %8, i32 0, i32 1
  %333 = getelementptr inbounds [32 x i8], ptr %332, i64 0, i64 0
  %334 = call i32 @s2n_stuffer_write_bytes(ptr noundef %331, ptr noundef %333, i32 noundef 32)
  %335 = icmp sgt i32 %334, -1
  br i1 %335, label %338, label %336

336:                                              ; preds = %330
  %337 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %337, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %480

338:                                              ; preds = %330
  br label %339

339:                                              ; preds = %338
  br label %340

340:                                              ; preds = %339
  call void @llvm.lifetime.start.p0(i64 12, ptr %21) #9
  call void @llvm.memset.p0.i64(ptr align 1 %21, i8 0, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #9
  call void @llvm.memset.p0.i64(ptr align 8 %22, i8 0, i64 24, i1 false)
  br label %341

341:                                              ; preds = %340
  %342 = getelementptr inbounds [12 x i8], ptr %21, i64 0, i64 0
  %343 = call i32 @s2n_blob_init(ptr noundef %22, ptr noundef %342, i32 noundef 12)
  %344 = icmp sgt i32 %343, -1
  br i1 %344, label %347, label %345

345:                                              ; preds = %341
  %346 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %346, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %479

347:                                              ; preds = %341
  br label %348

348:                                              ; preds = %347
  br label %349

349:                                              ; preds = %348
  br label %350

350:                                              ; preds = %349
  %351 = call i32 @s2n_get_public_random_data(ptr noundef %22)
  %352 = getelementptr inbounds %struct.s2n_result, ptr %23, i32 0, i32 0
  store i32 %351, ptr %352, align 4
  %353 = getelementptr inbounds %struct.s2n_result, ptr %23, i32 0, i32 0
  %354 = load i32, ptr %353, align 4
  %355 = call zeroext i1 @s2n_result_is_ok(i32 %354)
  br i1 %355, label %358, label %356

356:                                              ; preds = %350
  %357 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %357, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %479

358:                                              ; preds = %350
  br label %359

359:                                              ; preds = %358
  br label %360

360:                                              ; preds = %359
  br label %361

361:                                              ; preds = %360
  %362 = load ptr, ptr %7, align 8, !tbaa !5
  %363 = call i32 @s2n_stuffer_write(ptr noundef %362, ptr noundef %22)
  %364 = icmp sgt i32 %363, -1
  br i1 %364, label %367, label %365

365:                                              ; preds = %361
  %366 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %366, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %479

367:                                              ; preds = %361
  br label %368

368:                                              ; preds = %367
  br label %369

369:                                              ; preds = %368
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %370 = load ptr, ptr %7, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.s2n_stuffer, ptr %370, i32 0, i32 2
  %372 = load i32, ptr %371, align 4, !tbaa !19
  %373 = load ptr, ptr %7, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.s2n_stuffer, ptr %373, i32 0, i32 1
  %375 = load i32, ptr %374, align 8, !tbaa !22
  %376 = sub i32 %372, %375
  store i32 %376, ptr %24, align 4, !tbaa !12
  br label %377

377:                                              ; preds = %369
  %378 = load ptr, ptr %5, align 8, !tbaa !5
  %379 = load ptr, ptr %7, align 8, !tbaa !5
  %380 = call i32 @s2n_serialize_resumption_state(ptr noundef %378, ptr noundef %379)
  %381 = getelementptr inbounds %struct.s2n_result, ptr %25, i32 0, i32 0
  store i32 %380, ptr %381, align 4
  %382 = getelementptr inbounds %struct.s2n_result, ptr %25, i32 0, i32 0
  %383 = load i32, ptr %382, align 4
  %384 = call zeroext i1 @s2n_result_is_ok(i32 %383)
  br i1 %384, label %387, label %385

385:                                              ; preds = %377
  %386 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %386, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %478

387:                                              ; preds = %377
  br label %388

388:                                              ; preds = %387
  br label %389

389:                                              ; preds = %388
  br label %390

390:                                              ; preds = %389
  %391 = load ptr, ptr %7, align 8, !tbaa !5
  %392 = call i32 @s2n_stuffer_skip_write(ptr noundef %391, i32 noundef 16)
  %393 = icmp sgt i32 %392, -1
  br i1 %393, label %396, label %394

394:                                              ; preds = %390
  %395 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %395, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %478

396:                                              ; preds = %390
  br label %397

397:                                              ; preds = %396
  br label %398

398:                                              ; preds = %397
  call void @llvm.lifetime.start.p0(i64 24, ptr %26) #9
  call void @llvm.memset.p0.i64(ptr align 8 %26, i8 0, i64 24, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr %27) #9
  %399 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %27, ptr align 8 %399, i64 40, i1 false), !tbaa.struct !23
  br label %400

400:                                              ; preds = %398
  %401 = load i32, ptr %24, align 4, !tbaa !12
  %402 = call i32 @s2n_stuffer_skip_read(ptr noundef %27, i32 noundef %401)
  %403 = icmp sgt i32 %402, -1
  br i1 %403, label %406, label %404

404:                                              ; preds = %400
  %405 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %405, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %477

406:                                              ; preds = %400
  br label %407

407:                                              ; preds = %406
  br label %408

408:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  %409 = getelementptr inbounds %struct.s2n_stuffer, ptr %27, i32 0, i32 2
  %410 = load i32, ptr %409, align 4, !tbaa !19
  %411 = getelementptr inbounds %struct.s2n_stuffer, ptr %27, i32 0, i32 1
  %412 = load i32, ptr %411, align 8, !tbaa !22
  %413 = sub i32 %410, %412
  store i32 %413, ptr %28, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %414 = load i32, ptr %28, align 4, !tbaa !12
  %415 = call ptr @s2n_stuffer_raw_read(ptr noundef %27, i32 noundef %414)
  store ptr %415, ptr %29, align 8, !tbaa !5
  br label %416

416:                                              ; preds = %408
  %417 = load ptr, ptr %29, align 8, !tbaa !5
  %418 = icmp ne ptr %417, null
  br i1 %418, label %453, label %419

419:                                              ; preds = %416
  br label %420

420:                                              ; preds = %419
  br label %421

421:                                              ; preds = %420
  %422 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %423 = getelementptr inbounds %struct.s2n_debug_info, ptr %422, i32 0, i32 0
  store ptr @.str.35, ptr %423, align 8, !tbaa !9
  %424 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %425 = getelementptr inbounds %struct.s2n_debug_info, ptr %424, i32 0, i32 0
  %426 = load ptr, ptr %425, align 8, !tbaa !9
  %427 = getelementptr inbounds i8, ptr %426, i64 21
  %428 = call ptr @strrchr(ptr noundef %427, i32 noundef 47) #8
  %429 = icmp ne ptr %428, null
  br i1 %429, label %430, label %437

430:                                              ; preds = %421
  %431 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %432 = getelementptr inbounds %struct.s2n_debug_info, ptr %431, i32 0, i32 0
  %433 = load ptr, ptr %432, align 8, !tbaa !9
  %434 = getelementptr inbounds i8, ptr %433, i64 21
  %435 = call ptr @strrchr(ptr noundef %434, i32 noundef 47) #8
  %436 = getelementptr inbounds i8, ptr %435, i64 1
  br label %442

437:                                              ; preds = %421
  %438 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %439 = getelementptr inbounds %struct.s2n_debug_info, ptr %438, i32 0, i32 0
  %440 = load ptr, ptr %439, align 8, !tbaa !9
  %441 = getelementptr inbounds i8, ptr %440, i64 21
  br label %442

442:                                              ; preds = %437, %430
  %443 = phi ptr [ %436, %430 ], [ %441, %437 ]
  %444 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %445 = getelementptr inbounds %struct.s2n_debug_info, ptr %444, i32 0, i32 1
  store ptr %443, ptr %445, align 8, !tbaa !11
  %446 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %446, align 4, !tbaa !12
  %447 = call i32 @s2n_calculate_stacktrace()
  br label %448

448:                                              ; preds = %442
  br label %449

449:                                              ; preds = %448
  %450 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %450, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %476

451:                                              ; No predecessors!
  br label %452

452:                                              ; preds = %451
  br label %453

453:                                              ; preds = %452, %416
  br label %454

454:                                              ; preds = %453
  br label %455

455:                                              ; preds = %454
  br label %456

456:                                              ; preds = %455
  %457 = load ptr, ptr %29, align 8, !tbaa !5
  %458 = load i32, ptr %28, align 4, !tbaa !12
  %459 = call i32 @s2n_blob_init(ptr noundef %26, ptr noundef %457, i32 noundef %458)
  %460 = icmp sgt i32 %459, -1
  br i1 %460, label %463, label %461

461:                                              ; preds = %456
  %462 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %462, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %476

463:                                              ; preds = %456
  br label %464

464:                                              ; preds = %463
  br label %465

465:                                              ; preds = %464
  br label %466

466:                                              ; preds = %465
  %467 = load ptr, ptr getelementptr inbounds (%struct.s2n_aead_cipher, ptr getelementptr inbounds (%struct.s2n_cipher, ptr @s2n_aes256_gcm, i32 0, i32 1), i32 0, i32 4), align 8, !tbaa !24
  %468 = call i32 %467(ptr noundef %14, ptr noundef %22, ptr noundef %19, ptr noundef %26, ptr noundef %26)
  %469 = icmp sgt i32 %468, -1
  br i1 %469, label %472, label %470

470:                                              ; preds = %466
  %471 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %471, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %476

472:                                              ; preds = %466
  br label %473

473:                                              ; preds = %472
  br label %474

474:                                              ; preds = %473
  %475 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 0, ptr %475, align 4, !tbaa !14
  store i32 1, ptr %9, align 4
  br label %476

476:                                              ; preds = %474, %470, %461, %449
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  br label %477

477:                                              ; preds = %476, %404
  call void @llvm.lifetime.end.p0(i64 40, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #9
  br label %478

478:                                              ; preds = %477, %394, %385
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %479

479:                                              ; preds = %478, %365, %356, %345
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %21) #9
  br label %480

480:                                              ; preds = %479, %336, %325, %313, %304, %293, %282
  call void @llvm.lifetime.end.p0(i64 40, ptr %20) #9
  br label %481

481:                                              ; preds = %480, %274
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr %18) #9
  br label %482

482:                                              ; preds = %481, %263
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #9
  br label %483

483:                                              ; preds = %482, %222, %210, %198
  %484 = call i32 @s2n_session_key_free(ptr noundef %14)
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  br label %485

485:                                              ; preds = %483, %190
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #9
  br label %486

486:                                              ; preds = %485, %180, %169, %158
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #9
  br label %487

487:                                              ; preds = %486, %148
  call void @llvm.lifetime.end.p0(i64 88, ptr %8) #9
  br label %488

488:                                              ; preds = %487, %136, %99, %62
  %489 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  %490 = load i32, ptr %489, align 4
  ret i32 %490
}

declare zeroext i1 @s2n_constant_time_equals(ptr noundef, ptr noundef, i32 noundef) #3

declare i32 @s2n_get_public_random_data(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden i32 @s2n_resume_generate_unique_ticket_key(ptr noundef) #6

declare i32 @s2n_session_key_free(ptr noundef) #3

declare i32 @s2n_session_key_alloc(ptr noundef) #3

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

declare i32 @s2n_stuffer_write_uint8(ptr noundef, i8 noundef zeroext) #3

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"s2n_debug_info", !6, i64 0, !6, i64 8}
!11 = !{!10, !6, i64 8}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !13, i64 0}
!15 = !{!"", !13, i64 0}
!16 = !{!17, !6, i64 64}
!17 = !{!"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}
!18 = !{!17, !6, i64 80}
!19 = !{!20, !13, i64 28}
!20 = !{!"s2n_stuffer", !21, i64 0, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 36, !13, i64 36}
!21 = !{!"s2n_blob", !6, i64 0, !13, i64 8, !13, i64 12, !13, i64 16}
!22 = !{!20, !13, i64 24}
!23 = !{i64 0, i64 8, !5, i64 8, i64 4, !12, i64 12, i64 4, !12, i64 16, i64 1, !24, i64 24, i64 4, !12, i64 28, i64 4, !12, i64 32, i64 4, !12, i64 36, i64 1, !24}
!24 = !{!7, !7, i64 0}


; 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_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_unique_ticket_key = type { %struct.s2n_blob, [32 x i8], [32 x i8] }
%struct.s2n_blob = type { ptr, i32, i32, i8 }
%struct.s2n_session_key = type { ptr }
%struct.s2n_stuffer = type { %struct.s2n_blob, i32, 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.31 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [87 x i8], align 1
@s2n_aes256_gcm = external local_unnamed_addr constant %struct.s2n_cipher, align 8
@.str.34 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [87 x i8], align 1

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

; Function Attrs: mustprogress nocallback nofree 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.end.p0(i64 immarg, ptr nocapture) #0

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

; 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(ptr noundef, ptr noundef) local_unnamed_addr #3

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @s2n_resume_encrypt_session_ticket(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #6 {
  %4 = alloca %struct.s2n_unique_ticket_key, align 8
  %5 = alloca %struct.s2n_blob, align 8
  %6 = alloca %struct.s2n_blob, align 8
  %7 = alloca %struct.s2n_session_key, align 8
  %8 = alloca [32 x i8], align 16
  %9 = alloca [28 x i8], align 16
  %10 = alloca %struct.s2n_blob, align 8
  %11 = alloca %struct.s2n_stuffer, align 8
  %12 = alloca [12 x i8], align 1
  %13 = alloca %struct.s2n_blob, align 8
  %14 = alloca %struct.s2n_blob, align 8
  %15 = alloca %struct.s2n_stuffer, align 8
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %16, label %24

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

24:                                               ; preds = %3
  %.not37 = icmp eq ptr %2, null
  br i1 %.not37, label %25, label %33

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

33:                                               ; preds = %24
  %.not39 = icmp eq ptr %1, null
  br i1 %.not39, label %34, label %42

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

42:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %4) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(88) %4, i8 0, i64 88, i1 false)
  %43 = getelementptr inbounds i8, ptr %1, i64 16
  %44 = call i32 @s2n_blob_init(ptr noundef nonnull %4, ptr noundef nonnull %43, i32 noundef 32) #9
  %45 = icmp sgt i32 %44, -1
  br i1 %45, label %46, label %156

46:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %5, i8 0, i64 24, i1 false)
  %47 = getelementptr inbounds i8, ptr %4, i64 24
  %48 = call i32 @s2n_blob_init(ptr noundef nonnull %5, ptr noundef nonnull %47, i32 noundef 32) #9
  %49 = icmp sgt i32 %48, -1
  br i1 %49, label %50, label %155

50:                                               ; preds = %46
  %51 = call i32 @s2n_get_public_random_data(ptr noundef nonnull %5) #9
  %52 = call zeroext i1 @s2n_result_is_ok(i32 %51)
  br i1 %52, label %53, label %155

53:                                               ; preds = %50
  %54 = call i32 @s2n_resume_generate_unique_ticket_key(ptr noundef nonnull %4)
  %55 = call zeroext i1 @s2n_result_is_ok(i32 %54)
  br i1 %55, label %56, label %155

56:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %6, i8 0, i64 24, i1 false)
  %57 = getelementptr inbounds i8, ptr %4, i64 56
  %58 = call i32 @s2n_blob_init(ptr noundef nonnull %6, ptr noundef nonnull %57, i32 noundef 32) #9
  %59 = icmp sgt i32 %58, -1
  br i1 %59, label %60, label %154

60:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #9
  store i64 0, ptr %7, align 8
  %61 = call i32 @s2n_session_key_alloc(ptr noundef nonnull %7) #9
  %62 = icmp sgt i32 %61, -1
  br i1 %62, label %63, label %152

63:                                               ; preds = %60
  %64 = load ptr, ptr getelementptr inbounds (i8, ptr @s2n_aes256_gcm, i64 64), align 8, !tbaa !13
  %65 = call i32 %64(ptr noundef nonnull %7) #9
  %66 = call zeroext i1 @s2n_result_is_ok(i32 %65)
  br i1 %66, label %67, label %152

67:                                               ; preds = %63
  %68 = load ptr, ptr getelementptr inbounds (i8, ptr @s2n_aes256_gcm, i64 80), align 8, !tbaa !15
  %69 = call i32 %68(ptr noundef nonnull %7, ptr noundef nonnull %6) #9
  %70 = call zeroext i1 @s2n_result_is_ok(i32 %69)
  br i1 %70, label %71, label %152

71:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %8, i8 0, i64 32, i1 false)
  %72 = call zeroext i1 @s2n_constant_time_equals(ptr noundef nonnull %43, ptr noundef nonnull %8, i32 noundef 32) #9
  br i1 %72, label %73, label %81

73:                                               ; preds = %71
  %74 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.34, ptr %74, align 8, !tbaa !5
  %75 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.34, i64 21), i32 noundef 47) #8
  %.not43 = icmp eq ptr %75, null
  %76 = getelementptr inbounds i8, ptr %75, i64 1
  %77 = select i1 %.not43, ptr getelementptr inbounds (i8, ptr @.str.34, i64 21), ptr %76
  %78 = getelementptr inbounds i8, ptr %74, i64 8
  store ptr %77, ptr %78, align 8, !tbaa !10
  %79 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653223, ptr %79, align 4, !tbaa !11
  %80 = call i32 @s2n_calculate_stacktrace() #9
  br label %151

81:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %9) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(28) %9, i8 0, i64 28, i1 false)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %10, i8 0, i64 24, i1 false)
  %82 = call i32 @s2n_blob_init(ptr noundef nonnull %10, ptr noundef nonnull %9, i32 noundef 28) #9
  %83 = icmp sgt i32 %82, -1
  br i1 %83, label %84, label %150

84:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %11) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %11, i8 0, i64 40, i1 false)
  %85 = call i32 @s2n_stuffer_init(ptr noundef nonnull %11, ptr noundef nonnull %10) #9
  %86 = icmp sgt i32 %85, -1
  br i1 %86, label %87, label %149

87:                                               ; preds = %84
  %88 = getelementptr inbounds i8, ptr %1, i64 48
  %89 = call i32 @s2n_stuffer_write_bytes(ptr noundef nonnull %11, ptr noundef nonnull %88, i32 noundef 12) #9
  %90 = icmp sgt i32 %89, -1
  br i1 %90, label %91, label %149

91:                                               ; preds = %87
  %92 = call i32 @s2n_stuffer_write_bytes(ptr noundef nonnull %11, ptr noundef nonnull %1, i32 noundef 16) #9
  %93 = icmp sgt i32 %92, -1
  br i1 %93, label %94, label %149

94:                                               ; preds = %91
  %95 = call i32 @s2n_stuffer_write_uint8(ptr noundef nonnull %2, i8 noundef zeroext 1) #9
  %96 = icmp sgt i32 %95, -1
  br i1 %96, label %97, label %149

97:                                               ; preds = %94
  %98 = call i32 @s2n_stuffer_write_bytes(ptr noundef nonnull %2, ptr noundef nonnull %1, i32 noundef 16) #9
  %99 = icmp sgt i32 %98, -1
  br i1 %99, label %100, label %149

100:                                              ; preds = %97
  %101 = call i32 @s2n_stuffer_write_bytes(ptr noundef nonnull %2, ptr noundef nonnull %47, i32 noundef 32) #9
  %102 = icmp sgt i32 %101, -1
  br i1 %102, label %103, label %149

103:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %12) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(12) %12, i8 0, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %13, i8 0, i64 24, i1 false)
  %104 = call i32 @s2n_blob_init(ptr noundef nonnull %13, ptr noundef nonnull %12, i32 noundef 12) #9
  %105 = icmp sgt i32 %104, -1
  br i1 %105, label %106, label %148

106:                                              ; preds = %103
  %107 = call i32 @s2n_get_public_random_data(ptr noundef nonnull %13) #9
  %108 = call zeroext i1 @s2n_result_is_ok(i32 %107)
  br i1 %108, label %109, label %148

109:                                              ; preds = %106
  %110 = call i32 @s2n_stuffer_write(ptr noundef nonnull %2, ptr noundef nonnull %13) #9
  %111 = icmp sgt i32 %110, -1
  br i1 %111, label %112, label %148

112:                                              ; preds = %109
  %113 = getelementptr inbounds i8, ptr %2, i64 28
  %114 = load i32, ptr %113, align 4, !tbaa !16
  %115 = getelementptr inbounds i8, ptr %2, i64 24
  %116 = load i32, ptr %115, align 8, !tbaa !19
  %117 = sub i32 %114, %116
  %118 = call i32 @s2n_serialize_resumption_state(ptr noundef nonnull %0, ptr noundef nonnull %2)
  %119 = call zeroext i1 @s2n_result_is_ok(i32 %118)
  br i1 %119, label %120, label %148

120:                                              ; preds = %112
  %121 = call i32 @s2n_stuffer_skip_write(ptr noundef nonnull %2, i32 noundef 16) #9
  %122 = icmp sgt i32 %121, -1
  br i1 %122, label %123, label %148

123:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %14, i8 0, i64 24, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %15) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %15, ptr noundef nonnull align 8 dereferenceable(40) %2, i64 40, i1 false), !tbaa.struct !20
  %124 = call i32 @s2n_stuffer_skip_read(ptr noundef nonnull %15, i32 noundef %117) #9
  %125 = icmp sgt i32 %124, -1
  br i1 %125, label %126, label %147

126:                                              ; preds = %123
  %127 = getelementptr inbounds i8, ptr %15, i64 28
  %128 = load i32, ptr %127, align 4, !tbaa !16
  %129 = getelementptr inbounds i8, ptr %15, i64 24
  %130 = load i32, ptr %129, align 8, !tbaa !19
  %131 = sub i32 %128, %130
  %132 = call ptr @s2n_stuffer_raw_read(ptr noundef nonnull %15, i32 noundef %131) #9
  %.not41 = icmp eq ptr %132, null
  br i1 %.not41, label %133, label %141

133:                                              ; preds = %126
  %134 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.35, ptr %134, align 8, !tbaa !5
  %135 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.35, i64 21), i32 noundef 47) #8
  %.not42 = icmp eq ptr %135, null
  %136 = getelementptr inbounds i8, ptr %135, i64 1
  %137 = select i1 %.not42, ptr getelementptr inbounds (i8, ptr @.str.35, 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() #9
  br label %147

141:                                              ; preds = %126
  %142 = call i32 @s2n_blob_init(ptr noundef nonnull %14, ptr noundef nonnull %132, i32 noundef %131) #9
  %143 = icmp sgt i32 %142, -1
  br i1 %143, label %144, label %147

144:                                              ; preds = %141
  %145 = load ptr, ptr getelementptr inbounds (i8, ptr @s2n_aes256_gcm, i64 24), align 8, !tbaa !22
  %146 = call i32 %145(ptr noundef nonnull %7, ptr noundef nonnull %13, ptr noundef nonnull %10, ptr noundef nonnull %14, ptr noundef nonnull %14) #9
  %.lobit = ashr i32 %146, 31
  br label %147

147:                                              ; preds = %133, %141, %144, %123
  %.sroa.027.1 = phi i32 [ -1, %123 ], [ -1, %133 ], [ -1, %141 ], [ %.lobit, %144 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #9
  br label %148

148:                                              ; preds = %147, %112, %120, %109, %106, %103
  %.sroa.027.3 = phi i32 [ -1, %103 ], [ -1, %106 ], [ -1, %109 ], [ %.sroa.027.1, %147 ], [ -1, %112 ], [ -1, %120 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %12) #9
  br label %149

149:                                              ; preds = %100, %97, %94, %91, %87, %84, %148
  %.sroa.027.4 = phi i32 [ %.sroa.027.3, %148 ], [ -1, %84 ], [ -1, %87 ], [ -1, %91 ], [ -1, %94 ], [ -1, %97 ], [ -1, %100 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #9
  br label %150

150:                                              ; preds = %81, %149
  %.sroa.027.5 = phi i32 [ %.sroa.027.4, %149 ], [ -1, %81 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %9) #9
  br label %151

151:                                              ; preds = %150, %73
  %.sroa.027.6 = phi i32 [ -1, %73 ], [ %.sroa.027.5, %150 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #9
  br label %152

152:                                              ; preds = %67, %63, %60, %151
  %.sroa.027.7 = phi i32 [ %.sroa.027.6, %151 ], [ -1, %60 ], [ -1, %63 ], [ -1, %67 ]
  %153 = call i32 @s2n_session_key_free(ptr noundef nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  br label %154

154:                                              ; preds = %56, %152
  %.sroa.027.8 = phi i32 [ %.sroa.027.7, %152 ], [ -1, %56 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #9
  br label %155

155:                                              ; preds = %53, %50, %46, %154
  %.sroa.027.9 = phi i32 [ %.sroa.027.8, %154 ], [ -1, %46 ], [ -1, %50 ], [ -1, %53 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  br label %156

156:                                              ; preds = %42, %155
  %.sroa.027.10 = phi i32 [ %.sroa.027.9, %155 ], [ -1, %42 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %4) #9
  br label %157

157:                                              ; preds = %156, %34, %25, %16
  %.sroa.027.11 = phi i32 [ %.sroa.027.10, %156 ], [ -1, %34 ], [ -1, %25 ], [ -1, %16 ]
  ret i32 %.sroa.027.11
}

declare zeroext i1 @s2n_constant_time_equals(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @s2n_get_public_random_data(ptr noundef) local_unnamed_addr #3

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

declare i32 @s2n_session_key_free(ptr noundef) local_unnamed_addr #3

declare i32 @s2n_session_key_alloc(ptr noundef) local_unnamed_addr #3

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

declare i32 @s2n_stuffer_write_uint8(ptr noundef, i8 noundef zeroext) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 64}
!14 = !{!"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}
!15 = !{!14, !7, i64 80}
!16 = !{!17, !12, i64 28}
!17 = !{!"s2n_stuffer", !18, i64 0, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 36, !12, i64 36}
!18 = !{!"s2n_blob", !7, i64 0, !12, i64 8, !12, i64 12, !12, i64 16}
!19 = !{!17, !12, i64 24}
!20 = !{i64 0, i64 8, !21, i64 8, i64 4, !11, i64 12, i64 4, !11, i64 16, i64 1, !22, i64 24, i64 4, !11, i64 28, i64 4, !11, i64 32, i64 4, !11, i64 36, i64 1, !22}
!21 = !{!7, !7, i64 0}
!22 = !{!8, !8, i64 0}


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