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

; 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_security_policy = type { i8, ptr, ptr, ptr, ptr, ptr, ptr, i8, [2 x i8] }
%struct.s2n_security_policy_selection = type { ptr, ptr, i8 }
%struct.s2n_debug_info = type { ptr, ptr }
%struct.s2n_result = type { i32 }
%struct.s2n_security_rule_result = type { i8, i8, %struct.s2n_stuffer }
%struct.s2n_stuffer = type { %struct.s2n_blob, i32, i32, i32, i8 }
%struct.s2n_blob = type { ptr, i32, i32, i8 }
%struct.s2n_ecc_preferences = type { i8, ptr }
%struct.s2n_cipher_preferences = type { i16, ptr, i8 }
%struct.s2n_cipher_suite = type { i8, ptr, ptr, [2 x i8], ptr, i32, ptr, [2 x ptr], i8, ptr, ptr, i32, i8 }
%struct.s2n_kem_preferences = type { i8, ptr, i8, ptr, i8 }

@security_policy_null = external dso_local constant %struct.s2n_security_policy, align 8
@security_policy_selection = external dso_local global [119 x %struct.s2n_security_policy_selection], align 16
@_s2n_debug_info = external thread_local global %struct.s2n_debug_info, align 8
@s2n_errno = external thread_local global i32, align 4
@.str.151 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.152 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.154 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.155 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.156 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.157 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.158 = external hidden unnamed_addr constant [99 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(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #3

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

; Function Attrs: nounwind uwtable
define dso_local i32 @s2n_security_policies_init() #5 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %struct.s2n_result, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %struct.s2n_security_rule_result, align 8
  %14 = alloca %struct.s2n_result, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #7
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %15

15:                                               ; preds = %505, %0
  %16 = load i32, ptr %2, align 4, !tbaa !5
  %17 = sext i32 %16 to i64
  %18 = getelementptr inbounds [119 x %struct.s2n_security_policy_selection], ptr @security_policy_selection, i64 0, i64 %17
  %19 = getelementptr inbounds %struct.s2n_security_policy_selection, ptr %18, i32 0, i32 0
  %20 = load ptr, ptr %19, align 8, !tbaa !9
  %21 = icmp ne ptr %20, null
  br i1 %21, label %23, label %22

22:                                               ; preds = %15
  store i32 2, ptr %3, align 4
  br label %508

23:                                               ; preds = %15
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  %24 = load i32, ptr %2, align 4, !tbaa !5
  %25 = sext i32 %24 to i64
  %26 = getelementptr inbounds [119 x %struct.s2n_security_policy_selection], ptr @security_policy_selection, i64 0, i64 %25
  %27 = getelementptr inbounds %struct.s2n_security_policy_selection, ptr %26, i32 0, i32 1
  %28 = load ptr, ptr %27, align 8, !tbaa !12
  store ptr %28, ptr %4, align 8, !tbaa !13
  br label %29

29:                                               ; preds = %23
  %30 = load ptr, ptr %4, align 8, !tbaa !13
  %31 = icmp ne ptr %30, null
  br i1 %31, label %65, label %32

32:                                               ; preds = %29
  br label %33

33:                                               ; preds = %32
  br label %34

34:                                               ; preds = %33
  %35 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %36 = getelementptr inbounds %struct.s2n_debug_info, ptr %35, i32 0, i32 0
  store ptr @.str.151, ptr %36, align 8, !tbaa !14
  %37 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %38 = getelementptr inbounds %struct.s2n_debug_info, ptr %37, i32 0, i32 0
  %39 = load ptr, ptr %38, align 8, !tbaa !14
  %40 = getelementptr inbounds i8, ptr %39, i64 21
  %41 = call ptr @strrchr(ptr noundef %40, i32 noundef 47) #8
  %42 = icmp ne ptr %41, null
  br i1 %42, label %43, label %50

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

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

55:                                               ; preds = %50, %43
  %56 = phi ptr [ %49, %43 ], [ %54, %50 ]
  %57 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %58 = getelementptr inbounds %struct.s2n_debug_info, ptr %57, i32 0, i32 1
  store ptr %56, ptr %58, align 8, !tbaa !16
  %59 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %59, align 4, !tbaa !5
  %60 = call i32 @s2n_calculate_stacktrace()
  br label %61

61:                                               ; preds = %55
  br label %62

62:                                               ; preds = %61
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %502

63:                                               ; No predecessors!
  br label %64

64:                                               ; preds = %63
  br label %65

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

66:                                               ; preds = %65
  br label %67

67:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #7
  %68 = load ptr, ptr %4, align 8, !tbaa !13
  %69 = getelementptr inbounds %struct.s2n_security_policy, ptr %68, i32 0, i32 1
  %70 = load ptr, ptr %69, align 8, !tbaa !17
  store ptr %70, ptr %5, align 8, !tbaa !13
  br label %71

71:                                               ; preds = %67
  %72 = load ptr, ptr %5, align 8, !tbaa !13
  %73 = icmp ne ptr %72, null
  br i1 %73, label %107, label %74

74:                                               ; preds = %71
  br label %75

75:                                               ; preds = %74
  br label %76

76:                                               ; preds = %75
  %77 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %78 = getelementptr inbounds %struct.s2n_debug_info, ptr %77, i32 0, i32 0
  store ptr @.str.152, ptr %78, align 8, !tbaa !14
  %79 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %80 = getelementptr inbounds %struct.s2n_debug_info, ptr %79, i32 0, i32 0
  %81 = load ptr, ptr %80, align 8, !tbaa !14
  %82 = getelementptr inbounds i8, ptr %81, i64 21
  %83 = call ptr @strrchr(ptr noundef %82, i32 noundef 47) #8
  %84 = icmp ne ptr %83, null
  br i1 %84, label %85, label %92

85:                                               ; preds = %76
  %86 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %87 = getelementptr inbounds %struct.s2n_debug_info, ptr %86, i32 0, i32 0
  %88 = load ptr, ptr %87, align 8, !tbaa !14
  %89 = getelementptr inbounds i8, ptr %88, i64 21
  %90 = call ptr @strrchr(ptr noundef %89, i32 noundef 47) #8
  %91 = getelementptr inbounds i8, ptr %90, i64 1
  br label %97

92:                                               ; preds = %76
  %93 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %94 = getelementptr inbounds %struct.s2n_debug_info, ptr %93, i32 0, i32 0
  %95 = load ptr, ptr %94, align 8, !tbaa !14
  %96 = getelementptr inbounds i8, ptr %95, i64 21
  br label %97

97:                                               ; preds = %92, %85
  %98 = phi ptr [ %91, %85 ], [ %96, %92 ]
  %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 1
  store ptr %98, ptr %100, align 8, !tbaa !16
  %101 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %101, align 4, !tbaa !5
  %102 = call i32 @s2n_calculate_stacktrace()
  br label %103

103:                                              ; preds = %97
  br label %104

104:                                              ; preds = %103
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %501

105:                                              ; No predecessors!
  br label %106

106:                                              ; preds = %105
  br label %107

107:                                              ; preds = %106, %71
  br label %108

108:                                              ; preds = %107
  br label %109

109:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  %110 = load ptr, ptr %4, align 8, !tbaa !13
  %111 = getelementptr inbounds %struct.s2n_security_policy, ptr %110, i32 0, i32 2
  %112 = load ptr, ptr %111, align 8, !tbaa !20
  store ptr %112, ptr %6, align 8, !tbaa !13
  br label %113

113:                                              ; preds = %109
  %114 = load ptr, ptr %6, align 8, !tbaa !13
  %115 = icmp ne ptr %114, null
  br i1 %115, label %149, label %116

116:                                              ; preds = %113
  br label %117

117:                                              ; preds = %116
  br label %118

118:                                              ; preds = %117
  %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
  store ptr @.str.153, ptr %120, align 8, !tbaa !14
  %121 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %122 = getelementptr inbounds %struct.s2n_debug_info, ptr %121, i32 0, i32 0
  %123 = load ptr, ptr %122, align 8, !tbaa !14
  %124 = getelementptr inbounds i8, ptr %123, i64 21
  %125 = call ptr @strrchr(ptr noundef %124, i32 noundef 47) #8
  %126 = icmp ne ptr %125, null
  br i1 %126, label %127, label %134

127:                                              ; preds = %118
  %128 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %129 = getelementptr inbounds %struct.s2n_debug_info, ptr %128, i32 0, i32 0
  %130 = load ptr, ptr %129, align 8, !tbaa !14
  %131 = getelementptr inbounds i8, ptr %130, i64 21
  %132 = call ptr @strrchr(ptr noundef %131, i32 noundef 47) #8
  %133 = getelementptr inbounds i8, ptr %132, i64 1
  br label %139

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

139:                                              ; preds = %134, %127
  %140 = phi ptr [ %133, %127 ], [ %138, %134 ]
  %141 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %142 = getelementptr inbounds %struct.s2n_debug_info, ptr %141, i32 0, i32 1
  store ptr %140, ptr %142, align 8, !tbaa !16
  %143 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %143, align 4, !tbaa !5
  %144 = call i32 @s2n_calculate_stacktrace()
  br label %145

145:                                              ; preds = %139
  br label %146

146:                                              ; preds = %145
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %500

147:                                              ; No predecessors!
  br label %148

148:                                              ; preds = %147
  br label %149

149:                                              ; preds = %148, %113
  br label %150

150:                                              ; preds = %149
  br label %151

151:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  %152 = load ptr, ptr %4, align 8, !tbaa !13
  %153 = getelementptr inbounds %struct.s2n_security_policy, ptr %152, i32 0, i32 5
  %154 = load ptr, ptr %153, align 8, !tbaa !21
  store ptr %154, ptr %7, align 8, !tbaa !13
  br label %155

155:                                              ; preds = %151
  %156 = load ptr, ptr %7, align 8, !tbaa !13
  %157 = icmp ne ptr %156, null
  br i1 %157, label %191, label %158

158:                                              ; preds = %155
  br label %159

159:                                              ; preds = %158
  br label %160

160:                                              ; preds = %159
  %161 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %162 = getelementptr inbounds %struct.s2n_debug_info, ptr %161, i32 0, i32 0
  store ptr @.str.154, ptr %162, align 8, !tbaa !14
  %163 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %164 = getelementptr inbounds %struct.s2n_debug_info, ptr %163, i32 0, i32 0
  %165 = load ptr, ptr %164, align 8, !tbaa !14
  %166 = getelementptr inbounds i8, ptr %165, i64 21
  %167 = call ptr @strrchr(ptr noundef %166, i32 noundef 47) #8
  %168 = icmp ne ptr %167, null
  br i1 %168, label %169, label %176

169:                                              ; preds = %160
  %170 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %171 = getelementptr inbounds %struct.s2n_debug_info, ptr %170, i32 0, i32 0
  %172 = load ptr, ptr %171, align 8, !tbaa !14
  %173 = getelementptr inbounds i8, ptr %172, i64 21
  %174 = call ptr @strrchr(ptr noundef %173, i32 noundef 47) #8
  %175 = getelementptr inbounds i8, ptr %174, i64 1
  br label %181

176:                                              ; preds = %160
  %177 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %178 = getelementptr inbounds %struct.s2n_debug_info, ptr %177, i32 0, i32 0
  %179 = load ptr, ptr %178, align 8, !tbaa !14
  %180 = getelementptr inbounds i8, ptr %179, i64 21
  br label %181

181:                                              ; preds = %176, %169
  %182 = phi ptr [ %175, %169 ], [ %180, %176 ]
  %183 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %184 = getelementptr inbounds %struct.s2n_debug_info, ptr %183, i32 0, i32 1
  store ptr %182, ptr %184, align 8, !tbaa !16
  %185 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %185, align 4, !tbaa !5
  %186 = call i32 @s2n_calculate_stacktrace()
  br label %187

187:                                              ; preds = %181
  br label %188

188:                                              ; preds = %187
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %499

189:                                              ; No predecessors!
  br label %190

190:                                              ; preds = %189
  br label %191

191:                                              ; preds = %190, %155
  br label %192

192:                                              ; preds = %191
  br label %193

193:                                              ; preds = %192
  br label %194

194:                                              ; preds = %193
  %195 = load ptr, ptr %7, align 8, !tbaa !13
  %196 = call i32 @s2n_check_ecc_preferences_curves_list(ptr noundef %195)
  %197 = icmp sgt i32 %196, -1
  br i1 %197, label %199, label %198

198:                                              ; preds = %194
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %499

199:                                              ; preds = %194
  br label %200

200:                                              ; preds = %199
  br label %201

201:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %202 = load ptr, ptr %4, align 8, !tbaa !13
  %203 = getelementptr inbounds %struct.s2n_security_policy, ptr %202, i32 0, i32 4
  %204 = load ptr, ptr %203, align 8, !tbaa !22
  store ptr %204, ptr %8, align 8, !tbaa !13
  %205 = load ptr, ptr %8, align 8, !tbaa !13
  %206 = icmp ne ptr %205, null
  br i1 %206, label %207, label %219

207:                                              ; preds = %201
  br label %208

208:                                              ; preds = %207
  %209 = load ptr, ptr %8, align 8, !tbaa !13
  %210 = call i32 @s2n_validate_certificate_signature_preferences(ptr noundef %209)
  %211 = getelementptr inbounds %struct.s2n_result, ptr %9, i32 0, i32 0
  store i32 %210, ptr %211, align 4
  %212 = getelementptr inbounds %struct.s2n_result, ptr %9, i32 0, i32 0
  %213 = load i32, ptr %212, align 4
  %214 = call zeroext i1 @s2n_result_is_ok(i32 %213)
  br i1 %214, label %216, label %215

215:                                              ; preds = %208
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %498

216:                                              ; preds = %208
  br label %217

217:                                              ; preds = %216
  br label %218

218:                                              ; preds = %217
  br label %219

219:                                              ; preds = %218, %201
  %220 = load ptr, ptr %4, align 8, !tbaa !13
  %221 = icmp ne ptr %220, @security_policy_null
  br i1 %221, label %222, label %265

222:                                              ; preds = %219
  br label %223

223:                                              ; preds = %222
  %224 = load ptr, ptr %7, align 8, !tbaa !13
  %225 = getelementptr inbounds %struct.s2n_ecc_preferences, ptr %224, i32 0, i32 0
  %226 = load i8, ptr %225, align 8, !tbaa !23
  %227 = zext i8 %226 to i32
  %228 = icmp eq i32 %227, 0
  br i1 %228, label %229, label %262

229:                                              ; preds = %223
  br label %230

230:                                              ; preds = %229
  br label %231

231:                                              ; preds = %230
  %232 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %233 = getelementptr inbounds %struct.s2n_debug_info, ptr %232, i32 0, i32 0
  store ptr @.str.155, ptr %233, align 8, !tbaa !14
  %234 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %235 = getelementptr inbounds %struct.s2n_debug_info, ptr %234, i32 0, i32 0
  %236 = load ptr, ptr %235, align 8, !tbaa !14
  %237 = getelementptr inbounds i8, ptr %236, i64 21
  %238 = call ptr @strrchr(ptr noundef %237, i32 noundef 47) #8
  %239 = icmp ne ptr %238, null
  br i1 %239, label %240, label %247

240:                                              ; preds = %231
  %241 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %242 = getelementptr inbounds %struct.s2n_debug_info, ptr %241, i32 0, i32 0
  %243 = load ptr, ptr %242, align 8, !tbaa !14
  %244 = getelementptr inbounds i8, ptr %243, i64 21
  %245 = call ptr @strrchr(ptr noundef %244, i32 noundef 47) #8
  %246 = getelementptr inbounds i8, ptr %245, i64 1
  br label %252

247:                                              ; preds = %231
  %248 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %249 = getelementptr inbounds %struct.s2n_debug_info, ptr %248, i32 0, i32 0
  %250 = load ptr, ptr %249, align 8, !tbaa !14
  %251 = getelementptr inbounds i8, ptr %250, i64 21
  br label %252

252:                                              ; preds = %247, %240
  %253 = phi ptr [ %246, %240 ], [ %251, %247 ]
  %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 1
  store ptr %253, ptr %255, align 8, !tbaa !16
  %256 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762101, ptr %256, align 4, !tbaa !5
  %257 = call i32 @s2n_calculate_stacktrace()
  br label %258

258:                                              ; preds = %252
  br label %259

259:                                              ; preds = %258
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %498

260:                                              ; No predecessors!
  br label %261

261:                                              ; preds = %260
  br label %262

262:                                              ; preds = %261, %223
  br label %263

263:                                              ; preds = %262
  br label %264

264:                                              ; preds = %263
  br label %265

265:                                              ; preds = %264, %219
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %266

266:                                              ; preds = %418, %265
  %267 = load i32, ptr %10, align 4, !tbaa !5
  %268 = load ptr, ptr %5, align 8, !tbaa !13
  %269 = getelementptr inbounds %struct.s2n_cipher_preferences, ptr %268, i32 0, i32 0
  %270 = load i16, ptr %269, align 8, !tbaa !25
  %271 = zext i16 %270 to i32
  %272 = icmp slt i32 %267, %271
  br i1 %272, label %274, label %273

273:                                              ; preds = %266
  store i32 39, ptr %3, align 4
  br label %421

274:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %275 = load ptr, ptr %5, align 8, !tbaa !13
  %276 = getelementptr inbounds %struct.s2n_cipher_preferences, ptr %275, i32 0, i32 1
  %277 = load ptr, ptr %276, align 8, !tbaa !28
  %278 = load i32, ptr %10, align 4, !tbaa !5
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds ptr, ptr %277, i64 %279
  %281 = load ptr, ptr %280, align 8, !tbaa !13
  store ptr %281, ptr %11, align 8, !tbaa !13
  br label %282

282:                                              ; preds = %274
  %283 = load ptr, ptr %11, align 8, !tbaa !13
  %284 = icmp ne ptr %283, null
  br i1 %284, label %318, label %285

285:                                              ; preds = %282
  br label %286

286:                                              ; preds = %285
  br label %287

287:                                              ; preds = %286
  %288 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %289 = getelementptr inbounds %struct.s2n_debug_info, ptr %288, i32 0, i32 0
  store ptr @.str.156, ptr %289, align 8, !tbaa !14
  %290 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %291 = getelementptr inbounds %struct.s2n_debug_info, ptr %290, i32 0, i32 0
  %292 = load ptr, ptr %291, align 8, !tbaa !14
  %293 = getelementptr inbounds i8, ptr %292, i64 21
  %294 = call ptr @strrchr(ptr noundef %293, i32 noundef 47) #8
  %295 = icmp ne ptr %294, null
  br i1 %295, label %296, label %303

296:                                              ; preds = %287
  %297 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %298 = getelementptr inbounds %struct.s2n_debug_info, ptr %297, i32 0, i32 0
  %299 = load ptr, ptr %298, align 8, !tbaa !14
  %300 = getelementptr inbounds i8, ptr %299, i64 21
  %301 = call ptr @strrchr(ptr noundef %300, i32 noundef 47) #8
  %302 = getelementptr inbounds i8, ptr %301, i64 1
  br label %308

303:                                              ; preds = %287
  %304 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %305 = getelementptr inbounds %struct.s2n_debug_info, ptr %304, i32 0, i32 0
  %306 = load ptr, ptr %305, align 8, !tbaa !14
  %307 = getelementptr inbounds i8, ptr %306, i64 21
  br label %308

308:                                              ; preds = %303, %296
  %309 = phi ptr [ %302, %296 ], [ %307, %303 ]
  %310 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %311 = getelementptr inbounds %struct.s2n_debug_info, ptr %310, i32 0, i32 1
  store ptr %309, ptr %311, align 8, !tbaa !16
  %312 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %312, align 4, !tbaa !5
  %313 = call i32 @s2n_calculate_stacktrace()
  br label %314

314:                                              ; preds = %308
  br label %315

315:                                              ; preds = %314
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %415

316:                                              ; No predecessors!
  br label %317

317:                                              ; preds = %316
  br label %318

318:                                              ; preds = %317, %282
  br label %319

319:                                              ; preds = %318
  br label %320

320:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %321 = load ptr, ptr %11, align 8, !tbaa !13
  %322 = getelementptr inbounds %struct.s2n_cipher_suite, ptr %321, i32 0, i32 3
  %323 = getelementptr inbounds [2 x i8], ptr %322, i64 0, i64 0
  store ptr %323, ptr %12, align 8, !tbaa !13
  %324 = load ptr, ptr %11, align 8, !tbaa !13
  %325 = getelementptr inbounds %struct.s2n_cipher_suite, ptr %324, i32 0, i32 12
  %326 = load i8, ptr %325, align 4, !tbaa !29
  %327 = zext i8 %326 to i32
  %328 = icmp sge i32 %327, 34
  br i1 %328, label %329, label %337

329:                                              ; preds = %320
  %330 = load i32, ptr %2, align 4, !tbaa !5
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds [119 x %struct.s2n_security_policy_selection], ptr @security_policy_selection, i64 0, i64 %331
  %333 = getelementptr inbounds %struct.s2n_security_policy_selection, ptr %332, i32 0, i32 2
  %334 = load i8, ptr %333, align 8
  %335 = and i8 %334, -5
  %336 = or i8 %335, 4
  store i8 %336, ptr %333, align 8
  br label %337

337:                                              ; preds = %329, %320
  br label %338

338:                                              ; preds = %337
  %339 = load ptr, ptr %12, align 8, !tbaa !13
  %340 = call zeroext i1 @s2n_is_valid_tls13_cipher(ptr noundef %339)
  %341 = zext i1 %340 to i32
  %342 = load ptr, ptr %11, align 8, !tbaa !13
  %343 = getelementptr inbounds %struct.s2n_cipher_suite, ptr %342, i32 0, i32 12
  %344 = load i8, ptr %343, align 4, !tbaa !29
  %345 = zext i8 %344 to i32
  %346 = icmp sge i32 %345, 34
  %347 = zext i1 %346 to i32
  %348 = xor i32 %341, %347
  %349 = icmp ne i32 %348, 0
  br i1 %349, label %350, label %383

350:                                              ; preds = %338
  br label %351

351:                                              ; preds = %350
  br label %352

352:                                              ; preds = %351
  %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
  store ptr @.str.157, ptr %354, align 8, !tbaa !14
  %355 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %356 = getelementptr inbounds %struct.s2n_debug_info, ptr %355, i32 0, i32 0
  %357 = load ptr, ptr %356, align 8, !tbaa !14
  %358 = getelementptr inbounds i8, ptr %357, i64 21
  %359 = call ptr @strrchr(ptr noundef %358, i32 noundef 47) #8
  %360 = icmp ne ptr %359, null
  br i1 %360, label %361, label %368

361:                                              ; preds = %352
  %362 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %363 = getelementptr inbounds %struct.s2n_debug_info, ptr %362, i32 0, i32 0
  %364 = load ptr, ptr %363, align 8, !tbaa !14
  %365 = getelementptr inbounds i8, ptr %364, i64 21
  %366 = call ptr @strrchr(ptr noundef %365, i32 noundef 47) #8
  %367 = getelementptr inbounds i8, ptr %366, i64 1
  br label %373

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

373:                                              ; preds = %368, %361
  %374 = phi ptr [ %367, %361 ], [ %372, %368 ]
  %375 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %376 = getelementptr inbounds %struct.s2n_debug_info, ptr %375, i32 0, i32 1
  store ptr %374, ptr %376, align 8, !tbaa !16
  %377 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762101, ptr %377, align 4, !tbaa !5
  %378 = call i32 @s2n_calculate_stacktrace()
  br label %379

379:                                              ; preds = %373
  br label %380

380:                                              ; preds = %379
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %414

381:                                              ; No predecessors!
  br label %382

382:                                              ; preds = %381
  br label %383

383:                                              ; preds = %382, %338
  br label %384

384:                                              ; preds = %383
  br label %385

385:                                              ; preds = %384
  %386 = load ptr, ptr %11, align 8, !tbaa !13
  %387 = call zeroext i1 @s2n_cipher_suite_requires_ecc_extension(ptr noundef %386)
  br i1 %387, label %388, label %396

388:                                              ; preds = %385
  %389 = load i32, ptr %2, align 4, !tbaa !5
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds [119 x %struct.s2n_security_policy_selection], ptr @security_policy_selection, i64 0, i64 %390
  %392 = getelementptr inbounds %struct.s2n_security_policy_selection, ptr %391, i32 0, i32 2
  %393 = load i8, ptr %392, align 8
  %394 = and i8 %393, -2
  %395 = or i8 %394, 1
  store i8 %395, ptr %392, align 8
  br label %396

396:                                              ; preds = %388, %385
  %397 = load ptr, ptr %11, align 8, !tbaa !13
  %398 = call zeroext i1 @s2n_cipher_suite_requires_pq_extension(ptr noundef %397)
  br i1 %398, label %399, label %413

399:                                              ; preds = %396
  %400 = load ptr, ptr %6, align 8, !tbaa !13
  %401 = getelementptr inbounds %struct.s2n_kem_preferences, ptr %400, i32 0, i32 0
  %402 = load i8, ptr %401, align 8, !tbaa !31
  %403 = zext i8 %402 to i32
  %404 = icmp sgt i32 %403, 0
  br i1 %404, label %405, label %413

405:                                              ; preds = %399
  %406 = load i32, ptr %2, align 4, !tbaa !5
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds [119 x %struct.s2n_security_policy_selection], ptr @security_policy_selection, i64 0, i64 %407
  %409 = getelementptr inbounds %struct.s2n_security_policy_selection, ptr %408, i32 0, i32 2
  %410 = load i8, ptr %409, align 8
  %411 = and i8 %410, -3
  %412 = or i8 %411, 2
  store i8 %412, ptr %409, align 8
  br label %413

413:                                              ; preds = %405, %399, %396
  store i32 0, ptr %3, align 4
  br label %414

414:                                              ; preds = %413, %380
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  br label %415

415:                                              ; preds = %414, %315
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  %416 = load i32, ptr %3, align 4
  switch i32 %416, label %421 [
    i32 0, label %417
  ]

417:                                              ; preds = %415
  br label %418

418:                                              ; preds = %417
  %419 = load i32, ptr %10, align 4, !tbaa !5
  %420 = add nsw i32 %419, 1
  store i32 %420, ptr %10, align 4, !tbaa !5
  br label %266, !llvm.loop !33

421:                                              ; preds = %415, %273
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  %422 = load i32, ptr %3, align 4
  switch i32 %422, label %498 [
    i32 39, label %423
  ]

423:                                              ; preds = %421
  br label %424

424:                                              ; preds = %423
  %425 = load ptr, ptr %6, align 8, !tbaa !13
  %426 = load i32, ptr %2, align 4, !tbaa !5
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds [119 x %struct.s2n_security_policy_selection], ptr @security_policy_selection, i64 0, i64 %427
  %429 = getelementptr inbounds %struct.s2n_security_policy_selection, ptr %428, i32 0, i32 2
  %430 = load i8, ptr %429, align 8
  %431 = lshr i8 %430, 1
  %432 = and i8 %431, 1
  %433 = zext i8 %432 to i32
  %434 = icmp ne i32 %433, 0
  %435 = call i32 @s2n_validate_kem_preferences(ptr noundef %425, i1 noundef zeroext %434)
  %436 = icmp sgt i32 %435, -1
  br i1 %436, label %438, label %437

437:                                              ; preds = %424
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %498

438:                                              ; preds = %424
  br label %439

439:                                              ; preds = %438
  br label %440

440:                                              ; preds = %439
  %441 = call zeroext i1 (...) @s2n_in_unit_test()
  br i1 %441, label %497, label %442

442:                                              ; preds = %440
  call void @llvm.lifetime.start.p0(i64 48, ptr %13) #7
  call void @llvm.memset.p0.i64(ptr align 8 %13, i8 0, i64 48, i1 false)
  br label %443

443:                                              ; preds = %442
  %444 = load ptr, ptr %4, align 8, !tbaa !13
  %445 = call i32 @s2n_security_policy_validate_security_rules(ptr noundef %444, ptr noundef %13)
  %446 = getelementptr inbounds %struct.s2n_result, ptr %14, i32 0, i32 0
  store i32 %445, ptr %446, align 4
  %447 = getelementptr inbounds %struct.s2n_result, ptr %14, i32 0, i32 0
  %448 = load i32, ptr %447, align 4
  %449 = call zeroext i1 @s2n_result_is_ok(i32 %448)
  br i1 %449, label %451, label %450

450:                                              ; preds = %443
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %494

451:                                              ; preds = %443
  br label %452

452:                                              ; preds = %451
  br label %453

453:                                              ; preds = %452
  br label %454

454:                                              ; preds = %453
  %455 = getelementptr inbounds %struct.s2n_security_rule_result, ptr %13, i32 0, i32 0
  %456 = load i8, ptr %455, align 8, !tbaa !35, !range !39, !noundef !40
  %457 = trunc i8 %456 to i1
  br i1 %457, label %458, label %491

458:                                              ; preds = %454
  br label %459

459:                                              ; preds = %458
  br label %460

460:                                              ; preds = %459
  %461 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %462 = getelementptr inbounds %struct.s2n_debug_info, ptr %461, i32 0, i32 0
  store ptr @.str.158, ptr %462, align 8, !tbaa !14
  %463 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %464 = getelementptr inbounds %struct.s2n_debug_info, ptr %463, i32 0, i32 0
  %465 = load ptr, ptr %464, align 8, !tbaa !14
  %466 = getelementptr inbounds i8, ptr %465, i64 21
  %467 = call ptr @strrchr(ptr noundef %466, i32 noundef 47) #8
  %468 = icmp ne ptr %467, null
  br i1 %468, label %469, label %476

469:                                              ; preds = %460
  %470 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %471 = getelementptr inbounds %struct.s2n_debug_info, ptr %470, i32 0, i32 0
  %472 = load ptr, ptr %471, align 8, !tbaa !14
  %473 = getelementptr inbounds i8, ptr %472, i64 21
  %474 = call ptr @strrchr(ptr noundef %473, i32 noundef 47) #8
  %475 = getelementptr inbounds i8, ptr %474, i64 1
  br label %481

476:                                              ; preds = %460
  %477 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %478 = getelementptr inbounds %struct.s2n_debug_info, ptr %477, i32 0, i32 0
  %479 = load ptr, ptr %478, align 8, !tbaa !14
  %480 = getelementptr inbounds i8, ptr %479, i64 21
  br label %481

481:                                              ; preds = %476, %469
  %482 = phi ptr [ %475, %469 ], [ %480, %476 ]
  %483 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %484 = getelementptr inbounds %struct.s2n_debug_info, ptr %483, i32 0, i32 1
  store ptr %482, ptr %484, align 8, !tbaa !16
  %485 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762101, ptr %485, align 4, !tbaa !5
  %486 = call i32 @s2n_calculate_stacktrace()
  br label %487

487:                                              ; preds = %481
  br label %488

488:                                              ; preds = %487
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %494

489:                                              ; No predecessors!
  br label %490

490:                                              ; preds = %489
  br label %491

491:                                              ; preds = %490, %454
  br label %492

492:                                              ; preds = %491
  br label %493

493:                                              ; preds = %492
  store i32 0, ptr %3, align 4
  br label %494

494:                                              ; preds = %493, %488, %450
  call void @llvm.lifetime.end.p0(i64 48, ptr %13) #7
  %495 = load i32, ptr %3, align 4
  switch i32 %495, label %498 [
    i32 0, label %496
  ]

496:                                              ; preds = %494
  br label %497

497:                                              ; preds = %496, %440
  store i32 0, ptr %3, align 4
  br label %498

498:                                              ; preds = %497, %494, %437, %421, %259, %215
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  br label %499

499:                                              ; preds = %498, %198, %188
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  br label %500

500:                                              ; preds = %499, %146
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  br label %501

501:                                              ; preds = %500, %104
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #7
  br label %502

502:                                              ; preds = %501, %62
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  %503 = load i32, ptr %3, align 4
  switch i32 %503, label %508 [
    i32 0, label %504
  ]

504:                                              ; preds = %502
  br label %505

505:                                              ; preds = %504
  %506 = load i32, ptr %2, align 4, !tbaa !5
  %507 = add nsw i32 %506, 1
  store i32 %507, ptr %2, align 4, !tbaa !5
  br label %15, !llvm.loop !41

508:                                              ; preds = %502, %22
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #7
  %509 = load i32, ptr %3, align 4
  switch i32 %509, label %513 [
    i32 2, label %510
    i32 1, label %511
  ]

510:                                              ; preds = %508
  store i32 0, ptr %1, align 4
  br label %511

511:                                              ; preds = %510, %508
  %512 = load i32, ptr %1, align 4
  ret i32 %512

513:                                              ; preds = %508
  unreachable
}

declare i32 @s2n_check_ecc_preferences_curves_list(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @s2n_validate_certificate_signature_preferences(ptr noundef) #5

declare zeroext i1 @s2n_is_valid_tls13_cipher(ptr noundef) #2

declare zeroext i1 @s2n_cipher_suite_requires_ecc_extension(ptr noundef) #2

declare zeroext i1 @s2n_cipher_suite_requires_pq_extension(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @s2n_validate_kem_preferences(ptr noundef, i1 noundef zeroext) #5

declare zeroext i1 @s2n_in_unit_test(...) #2

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

declare i32 @s2n_security_policy_validate_security_rules(ptr noundef, ptr 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 = { 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 = { 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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"s2n_security_policy_selection", !11, i64 0, !11, i64 8, !6, i64 16, !6, i64 16, !6, i64 16}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = !{!11, !11, i64 0}
!14 = !{!15, !11, i64 0}
!15 = !{!"s2n_debug_info", !11, i64 0, !11, i64 8}
!16 = !{!15, !11, i64 8}
!17 = !{!18, !11, i64 8}
!18 = !{!"s2n_security_policy", !7, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !19, i64 56, !7, i64 57}
!19 = !{!"_Bool", !7, i64 0}
!20 = !{!18, !11, i64 16}
!21 = !{!18, !11, i64 40}
!22 = !{!18, !11, i64 32}
!23 = !{!24, !7, i64 0}
!24 = !{!"s2n_ecc_preferences", !7, i64 0, !11, i64 8}
!25 = !{!26, !27, i64 0}
!26 = !{!"s2n_cipher_preferences", !27, i64 0, !11, i64 8, !19, i64 16}
!27 = !{!"short", !7, i64 0}
!28 = !{!26, !11, i64 8}
!29 = !{!30, !7, i64 100}
!30 = !{!"s2n_cipher_suite", !6, i64 0, !11, i64 8, !11, i64 16, !7, i64 24, !11, i64 32, !6, i64 40, !11, i64 48, !7, i64 56, !7, i64 72, !11, i64 80, !11, i64 88, !6, i64 96, !7, i64 100}
!31 = !{!32, !7, i64 0}
!32 = !{!"s2n_kem_preferences", !7, i64 0, !11, i64 8, !7, i64 16, !11, i64 24, !7, i64 32}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!36, !19, i64 0}
!36 = !{!"s2n_security_rule_result", !19, i64 0, !19, i64 1, !37, i64 8}
!37 = !{!"s2n_stuffer", !38, i64 0, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 36, !6, i64 36}
!38 = !{!"s2n_blob", !11, i64 0, !6, i64 8, !6, i64 12, !6, i64 16}
!39 = !{i8 0, i8 2}
!40 = !{}
!41 = distinct !{!41, !34}


; 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_security_policy = type { i8, ptr, ptr, ptr, ptr, ptr, ptr, i8, [2 x i8] }
%struct.s2n_security_policy_selection = type { ptr, ptr, i8 }
%struct.s2n_debug_info = type { ptr, ptr }
%struct.s2n_security_rule_result = type { i8, i8, %struct.s2n_stuffer }
%struct.s2n_stuffer = type { %struct.s2n_blob, i32, i32, i32, i8 }
%struct.s2n_blob = type { ptr, i32, i32, i8 }

@security_policy_null = external dso_local constant %struct.s2n_security_policy, align 8
@security_policy_selection = external dso_local local_unnamed_addr global [119 x %struct.s2n_security_policy_selection], align 16
@_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.151 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.152 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.154 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.155 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.156 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.157 = external hidden unnamed_addr constant [99 x i8], align 1
@.str.158 = external hidden unnamed_addr constant [99 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

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

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @s2n_security_policies_init() local_unnamed_addr #5 {
  %1 = alloca %struct.s2n_security_rule_result, align 8
  %2 = load ptr, ptr @security_policy_selection, align 16, !tbaa !5
  %.not109.not = icmp eq ptr %2, null
  br i1 %.not109.not, label %.thread93, label %.lr.ph113

.lr.ph113:                                        ; preds = %0, %143
  %indvars.iv131 = phi i64 [ %indvars.iv.next132, %143 ], [ 0, %0 ]
  %3 = phi ptr [ %144, %143 ], [ @security_policy_selection, %0 ]
  %4 = getelementptr inbounds i8, ptr %3, i64 8
  %5 = load ptr, ptr %4, align 8, !tbaa !11
  %.not70 = icmp eq ptr %5, null
  br i1 %.not70, label %6, label %14

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

14:                                               ; preds = %.lr.ph113
  %15 = getelementptr inbounds i8, ptr %5, i64 8
  %16 = load ptr, ptr %15, align 8, !tbaa !16
  %.not72 = icmp eq ptr %16, null
  br i1 %.not72, label %17, label %25

17:                                               ; preds = %14
  %18 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.152, ptr %18, align 8, !tbaa !12
  %19 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.152, i64 21), i32 noundef 47) #7
  %.not73 = icmp eq ptr %19, null
  %20 = getelementptr inbounds i8, ptr %19, i64 1
  %21 = select i1 %.not73, ptr getelementptr inbounds (i8, ptr @.str.152, i64 21), ptr %20
  %22 = getelementptr inbounds i8, ptr %18, i64 8
  store ptr %21, ptr %22, align 8, !tbaa !14
  %23 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %23, align 4, !tbaa !15
  %24 = call i32 @s2n_calculate_stacktrace() #8
  br label %.thread93

25:                                               ; preds = %14
  %26 = getelementptr inbounds i8, ptr %5, i64 16
  %27 = load ptr, ptr %26, align 8, !tbaa !19
  %.not74 = icmp eq ptr %27, null
  br i1 %.not74, label %28, label %36

28:                                               ; preds = %25
  %29 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.153, ptr %29, align 8, !tbaa !12
  %30 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.153, i64 21), i32 noundef 47) #7
  %.not75 = icmp eq ptr %30, null
  %31 = getelementptr inbounds i8, ptr %30, i64 1
  %32 = select i1 %.not75, ptr getelementptr inbounds (i8, ptr @.str.153, i64 21), ptr %31
  %33 = getelementptr inbounds i8, ptr %29, i64 8
  store ptr %32, ptr %33, align 8, !tbaa !14
  %34 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %34, align 4, !tbaa !15
  %35 = call i32 @s2n_calculate_stacktrace() #8
  br label %.thread93

36:                                               ; preds = %25
  %37 = getelementptr inbounds i8, ptr %5, i64 40
  %38 = load ptr, ptr %37, align 8, !tbaa !20
  %.not76 = icmp eq ptr %38, null
  br i1 %.not76, label %39, label %47

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

47:                                               ; preds = %36
  %48 = call i32 @s2n_check_ecc_preferences_curves_list(ptr noundef nonnull %38) #8
  %49 = icmp sgt i32 %48, -1
  br i1 %49, label %50, label %.thread93

50:                                               ; preds = %47
  %51 = getelementptr inbounds i8, ptr %5, i64 32
  %52 = load ptr, ptr %51, align 8, !tbaa !21
  %.not78 = icmp eq ptr %52, null
  br i1 %.not78, label %56, label %53

53:                                               ; preds = %50
  %54 = call i32 @s2n_validate_certificate_signature_preferences(ptr noundef nonnull %52)
  %55 = call zeroext i1 @s2n_result_is_ok(i32 %54)
  br i1 %55, label %56, label %.thread93

56:                                               ; preds = %53, %50
  %.not79 = icmp eq ptr %5, @security_policy_null
  br i1 %.not79, label %68, label %57

57:                                               ; preds = %56
  %58 = load i8, ptr %38, align 8, !tbaa !22
  %59 = icmp eq i8 %58, 0
  br i1 %59, label %60, label %68

60:                                               ; preds = %57
  %61 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.155, ptr %61, align 8, !tbaa !12
  %62 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.155, i64 21), i32 noundef 47) #7
  %.not86 = icmp eq ptr %62, null
  %63 = getelementptr inbounds i8, ptr %62, i64 1
  %64 = select i1 %.not86, ptr getelementptr inbounds (i8, ptr @.str.155, i64 21), ptr %63
  %65 = getelementptr inbounds i8, ptr %61, i64 8
  store ptr %64, ptr %65, align 8, !tbaa !14
  %66 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762101, ptr %66, align 4, !tbaa !15
  %67 = call i32 @s2n_calculate_stacktrace() #8
  br label %.thread93

68:                                               ; preds = %57, %56
  %69 = load i16, ptr %16, align 8, !tbaa !24
  %.not84107.not = icmp eq i16 %69, 0
  br i1 %.not84107.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %68
  %70 = getelementptr inbounds i8, ptr %16, i64 8
  %71 = getelementptr inbounds i8, ptr %3, i64 16
  br label %72

72:                                               ; preds = %.lr.ph, %117
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %117 ]
  %73 = load ptr, ptr %70, align 8, !tbaa !27
  %74 = getelementptr inbounds ptr, ptr %73, i64 %indvars.iv
  %75 = load ptr, ptr %74, align 8, !tbaa !28
  %.not80 = icmp eq ptr %75, null
  br i1 %.not80, label %76, label %84

76:                                               ; preds = %72
  %77 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.156, ptr %77, align 8, !tbaa !12
  %78 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.156, i64 21), i32 noundef 47) #7
  %.not81 = icmp eq ptr %78, null
  %79 = getelementptr inbounds i8, ptr %78, i64 1
  %80 = select i1 %.not81, ptr getelementptr inbounds (i8, ptr @.str.156, i64 21), ptr %79
  %81 = getelementptr inbounds i8, ptr %77, i64 8
  store ptr %80, ptr %81, align 8, !tbaa !14
  %82 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %82, align 4, !tbaa !15
  %83 = call i32 @s2n_calculate_stacktrace() #8
  br label %.thread93

