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

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

%struct.s2n_debug_info = type { ptr, ptr }
%struct.s2n_result = type { i32 }
%struct.s2n_security_policy = type { i8, ptr, ptr, ptr, ptr, ptr, ptr, i8, [2 x i8] }
%struct.s2n_cipher_preferences = type { i16, ptr, i8 }
%struct.s2n_security_rule = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.s2n_cipher_suite = type { i8, ptr, ptr, [2 x i8], ptr, i32, ptr, [2 x ptr], i8, ptr, ptr, i32, i8 }
%struct.s2n_signature_preferences = type { i8, ptr }
%struct.s2n_signature_scheme = type { i16, ptr, i32, i32, i8, i8, i16, ptr }
%struct.s2n_ecc_preferences = type { i8, ptr }
%struct.s2n_ecc_named_curve = type { i16, i32, ptr, i8, ptr }
%struct.s2n_kem_preferences = type { i8, ptr, i8, ptr, i8 }
%struct.s2n_kem_group = type { ptr, i16, ptr, ptr, i8 }

@.str.2 = external hidden unnamed_addr constant [95 x i8], align 1
@_s2n_debug_info = external thread_local global %struct.s2n_debug_info, align 8
@s2n_errno = external thread_local global i32, align 4
@.str.3 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [12 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @s2n_security_rule_validate_policy(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca %struct.s2n_result, align 4
  %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 ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i64, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i8, align 1
  %17 = alloca %struct.s2n_result, align 4
  %18 = alloca %struct.s2n_result, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i64, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i8, align 1
  %23 = alloca %struct.s2n_result, align 4
  %24 = alloca %struct.s2n_result, align 4
  %25 = alloca ptr, align 8
  %26 = alloca i64, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i8, align 1
  %29 = alloca %struct.s2n_result, align 4
  %30 = alloca %struct.s2n_result, align 4
  %31 = alloca ptr, align 8
  %32 = alloca i64, align 8
  %33 = alloca ptr, align 8
  %34 = alloca i8, align 1
  %35 = alloca %struct.s2n_result, align 4
  %36 = alloca %struct.s2n_result, align 4
  %37 = alloca ptr, align 8
  %38 = alloca i64, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i8, align 1
  %41 = alloca %struct.s2n_result, align 4
  %42 = alloca %struct.s2n_result, align 4
  %43 = alloca i8, align 1
  %44 = alloca %struct.s2n_result, align 4
  %45 = alloca %struct.s2n_result, align 4
  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 %46

46:                                               ; preds = %3
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = icmp ne ptr %47, null
  br i1 %48, label %81, label %49

49:                                               ; preds = %46
  br label %50

50:                                               ; preds = %49
  br label %51

51:                                               ; preds = %50
  %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
  store ptr @.str.2, ptr %53, align 8, !tbaa !9
  %54 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %55 = getelementptr inbounds %struct.s2n_debug_info, ptr %54, i32 0, i32 0
  %56 = load ptr, ptr %55, align 8, !tbaa !9
  %57 = getelementptr inbounds i8, ptr %56, i64 21
  %58 = call ptr @strrchr(ptr noundef %57, i32 noundef 47) #6
  %59 = icmp ne ptr %58, null
  br i1 %59, label %60, label %67

60:                                               ; preds = %51
  %61 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %62 = getelementptr inbounds %struct.s2n_debug_info, ptr %61, i32 0, i32 0
  %63 = load ptr, ptr %62, align 8, !tbaa !9
  %64 = getelementptr inbounds i8, ptr %63, i64 21
  %65 = call ptr @strrchr(ptr noundef %64, i32 noundef 47) #6
  %66 = getelementptr inbounds i8, ptr %65, i64 1
  br label %72

67:                                               ; preds = %51
  %68 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %69 = getelementptr inbounds %struct.s2n_debug_info, ptr %68, i32 0, i32 0
  %70 = load ptr, ptr %69, align 8, !tbaa !9
  %71 = getelementptr inbounds i8, ptr %70, i64 21
  br label %72

72:                                               ; preds = %67, %60
  %73 = phi ptr [ %66, %60 ], [ %71, %67 ]
  %74 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %75 = getelementptr inbounds %struct.s2n_debug_info, ptr %74, i32 0, i32 1
  store ptr %73, ptr %75, align 8, !tbaa !11
  %76 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %76, align 4, !tbaa !12
  %77 = call i32 @s2n_calculate_stacktrace()
  br label %78

78:                                               ; preds = %72
  %79 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %79, align 4, !tbaa !14
  br label %1160

80:                                               ; No predecessors!
  br label %81

81:                                               ; preds = %80, %46
  br label %82

82:                                               ; preds = %81
  br label %83

83:                                               ; preds = %82
  %84 = load ptr, ptr %6, align 8, !tbaa !5
  %85 = icmp ne ptr %84, null
  br i1 %85, label %118, label %86

86:                                               ; preds = %83
  br label %87

87:                                               ; preds = %86
  br label %88

88:                                               ; preds = %87
  %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
  store ptr @.str.3, ptr %90, align 8, !tbaa !9
  %91 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %92 = getelementptr inbounds %struct.s2n_debug_info, ptr %91, i32 0, i32 0
  %93 = load ptr, ptr %92, align 8, !tbaa !9
  %94 = getelementptr inbounds i8, ptr %93, i64 21
  %95 = call ptr @strrchr(ptr noundef %94, i32 noundef 47) #6
  %96 = icmp ne ptr %95, null
  br i1 %96, label %97, label %104

97:                                               ; preds = %88
  %98 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %99 = getelementptr inbounds %struct.s2n_debug_info, ptr %98, i32 0, i32 0
  %100 = load ptr, ptr %99, align 8, !tbaa !9
  %101 = getelementptr inbounds i8, ptr %100, i64 21
  %102 = call ptr @strrchr(ptr noundef %101, i32 noundef 47) #6
  %103 = getelementptr inbounds i8, ptr %102, i64 1
  br label %109

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

109:                                              ; preds = %104, %97
  %110 = phi ptr [ %103, %97 ], [ %108, %104 ]
  %111 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %112 = getelementptr inbounds %struct.s2n_debug_info, ptr %111, i32 0, i32 1
  store ptr %110, ptr %112, align 8, !tbaa !11
  %113 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %113, align 4, !tbaa !12
  %114 = call i32 @s2n_calculate_stacktrace()
  br label %115

115:                                              ; preds = %109
  %116 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %116, align 4, !tbaa !14
  br label %1160

117:                                              ; No predecessors!
  br label %118

118:                                              ; preds = %117, %83
  br label %119

119:                                              ; preds = %118
  br label %120

120:                                              ; preds = %119
  %121 = load ptr, ptr %7, align 8, !tbaa !5
  %122 = icmp ne ptr %121, null
  br i1 %122, label %155, label %123

123:                                              ; preds = %120
  br label %124

124:                                              ; preds = %123
  br label %125

125:                                              ; preds = %124
  %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
  store ptr @.str.4, ptr %127, align 8, !tbaa !9
  %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 !9
  %131 = getelementptr inbounds i8, ptr %130, i64 21
  %132 = call ptr @strrchr(ptr noundef %131, i32 noundef 47) #6
  %133 = icmp ne ptr %132, null
  br i1 %133, label %134, label %141

134:                                              ; preds = %125
  %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 !9
  %138 = getelementptr inbounds i8, ptr %137, i64 21
  %139 = call ptr @strrchr(ptr noundef %138, i32 noundef 47) #6
  %140 = getelementptr inbounds i8, ptr %139, i64 1
  br label %146

141:                                              ; preds = %125
  %142 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %143 = getelementptr inbounds %struct.s2n_debug_info, ptr %142, i32 0, i32 0
  %144 = load ptr, ptr %143, align 8, !tbaa !9
  %145 = getelementptr inbounds i8, ptr %144, i64 21
  br label %146

146:                                              ; preds = %141, %134
  %147 = phi ptr [ %140, %134 ], [ %145, %141 ]
  %148 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %149 = getelementptr inbounds %struct.s2n_debug_info, ptr %148, i32 0, i32 1
  store ptr %147, ptr %149, align 8, !tbaa !11
  %150 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %150, align 4, !tbaa !12
  %151 = call i32 @s2n_calculate_stacktrace()
  br label %152

152:                                              ; preds = %146
  %153 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %153, align 4, !tbaa !14
  br label %1160

154:                                              ; No predecessors!
  br label %155

155:                                              ; preds = %154, %120
  br label %156

156:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  store ptr null, ptr %8, align 8, !tbaa !5
  %157 = load ptr, ptr %6, align 8, !tbaa !5
  %158 = call i32 @s2n_security_policy_get_version(ptr noundef %157, ptr noundef %8)
  %159 = getelementptr inbounds %struct.s2n_result, ptr %9, i32 0, i32 0
  store i32 %158, ptr %159, align 4
  %160 = getelementptr inbounds %struct.s2n_result, ptr %9, i32 0, i32 0
  %161 = load i32, ptr %160, align 4
  call void @s2n_result_ignore(i32 %161)
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = icmp eq ptr %162, null
  br i1 %163, label %164, label %165

164:                                              ; preds = %156
  store ptr @.str.5, ptr %8, align 8, !tbaa !5
  br label %165

165:                                              ; preds = %164, %156
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  store ptr @.str.6, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  store ptr @.str.7, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %166 = load ptr, ptr %6, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.s2n_security_policy, ptr %166, i32 0, i32 1
  %168 = load ptr, ptr %167, align 8, !tbaa !16
  store ptr %168, ptr %12, align 8, !tbaa !5
  br label %169

169:                                              ; preds = %165
  %170 = load ptr, ptr %12, align 8, !tbaa !5
  %171 = icmp ne ptr %170, null
  br i1 %171, label %206, label %172

172:                                              ; preds = %169
  br label %173

173:                                              ; preds = %172
  br label %174

174:                                              ; preds = %173
  %175 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %176 = getelementptr inbounds %struct.s2n_debug_info, ptr %175, i32 0, i32 0
  store ptr @.str.8, ptr %176, align 8, !tbaa !9
  %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 !9
  %180 = getelementptr inbounds i8, ptr %179, i64 21
  %181 = call ptr @strrchr(ptr noundef %180, i32 noundef 47) #6
  %182 = icmp ne ptr %181, null
  br i1 %182, label %183, label %190

183:                                              ; preds = %174
  %184 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %185 = getelementptr inbounds %struct.s2n_debug_info, ptr %184, i32 0, i32 0
  %186 = load ptr, ptr %185, align 8, !tbaa !9
  %187 = getelementptr inbounds i8, ptr %186, i64 21
  %188 = call ptr @strrchr(ptr noundef %187, i32 noundef 47) #6
  %189 = getelementptr inbounds i8, ptr %188, i64 1
  br label %195

190:                                              ; preds = %174
  %191 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %192 = getelementptr inbounds %struct.s2n_debug_info, ptr %191, i32 0, i32 0
  %193 = load ptr, ptr %192, align 8, !tbaa !9
  %194 = getelementptr inbounds i8, ptr %193, i64 21
  br label %195

195:                                              ; preds = %190, %183
  %196 = phi ptr [ %189, %183 ], [ %194, %190 ]
  %197 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %198 = getelementptr inbounds %struct.s2n_debug_info, ptr %197, i32 0, i32 1
  store ptr %196, ptr %198, align 8, !tbaa !11
  %199 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %199, align 4, !tbaa !12
  %200 = call i32 @s2n_calculate_stacktrace()
  br label %201

201:                                              ; preds = %195
  br label %202

202:                                              ; preds = %201
  %203 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %203, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1159

204:                                              ; No predecessors!
  br label %205

205:                                              ; preds = %204
  br label %206

206:                                              ; preds = %205, %169
  br label %207

207:                                              ; preds = %206
  br label %208

208:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  store i64 0, ptr %14, align 8, !tbaa !19
  br label %209

209:                                              ; preds = %349, %208
  %210 = load i64, ptr %14, align 8, !tbaa !19
  %211 = load ptr, ptr %12, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.s2n_cipher_preferences, ptr %211, i32 0, i32 0
  %213 = load i16, ptr %212, align 8, !tbaa !21
  %214 = zext i16 %213 to i64
  %215 = icmp ult i64 %210, %214
  br i1 %215, label %217, label %216

216:                                              ; preds = %209
  store i32 26, ptr %13, align 4
  br label %352

217:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %218 = load ptr, ptr %12, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.s2n_cipher_preferences, ptr %218, i32 0, i32 1
  %220 = load ptr, ptr %219, align 8, !tbaa !24
  %221 = load i64, ptr %14, align 8, !tbaa !19
  %222 = getelementptr inbounds ptr, ptr %220, i64 %221
  %223 = load ptr, ptr %222, align 8, !tbaa !5
  store ptr %223, ptr %15, align 8, !tbaa !5
  br label %224

224:                                              ; preds = %217
  %225 = load ptr, ptr %15, align 8, !tbaa !5
  %226 = icmp ne ptr %225, null
  br i1 %226, label %261, label %227

227:                                              ; preds = %224
  br label %228

228:                                              ; preds = %227
  br label %229

229:                                              ; preds = %228
  %230 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %231 = getelementptr inbounds %struct.s2n_debug_info, ptr %230, i32 0, i32 0
  store ptr @.str.9, ptr %231, align 8, !tbaa !9
  %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
  %234 = load ptr, ptr %233, align 8, !tbaa !9
  %235 = getelementptr inbounds i8, ptr %234, i64 21
  %236 = call ptr @strrchr(ptr noundef %235, i32 noundef 47) #6
  %237 = icmp ne ptr %236, null
  br i1 %237, label %238, label %245

238:                                              ; preds = %229
  %239 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %240 = getelementptr inbounds %struct.s2n_debug_info, ptr %239, i32 0, i32 0
  %241 = load ptr, ptr %240, align 8, !tbaa !9
  %242 = getelementptr inbounds i8, ptr %241, i64 21
  %243 = call ptr @strrchr(ptr noundef %242, i32 noundef 47) #6
  %244 = getelementptr inbounds i8, ptr %243, i64 1
  br label %250

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

250:                                              ; preds = %245, %238
  %251 = phi ptr [ %244, %238 ], [ %249, %245 ]
  %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 1
  store ptr %251, ptr %253, align 8, !tbaa !11
  %254 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %254, align 4, !tbaa !12
  %255 = call i32 @s2n_calculate_stacktrace()
  br label %256

256:                                              ; preds = %250
  br label %257

257:                                              ; preds = %256
  %258 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %258, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %346

259:                                              ; No predecessors!
  br label %260

260:                                              ; preds = %259
  br label %261

261:                                              ; preds = %260, %224
  br label %262

262:                                              ; preds = %261
  br label %263

263:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #7
  store i8 0, ptr %16, align 1, !tbaa !25
  br label %264

264:                                              ; preds = %263
  %265 = load ptr, ptr %5, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.s2n_security_rule, ptr %265, i32 0, i32 1
  %267 = load ptr, ptr %266, align 8, !tbaa !26
  %268 = icmp ne ptr %267, null
  br i1 %268, label %303, label %269

269:                                              ; preds = %264
  br label %270

270:                                              ; preds = %269
  br label %271

271:                                              ; preds = %270
  %272 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %273 = getelementptr inbounds %struct.s2n_debug_info, ptr %272, i32 0, i32 0
  store ptr @.str.10, ptr %273, align 8, !tbaa !9
  %274 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %275 = getelementptr inbounds %struct.s2n_debug_info, ptr %274, i32 0, i32 0
  %276 = load ptr, ptr %275, align 8, !tbaa !9
  %277 = getelementptr inbounds i8, ptr %276, i64 21
  %278 = call ptr @strrchr(ptr noundef %277, i32 noundef 47) #6
  %279 = icmp ne ptr %278, null
  br i1 %279, label %280, label %287

280:                                              ; preds = %271
  %281 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %282 = getelementptr inbounds %struct.s2n_debug_info, ptr %281, i32 0, i32 0
  %283 = load ptr, ptr %282, align 8, !tbaa !9
  %284 = getelementptr inbounds i8, ptr %283, i64 21
  %285 = call ptr @strrchr(ptr noundef %284, i32 noundef 47) #6
  %286 = getelementptr inbounds i8, ptr %285, i64 1
  br label %292

287:                                              ; preds = %271
  %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
  %290 = load ptr, ptr %289, align 8, !tbaa !9
  %291 = getelementptr inbounds i8, ptr %290, i64 21
  br label %292

292:                                              ; preds = %287, %280
  %293 = phi ptr [ %286, %280 ], [ %291, %287 ]
  %294 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %295 = getelementptr inbounds %struct.s2n_debug_info, ptr %294, i32 0, i32 1
  store ptr %293, ptr %295, align 8, !tbaa !11
  %296 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %296, align 4, !tbaa !12
  %297 = call i32 @s2n_calculate_stacktrace()
  br label %298

298:                                              ; preds = %292
  br label %299

299:                                              ; preds = %298
  %300 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %300, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %345

301:                                              ; No predecessors!
  br label %302

302:                                              ; preds = %301
  br label %303

303:                                              ; preds = %302, %264
  br label %304

304:                                              ; preds = %303
  br label %305

305:                                              ; preds = %304
  br label %306

306:                                              ; preds = %305
  %307 = load ptr, ptr %5, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.s2n_security_rule, ptr %307, i32 0, i32 1
  %309 = load ptr, ptr %308, align 8, !tbaa !26
  %310 = load ptr, ptr %15, align 8, !tbaa !5
  %311 = call i32 %309(ptr noundef %310, ptr noundef %16)
  %312 = getelementptr inbounds %struct.s2n_result, ptr %17, i32 0, i32 0
  store i32 %311, ptr %312, align 4
  %313 = getelementptr inbounds %struct.s2n_result, ptr %17, i32 0, i32 0
  %314 = load i32, ptr %313, align 4
  %315 = call zeroext i1 @s2n_result_is_ok(i32 %314)
  br i1 %315, label %318, label %316

316:                                              ; preds = %306
  %317 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %317, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %345

318:                                              ; preds = %306
  br label %319

319:                                              ; preds = %318
  br label %320

320:                                              ; preds = %319
  br label %321

321:                                              ; preds = %320
  %322 = load ptr, ptr %7, align 8, !tbaa !5
  %323 = load i8, ptr %16, align 1, !tbaa !25, !range !28, !noundef !29
  %324 = trunc i8 %323 to i1
  %325 = load ptr, ptr %10, align 8, !tbaa !5
  %326 = load ptr, ptr %5, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.s2n_security_rule, ptr %326, i32 0, i32 0
  %328 = load ptr, ptr %327, align 8, !tbaa !30
  %329 = load ptr, ptr %8, align 8, !tbaa !5
  %330 = load ptr, ptr %15, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.s2n_cipher_suite, ptr %330, i32 0, i32 2
  %332 = load ptr, ptr %331, align 8, !tbaa !31
  %333 = load i64, ptr %14, align 8, !tbaa !19
  %334 = add i64 %333, 1
  %335 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef %322, i1 noundef zeroext %324, ptr noundef %325, ptr noundef %328, ptr noundef %329, ptr noundef @.str.11, ptr noundef %332, i64 noundef %334)
  %336 = getelementptr inbounds %struct.s2n_result, ptr %18, i32 0, i32 0
  store i32 %335, ptr %336, align 4
  %337 = getelementptr inbounds %struct.s2n_result, ptr %18, i32 0, i32 0
  %338 = load i32, ptr %337, align 4
  %339 = call zeroext i1 @s2n_result_is_ok(i32 %338)
  br i1 %339, label %342, label %340

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

342:                                              ; preds = %321
  br label %343

343:                                              ; preds = %342
  br label %344

344:                                              ; preds = %343
  store i32 0, ptr %13, align 4
  br label %345

345:                                              ; preds = %344, %340, %316, %299
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #7
  br label %346

346:                                              ; preds = %345, %257
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  %347 = load i32, ptr %13, align 4
  switch i32 %347, label %352 [
    i32 0, label %348
  ]

348:                                              ; preds = %346
  br label %349

349:                                              ; preds = %348
  %350 = load i64, ptr %14, align 8, !tbaa !19
  %351 = add i64 %350, 1
  store i64 %351, ptr %14, align 8, !tbaa !19
  br label %209, !llvm.loop !33

352:                                              ; preds = %346, %216
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  %353 = load i32, ptr %13, align 4
  switch i32 %353, label %1159 [
    i32 26, label %354
  ]

354:                                              ; preds = %352
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %355 = load ptr, ptr %6, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.s2n_security_policy, ptr %355, i32 0, i32 3
  %357 = load ptr, ptr %356, align 8, !tbaa !35
  store ptr %357, ptr %19, align 8, !tbaa !5
  br label %358

358:                                              ; preds = %354
  %359 = load ptr, ptr %19, align 8, !tbaa !5
  %360 = icmp ne ptr %359, null
  br i1 %360, label %395, label %361

361:                                              ; preds = %358
  br label %362

362:                                              ; preds = %361
  br label %363

363:                                              ; preds = %362
  %364 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %365 = getelementptr inbounds %struct.s2n_debug_info, ptr %364, i32 0, i32 0
  store ptr @.str.12, ptr %365, align 8, !tbaa !9
  %366 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %367 = getelementptr inbounds %struct.s2n_debug_info, ptr %366, i32 0, i32 0
  %368 = load ptr, ptr %367, align 8, !tbaa !9
  %369 = getelementptr inbounds i8, ptr %368, i64 21
  %370 = call ptr @strrchr(ptr noundef %369, i32 noundef 47) #6
  %371 = icmp ne ptr %370, null
  br i1 %371, label %372, label %379

372:                                              ; preds = %363
  %373 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %374 = getelementptr inbounds %struct.s2n_debug_info, ptr %373, i32 0, i32 0
  %375 = load ptr, ptr %374, align 8, !tbaa !9
  %376 = getelementptr inbounds i8, ptr %375, i64 21
  %377 = call ptr @strrchr(ptr noundef %376, i32 noundef 47) #6
  %378 = getelementptr inbounds i8, ptr %377, i64 1
  br label %384

379:                                              ; preds = %363
  %380 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %381 = getelementptr inbounds %struct.s2n_debug_info, ptr %380, i32 0, i32 0
  %382 = load ptr, ptr %381, align 8, !tbaa !9
  %383 = getelementptr inbounds i8, ptr %382, i64 21
  br label %384

384:                                              ; preds = %379, %372
  %385 = phi ptr [ %378, %372 ], [ %383, %379 ]
  %386 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %387 = getelementptr inbounds %struct.s2n_debug_info, ptr %386, i32 0, i32 1
  store ptr %385, ptr %387, align 8, !tbaa !11
  %388 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %388, align 4, !tbaa !12
  %389 = call i32 @s2n_calculate_stacktrace()
  br label %390

390:                                              ; preds = %384
  br label %391

391:                                              ; preds = %390
  %392 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %392, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1158

393:                                              ; No predecessors!
  br label %394

394:                                              ; preds = %393
  br label %395

395:                                              ; preds = %394, %358
  br label %396

396:                                              ; preds = %395
  br label %397

397:                                              ; preds = %396
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  store i64 0, ptr %20, align 8, !tbaa !19
  br label %398

398:                                              ; preds = %536, %397
  %399 = load i64, ptr %20, align 8, !tbaa !19
  %400 = load ptr, ptr %19, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.s2n_signature_preferences, ptr %400, i32 0, i32 0
  %402 = load i8, ptr %401, align 8, !tbaa !36
  %403 = zext i8 %402 to i64
  %404 = icmp ult i64 %399, %403
  br i1 %404, label %406, label %405

405:                                              ; preds = %398
  store i32 51, ptr %13, align 4
  br label %539

406:                                              ; preds = %398
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %407 = load ptr, ptr %19, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.s2n_signature_preferences, ptr %407, i32 0, i32 1
  %409 = load ptr, ptr %408, align 8, !tbaa !38
  %410 = load i64, ptr %20, align 8, !tbaa !19
  %411 = getelementptr inbounds ptr, ptr %409, i64 %410
  %412 = load ptr, ptr %411, align 8, !tbaa !5
  store ptr %412, ptr %21, align 8, !tbaa !5
  br label %413

413:                                              ; preds = %406
  %414 = load ptr, ptr %21, align 8, !tbaa !5
  %415 = icmp ne ptr %414, null
  br i1 %415, label %450, label %416

416:                                              ; preds = %413
  br label %417

417:                                              ; preds = %416
  br label %418

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

427:                                              ; preds = %418
  %428 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %429 = getelementptr inbounds %struct.s2n_debug_info, ptr %428, i32 0, i32 0
  %430 = load ptr, ptr %429, align 8, !tbaa !9
  %431 = getelementptr inbounds i8, ptr %430, i64 21
  %432 = call ptr @strrchr(ptr noundef %431, i32 noundef 47) #6
  %433 = getelementptr inbounds i8, ptr %432, i64 1
  br label %439

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

439:                                              ; preds = %434, %427
  %440 = phi ptr [ %433, %427 ], [ %438, %434 ]
  %441 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %442 = getelementptr inbounds %struct.s2n_debug_info, ptr %441, i32 0, i32 1
  store ptr %440, ptr %442, align 8, !tbaa !11
  %443 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %443, align 4, !tbaa !12
  %444 = call i32 @s2n_calculate_stacktrace()
  br label %445

445:                                              ; preds = %439
  br label %446

446:                                              ; preds = %445
  %447 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %447, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %533

448:                                              ; No predecessors!
  br label %449

449:                                              ; preds = %448
  br label %450

450:                                              ; preds = %449, %413
  br label %451

451:                                              ; preds = %450
  br label %452

452:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #7
  store i8 0, ptr %22, align 1, !tbaa !25
  br label %453

453:                                              ; preds = %452
  %454 = load ptr, ptr %5, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.s2n_security_rule, ptr %454, i32 0, i32 2
  %456 = load ptr, ptr %455, align 8, !tbaa !39
  %457 = icmp ne ptr %456, null
  br i1 %457, label %492, label %458

458:                                              ; preds = %453
  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.14, ptr %462, align 8, !tbaa !9
  %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 !9
  %466 = getelementptr inbounds i8, ptr %465, i64 21
  %467 = call ptr @strrchr(ptr noundef %466, i32 noundef 47) #6
  %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 !9
  %473 = getelementptr inbounds i8, ptr %472, i64 21
  %474 = call ptr @strrchr(ptr noundef %473, i32 noundef 47) #6
  %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 !9
  %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 !11
  %485 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %485, align 4, !tbaa !12
  %486 = call i32 @s2n_calculate_stacktrace()
  br label %487

487:                                              ; preds = %481
  br label %488

488:                                              ; preds = %487
  %489 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %489, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %532

490:                                              ; No predecessors!
  br label %491

491:                                              ; preds = %490
  br label %492

492:                                              ; preds = %491, %453
  br label %493

493:                                              ; preds = %492
  br label %494

494:                                              ; preds = %493
  br label %495

495:                                              ; preds = %494
  %496 = load ptr, ptr %5, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.s2n_security_rule, ptr %496, i32 0, i32 2
  %498 = load ptr, ptr %497, align 8, !tbaa !39
  %499 = load ptr, ptr %21, align 8, !tbaa !5
  %500 = call i32 %498(ptr noundef %499, ptr noundef %22)
  %501 = getelementptr inbounds %struct.s2n_result, ptr %23, i32 0, i32 0
  store i32 %500, ptr %501, align 4
  %502 = getelementptr inbounds %struct.s2n_result, ptr %23, i32 0, i32 0
  %503 = load i32, ptr %502, align 4
  %504 = call zeroext i1 @s2n_result_is_ok(i32 %503)
  br i1 %504, label %507, label %505

505:                                              ; preds = %495
  %506 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %506, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %532

507:                                              ; preds = %495
  br label %508

508:                                              ; preds = %507
  br label %509

509:                                              ; preds = %508
  br label %510

510:                                              ; preds = %509
  %511 = load ptr, ptr %7, align 8, !tbaa !5
  %512 = load i8, ptr %22, align 1, !tbaa !25, !range !28, !noundef !29
  %513 = trunc i8 %512 to i1
  %514 = load ptr, ptr %10, align 8, !tbaa !5
  %515 = load ptr, ptr %5, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.s2n_security_rule, ptr %515, i32 0, i32 0
  %517 = load ptr, ptr %516, align 8, !tbaa !30
  %518 = load ptr, ptr %8, align 8, !tbaa !5
  %519 = load ptr, ptr %21, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.s2n_signature_scheme, ptr %519, i32 0, i32 1
  %521 = load ptr, ptr %520, align 8, !tbaa !40
  %522 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef %511, i1 noundef zeroext %513, ptr noundef %514, ptr noundef %517, ptr noundef %518, ptr noundef @.str.15, ptr noundef %521)
  %523 = getelementptr inbounds %struct.s2n_result, ptr %24, i32 0, i32 0
  store i32 %522, ptr %523, align 4
  %524 = getelementptr inbounds %struct.s2n_result, ptr %24, i32 0, i32 0
  %525 = load i32, ptr %524, align 4
  %526 = call zeroext i1 @s2n_result_is_ok(i32 %525)
  br i1 %526, label %529, label %527

527:                                              ; preds = %510
  %528 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %528, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %532

529:                                              ; preds = %510
  br label %530

530:                                              ; preds = %529
  br label %531

531:                                              ; preds = %530
  store i32 0, ptr %13, align 4
  br label %532

532:                                              ; preds = %531, %527, %505, %488
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  br label %533

533:                                              ; preds = %532, %446
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  %534 = load i32, ptr %13, align 4
  switch i32 %534, label %539 [
    i32 0, label %535
  ]

535:                                              ; preds = %533
  br label %536

536:                                              ; preds = %535
  %537 = load i64, ptr %20, align 8, !tbaa !19
  %538 = add i64 %537, 1
  store i64 %538, ptr %20, align 8, !tbaa !19
  br label %398, !llvm.loop !42

539:                                              ; preds = %533, %405
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  %540 = load i32, ptr %13, align 4
  switch i32 %540, label %1158 [
    i32 51, label %541
  ]

541:                                              ; preds = %539
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %542 = load ptr, ptr %6, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.s2n_security_policy, ptr %542, i32 0, i32 4
  %544 = load ptr, ptr %543, align 8, !tbaa !43
  store ptr %544, ptr %25, align 8, !tbaa !5
  %545 = load ptr, ptr %25, align 8, !tbaa !5
  %546 = icmp ne ptr %545, null
  br i1 %546, label %547, label %692

547:                                              ; preds = %541
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  store i64 0, ptr %26, align 8, !tbaa !19
  br label %548

548:                                              ; preds = %686, %547
  %549 = load i64, ptr %26, align 8, !tbaa !19
  %550 = load ptr, ptr %25, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.s2n_signature_preferences, ptr %550, i32 0, i32 0
  %552 = load i8, ptr %551, align 8, !tbaa !36
  %553 = zext i8 %552 to i64
  %554 = icmp ult i64 %549, %553
  br i1 %554, label %556, label %555

555:                                              ; preds = %548
  store i32 70, ptr %13, align 4
  br label %689

556:                                              ; preds = %548
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %557 = load ptr, ptr %25, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.s2n_signature_preferences, ptr %557, i32 0, i32 1
  %559 = load ptr, ptr %558, align 8, !tbaa !38
  %560 = load i64, ptr %26, align 8, !tbaa !19
  %561 = getelementptr inbounds ptr, ptr %559, i64 %560
  %562 = load ptr, ptr %561, align 8, !tbaa !5
  store ptr %562, ptr %27, align 8, !tbaa !5
  br label %563

563:                                              ; preds = %556
  %564 = load ptr, ptr %27, align 8, !tbaa !5
  %565 = icmp ne ptr %564, null
  br i1 %565, label %600, label %566

566:                                              ; preds = %563
  br label %567

567:                                              ; preds = %566
  br label %568

568:                                              ; preds = %567
  %569 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %570 = getelementptr inbounds %struct.s2n_debug_info, ptr %569, i32 0, i32 0
  store ptr @.str.16, ptr %570, align 8, !tbaa !9
  %571 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %572 = getelementptr inbounds %struct.s2n_debug_info, ptr %571, i32 0, i32 0
  %573 = load ptr, ptr %572, align 8, !tbaa !9
  %574 = getelementptr inbounds i8, ptr %573, i64 21
  %575 = call ptr @strrchr(ptr noundef %574, i32 noundef 47) #6
  %576 = icmp ne ptr %575, null
  br i1 %576, label %577, label %584

577:                                              ; preds = %568
  %578 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %579 = getelementptr inbounds %struct.s2n_debug_info, ptr %578, i32 0, i32 0
  %580 = load ptr, ptr %579, align 8, !tbaa !9
  %581 = getelementptr inbounds i8, ptr %580, i64 21
  %582 = call ptr @strrchr(ptr noundef %581, i32 noundef 47) #6
  %583 = getelementptr inbounds i8, ptr %582, i64 1
  br label %589

584:                                              ; preds = %568
  %585 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %586 = getelementptr inbounds %struct.s2n_debug_info, ptr %585, i32 0, i32 0
  %587 = load ptr, ptr %586, align 8, !tbaa !9
  %588 = getelementptr inbounds i8, ptr %587, i64 21
  br label %589

589:                                              ; preds = %584, %577
  %590 = phi ptr [ %583, %577 ], [ %588, %584 ]
  %591 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %592 = getelementptr inbounds %struct.s2n_debug_info, ptr %591, i32 0, i32 1
  store ptr %590, ptr %592, align 8, !tbaa !11
  %593 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %593, align 4, !tbaa !12
  %594 = call i32 @s2n_calculate_stacktrace()
  br label %595

595:                                              ; preds = %589
  br label %596

596:                                              ; preds = %595
  %597 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %597, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %683

598:                                              ; No predecessors!
  br label %599

599:                                              ; preds = %598
  br label %600

600:                                              ; preds = %599, %563
  br label %601

601:                                              ; preds = %600
  br label %602

602:                                              ; preds = %601
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #7
  store i8 0, ptr %28, align 1, !tbaa !25
  br label %603

603:                                              ; preds = %602
  %604 = load ptr, ptr %5, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.s2n_security_rule, ptr %604, i32 0, i32 3
  %606 = load ptr, ptr %605, align 8, !tbaa !44
  %607 = icmp ne ptr %606, null
  br i1 %607, label %642, label %608

608:                                              ; preds = %603
  br label %609

609:                                              ; preds = %608
  br label %610

610:                                              ; preds = %609
  %611 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %612 = getelementptr inbounds %struct.s2n_debug_info, ptr %611, i32 0, i32 0
  store ptr @.str.17, ptr %612, align 8, !tbaa !9
  %613 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %614 = getelementptr inbounds %struct.s2n_debug_info, ptr %613, i32 0, i32 0
  %615 = load ptr, ptr %614, align 8, !tbaa !9
  %616 = getelementptr inbounds i8, ptr %615, i64 21
  %617 = call ptr @strrchr(ptr noundef %616, i32 noundef 47) #6
  %618 = icmp ne ptr %617, null
  br i1 %618, label %619, label %626

619:                                              ; preds = %610
  %620 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %621 = getelementptr inbounds %struct.s2n_debug_info, ptr %620, i32 0, i32 0
  %622 = load ptr, ptr %621, align 8, !tbaa !9
  %623 = getelementptr inbounds i8, ptr %622, i64 21
  %624 = call ptr @strrchr(ptr noundef %623, i32 noundef 47) #6
  %625 = getelementptr inbounds i8, ptr %624, i64 1
  br label %631

626:                                              ; preds = %610
  %627 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %628 = getelementptr inbounds %struct.s2n_debug_info, ptr %627, i32 0, i32 0
  %629 = load ptr, ptr %628, align 8, !tbaa !9
  %630 = getelementptr inbounds i8, ptr %629, i64 21
  br label %631

631:                                              ; preds = %626, %619
  %632 = phi ptr [ %625, %619 ], [ %630, %626 ]
  %633 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %634 = getelementptr inbounds %struct.s2n_debug_info, ptr %633, i32 0, i32 1
  store ptr %632, ptr %634, align 8, !tbaa !11
  %635 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %635, align 4, !tbaa !12
  %636 = call i32 @s2n_calculate_stacktrace()
  br label %637

637:                                              ; preds = %631
  br label %638

638:                                              ; preds = %637
  %639 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %639, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %682

640:                                              ; No predecessors!
  br label %641

641:                                              ; preds = %640
  br label %642

642:                                              ; preds = %641, %603
  br label %643

643:                                              ; preds = %642
  br label %644

644:                                              ; preds = %643
  br label %645

645:                                              ; preds = %644
  %646 = load ptr, ptr %5, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.s2n_security_rule, ptr %646, i32 0, i32 3
  %648 = load ptr, ptr %647, align 8, !tbaa !44
  %649 = load ptr, ptr %27, align 8, !tbaa !5
  %650 = call i32 %648(ptr noundef %649, ptr noundef %28)
  %651 = getelementptr inbounds %struct.s2n_result, ptr %29, i32 0, i32 0
  store i32 %650, ptr %651, align 4
  %652 = getelementptr inbounds %struct.s2n_result, ptr %29, i32 0, i32 0
  %653 = load i32, ptr %652, align 4
  %654 = call zeroext i1 @s2n_result_is_ok(i32 %653)
  br i1 %654, label %657, label %655

655:                                              ; preds = %645
  %656 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %656, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %682

657:                                              ; preds = %645
  br label %658

658:                                              ; preds = %657
  br label %659

659:                                              ; preds = %658
  br label %660

660:                                              ; preds = %659
  %661 = load ptr, ptr %7, align 8, !tbaa !5
  %662 = load i8, ptr %28, align 1, !tbaa !25, !range !28, !noundef !29
  %663 = trunc i8 %662 to i1
  %664 = load ptr, ptr %10, align 8, !tbaa !5
  %665 = load ptr, ptr %5, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.s2n_security_rule, ptr %665, i32 0, i32 0
  %667 = load ptr, ptr %666, align 8, !tbaa !30
  %668 = load ptr, ptr %8, align 8, !tbaa !5
  %669 = load ptr, ptr %27, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.s2n_signature_scheme, ptr %669, i32 0, i32 1
  %671 = load ptr, ptr %670, align 8, !tbaa !40
  %672 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef %661, i1 noundef zeroext %663, ptr noundef %664, ptr noundef %667, ptr noundef %668, ptr noundef @.str.18, ptr noundef %671)
  %673 = getelementptr inbounds %struct.s2n_result, ptr %30, i32 0, i32 0
  store i32 %672, ptr %673, align 4
  %674 = getelementptr inbounds %struct.s2n_result, ptr %30, i32 0, i32 0
  %675 = load i32, ptr %674, align 4
  %676 = call zeroext i1 @s2n_result_is_ok(i32 %675)
  br i1 %676, label %679, label %677

677:                                              ; preds = %660
  %678 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %678, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %682

679:                                              ; preds = %660
  br label %680

680:                                              ; preds = %679
  br label %681

681:                                              ; preds = %680
  store i32 0, ptr %13, align 4
  br label %682

682:                                              ; preds = %681, %677, %655, %638
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #7
  br label %683

683:                                              ; preds = %682, %596
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  %684 = load i32, ptr %13, align 4
  switch i32 %684, label %689 [
    i32 0, label %685
  ]

685:                                              ; preds = %683
  br label %686

686:                                              ; preds = %685
  %687 = load i64, ptr %26, align 8, !tbaa !19
  %688 = add i64 %687, 1
  store i64 %688, ptr %26, align 8, !tbaa !19
  br label %548, !llvm.loop !45

689:                                              ; preds = %683, %555
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  %690 = load i32, ptr %13, align 4
  switch i32 %690, label %1157 [
    i32 70, label %691
  ]

691:                                              ; preds = %689
  br label %692

692:                                              ; preds = %691, %541
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %693 = load ptr, ptr %6, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.s2n_security_policy, ptr %693, i32 0, i32 5
  %695 = load ptr, ptr %694, align 8, !tbaa !46
  store ptr %695, ptr %31, align 8, !tbaa !5
  br label %696

696:                                              ; preds = %692
  %697 = load ptr, ptr %31, align 8, !tbaa !5
  %698 = icmp ne ptr %697, null
  br i1 %698, label %733, label %699

699:                                              ; preds = %696
  br label %700

700:                                              ; preds = %699
  br label %701

701:                                              ; preds = %700
  %702 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %703 = getelementptr inbounds %struct.s2n_debug_info, ptr %702, i32 0, i32 0
  store ptr @.str.19, ptr %703, align 8, !tbaa !9
  %704 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %705 = getelementptr inbounds %struct.s2n_debug_info, ptr %704, i32 0, i32 0
  %706 = load ptr, ptr %705, align 8, !tbaa !9
  %707 = getelementptr inbounds i8, ptr %706, i64 21
  %708 = call ptr @strrchr(ptr noundef %707, i32 noundef 47) #6
  %709 = icmp ne ptr %708, null
  br i1 %709, label %710, label %717

710:                                              ; preds = %701
  %711 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %712 = getelementptr inbounds %struct.s2n_debug_info, ptr %711, i32 0, i32 0
  %713 = load ptr, ptr %712, align 8, !tbaa !9
  %714 = getelementptr inbounds i8, ptr %713, i64 21
  %715 = call ptr @strrchr(ptr noundef %714, i32 noundef 47) #6
  %716 = getelementptr inbounds i8, ptr %715, i64 1
  br label %722

717:                                              ; preds = %701
  %718 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %719 = getelementptr inbounds %struct.s2n_debug_info, ptr %718, i32 0, i32 0
  %720 = load ptr, ptr %719, align 8, !tbaa !9
  %721 = getelementptr inbounds i8, ptr %720, i64 21
  br label %722

722:                                              ; preds = %717, %710
  %723 = phi ptr [ %716, %710 ], [ %721, %717 ]
  %724 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %725 = getelementptr inbounds %struct.s2n_debug_info, ptr %724, i32 0, i32 1
  store ptr %723, ptr %725, align 8, !tbaa !11
  %726 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %726, align 4, !tbaa !12
  %727 = call i32 @s2n_calculate_stacktrace()
  br label %728

728:                                              ; preds = %722
  br label %729

729:                                              ; preds = %728
  %730 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %730, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1156

731:                                              ; No predecessors!
  br label %732

732:                                              ; preds = %731
  br label %733

733:                                              ; preds = %732, %696
  br label %734

734:                                              ; preds = %733
  br label %735

735:                                              ; preds = %734
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  store i64 0, ptr %32, align 8, !tbaa !19
  br label %736

736:                                              ; preds = %876, %735
  %737 = load i64, ptr %32, align 8, !tbaa !19
  %738 = load ptr, ptr %31, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.s2n_ecc_preferences, ptr %738, i32 0, i32 0
  %740 = load i8, ptr %739, align 8, !tbaa !47
  %741 = zext i8 %740 to i64
  %742 = icmp ult i64 %737, %741
  br i1 %742, label %744, label %743

743:                                              ; preds = %736
  store i32 95, ptr %13, align 4
  br label %879

744:                                              ; preds = %736
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %745 = load ptr, ptr %31, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.s2n_ecc_preferences, ptr %745, i32 0, i32 1
  %747 = load ptr, ptr %746, align 8, !tbaa !49
  %748 = load i64, ptr %32, align 8, !tbaa !19
  %749 = getelementptr inbounds ptr, ptr %747, i64 %748
  %750 = load ptr, ptr %749, align 8, !tbaa !5
  store ptr %750, ptr %33, align 8, !tbaa !5
  br label %751

751:                                              ; preds = %744
  %752 = load ptr, ptr %33, align 8, !tbaa !5
  %753 = icmp ne ptr %752, null
  br i1 %753, label %788, label %754

754:                                              ; preds = %751
  br label %755

755:                                              ; preds = %754
  br label %756

756:                                              ; preds = %755
  %757 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %758 = getelementptr inbounds %struct.s2n_debug_info, ptr %757, i32 0, i32 0
  store ptr @.str.20, ptr %758, align 8, !tbaa !9
  %759 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %760 = getelementptr inbounds %struct.s2n_debug_info, ptr %759, i32 0, i32 0
  %761 = load ptr, ptr %760, align 8, !tbaa !9
  %762 = getelementptr inbounds i8, ptr %761, i64 21
  %763 = call ptr @strrchr(ptr noundef %762, i32 noundef 47) #6
  %764 = icmp ne ptr %763, null
  br i1 %764, label %765, label %772

765:                                              ; preds = %756
  %766 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %767 = getelementptr inbounds %struct.s2n_debug_info, ptr %766, i32 0, i32 0
  %768 = load ptr, ptr %767, align 8, !tbaa !9
  %769 = getelementptr inbounds i8, ptr %768, i64 21
  %770 = call ptr @strrchr(ptr noundef %769, i32 noundef 47) #6
  %771 = getelementptr inbounds i8, ptr %770, i64 1
  br label %777

772:                                              ; preds = %756
  %773 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %774 = getelementptr inbounds %struct.s2n_debug_info, ptr %773, i32 0, i32 0
  %775 = load ptr, ptr %774, align 8, !tbaa !9
  %776 = getelementptr inbounds i8, ptr %775, i64 21
  br label %777

777:                                              ; preds = %772, %765
  %778 = phi ptr [ %771, %765 ], [ %776, %772 ]
  %779 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %780 = getelementptr inbounds %struct.s2n_debug_info, ptr %779, i32 0, i32 1
  store ptr %778, ptr %780, align 8, !tbaa !11
  %781 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %781, align 4, !tbaa !12
  %782 = call i32 @s2n_calculate_stacktrace()
  br label %783

783:                                              ; preds = %777
  br label %784

784:                                              ; preds = %783
  %785 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %785, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %873

786:                                              ; No predecessors!
  br label %787

787:                                              ; preds = %786
  br label %788

788:                                              ; preds = %787, %751
  br label %789

789:                                              ; preds = %788
  br label %790

790:                                              ; preds = %789
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #7
  store i8 0, ptr %34, align 1, !tbaa !25
  br label %791

791:                                              ; preds = %790
  %792 = load ptr, ptr %5, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.s2n_security_rule, ptr %792, i32 0, i32 4
  %794 = load ptr, ptr %793, align 8, !tbaa !50
  %795 = icmp ne ptr %794, null
  br i1 %795, label %830, label %796

796:                                              ; preds = %791
  br label %797

797:                                              ; preds = %796
  br label %798

798:                                              ; preds = %797
  %799 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %800 = getelementptr inbounds %struct.s2n_debug_info, ptr %799, i32 0, i32 0
  store ptr @.str.21, ptr %800, align 8, !tbaa !9
  %801 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %802 = getelementptr inbounds %struct.s2n_debug_info, ptr %801, i32 0, i32 0
  %803 = load ptr, ptr %802, align 8, !tbaa !9
  %804 = getelementptr inbounds i8, ptr %803, i64 21
  %805 = call ptr @strrchr(ptr noundef %804, i32 noundef 47) #6
  %806 = icmp ne ptr %805, null
  br i1 %806, label %807, label %814

807:                                              ; preds = %798
  %808 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %809 = getelementptr inbounds %struct.s2n_debug_info, ptr %808, i32 0, i32 0
  %810 = load ptr, ptr %809, align 8, !tbaa !9
  %811 = getelementptr inbounds i8, ptr %810, i64 21
  %812 = call ptr @strrchr(ptr noundef %811, i32 noundef 47) #6
  %813 = getelementptr inbounds i8, ptr %812, i64 1
  br label %819

814:                                              ; preds = %798
  %815 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %816 = getelementptr inbounds %struct.s2n_debug_info, ptr %815, i32 0, i32 0
  %817 = load ptr, ptr %816, align 8, !tbaa !9
  %818 = getelementptr inbounds i8, ptr %817, i64 21
  br label %819

819:                                              ; preds = %814, %807
  %820 = phi ptr [ %813, %807 ], [ %818, %814 ]
  %821 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %822 = getelementptr inbounds %struct.s2n_debug_info, ptr %821, i32 0, i32 1
  store ptr %820, ptr %822, align 8, !tbaa !11
  %823 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %823, align 4, !tbaa !12
  %824 = call i32 @s2n_calculate_stacktrace()
  br label %825

825:                                              ; preds = %819
  br label %826

826:                                              ; preds = %825
  %827 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %827, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %872

828:                                              ; No predecessors!
  br label %829

829:                                              ; preds = %828
  br label %830

830:                                              ; preds = %829, %791
  br label %831

831:                                              ; preds = %830
  br label %832

832:                                              ; preds = %831
  br label %833

833:                                              ; preds = %832
  %834 = load ptr, ptr %5, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct.s2n_security_rule, ptr %834, i32 0, i32 4
  %836 = load ptr, ptr %835, align 8, !tbaa !50
  %837 = load ptr, ptr %33, align 8, !tbaa !5
  %838 = call i32 %836(ptr noundef %837, ptr noundef %34)
  %839 = getelementptr inbounds %struct.s2n_result, ptr %35, i32 0, i32 0
  store i32 %838, ptr %839, align 4
  %840 = getelementptr inbounds %struct.s2n_result, ptr %35, i32 0, i32 0
  %841 = load i32, ptr %840, align 4
  %842 = call zeroext i1 @s2n_result_is_ok(i32 %841)
  br i1 %842, label %845, label %843

843:                                              ; preds = %833
  %844 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %844, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %872

845:                                              ; preds = %833
  br label %846

846:                                              ; preds = %845
  br label %847

847:                                              ; preds = %846
  br label %848

848:                                              ; preds = %847
  %849 = load ptr, ptr %7, align 8, !tbaa !5
  %850 = load i8, ptr %34, align 1, !tbaa !25, !range !28, !noundef !29
  %851 = trunc i8 %850 to i1
  %852 = load ptr, ptr %10, align 8, !tbaa !5
  %853 = load ptr, ptr %5, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.s2n_security_rule, ptr %853, i32 0, i32 0
  %855 = load ptr, ptr %854, align 8, !tbaa !30
  %856 = load ptr, ptr %8, align 8, !tbaa !5
  %857 = load ptr, ptr %33, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.s2n_ecc_named_curve, ptr %857, i32 0, i32 2
  %859 = load ptr, ptr %858, align 8, !tbaa !51
  %860 = load i64, ptr %32, align 8, !tbaa !19
  %861 = add i64 %860, 1
  %862 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef %849, i1 noundef zeroext %851, ptr noundef %852, ptr noundef %855, ptr noundef %856, ptr noundef @.str.22, ptr noundef %859, i64 noundef %861)
  %863 = getelementptr inbounds %struct.s2n_result, ptr %36, i32 0, i32 0
  store i32 %862, ptr %863, align 4
  %864 = getelementptr inbounds %struct.s2n_result, ptr %36, i32 0, i32 0
  %865 = load i32, ptr %864, align 4
  %866 = call zeroext i1 @s2n_result_is_ok(i32 %865)
  br i1 %866, label %869, label %867

867:                                              ; preds = %848
  %868 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %868, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %872

869:                                              ; preds = %848
  br label %870

870:                                              ; preds = %869
  br label %871

871:                                              ; preds = %870
  store i32 0, ptr %13, align 4
  br label %872

872:                                              ; preds = %871, %867, %843, %826
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  br label %873

873:                                              ; preds = %872, %784
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  %874 = load i32, ptr %13, align 4
  switch i32 %874, label %879 [
    i32 0, label %875
  ]

875:                                              ; preds = %873
  br label %876

876:                                              ; preds = %875
  %877 = load i64, ptr %32, align 8, !tbaa !19
  %878 = add i64 %877, 1
  store i64 %878, ptr %32, align 8, !tbaa !19
  br label %736, !llvm.loop !53

879:                                              ; preds = %873, %743
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  %880 = load i32, ptr %13, align 4
  switch i32 %880, label %1156 [
    i32 95, label %881
  ]

881:                                              ; preds = %879
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %882 = load ptr, ptr %6, align 8, !tbaa !5
  %883 = getelementptr inbounds %struct.s2n_security_policy, ptr %882, i32 0, i32 2
  %884 = load ptr, ptr %883, align 8, !tbaa !54
  store ptr %884, ptr %37, align 8, !tbaa !5
  br label %885

885:                                              ; preds = %881
  %886 = load ptr, ptr %37, align 8, !tbaa !5
  %887 = icmp ne ptr %886, null
  br i1 %887, label %922, label %888

888:                                              ; preds = %885
  br label %889

889:                                              ; preds = %888
  br label %890

890:                                              ; preds = %889
  %891 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %892 = getelementptr inbounds %struct.s2n_debug_info, ptr %891, i32 0, i32 0
  store ptr @.str.23, ptr %892, align 8, !tbaa !9
  %893 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %894 = getelementptr inbounds %struct.s2n_debug_info, ptr %893, i32 0, i32 0
  %895 = load ptr, ptr %894, align 8, !tbaa !9
  %896 = getelementptr inbounds i8, ptr %895, i64 21
  %897 = call ptr @strrchr(ptr noundef %896, i32 noundef 47) #6
  %898 = icmp ne ptr %897, null
  br i1 %898, label %899, label %906

899:                                              ; preds = %890
  %900 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %901 = getelementptr inbounds %struct.s2n_debug_info, ptr %900, i32 0, i32 0
  %902 = load ptr, ptr %901, align 8, !tbaa !9
  %903 = getelementptr inbounds i8, ptr %902, i64 21
  %904 = call ptr @strrchr(ptr noundef %903, i32 noundef 47) #6
  %905 = getelementptr inbounds i8, ptr %904, i64 1
  br label %911

906:                                              ; preds = %890
  %907 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %908 = getelementptr inbounds %struct.s2n_debug_info, ptr %907, i32 0, i32 0
  %909 = load ptr, ptr %908, align 8, !tbaa !9
  %910 = getelementptr inbounds i8, ptr %909, i64 21
  br label %911

911:                                              ; preds = %906, %899
  %912 = phi ptr [ %905, %899 ], [ %910, %906 ]
  %913 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %914 = getelementptr inbounds %struct.s2n_debug_info, ptr %913, i32 0, i32 1
  store ptr %912, ptr %914, align 8, !tbaa !11
  %915 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %915, align 4, !tbaa !12
  %916 = call i32 @s2n_calculate_stacktrace()
  br label %917

917:                                              ; preds = %911
  br label %918

918:                                              ; preds = %917
  %919 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %919, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1155

920:                                              ; No predecessors!
  br label %921

921:                                              ; preds = %920
  br label %922

922:                                              ; preds = %921, %885
  br label %923

923:                                              ; preds = %922
  br label %924

924:                                              ; preds = %923
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  store i64 0, ptr %38, align 8, !tbaa !19
  br label %925

925:                                              ; preds = %1065, %924
  %926 = load i64, ptr %38, align 8, !tbaa !19
  %927 = load ptr, ptr %37, align 8, !tbaa !5
  %928 = getelementptr inbounds %struct.s2n_kem_preferences, ptr %927, i32 0, i32 2
  %929 = load i8, ptr %928, align 8, !tbaa !55
  %930 = zext i8 %929 to i64
  %931 = icmp ult i64 %926, %930
  br i1 %931, label %933, label %932

932:                                              ; preds = %925
  store i32 120, ptr %13, align 4
  br label %1068

933:                                              ; preds = %925
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %934 = load ptr, ptr %37, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.s2n_kem_preferences, ptr %934, i32 0, i32 3
  %936 = load ptr, ptr %935, align 8, !tbaa !57
  %937 = load i64, ptr %38, align 8, !tbaa !19
  %938 = getelementptr inbounds ptr, ptr %936, i64 %937
  %939 = load ptr, ptr %938, align 8, !tbaa !5
  store ptr %939, ptr %39, align 8, !tbaa !5
  br label %940

940:                                              ; preds = %933
  %941 = load ptr, ptr %39, align 8, !tbaa !5
  %942 = icmp ne ptr %941, null
  br i1 %942, label %977, label %943

943:                                              ; preds = %940
  br label %944

944:                                              ; preds = %943
  br label %945

945:                                              ; preds = %944
  %946 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %947 = getelementptr inbounds %struct.s2n_debug_info, ptr %946, i32 0, i32 0
  store ptr @.str.24, ptr %947, align 8, !tbaa !9
  %948 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %949 = getelementptr inbounds %struct.s2n_debug_info, ptr %948, i32 0, i32 0
  %950 = load ptr, ptr %949, align 8, !tbaa !9
  %951 = getelementptr inbounds i8, ptr %950, i64 21
  %952 = call ptr @strrchr(ptr noundef %951, i32 noundef 47) #6
  %953 = icmp ne ptr %952, null
  br i1 %953, label %954, label %961

954:                                              ; preds = %945
  %955 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %956 = getelementptr inbounds %struct.s2n_debug_info, ptr %955, i32 0, i32 0
  %957 = load ptr, ptr %956, align 8, !tbaa !9
  %958 = getelementptr inbounds i8, ptr %957, i64 21
  %959 = call ptr @strrchr(ptr noundef %958, i32 noundef 47) #6
  %960 = getelementptr inbounds i8, ptr %959, i64 1
  br label %966

961:                                              ; preds = %945
  %962 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %963 = getelementptr inbounds %struct.s2n_debug_info, ptr %962, i32 0, i32 0
  %964 = load ptr, ptr %963, align 8, !tbaa !9
  %965 = getelementptr inbounds i8, ptr %964, i64 21
  br label %966

966:                                              ; preds = %961, %954
  %967 = phi ptr [ %960, %954 ], [ %965, %961 ]
  %968 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %969 = getelementptr inbounds %struct.s2n_debug_info, ptr %968, i32 0, i32 1
  store ptr %967, ptr %969, align 8, !tbaa !11
  %970 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %970, align 4, !tbaa !12
  %971 = call i32 @s2n_calculate_stacktrace()
  br label %972

972:                                              ; preds = %966
  br label %973

973:                                              ; preds = %972
  %974 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %974, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1062

975:                                              ; No predecessors!
  br label %976

976:                                              ; preds = %975
  br label %977

977:                                              ; preds = %976, %940
  br label %978

978:                                              ; preds = %977
  br label %979

979:                                              ; preds = %978
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #7
  store i8 0, ptr %40, align 1, !tbaa !25
  br label %980

980:                                              ; preds = %979
  %981 = load ptr, ptr %5, align 8, !tbaa !5
  %982 = getelementptr inbounds %struct.s2n_security_rule, ptr %981, i32 0, i32 5
  %983 = load ptr, ptr %982, align 8, !tbaa !58
  %984 = icmp ne ptr %983, null
  br i1 %984, label %1019, label %985

985:                                              ; preds = %980
  br label %986

986:                                              ; preds = %985
  br label %987

987:                                              ; preds = %986
  %988 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %989 = getelementptr inbounds %struct.s2n_debug_info, ptr %988, i32 0, i32 0
  store ptr @.str.25, ptr %989, align 8, !tbaa !9
  %990 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %991 = getelementptr inbounds %struct.s2n_debug_info, ptr %990, i32 0, i32 0
  %992 = load ptr, ptr %991, align 8, !tbaa !9
  %993 = getelementptr inbounds i8, ptr %992, i64 21
  %994 = call ptr @strrchr(ptr noundef %993, i32 noundef 47) #6
  %995 = icmp ne ptr %994, null
  br i1 %995, label %996, label %1003

996:                                              ; preds = %987
  %997 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %998 = getelementptr inbounds %struct.s2n_debug_info, ptr %997, i32 0, i32 0
  %999 = load ptr, ptr %998, align 8, !tbaa !9
  %1000 = getelementptr inbounds i8, ptr %999, i64 21
  %1001 = call ptr @strrchr(ptr noundef %1000, i32 noundef 47) #6
  %1002 = getelementptr inbounds i8, ptr %1001, i64 1
  br label %1008

1003:                                             ; preds = %987
  %1004 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1005 = getelementptr inbounds %struct.s2n_debug_info, ptr %1004, i32 0, i32 0
  %1006 = load ptr, ptr %1005, align 8, !tbaa !9
  %1007 = getelementptr inbounds i8, ptr %1006, i64 21
  br label %1008

1008:                                             ; preds = %1003, %996
  %1009 = phi ptr [ %1002, %996 ], [ %1007, %1003 ]
  %1010 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1011 = getelementptr inbounds %struct.s2n_debug_info, ptr %1010, i32 0, i32 1
  store ptr %1009, ptr %1011, align 8, !tbaa !11
  %1012 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %1012, align 4, !tbaa !12
  %1013 = call i32 @s2n_calculate_stacktrace()
  br label %1014

1014:                                             ; preds = %1008
  br label %1015

1015:                                             ; preds = %1014
  %1016 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %1016, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1061

1017:                                             ; No predecessors!
  br label %1018

1018:                                             ; preds = %1017
  br label %1019

1019:                                             ; preds = %1018, %980
  br label %1020

1020:                                             ; preds = %1019
  br label %1021

1021:                                             ; preds = %1020
  br label %1022

1022:                                             ; preds = %1021
  %1023 = load ptr, ptr %5, align 8, !tbaa !5
  %1024 = getelementptr inbounds %struct.s2n_security_rule, ptr %1023, i32 0, i32 5
  %1025 = load ptr, ptr %1024, align 8, !tbaa !58
  %1026 = load ptr, ptr %39, align 8, !tbaa !5
  %1027 = call i32 %1025(ptr noundef %1026, ptr noundef %40)
  %1028 = getelementptr inbounds %struct.s2n_result, ptr %41, i32 0, i32 0
  store i32 %1027, ptr %1028, align 4
  %1029 = getelementptr inbounds %struct.s2n_result, ptr %41, i32 0, i32 0
  %1030 = load i32, ptr %1029, align 4
  %1031 = call zeroext i1 @s2n_result_is_ok(i32 %1030)
  br i1 %1031, label %1034, label %1032

1032:                                             ; preds = %1022
  %1033 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %1033, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1061

1034:                                             ; preds = %1022
  br label %1035

1035:                                             ; preds = %1034
  br label %1036

1036:                                             ; preds = %1035
  br label %1037

1037:                                             ; preds = %1036
  %1038 = load ptr, ptr %7, align 8, !tbaa !5
  %1039 = load i8, ptr %40, align 1, !tbaa !25, !range !28, !noundef !29
  %1040 = trunc i8 %1039 to i1
  %1041 = load ptr, ptr %10, align 8, !tbaa !5
  %1042 = load ptr, ptr %5, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.s2n_security_rule, ptr %1042, i32 0, i32 0
  %1044 = load ptr, ptr %1043, align 8, !tbaa !30
  %1045 = load ptr, ptr %8, align 8, !tbaa !5
  %1046 = load ptr, ptr %39, align 8, !tbaa !5
  %1047 = getelementptr inbounds %struct.s2n_kem_group, ptr %1046, i32 0, i32 0
  %1048 = load ptr, ptr %1047, align 8, !tbaa !59
  %1049 = load i64, ptr %38, align 8, !tbaa !19
  %1050 = add i64 %1049, 1
  %1051 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef %1038, i1 noundef zeroext %1040, ptr noundef %1041, ptr noundef %1044, ptr noundef %1045, ptr noundef @.str.26, ptr noundef %1048, i64 noundef %1050)
  %1052 = getelementptr inbounds %struct.s2n_result, ptr %42, i32 0, i32 0
  store i32 %1051, ptr %1052, align 4
  %1053 = getelementptr inbounds %struct.s2n_result, ptr %42, i32 0, i32 0
  %1054 = load i32, ptr %1053, align 4
  %1055 = call zeroext i1 @s2n_result_is_ok(i32 %1054)
  br i1 %1055, label %1058, label %1056

1056:                                             ; preds = %1037
  %1057 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %1057, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1061

1058:                                             ; preds = %1037
  br label %1059

1059:                                             ; preds = %1058
  br label %1060

1060:                                             ; preds = %1059
  store i32 0, ptr %13, align 4
  br label %1061

1061:                                             ; preds = %1060, %1056, %1032, %1015
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #7
  br label %1062

1062:                                             ; preds = %1061, %973
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  %1063 = load i32, ptr %13, align 4
  switch i32 %1063, label %1068 [
    i32 0, label %1064
  ]

1064:                                             ; preds = %1062
  br label %1065

1065:                                             ; preds = %1064
  %1066 = load i64, ptr %38, align 8, !tbaa !19
  %1067 = add i64 %1066, 1
  store i64 %1067, ptr %38, align 8, !tbaa !19
  br label %925, !llvm.loop !61

1068:                                             ; preds = %1062, %932
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  %1069 = load i32, ptr %13, align 4
  switch i32 %1069, label %1155 [
    i32 120, label %1070
  ]

1070:                                             ; preds = %1068
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #7
  store i8 0, ptr %43, align 1, !tbaa !25
  br label %1071

1071:                                             ; preds = %1070
  %1072 = load ptr, ptr %5, align 8, !tbaa !5
  %1073 = getelementptr inbounds %struct.s2n_security_rule, ptr %1072, i32 0, i32 6
  %1074 = load ptr, ptr %1073, align 8, !tbaa !62
  %1075 = icmp ne ptr %1074, null
  br i1 %1075, label %1110, label %1076

1076:                                             ; preds = %1071
  br label %1077

1077:                                             ; preds = %1076
  br label %1078

1078:                                             ; preds = %1077
  %1079 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1080 = getelementptr inbounds %struct.s2n_debug_info, ptr %1079, i32 0, i32 0
  store ptr @.str.27, ptr %1080, align 8, !tbaa !9
  %1081 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1082 = getelementptr inbounds %struct.s2n_debug_info, ptr %1081, i32 0, i32 0
  %1083 = load ptr, ptr %1082, align 8, !tbaa !9
  %1084 = getelementptr inbounds i8, ptr %1083, i64 21
  %1085 = call ptr @strrchr(ptr noundef %1084, i32 noundef 47) #6
  %1086 = icmp ne ptr %1085, null
  br i1 %1086, label %1087, label %1094

1087:                                             ; preds = %1078
  %1088 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1089 = getelementptr inbounds %struct.s2n_debug_info, ptr %1088, i32 0, i32 0
  %1090 = load ptr, ptr %1089, align 8, !tbaa !9
  %1091 = getelementptr inbounds i8, ptr %1090, i64 21
  %1092 = call ptr @strrchr(ptr noundef %1091, i32 noundef 47) #6
  %1093 = getelementptr inbounds i8, ptr %1092, i64 1
  br label %1099

1094:                                             ; preds = %1078
  %1095 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1096 = getelementptr inbounds %struct.s2n_debug_info, ptr %1095, i32 0, i32 0
  %1097 = load ptr, ptr %1096, align 8, !tbaa !9
  %1098 = getelementptr inbounds i8, ptr %1097, i64 21
  br label %1099

1099:                                             ; preds = %1094, %1087
  %1100 = phi ptr [ %1093, %1087 ], [ %1098, %1094 ]
  %1101 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  %1102 = getelementptr inbounds %struct.s2n_debug_info, ptr %1101, i32 0, i32 1
  store ptr %1100, ptr %1102, align 8, !tbaa !11
  %1103 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %1103, align 4, !tbaa !12
  %1104 = call i32 @s2n_calculate_stacktrace()
  br label %1105

1105:                                             ; preds = %1099
  br label %1106

1106:                                             ; preds = %1105
  %1107 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %1107, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1154

1108:                                             ; No predecessors!
  br label %1109

1109:                                             ; preds = %1108
  br label %1110

1110:                                             ; preds = %1109, %1071
  br label %1111

1111:                                             ; preds = %1110
  br label %1112

1112:                                             ; preds = %1111
  br label %1113

1113:                                             ; preds = %1112
  %1114 = load ptr, ptr %5, align 8, !tbaa !5
  %1115 = getelementptr inbounds %struct.s2n_security_rule, ptr %1114, i32 0, i32 6
  %1116 = load ptr, ptr %1115, align 8, !tbaa !62
  %1117 = load ptr, ptr %6, align 8, !tbaa !5
  %1118 = getelementptr inbounds %struct.s2n_security_policy, ptr %1117, i32 0, i32 0
  %1119 = load i8, ptr %1118, align 8, !tbaa !63
  %1120 = call i32 %1116(i8 noundef zeroext %1119, ptr noundef %43)
  %1121 = getelementptr inbounds %struct.s2n_result, ptr %44, i32 0, i32 0
  store i32 %1120, ptr %1121, align 4
  %1122 = getelementptr inbounds %struct.s2n_result, ptr %44, i32 0, i32 0
  %1123 = load i32, ptr %1122, align 4
  %1124 = call zeroext i1 @s2n_result_is_ok(i32 %1123)
  br i1 %1124, label %1127, label %1125

1125:                                             ; preds = %1113
  %1126 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %1126, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1154

1127:                                             ; preds = %1113
  br label %1128

1128:                                             ; preds = %1127
  br label %1129

1129:                                             ; preds = %1128
  br label %1130

1130:                                             ; preds = %1129
  %1131 = load ptr, ptr %7, align 8, !tbaa !5
  %1132 = load i8, ptr %43, align 1, !tbaa !25, !range !28, !noundef !29
  %1133 = trunc i8 %1132 to i1
  %1134 = load ptr, ptr %11, align 8, !tbaa !5
  %1135 = load ptr, ptr %5, align 8, !tbaa !5
  %1136 = getelementptr inbounds %struct.s2n_security_rule, ptr %1135, i32 0, i32 0
  %1137 = load ptr, ptr %1136, align 8, !tbaa !30
  %1138 = load ptr, ptr %8, align 8, !tbaa !5
  %1139 = load ptr, ptr %6, align 8, !tbaa !5
  %1140 = getelementptr inbounds %struct.s2n_security_policy, ptr %1139, i32 0, i32 0
  %1141 = load i8, ptr %1140, align 8, !tbaa !63
  %1142 = zext i8 %1141 to i32
  %1143 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef %1131, i1 noundef zeroext %1133, ptr noundef %1134, ptr noundef %1137, ptr noundef %1138, ptr noundef @.str.28, i32 noundef %1142)
  %1144 = getelementptr inbounds %struct.s2n_result, ptr %45, i32 0, i32 0
  store i32 %1143, ptr %1144, align 4
  %1145 = getelementptr inbounds %struct.s2n_result, ptr %45, i32 0, i32 0
  %1146 = load i32, ptr %1145, align 4
  %1147 = call zeroext i1 @s2n_result_is_ok(i32 %1146)
  br i1 %1147, label %1150, label %1148

1148:                                             ; preds = %1130
  %1149 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 -1, ptr %1149, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1154

1150:                                             ; preds = %1130
  br label %1151

1151:                                             ; preds = %1150
  br label %1152

1152:                                             ; preds = %1151
  %1153 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 0, ptr %1153, align 4, !tbaa !14
  store i32 1, ptr %13, align 4
  br label %1154

1154:                                             ; preds = %1152, %1148, %1125, %1106
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #7
  br label %1155

1155:                                             ; preds = %1154, %1068, %918
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  br label %1156

1156:                                             ; preds = %1155, %879, %729
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  br label %1157

1157:                                             ; preds = %1156, %689
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %1158

1158:                                             ; preds = %1157, %539, %391
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %1159

1159:                                             ; preds = %1158, %352, %202
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  br label %1160

1160:                                             ; preds = %1159, %152, %115, %78
  %1161 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  %1162 = load i32, ptr %1161, align 4
  ret i32 %1162
}

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

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

declare i32 @s2n_calculate_stacktrace() #3

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @s2n_result_ignore(i32) #5

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @s2n_security_rule_result_process(ptr noundef, i1 noundef zeroext, ptr noundef, ...) #0

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"s2n_debug_info", !6, i64 0, !6, i64 8}
!11 = !{!10, !6, i64 8}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !13, i64 0}
!15 = !{!"", !13, i64 0}
!16 = !{!17, !6, i64 8}
!17 = !{!"s2n_security_policy", !7, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !18, i64 56, !7, i64 57}
!18 = !{!"_Bool", !7, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"long", !7, i64 0}
!21 = !{!22, !23, i64 0}
!22 = !{!"s2n_cipher_preferences", !23, i64 0, !6, i64 8, !18, i64 16}
!23 = !{!"short", !7, i64 0}
!24 = !{!22, !6, i64 8}
!25 = !{!18, !18, i64 0}
!26 = !{!27, !6, i64 8}
!27 = !{!"s2n_security_rule", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!27, !6, i64 0}
!31 = !{!32, !6, i64 16}
!32 = !{!"s2n_cipher_suite", !13, i64 0, !6, i64 8, !6, i64 16, !7, i64 24, !6, i64 32, !13, i64 40, !6, i64 48, !7, i64 56, !7, i64 72, !6, i64 80, !6, i64 88, !13, i64 96, !7, i64 100}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!17, !6, i64 24}
!36 = !{!37, !7, i64 0}
!37 = !{!"s2n_signature_preferences", !7, i64 0, !6, i64 8}
!38 = !{!37, !6, i64 8}
!39 = !{!27, !6, i64 16}
!40 = !{!41, !6, i64 8}
!41 = !{!"s2n_signature_scheme", !23, i64 0, !6, i64 8, !13, i64 16, !13, i64 20, !7, i64 24, !7, i64 25, !23, i64 26, !6, i64 32}
!42 = distinct !{!42, !34}
!43 = !{!17, !6, i64 32}
!44 = !{!27, !6, i64 24}
!45 = distinct !{!45, !34}
!46 = !{!17, !6, i64 40}
!47 = !{!48, !7, i64 0}
!48 = !{!"s2n_ecc_preferences", !7, i64 0, !6, i64 8}
!49 = !{!48, !6, i64 8}
!50 = !{!27, !6, i64 32}
!51 = !{!52, !6, i64 8}
!52 = !{!"s2n_ecc_named_curve", !23, i64 0, !13, i64 4, !6, i64 8, !7, i64 16, !6, i64 24}
!53 = distinct !{!53, !34}
!54 = !{!17, !6, i64 16}
!55 = !{!56, !7, i64 16}
!56 = !{!"s2n_kem_preferences", !7, i64 0, !6, i64 8, !7, i64 16, !6, i64 24, !7, i64 32}
!57 = !{!56, !6, i64 24}
!58 = !{!27, !6, i64 40}
!59 = !{!60, !6, i64 0}
!60 = !{!"s2n_kem_group", !6, i64 0, !23, i64 8, !6, i64 16, !6, i64 24, !18, i64 32}
!61 = distinct !{!61, !34}
!62 = !{!27, !6, i64 48}
!63 = !{!17, !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 }

@.str.2 = external hidden unnamed_addr constant [95 x i8], align 1
@_s2n_debug_info = external thread_local local_unnamed_addr global %struct.s2n_debug_info, align 8
@s2n_errno = external thread_local local_unnamed_addr global i32, align 4
@.str.3 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [12 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @s2n_security_rule_validate_policy(ptr noundef readonly %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 {
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca i8, align 1
  %7 = alloca i8, align 1
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %11, label %19

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

19:                                               ; preds = %3
  %.not163 = icmp eq ptr %1, null
  br i1 %.not163, label %20, label %28

20:                                               ; preds = %19
  %21 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.3, ptr %21, align 8, !tbaa !5
  %22 = tail call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.3, i64 21), i32 noundef 47) #6
  %.not164 = icmp eq ptr %22, null
  %23 = getelementptr inbounds i8, ptr %22, i64 1
  %24 = select i1 %.not164, ptr getelementptr inbounds (i8, ptr @.str.3, i64 21), ptr %23
  %25 = getelementptr inbounds i8, ptr %21, i64 8
  store ptr %24, ptr %25, align 8, !tbaa !10
  %26 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %26, align 4, !tbaa !11
  %27 = tail call i32 @s2n_calculate_stacktrace() #7
  br label %310

28:                                               ; preds = %19
  %.not165 = icmp eq ptr %2, null
  br i1 %.not165, label %29, label %37

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

37:                                               ; preds = %28
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #7
  store ptr null, ptr %4, align 8, !tbaa !13
  %38 = call i32 @s2n_security_policy_get_version(ptr noundef nonnull %1, ptr noundef nonnull %4) #7
  call void @s2n_result_ignore(i32 %38)
  %39 = load ptr, ptr %4, align 8, !tbaa !13
  %40 = icmp eq ptr %39, null
  br i1 %40, label %41, label %42

41:                                               ; preds = %37
  store ptr @.str.5, ptr %4, align 8, !tbaa !13
  br label %42

42:                                               ; preds = %41, %37
  %43 = getelementptr inbounds i8, ptr %1, i64 8
  %44 = load ptr, ptr %43, align 8, !tbaa !14
  %.not167 = icmp eq ptr %44, null
  br i1 %.not167, label %48, label %.preheader256

.preheader256:                                    ; preds = %42
  %45 = load i16, ptr %44, align 8, !tbaa !17
  %.not173257.not = icmp eq i16 %45, 0
  br i1 %.not173257.not, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader256
  %46 = getelementptr inbounds i8, ptr %44, i64 8
  %47 = getelementptr inbounds i8, ptr %0, i64 8
  br label %56

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

56:                                               ; preds = %.lr.ph, %90
  %.0120258 = phi i64 [ 0, %.lr.ph ], [ %87, %90 ]
  %57 = load ptr, ptr %46, align 8, !tbaa !20
  %58 = getelementptr inbounds ptr, ptr %57, i64 %.0120258
  %59 = load ptr, ptr %58, align 8, !tbaa !13
  %.not169 = icmp eq ptr %59, null
  br i1 %.not169, label %.thread, label %67

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

67:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #7
  store i8 0, ptr %5, align 1, !tbaa !21
  %68 = load ptr, ptr %47, align 8, !tbaa !22
  %.not171 = icmp eq ptr %68, null
  br i1 %.not171, label %69, label %77

69:                                               ; preds = %67
  %70 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.10, ptr %70, align 8, !tbaa !5
  %71 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.10, i64 21), i32 noundef 47) #6
  %.not172 = icmp eq ptr %71, null
  %72 = getelementptr inbounds i8, ptr %71, i64 1
  %73 = select i1 %.not172, ptr getelementptr inbounds (i8, ptr @.str.10, i64 21), ptr %72
  %74 = getelementptr inbounds i8, ptr %70, i64 8
  store ptr %73, ptr %74, align 8, !tbaa !10
  %75 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %75, align 4, !tbaa !11
  %76 = call i32 @s2n_calculate_stacktrace() #7
  br label %.thread218

77:                                               ; preds = %67
  %78 = call i32 %68(ptr noundef nonnull %59, ptr noundef nonnull %5) #7
  %79 = call zeroext i1 @s2n_result_is_ok(i32 %78)
  br i1 %79, label %80, label %.thread218

80:                                               ; preds = %77
  %81 = load i8, ptr %5, align 1, !tbaa !21, !range !24, !noundef !25
  %82 = trunc nuw i8 %81 to i1
  %83 = load ptr, ptr %0, align 8, !tbaa !26
  %84 = load ptr, ptr %4, align 8, !tbaa !13
  %85 = getelementptr inbounds i8, ptr %59, i64 16
  %86 = load ptr, ptr %85, align 8, !tbaa !27
  %87 = add nuw nsw i64 %.0120258, 1
  %88 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef nonnull %2, i1 noundef zeroext %82, ptr noundef nonnull @.str.6, ptr noundef %83, ptr noundef %84, ptr noundef nonnull @.str.11, ptr noundef %86, i64 noundef %87)
  %89 = call zeroext i1 @s2n_result_is_ok(i32 %88)
  br i1 %89, label %90, label %.thread218

.thread218:                                       ; preds = %77, %80, %69
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  br label %309

90:                                               ; preds = %80
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  %91 = load i16, ptr %44, align 8, !tbaa !17
  %92 = zext i16 %91 to i64
  %.not173 = icmp ult i64 %87, %92
  br i1 %.not173, label %56, label %.critedge, !llvm.loop !29

.critedge:                                        ; preds = %90, %.preheader256
  %93 = getelementptr inbounds i8, ptr %1, i64 24
  %94 = load ptr, ptr %93, align 8, !tbaa !31
  %.not174 = icmp eq ptr %94, null
  br i1 %.not174, label %98, label %.preheader255

.preheader255:                                    ; preds = %.critedge
  %95 = load i8, ptr %94, align 8, !tbaa !32
  %.not180259.not = icmp eq i8 %95, 0
  br i1 %.not180259.not, label %.critedge205, label %.lr.ph261

.lr.ph261:                                        ; preds = %.preheader255
  %96 = getelementptr inbounds i8, ptr %94, i64 8
  %97 = getelementptr inbounds i8, ptr %0, i64 16
  br label %106

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

106:                                              ; preds = %.lr.ph261, %139
  %.0121260 = phi i64 [ 0, %.lr.ph261 ], [ %140, %139 ]
  %107 = load ptr, ptr %96, align 8, !tbaa !34
  %108 = getelementptr inbounds ptr, ptr %107, i64 %.0121260
  %109 = load ptr, ptr %108, align 8, !tbaa !13
  %.not176 = icmp eq ptr %109, null
  br i1 %.not176, label %.thread221, label %117

.thread221:                                       ; preds = %106
  %110 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.13, ptr %110, align 8, !tbaa !5
  %111 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.13, i64 21), i32 noundef 47) #6
  %.not177 = icmp eq ptr %111, null
  %112 = getelementptr inbounds i8, ptr %111, i64 1
  %113 = select i1 %.not177, ptr getelementptr inbounds (i8, ptr @.str.13, i64 21), ptr %112
  %114 = getelementptr inbounds i8, ptr %110, i64 8
  store ptr %113, ptr %114, align 8, !tbaa !10
  %115 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %115, align 4, !tbaa !11
  %116 = call i32 @s2n_calculate_stacktrace() #7
  br label %309

117:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #7
  store i8 0, ptr %6, align 1, !tbaa !21
  %118 = load ptr, ptr %97, align 8, !tbaa !35
  %.not178 = icmp eq ptr %118, null
  br i1 %.not178, label %119, label %127

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

127:                                              ; preds = %117
  %128 = call i32 %118(ptr noundef nonnull %109, ptr noundef nonnull %6) #7
  %129 = call zeroext i1 @s2n_result_is_ok(i32 %128)
  br i1 %129, label %130, label %.thread226

130:                                              ; preds = %127
  %131 = load i8, ptr %6, align 1, !tbaa !21, !range !24, !noundef !25
  %132 = trunc nuw i8 %131 to i1
  %133 = load ptr, ptr %0, align 8, !tbaa !26
  %134 = load ptr, ptr %4, align 8, !tbaa !13
  %135 = getelementptr inbounds i8, ptr %109, i64 8
  %136 = load ptr, ptr %135, align 8, !tbaa !36
  %137 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef nonnull %2, i1 noundef zeroext %132, ptr noundef nonnull @.str.6, ptr noundef %133, ptr noundef %134, ptr noundef nonnull @.str.15, ptr noundef %136)
  %138 = call zeroext i1 @s2n_result_is_ok(i32 %137)
  br i1 %138, label %139, label %.thread226

.thread226:                                       ; preds = %127, %130, %119
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #7
  br label %309

139:                                              ; preds = %130
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #7
  %140 = add nuw nsw i64 %.0121260, 1
  %141 = load i8, ptr %94, align 8, !tbaa !32
  %142 = zext i8 %141 to i64
  %.not180 = icmp ult i64 %140, %142
  br i1 %.not180, label %106, label %.critedge205, !llvm.loop !38

.critedge205:                                     ; preds = %139, %.preheader255
  %143 = getelementptr inbounds i8, ptr %1, i64 32
  %144 = load ptr, ptr %143, align 8, !tbaa !39
  %.not181 = icmp eq ptr %144, null
  br i1 %.not181, label %.critedge208, label %.preheader254

.preheader254:                                    ; preds = %.critedge205
  %145 = load i8, ptr %144, align 8, !tbaa !32
  %.not186262.not = icmp eq i8 %145, 0
  br i1 %.not186262.not, label %.critedge208, label %.lr.ph264

.lr.ph264:                                        ; preds = %.preheader254
  %146 = getelementptr inbounds i8, ptr %144, i64 8
  %147 = getelementptr inbounds i8, ptr %0, i64 24
  br label %148

148:                                              ; preds = %.lr.ph264, %181
  %.0122263 = phi i64 [ 0, %.lr.ph264 ], [ %182, %181 ]
  %149 = load ptr, ptr %146, align 8, !tbaa !34
  %150 = getelementptr inbounds ptr, ptr %149, i64 %.0122263
  %151 = load ptr, ptr %150, align 8, !tbaa !13
  %.not182 = icmp eq ptr %151, null
  br i1 %.not182, label %.thread229, label %159

.thread229:                                       ; preds = %148
  %152 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.16, ptr %152, align 8, !tbaa !5
  %153 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.16, i64 21), i32 noundef 47) #6
  %.not183 = icmp eq ptr %153, null
  %154 = getelementptr inbounds i8, ptr %153, i64 1
  %155 = select i1 %.not183, ptr getelementptr inbounds (i8, ptr @.str.16, i64 21), ptr %154
  %156 = getelementptr inbounds i8, ptr %152, i64 8
  store ptr %155, ptr %156, align 8, !tbaa !10
  %157 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %157, align 4, !tbaa !11
  %158 = call i32 @s2n_calculate_stacktrace() #7
  br label %309

159:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #7
  store i8 0, ptr %7, align 1, !tbaa !21
  %160 = load ptr, ptr %147, align 8, !tbaa !40
  %.not184 = icmp eq ptr %160, null
  br i1 %.not184, label %161, label %169

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

169:                                              ; preds = %159
  %170 = call i32 %160(ptr noundef nonnull %151, ptr noundef nonnull %7) #7
  %171 = call zeroext i1 @s2n_result_is_ok(i32 %170)
  br i1 %171, label %172, label %.thread234

172:                                              ; preds = %169
  %173 = load i8, ptr %7, align 1, !tbaa !21, !range !24, !noundef !25
  %174 = trunc nuw i8 %173 to i1
  %175 = load ptr, ptr %0, align 8, !tbaa !26
  %176 = load ptr, ptr %4, align 8, !tbaa !13
  %177 = getelementptr inbounds i8, ptr %151, i64 8
  %178 = load ptr, ptr %177, align 8, !tbaa !36
  %179 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef nonnull %2, i1 noundef zeroext %174, ptr noundef nonnull @.str.6, ptr noundef %175, ptr noundef %176, ptr noundef nonnull @.str.18, ptr noundef %178)
  %180 = call zeroext i1 @s2n_result_is_ok(i32 %179)
  br i1 %180, label %181, label %.thread234

.thread234:                                       ; preds = %169, %172, %161
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #7
  br label %309

181:                                              ; preds = %172
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #7
  %182 = add nuw nsw i64 %.0122263, 1
  %183 = load i8, ptr %144, align 8, !tbaa !32
  %184 = zext i8 %183 to i64
  %.not186 = icmp ult i64 %182, %184
  br i1 %.not186, label %148, label %.critedge208, !llvm.loop !41

.critedge208:                                     ; preds = %181, %.preheader254, %.critedge205
  %185 = getelementptr inbounds i8, ptr %1, i64 40
  %186 = load ptr, ptr %185, align 8, !tbaa !42
  %.not187 = icmp eq ptr %186, null
  br i1 %.not187, label %190, label %.preheader253

.preheader253:                                    ; preds = %.critedge208
  %187 = load i8, ptr %186, align 8, !tbaa !43
  %.not193265.not = icmp eq i8 %187, 0
  br i1 %.not193265.not, label %.critedge211, label %.lr.ph267

.lr.ph267:                                        ; preds = %.preheader253
  %188 = getelementptr inbounds i8, ptr %186, i64 8
  %189 = getelementptr inbounds i8, ptr %0, i64 32
  br label %198

190:                                              ; preds = %.critedge208
  %191 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.19, ptr %191, align 8, !tbaa !5
  %192 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.19, i64 21), i32 noundef 47) #6
  %.not188 = icmp eq ptr %192, null
  %193 = getelementptr inbounds i8, ptr %192, i64 1
  %194 = select i1 %.not188, ptr getelementptr inbounds (i8, ptr @.str.19, i64 21), ptr %193
  %195 = getelementptr inbounds i8, ptr %191, i64 8
  store ptr %194, ptr %195, align 8, !tbaa !10
  %196 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %196, align 4, !tbaa !11
  %197 = call i32 @s2n_calculate_stacktrace() #7
  br label %309

198:                                              ; preds = %.lr.ph267, %232
  %.0124266 = phi i64 [ 0, %.lr.ph267 ], [ %229, %232 ]
  %199 = load ptr, ptr %188, align 8, !tbaa !45
  %200 = getelementptr inbounds ptr, ptr %199, i64 %.0124266
  %201 = load ptr, ptr %200, align 8, !tbaa !13
  %.not189 = icmp eq ptr %201, null
  br i1 %.not189, label %.thread237, label %209

.thread237:                                       ; preds = %198
  %202 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.20, ptr %202, align 8, !tbaa !5
  %203 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.20, i64 21), i32 noundef 47) #6
  %.not190 = icmp eq ptr %203, null
  %204 = getelementptr inbounds i8, ptr %203, i64 1
  %205 = select i1 %.not190, ptr getelementptr inbounds (i8, ptr @.str.20, i64 21), ptr %204
  %206 = getelementptr inbounds i8, ptr %202, i64 8
  store ptr %205, ptr %206, align 8, !tbaa !10
  %207 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %207, align 4, !tbaa !11
  %208 = call i32 @s2n_calculate_stacktrace() #7
  br label %309

209:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #7
  store i8 0, ptr %8, align 1, !tbaa !21
  %210 = load ptr, ptr %189, align 8, !tbaa !46
  %.not191 = icmp eq ptr %210, null
  br i1 %.not191, label %211, label %219

211:                                              ; preds = %209
  %212 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.21, ptr %212, align 8, !tbaa !5
  %213 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.21, i64 21), i32 noundef 47) #6
  %.not192 = icmp eq ptr %213, null
  %214 = getelementptr inbounds i8, ptr %213, i64 1
  %215 = select i1 %.not192, ptr getelementptr inbounds (i8, ptr @.str.21, i64 21), ptr %214
  %216 = getelementptr inbounds i8, ptr %212, i64 8
  store ptr %215, ptr %216, align 8, !tbaa !10
  %217 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %217, align 4, !tbaa !11
  %218 = call i32 @s2n_calculate_stacktrace() #7
  br label %.thread242

219:                                              ; preds = %209
  %220 = call i32 %210(ptr noundef nonnull %201, ptr noundef nonnull %8) #7
  %221 = call zeroext i1 @s2n_result_is_ok(i32 %220)
  br i1 %221, label %222, label %.thread242

222:                                              ; preds = %219
  %223 = load i8, ptr %8, align 1, !tbaa !21, !range !24, !noundef !25
  %224 = trunc nuw i8 %223 to i1
  %225 = load ptr, ptr %0, align 8, !tbaa !26
  %226 = load ptr, ptr %4, align 8, !tbaa !13
  %227 = getelementptr inbounds i8, ptr %201, i64 8
  %228 = load ptr, ptr %227, align 8, !tbaa !47
  %229 = add nuw nsw i64 %.0124266, 1
  %230 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef nonnull %2, i1 noundef zeroext %224, ptr noundef nonnull @.str.6, ptr noundef %225, ptr noundef %226, ptr noundef nonnull @.str.22, ptr noundef %228, i64 noundef %229)
  %231 = call zeroext i1 @s2n_result_is_ok(i32 %230)
  br i1 %231, label %232, label %.thread242

.thread242:                                       ; preds = %219, %222, %211
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #7
  br label %309

232:                                              ; preds = %222
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #7
  %233 = load i8, ptr %186, align 8, !tbaa !43
  %234 = zext i8 %233 to i64
  %.not193 = icmp ult i64 %229, %234
  br i1 %.not193, label %198, label %.critedge211, !llvm.loop !49

.critedge211:                                     ; preds = %232, %.preheader253
  %235 = getelementptr inbounds i8, ptr %1, i64 16
  %236 = load ptr, ptr %235, align 8, !tbaa !50
  %.not194 = icmp eq ptr %236, null
  br i1 %.not194, label %241, label %.preheader

.preheader:                                       ; preds = %.critedge211
  %237 = getelementptr inbounds i8, ptr %236, i64 16
  %238 = load i8, ptr %237, align 8, !tbaa !51
  %.not200268.not = icmp eq i8 %238, 0
  br i1 %.not200268.not, label %.critedge214, label %.lr.ph270

.lr.ph270:                                        ; preds = %.preheader
  %239 = getelementptr inbounds i8, ptr %236, i64 24
  %240 = getelementptr inbounds i8, ptr %0, i64 40
  br label %249

241:                                              ; preds = %.critedge211
  %242 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.23, ptr %242, align 8, !tbaa !5
  %243 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.23, i64 21), i32 noundef 47) #6
  %.not195 = icmp eq ptr %243, null
  %244 = getelementptr inbounds i8, ptr %243, i64 1
  %245 = select i1 %.not195, ptr getelementptr inbounds (i8, ptr @.str.23, i64 21), ptr %244
  %246 = getelementptr inbounds i8, ptr %242, i64 8
  store ptr %245, ptr %246, align 8, !tbaa !10
  %247 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %247, align 4, !tbaa !11
  %248 = call i32 @s2n_calculate_stacktrace() #7
  br label %309

249:                                              ; preds = %.lr.ph270, %282
  %.0123269 = phi i64 [ 0, %.lr.ph270 ], [ %279, %282 ]
  %250 = load ptr, ptr %239, align 8, !tbaa !53
  %251 = getelementptr inbounds ptr, ptr %250, i64 %.0123269
  %252 = load ptr, ptr %251, align 8, !tbaa !13
  %.not196 = icmp eq ptr %252, null
  br i1 %.not196, label %.thread245, label %260

.thread245:                                       ; preds = %249
  %253 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.24, ptr %253, align 8, !tbaa !5
  %254 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.24, i64 21), i32 noundef 47) #6
  %.not197 = icmp eq ptr %254, null
  %255 = getelementptr inbounds i8, ptr %254, i64 1
  %256 = select i1 %.not197, ptr getelementptr inbounds (i8, ptr @.str.24, i64 21), ptr %255
  %257 = getelementptr inbounds i8, ptr %253, i64 8
  store ptr %256, ptr %257, align 8, !tbaa !10
  %258 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %258, align 4, !tbaa !11
  %259 = call i32 @s2n_calculate_stacktrace() #7
  br label %309

260:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #7
  store i8 0, ptr %9, align 1, !tbaa !21
  %261 = load ptr, ptr %240, align 8, !tbaa !54
  %.not198 = icmp eq ptr %261, null
  br i1 %.not198, label %262, label %270

262:                                              ; preds = %260
  %263 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.25, ptr %263, align 8, !tbaa !5
  %264 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.25, i64 21), i32 noundef 47) #6
  %.not199 = icmp eq ptr %264, null
  %265 = getelementptr inbounds i8, ptr %264, i64 1
  %266 = select i1 %.not199, ptr getelementptr inbounds (i8, ptr @.str.25, i64 21), ptr %265
  %267 = getelementptr inbounds i8, ptr %263, i64 8
  store ptr %266, ptr %267, align 8, !tbaa !10
  %268 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %268, align 4, !tbaa !11
  %269 = call i32 @s2n_calculate_stacktrace() #7
  br label %.thread250

270:                                              ; preds = %260
  %271 = call i32 %261(ptr noundef nonnull %252, ptr noundef nonnull %9) #7
  %272 = call zeroext i1 @s2n_result_is_ok(i32 %271)
  br i1 %272, label %273, label %.thread250

273:                                              ; preds = %270
  %274 = load i8, ptr %9, align 1, !tbaa !21, !range !24, !noundef !25
  %275 = trunc nuw i8 %274 to i1
  %276 = load ptr, ptr %0, align 8, !tbaa !26
  %277 = load ptr, ptr %4, align 8, !tbaa !13
  %278 = load ptr, ptr %252, align 8, !tbaa !55
  %279 = add nuw nsw i64 %.0123269, 1
  %280 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef nonnull %2, i1 noundef zeroext %275, ptr noundef nonnull @.str.6, ptr noundef %276, ptr noundef %277, ptr noundef nonnull @.str.26, ptr noundef %278, i64 noundef %279)
  %281 = call zeroext i1 @s2n_result_is_ok(i32 %280)
  br i1 %281, label %282, label %.thread250

.thread250:                                       ; preds = %270, %273, %262
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #7
  br label %309

282:                                              ; preds = %273
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #7
  %283 = load i8, ptr %237, align 8, !tbaa !51
  %284 = zext i8 %283 to i64
  %.not200 = icmp ult i64 %279, %284
  br i1 %.not200, label %249, label %.critedge214, !llvm.loop !57

.critedge214:                                     ; preds = %282, %.preheader
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #7
  store i8 0, ptr %10, align 1, !tbaa !21
  %285 = getelementptr inbounds i8, ptr %0, i64 48
  %286 = load ptr, ptr %285, align 8, !tbaa !58
  %.not201 = icmp eq ptr %286, null
  br i1 %.not201, label %287, label %295

287:                                              ; preds = %.critedge214
  %288 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @_s2n_debug_info)
  store ptr @.str.27, ptr %288, align 8, !tbaa !5
  %289 = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @.str.27, i64 21), i32 noundef 47) #6
  %.not202 = icmp eq ptr %289, null
  %290 = getelementptr inbounds i8, ptr %289, i64 1
  %291 = select i1 %.not202, ptr getelementptr inbounds (i8, ptr @.str.27, i64 21), ptr %290
  %292 = getelementptr inbounds i8, ptr %288, i64 8
  store ptr %291, ptr %292, align 8, !tbaa !10
  %293 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @s2n_errno)
  store i32 402653193, ptr %293, align 4, !tbaa !11
  %294 = call i32 @s2n_calculate_stacktrace() #7
  br label %308

295:                                              ; preds = %.critedge214
  %296 = load i8, ptr %1, align 8, !tbaa !59
  %297 = call i32 %286(i8 noundef zeroext %296, ptr noundef nonnull %10) #7
  %298 = call zeroext i1 @s2n_result_is_ok(i32 %297)
  br i1 %298, label %299, label %308

299:                                              ; preds = %295
  %300 = load i8, ptr %10, align 1, !tbaa !21, !range !24, !noundef !25
  %301 = trunc nuw i8 %300 to i1
  %302 = load ptr, ptr %0, align 8, !tbaa !26
  %303 = load ptr, ptr %4, align 8, !tbaa !13
  %304 = load i8, ptr %1, align 8, !tbaa !59
  %305 = zext i8 %304 to i32
  %306 = call i32 (ptr, i1, ptr, ...) @s2n_security_rule_result_process(ptr noundef nonnull %2, i1 noundef zeroext %301, ptr noundef nonnull @.str.7, ptr noundef %302, ptr noundef %303, ptr noundef nonnull @.str.28, i32 noundef %305)
  %307 = call zeroext i1 @s2n_result_is_ok(i32 %306)
  %not. = xor i1 %307, true
  %.215 = sext i1 %not. to i32
  br label %308

308:                                              ; preds = %299, %295, %287
  %.sroa.0119.21 = phi i32 [ -1, %287 ], [ -1, %295 ], [ %.215, %299 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #7
  br label %309

309:                                              ; preds = %.thread245, %.thread250, %.thread237, %.thread242, %.thread229, %.thread234, %.thread221, %.thread226, %.thread, %.thread218, %98, %190, %308, %241, %48
  %.sroa.0119.26 = phi i32 [ -1, %48 ], [ -1, %98 ], [ -1, %190 ], [ %.sroa.0119.21, %308 ], [ -1, %241 ], [ -1, %.thread218 ], [ -1, %.thread ], [ -1, %.thread226 ], [ -1, %.thread221 ], [ -1, %.thread234 ], [ -1, %.thread229 ], [ -1, %.thread242 ], [ -1, %.thread237 ], [ -1, %.thread250 ], [ -1, %.thread245 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #7
  br label %310

310:                                              ; preds = %309, %29, %20, %11
  %.sroa.0119.27 = phi i32 [ %.sroa.0119.26, %309 ], [ -1, %29 ], [ -1, %20 ], [ -1, %11 ]
  ret i32 %.sroa.0119.27
}

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

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

declare i32 @s2n_calculate_stacktrace() local_unnamed_addr #3

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @s2n_result_ignore(i32) local_unnamed_addr #5

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @s2n_security_rule_result_process(ptr noundef, i1 noundef zeroext, ptr noundef, ...) local_unnamed_addr #0

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

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

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

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


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass