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

; 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_result = type { i32 }
%struct.s2n_connection = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, [22 x i8], [22 x i8], [22 x i8], i32, i32, %struct.s2n_timer, i64, i64, [32 x i8], i8, i8, i8, i8, i8, i8, i8, ptr, ptr, %struct.s2n_secrets, ptr, ptr, %struct.s2n_kex_parameters, %struct.s2n_handshake_parameters, %struct.s2n_psk_parameters, ptr, i8, i32, [5 x i8], %struct.s2n_stuffer, %struct.s2n_stuffer, %struct.s2n_stuffer, %struct.s2n_stuffer, i32, i64, [2 x i8], %struct.s2n_stuffer, i8, i8, i8, i8, %struct.s2n_atomic_flag, %struct.s2n_atomic_flag, %struct.s2n_handshake, i16, i32, i16, i64, i8, i64, i64, i64, %struct.s2n_atomic_flag, %struct.s2n_atomic_flag, [256 x i8], [256 x i8], i32, %struct.s2n_blob, i32, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_client_hello, %struct.s2n_x509_validator, ptr, ptr, i8, i32, %struct.s2n_blob, i32, %struct.s2n_ticket_fields, [138 x i8], %struct.s2n_stuffer, %struct.s2n_blob, %struct.s2n_blob, i8, i8, i8, i16, i16, i32, i32, %struct.s2n_blob, i32, %struct.s2n_post_handshake, %struct.s2n_atomic_flag, i8, i8 }
%struct.s2n_timer = type { i64 }
%struct.s2n_secrets = type { %union.anon, i32 }
%union.anon = type { %struct.s2n_tls13_secrets }
%struct.s2n_tls13_secrets = type { [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], [48 x i8], i32 }
%struct.s2n_kex_parameters = type { %struct.s2n_dh_params, %struct.s2n_ecc_evp_params, [4 x ptr], %struct.s2n_ecc_evp_params, %struct.s2n_kem_group_params, %struct.s2n_kem_group_params, [8 x ptr], %struct.s2n_kem_params, %struct.s2n_blob, %struct.s2n_blob }
%struct.s2n_dh_params = type { ptr }
%struct.s2n_ecc_evp_params = type { ptr, ptr }
%struct.s2n_kem_group_params = type { ptr, %struct.s2n_kem_params, %struct.s2n_ecc_evp_params }
%struct.s2n_kem_params = type { ptr, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, i8 }
%struct.s2n_handshake_parameters = type { %struct.s2n_pkey, %struct.s2n_pkey, %struct.s2n_blob, i32, %struct.s2n_sig_scheme_list, ptr, ptr, ptr, [4 x ptr], [4 x ptr], i8, i8, [32 x i8], [32 x i8] }
%struct.s2n_pkey = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.s2n_sig_scheme_list = type { [128 x i16], i8 }
%struct.s2n_psk_parameters = type { i32, %struct.s2n_array, i16, i16, ptr, i32 }
%struct.s2n_array = type { %struct.s2n_blob, i32, i32 }
%struct.s2n_handshake = type { %struct.s2n_stuffer, ptr, [8 x i8], [48 x i8], [48 x i8], i8, i32, i32, i32, i32, %struct.s2n_offered_early_data, i8, i32 }
%struct.s2n_offered_early_data = type { ptr }
%struct.s2n_client_hello = type { %struct.s2n_blob, %struct.s2n_parsed_extensions_list, %struct.s2n_blob, %struct.s2n_blob, %struct.s2n_blob, i8, i8, i8 }
%struct.s2n_parsed_extensions_list = type { [21 x %struct.s2n_parsed_extension], %struct.s2n_blob, i16 }
%struct.s2n_parsed_extension = type { %struct.s2n_blob, i16, i16, i8 }
%struct.s2n_x509_validator = type { ptr, ptr, i8, i8, i16, ptr, i32, ptr, %struct.s2n_cert_validation_info, i8 }
%struct.s2n_cert_validation_info = type { i8, [3 x i8] }
%struct.s2n_ticket_fields = type { %struct.s2n_blob, i32 }
%struct.s2n_stuffer = type { %struct.s2n_blob, i32, i32, i32, i8 }
%struct.s2n_blob = type { ptr, i32, i32, i8 }
%struct.s2n_post_handshake = type { %struct.s2n_stuffer, [4 x i8] }
%struct.s2n_atomic_flag = type { i32 }

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

; Function Attrs: nounwind uwtable
define dso_local i32 @s2n_connection_free(ptr noundef %0) #1 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca %struct.s2n_result, align 4
  %5 = alloca %struct.s2n_result, align 4
  %6 = alloca %struct.s2n_result, align 4
  %7 = alloca %struct.s2n_result, align 4
  %8 = alloca %struct.s2n_result, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  br label %9

9:                                                ; preds = %1
  %10 = load ptr, ptr %3, align 8, !tbaa !5
  %11 = call i32 @s2n_connection_wipe_keys(ptr noundef %10)
  %12 = icmp sgt i32 %11, -1
  br i1 %12, label %14, label %13

13:                                               ; preds = %9
  store i32 -1, ptr %2, align 4
  br label %202

14:                                               ; preds = %9
  br label %15

15:                                               ; preds = %14
  br label %16

16:                                               ; preds = %15
  %17 = load ptr, ptr %3, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.s2n_connection, ptr %17, i32 0, i32 33
  %19 = call i32 @s2n_psk_parameters_wipe(ptr noundef %18)
  %20 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  store i32 %19, ptr %20, align 4
  %21 = getelementptr inbounds %struct.s2n_result, ptr %4, i32 0, i32 0
  %22 = load i32, ptr %21, align 4
  %23 = call zeroext i1 @s2n_result_is_ok(i32 %22)
  br i1 %23, label %25, label %24

24:                                               ; preds = %16
  store i32 -1, ptr %2, align 4
  br label %202

25:                                               ; preds = %16
  br label %26

26:                                               ; preds = %25
  br label %27

27:                                               ; preds = %26
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  %29 = call i32 @s2n_prf_free(ptr noundef %28)
  %30 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  store i32 %29, ptr %30, align 4
  %31 = getelementptr inbounds %struct.s2n_result, ptr %5, i32 0, i32 0
  %32 = load i32, ptr %31, align 4
  %33 = call zeroext i1 @s2n_result_is_ok(i32 %32)
  br i1 %33, label %35, label %34

34:                                               ; preds = %27
  store i32 -1, ptr %2, align 4
  br label %202

35:                                               ; preds = %27
  br label %36

36:                                               ; preds = %35
  br label %37

37:                                               ; preds = %36
  %38 = load ptr, ptr %3, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.s2n_connection, ptr %38, i32 0, i32 52
  %40 = getelementptr inbounds %struct.s2n_handshake, ptr %39, i32 0, i32 1
  %41 = call i32 @s2n_handshake_hashes_free(ptr noundef %40)
  %42 = getelementptr inbounds %struct.s2n_result, ptr %6, i32 0, i32 0
  store i32 %41, ptr %42, align 4
  %43 = getelementptr inbounds %struct.s2n_result, ptr %6, i32 0, i32 0
  %44 = load i32, ptr %43, align 4
  %45 = call zeroext i1 @s2n_result_is_ok(i32 %44)
  br i1 %45, label %47, label %46

46:                                               ; preds = %37
  store i32 -1, ptr %2, align 4
  br label %202

47:                                               ; preds = %37
  br label %48

48:                                               ; preds = %47
  br label %49

49:                                               ; preds = %48
  %50 = load ptr, ptr %3, align 8, !tbaa !5
  %51 = call i32 @s2n_connection_free_managed_io(ptr noundef %50)
  %52 = icmp sgt i32 %51, -1
  br i1 %52, label %54, label %53

53:                                               ; preds = %49
  store i32 -1, ptr %2, align 4
  br label %202

54:                                               ; preds = %49
  br label %55

55:                                               ; preds = %54
  br label %56

56:                                               ; preds = %55
  %57 = load ptr, ptr %3, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.s2n_connection, ptr %57, i32 0, i32 77
  %59 = call i32 @s2n_free(ptr noundef %58)
  %60 = icmp sgt i32 %59, -1
  br i1 %60, label %62, label %61

61:                                               ; preds = %56
  store i32 -1, ptr %2, align 4
  br label %202

62:                                               ; preds = %56
  br label %63

63:                                               ; preds = %62
  br label %64

64:                                               ; preds = %63
  %65 = load ptr, ptr %3, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.s2n_connection, ptr %65, i32 0, i32 66
  %67 = call i32 @s2n_free(ptr noundef %66)
  %68 = icmp sgt i32 %67, -1
  br i1 %68, label %70, label %69

69:                                               ; preds = %64
  store i32 -1, ptr %2, align 4
  br label %202

70:                                               ; preds = %64
  br label %71

71:                                               ; preds = %70
  br label %72

72:                                               ; preds = %71
  %73 = load ptr, ptr %3, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.s2n_connection, ptr %73, i32 0, i32 69
  %75 = call i32 @s2n_free(ptr noundef %74)
  %76 = icmp sgt i32 %75, -1
  br i1 %76, label %78, label %77

77:                                               ; preds = %72
  store i32 -1, ptr %2, align 4
  br label %202

78:                                               ; preds = %72
  br label %79

79:                                               ; preds = %78
  br label %80

80:                                               ; preds = %79
  %81 = load ptr, ptr %3, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.s2n_connection, ptr %81, i32 0, i32 70
  %83 = call i32 @s2n_free(ptr noundef %82)
  %84 = icmp sgt i32 %83, -1
  br i1 %84, label %86, label %85

85:                                               ; preds = %80
  store i32 -1, ptr %2, align 4
  br label %202

86:                                               ; preds = %80
  br label %87

87:                                               ; preds = %86
  br label %88

88:                                               ; preds = %87
  %89 = load ptr, ptr %3, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.s2n_connection, ptr %89, i32 0, i32 91
  %91 = call i32 @s2n_free(ptr noundef %90)
  %92 = icmp sgt i32 %91, -1
  br i1 %92, label %94, label %93

93:                                               ; preds = %88
  store i32 -1, ptr %2, align 4
  br label %202

94:                                               ; preds = %88
  br label %95

95:                                               ; preds = %94
  br label %96

96:                                               ; preds = %95
  %97 = load ptr, ptr %3, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.s2n_connection, ptr %97, i32 0, i32 79
  %99 = getelementptr inbounds %struct.s2n_ticket_fields, ptr %98, i32 0, i32 0
  %100 = call i32 @s2n_free(ptr noundef %99)
  %101 = icmp sgt i32 %100, -1
  br i1 %101, label %103, label %102

102:                                              ; preds = %96
  store i32 -1, ptr %2, align 4
  br label %202

103:                                              ; preds = %96
  br label %104

104:                                              ; preds = %103
  br label %105

105:                                              ; preds = %104
  %106 = load ptr, ptr %3, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.s2n_connection, ptr %106, i32 0, i32 39
  %108 = call i32 @s2n_stuffer_free(ptr noundef %107)
  %109 = icmp sgt i32 %108, -1
  br i1 %109, label %111, label %110

110:                                              ; preds = %105
  store i32 -1, ptr %2, align 4
  br label %202

111:                                              ; preds = %105
  br label %112

112:                                              ; preds = %111
  br label %113

113:                                              ; preds = %112
  %114 = load ptr, ptr %3, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.s2n_connection, ptr %114, i32 0, i32 40
  %116 = call i32 @s2n_stuffer_free(ptr noundef %115)
  %117 = icmp sgt i32 %116, -1
  br i1 %117, label %119, label %118

118:                                              ; preds = %113
  store i32 -1, ptr %2, align 4
  br label %202

119:                                              ; preds = %113
  br label %120

120:                                              ; preds = %119
  br label %121

121:                                              ; preds = %120
  %122 = load ptr, ptr %3, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.s2n_connection, ptr %122, i32 0, i32 41
  %124 = call i32 @s2n_stuffer_free(ptr noundef %123)
  %125 = icmp sgt i32 %124, -1
  br i1 %125, label %127, label %126

126:                                              ; preds = %121
  store i32 -1, ptr %2, align 4
  br label %202

127:                                              ; preds = %121
  br label %128

128:                                              ; preds = %127
  br label %129

129:                                              ; preds = %128
  %130 = load ptr, ptr %3, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.s2n_connection, ptr %130, i32 0, i32 52
  %132 = getelementptr inbounds %struct.s2n_handshake, ptr %131, i32 0, i32 0
  %133 = call i32 @s2n_stuffer_free(ptr noundef %132)
  %134 = icmp sgt i32 %133, -1
  br i1 %134, label %136, label %135

135:                                              ; preds = %129
  store i32 -1, ptr %2, align 4
  br label %202

136:                                              ; preds = %129
  br label %137

137:                                              ; preds = %136
  br label %138

138:                                              ; preds = %137
  %139 = load ptr, ptr %3, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.s2n_connection, ptr %139, i32 0, i32 93
  %141 = getelementptr inbounds %struct.s2n_post_handshake, ptr %140, i32 0, i32 0
  %142 = call i32 @s2n_stuffer_free(ptr noundef %141)
  %143 = icmp sgt i32 %142, -1
  br i1 %143, label %145, label %144

144:                                              ; preds = %138
  store i32 -1, ptr %2, align 4
  br label %202

145:                                              ; preds = %138
  br label %146

146:                                              ; preds = %145
  %147 = load ptr, ptr %3, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.s2n_connection, ptr %147, i32 0, i32 72
  %149 = call i32 @s2n_x509_validator_wipe(ptr noundef %148)
  br label %150

150:                                              ; preds = %146
  %151 = load ptr, ptr %3, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.s2n_connection, ptr %151, i32 0, i32 71
  %153 = call i32 @s2n_client_hello_free_raw_message(ptr noundef %152)
  %154 = icmp sgt i32 %153, -1
  br i1 %154, label %156, label %155

155:                                              ; preds = %150
  store i32 -1, ptr %2, align 4
  br label %202

156:                                              ; preds = %150
  br label %157

157:                                              ; preds = %156
  br label %158

158:                                              ; preds = %157
  %159 = load ptr, ptr %3, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.s2n_connection, ptr %159, i32 0, i32 82
  %161 = call i32 @s2n_free(ptr noundef %160)
  %162 = icmp sgt i32 %161, -1
  br i1 %162, label %164, label %163

163:                                              ; preds = %158
  store i32 -1, ptr %2, align 4
  br label %202

164:                                              ; preds = %158
  br label %165

165:                                              ; preds = %164
  br label %166

166:                                              ; preds = %165
  %167 = load ptr, ptr %3, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.s2n_connection, ptr %167, i32 0, i32 83
  %169 = call i32 @s2n_free(ptr noundef %168)
  %170 = icmp sgt i32 %169, -1
  br i1 %170, label %172, label %171

171:                                              ; preds = %166
  store i32 -1, ptr %2, align 4
  br label %202

172:                                              ; preds = %166
  br label %173

173:                                              ; preds = %172
  br label %174

174:                                              ; preds = %173
  %175 = load ptr, ptr %3, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.s2n_connection, ptr %175, i32 0, i32 26
  %177 = call i32 @s2n_crypto_parameters_free(ptr noundef %176)
  %178 = getelementptr inbounds %struct.s2n_result, ptr %7, i32 0, i32 0
  store i32 %177, ptr %178, align 4
  %179 = getelementptr inbounds %struct.s2n_result, ptr %7, i32 0, i32 0
  %180 = load i32, ptr %179, align 4
  %181 = call zeroext i1 @s2n_result_is_ok(i32 %180)
  br i1 %181, label %183, label %182

182:                                              ; preds = %174
  store i32 -1, ptr %2, align 4
  br label %202

183:                                              ; preds = %174
  br label %184

184:                                              ; preds = %183
  br label %185

185:                                              ; preds = %184
  %186 = load ptr, ptr %3, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.s2n_connection, ptr %186, i32 0, i32 27
  %188 = call i32 @s2n_crypto_parameters_free(ptr noundef %187)
  %189 = getelementptr inbounds %struct.s2n_result, ptr %8, i32 0, i32 0
  store i32 %188, ptr %189, align 4
  %190 = getelementptr inbounds %struct.s2n_result, ptr %8, i32 0, i32 0
  %191 = load i32, ptr %190, align 4
  %192 = call zeroext i1 @s2n_result_is_ok(i32 %191)
  br i1 %192, label %194, label %193

193:                                              ; preds = %185
  store i32 -1, ptr %2, align 4
  br label %202

194:                                              ; preds = %185
  br label %195

195:                                              ; preds = %194
  br label %196

196:                                              ; preds = %195
  %197 = call i32 @s2n_free_object(ptr noundef %3, i32 noundef 4184)
  %198 = icmp sgt i32 %197, -1
  br i1 %198, label %200, label %199

199:                                              ; preds = %196
  store i32 -1, ptr %2, align 4
  br label %202

200:                                              ; preds = %196
  br label %201

201:                                              ; preds = %200
  store i32 0, ptr %2, align 4
  br label %202

202:                                              ; preds = %201, %199, %193, %182, %171, %163, %155, %144, %135, %126, %118, %110, %102, %93, %85, %77, %69, %61, %53, %46, %34, %24, %13
  %203 = load i32, ptr %2, align 4
  ret i32 %203
}

; Function Attrs: nounwind uwtable
declare hidden i32 @s2n_connection_wipe_keys(ptr noundef) #1

declare i32 @s2n_psk_parameters_wipe(ptr noundef) #2

declare i32 @s2n_prf_free(ptr noundef) #2

declare i32 @s2n_handshake_hashes_free(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @s2n_connection_free_managed_io(ptr noundef) #1

declare i32 @s2n_free(ptr noundef) #2

declare i32 @s2n_stuffer_free(ptr noundef) #2

declare i32 @s2n_x509_validator_wipe(ptr noundef) #2

declare i32 @s2n_client_hello_free_raw_message(ptr noundef) #2

declare i32 @s2n_crypto_parameters_free(ptr noundef) #2

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

attributes #0 = { 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 #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

!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"}


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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @s2n_connection_free(ptr noundef %0) local_unnamed_addr #1 {
  %2 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %3 = tail call i32 @s2n_connection_wipe_keys(ptr noundef %0)
  %4 = icmp sgt i32 %3, -1
  br i1 %4, label %5, label %87

5:                                                ; preds = %1
  %6 = getelementptr inbounds i8, ptr %0, i64 1688
  %7 = tail call i32 @s2n_psk_parameters_wipe(ptr noundef nonnull %6) #3
  %8 = tail call zeroext i1 @s2n_result_is_ok(i32 %7)
  br i1 %8, label %9, label %87

9:                                                ; preds = %5
  %10 = tail call i32 @s2n_prf_free(ptr noundef %0) #3
  %11 = tail call zeroext i1 @s2n_result_is_ok(i32 %10)
  br i1 %11, label %12, label %87

12:                                               ; preds = %9
  %13 = getelementptr inbounds i8, ptr %0, i64 2056
  %14 = tail call i32 @s2n_handshake_hashes_free(ptr noundef nonnull %13) #3
  %15 = tail call zeroext i1 @s2n_result_is_ok(i32 %14)
  br i1 %15, label %16, label %87

16:                                               ; preds = %12
  %17 = tail call i32 @s2n_connection_free_managed_io(ptr noundef %0)
  %18 = icmp sgt i32 %17, -1
  br i1 %18, label %19, label %87

19:                                               ; preds = %16
  %20 = getelementptr inbounds i8, ptr %0, i64 3784
  %21 = tail call i32 @s2n_free(ptr noundef nonnull %20) #3
  %22 = icmp sgt i32 %21, -1
  br i1 %22, label %23, label %87

23:                                               ; preds = %19
  %24 = getelementptr inbounds i8, ptr %0, i64 2792
  %25 = tail call i32 @s2n_free(ptr noundef nonnull %24) #3
  %26 = icmp sgt i32 %25, -1
  br i1 %26, label %27, label %87

27:                                               ; preds = %23
  %28 = getelementptr inbounds i8, ptr %0, i64 2848
  %29 = tail call i32 @s2n_free(ptr noundef nonnull %28) #3
  %30 = icmp sgt i32 %29, -1
  br i1 %30, label %31, label %87

31:                                               ; preds = %27
  %32 = getelementptr inbounds i8, ptr %0, i64 2872
  %33 = tail call i32 @s2n_free(ptr noundef nonnull %32) #3
  %34 = icmp sgt i32 %33, -1
  br i1 %34, label %35, label %87

35:                                               ; preds = %31
  %36 = getelementptr inbounds i8, ptr %0, i64 4096
  %37 = tail call i32 @s2n_free(ptr noundef nonnull %36) #3
  %38 = icmp sgt i32 %37, -1
  br i1 %38, label %39, label %87

39:                                               ; preds = %35
  %40 = getelementptr inbounds i8, ptr %0, i64 3816
  %41 = tail call i32 @s2n_free(ptr noundef nonnull %40) #3
  %42 = icmp sgt i32 %41, -1
  br i1 %42, label %43, label %87

43:                                               ; preds = %39
  %44 = getelementptr inbounds i8, ptr %0, i64 1816
  %45 = tail call i32 @s2n_stuffer_free(ptr noundef nonnull %44) #3
  %46 = icmp sgt i32 %45, -1
  br i1 %46, label %47, label %87

47:                                               ; preds = %43
  %48 = getelementptr inbounds i8, ptr %0, i64 1856
  %49 = tail call i32 @s2n_stuffer_free(ptr noundef nonnull %48) #3
  %50 = icmp sgt i32 %49, -1
  br i1 %50, label %51, label %87

51:                                               ; preds = %47
  %52 = getelementptr inbounds i8, ptr %0, i64 1896
  %53 = tail call i32 @s2n_stuffer_free(ptr noundef nonnull %52) #3
  %54 = icmp sgt i32 %53, -1
  br i1 %54, label %55, label %87

55:                                               ; preds = %51
  %56 = getelementptr inbounds i8, ptr %0, i64 2016
  %57 = tail call i32 @s2n_stuffer_free(ptr noundef nonnull %56) #3
  %58 = icmp sgt i32 %57, -1
  br i1 %58, label %59, label %87

59:                                               ; preds = %55
  %60 = getelementptr inbounds i8, ptr %0, i64 4128
  %61 = tail call i32 @s2n_stuffer_free(ptr noundef nonnull %60) #3
  %62 = icmp sgt i32 %61, -1
  br i1 %62, label %63, label %87

63:                                               ; preds = %59
  %64 = getelementptr inbounds i8, ptr %0, i64 3704
  %65 = tail call i32 @s2n_x509_validator_wipe(ptr noundef nonnull %64) #3
  %66 = getelementptr inbounds i8, ptr %0, i64 2896
  %67 = tail call i32 @s2n_client_hello_free_raw_message(ptr noundef nonnull %66) #3
  %68 = icmp sgt i32 %67, -1
  br i1 %68, label %69, label %87

69:                                               ; preds = %63
  %70 = getelementptr inbounds i8, ptr %0, i64 4032
  %71 = tail call i32 @s2n_free(ptr noundef nonnull %70) #3
  %72 = icmp sgt i32 %71, -1
  br i1 %72, label %73, label %87

73:                                               ; preds = %69
  %74 = getelementptr inbounds i8, ptr %0, i64 4056
  %75 = tail call i32 @s2n_free(ptr noundef nonnull %74) #3
  %76 = icmp sgt i32 %75, -1
  br i1 %76, label %77, label %87

77:                                               ; preds = %73
  %78 = getelementptr inbounds i8, ptr %0, i64 224
  %79 = tail call i32 @s2n_crypto_parameters_free(ptr noundef nonnull %78) #3
  %80 = tail call zeroext i1 @s2n_result_is_ok(i32 %79)
  br i1 %80, label %81, label %87

81:                                               ; preds = %77
  %82 = getelementptr inbounds i8, ptr %0, i64 232
  %83 = tail call i32 @s2n_crypto_parameters_free(ptr noundef nonnull %82) #3
  %84 = tail call zeroext i1 @s2n_result_is_ok(i32 %83)
  br i1 %84, label %85, label %87

85:                                               ; preds = %81
  %86 = call i32 @s2n_free_object(ptr noundef nonnull %2, i32 noundef 4184) #3
  %.lobit = ashr i32 %86, 31
  br label %87

87:                                               ; preds = %85, %81, %77, %73, %69, %63, %59, %55, %51, %47, %43, %39, %35, %31, %27, %23, %19, %16, %12, %9, %5, %1
  %.0 = phi i32 [ -1, %1 ], [ -1, %5 ], [ -1, %9 ], [ -1, %12 ], [ -1, %16 ], [ -1, %19 ], [ -1, %23 ], [ -1, %27 ], [ -1, %31 ], [ -1, %35 ], [ -1, %39 ], [ -1, %43 ], [ -1, %47 ], [ -1, %51 ], [ -1, %55 ], [ -1, %59 ], [ -1, %63 ], [ -1, %69 ], [ -1, %73 ], [ -1, %77 ], [ -1, %81 ], [ %.lobit, %85 ]
  ret i32 %.0
}

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

declare i32 @s2n_psk_parameters_wipe(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_prf_free(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_handshake_hashes_free(ptr noundef) local_unnamed_addr #2

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

declare i32 @s2n_free(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_stuffer_free(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_x509_validator_wipe(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_client_hello_free_raw_message(ptr noundef) local_unnamed_addr #2

declare i32 @s2n_crypto_parameters_free(ptr noundef) local_unnamed_addr #2

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

attributes #0 = { 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 #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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"}


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