84:                                               ; preds = %72
  %85 = getelementptr inbounds i8, ptr %75, i64 24
  %86 = getelementptr inbounds i8, ptr %75, i64 100
  %87 = load i8, ptr %86, align 4, !tbaa !29
  %88 = icmp ugt i8 %87, 33
  br i1 %88, label %89, label %92

89:                                               ; preds = %84
  %90 = load i8, ptr %71, align 8
  %91 = or i8 %90, 4
  store i8 %91, ptr %71, align 8
  br label %92

92:                                               ; preds = %84, %89
  %93 = call zeroext i1 @s2n_is_valid_tls13_cipher(ptr noundef nonnull %85) #8
  %94 = load i8, ptr %86, align 4, !tbaa !29
  %95 = icmp ugt i8 %94, 33
  %96 = xor i1 %93, %95
  br i1 %96, label %97, label %105

97:                                               ; preds = %92
  %98 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.157, ptr %98, align 8, !tbaa !12
  %99 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.157, i64 21), i32 noundef 47) #7
  %.not83 = icmp eq ptr %99, null
  %100 = getelementptr inbounds i8, ptr %99, i64 1
  %101 = select i1 %.not83, ptr getelementptr inbounds (i8, ptr @.str.157, i64 21), ptr %100
  %102 = getelementptr inbounds i8, ptr %98, i64 8
  store ptr %101, ptr %102, align 8, !tbaa !14
  %103 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762101, ptr %103, align 4, !tbaa !15
  %104 = call i32 @s2n_calculate_stacktrace() #8
  br label %.thread93

105:                                              ; preds = %92
  %106 = call zeroext i1 @s2n_cipher_suite_requires_ecc_extension(ptr noundef nonnull %75) #8
  br i1 %106, label %107, label %110

107:                                              ; preds = %105
  %108 = load i8, ptr %71, align 8
  %109 = or i8 %108, 1
  store i8 %109, ptr %71, align 8
  br label %110

110:                                              ; preds = %107, %105
  %111 = call zeroext i1 @s2n_cipher_suite_requires_pq_extension(ptr noundef nonnull %75) #8
  br i1 %111, label %112, label %117

112:                                              ; preds = %110
  %113 = load i8, ptr %27, align 8, !tbaa !31
  %.not82 = icmp eq i8 %113, 0
  br i1 %.not82, label %117, label %114

114:                                              ; preds = %112
  %115 = load i8, ptr %71, align 8
  %116 = or i8 %115, 2
  store i8 %116, ptr %71, align 8
  br label %117

117:                                              ; preds = %114, %112, %110
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %118 = load i16, ptr %16, align 8, !tbaa !24
  %119 = zext i16 %118 to i64
  %.not84 = icmp ult i64 %indvars.iv.next, %119
  br i1 %.not84, label %72, label %._crit_edge, !llvm.loop !33

._crit_edge:                                      ; preds = %117, %68
  %120 = getelementptr inbounds i8, ptr %3, i64 16
  %121 = load i8, ptr %120, align 8
  %122 = and i8 %121, 2
  %123 = icmp ne i8 %122, 0
  %124 = call i32 @s2n_validate_kem_preferences(ptr noundef nonnull %27, i1 noundef zeroext %123)
  %125 = icmp sgt i32 %124, -1
  br i1 %125, label %126, label %.thread93

126:                                              ; preds = %._crit_edge
  %127 = call zeroext i1 (...) @s2n_in_unit_test() #8
  br i1 %127, label %143, label %128

128:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %1) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %1, i8 0, i64 48, i1 false)
  %129 = call i32 @s2n_security_policy_validate_security_rules(ptr noundef nonnull %5, ptr noundef nonnull %1) #8
  %130 = call zeroext i1 @s2n_result_is_ok(i32 %129)
  br i1 %130, label %131, label %.critedge

131:                                              ; preds = %128
  %132 = load i8, ptr %1, align 8, !tbaa !35, !range !39, !noundef !40
  %133 = trunc nuw i8 %132 to i1
  br i1 %133, label %134, label %142

134:                                              ; preds = %131
  %135 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.158, ptr %135, align 8, !tbaa !12
  %136 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.158, i64 21), i32 noundef 47) #7
  %.not85 = icmp eq ptr %136, null
  %137 = getelementptr inbounds i8, ptr %136, i64 1
  %138 = select i1 %.not85, ptr getelementptr inbounds (i8, ptr @.str.158, i64 21), ptr %137
  %139 = getelementptr inbounds i8, ptr %135, i64 8
  store ptr %138, ptr %139, align 8, !tbaa !14
  %140 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 469762101, ptr %140, align 4, !tbaa !15
  %141 = call i32 @s2n_calculate_stacktrace() #8
  br label %.critedge

142:                                              ; preds = %131
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %1) #8
  br label %143

.critedge:                                        ; preds = %128, %134
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %1) #8
  br label %.thread93

143:                                              ; preds = %142, %126
  %indvars.iv.next132 = add nuw nsw i64 %indvars.iv131, 1
  %144 = getelementptr inbounds [119 x %struct.s2n_security_policy_selection], ptr @security_policy_selection, i64 0, i64 %indvars.iv.next132
  %145 = load ptr, ptr %144, align 8, !tbaa !5
  %.not.not = icmp eq ptr %145, null
  br i1 %.not.not, label %.thread93, label %.lr.ph113, !llvm.loop !41

.thread93:                                        ; preds = %143, %47, %53, %._crit_edge, %0, %97, %76, %.critedge, %60, %39, %28, %17, %6
  %.not105 = phi i32 [ -1, %97 ], [ -1, %76 ], [ -1, %.critedge ], [ -1, %60 ], [ -1, %39 ], [ -1, %28 ], [ -1, %17 ], [ -1, %6 ], [ 0, %0 ], [ 0, %143 ], [ -1, %47 ], [ -1, %53 ], [ -1, %._crit_edge ]
  ret i32 %.not105
}

declare i32 @s2n_check_ecc_preferences_curves_list(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @s2n_validate_certificate_signature_preferences(ptr noundef) local_unnamed_addr #5

declare zeroext i1 @s2n_is_valid_tls13_cipher(ptr noundef) local_unnamed_addr #2

declare zeroext i1 @s2n_cipher_suite_requires_ecc_extension(ptr noundef) local_unnamed_addr #2

declare zeroext i1 @s2n_cipher_suite_requires_pq_extension(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @s2n_validate_kem_preferences(ptr noundef, i1 noundef zeroext) local_unnamed_addr #5

declare zeroext i1 @s2n_in_unit_test(...) 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) #6

declare i32 @s2n_security_policy_validate_security_rules(ptr noundef, ptr 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 = { 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 = { 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nounwind willreturn memory(read) }
attributes #8 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"s2n_security_policy_selection", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 16, !10, i64 16}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!6, !7, i64 8}
!12 = !{!13, !7, i64 0}
!13 = !{!"s2n_debug_info", !7, i64 0, !7, i64 8}
!14 = !{!13, !7, i64 8}
!15 = !{!10, !10, i64 0}
!16 = !{!17, !7, i64 8}
!17 = !{!"s2n_security_policy", !8, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !18, i64 56, !8, i64 57}
!18 = !{!"_Bool", !8, i64 0}
!19 = !{!17, !7, i64 16}
!20 = !{!17, !7, i64 40}
!21 = !{!17, !7, i64 32}
!22 = !{!23, !8, i64 0}
!23 = !{!"s2n_ecc_preferences", !8, i64 0, !7, i64 8}
!24 = !{!25, !26, i64 0}
!25 = !{!"s2n_cipher_preferences", !26, i64 0, !7, i64 8, !18, i64 16}
!26 = !{!"short", !8, i64 0}
!27 = !{!25, !7, i64 8}
!28 = !{!7, !7, i64 0}
!29 = !{!30, !8, i64 100}
!30 = !{!"s2n_cipher_suite", !10, i64 0, !7, i64 8, !7, i64 16, !8, i64 24, !7, i64 32, !10, i64 40, !7, i64 48, !8, i64 56, !8, i64 72, !7, i64 80, !7, i64 88, !10, i64 96, !8, i64 100}
!31 = !{!32, !8, i64 0}
!32 = !{!"s2n_kem_preferences", !8, i64 0, !7, i64 8, !8, i64 16, !7, i64 24, !8, i64 32}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!36, !18, i64 0}
!36 = !{!"s2n_security_rule_result", !18, i64 0, !18, i64 1, !37, i64 8}
!37 = !{!"s2n_stuffer", !38, i64 0, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 36, !10, i64 36}
!38 = !{!"s2n_blob", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16}
!39 = !{i8 0, i8 2}
!40 = !{}
!41 = distinct !{!41, !34}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass