; LLVM IR from ARMmbed/mbed-crypto :: library (psa_crypto)

; 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.psa_hash_operation_s = type { i32, %union.anon.0 }
%union.anon.0 = type { %struct.mbedtls_sha512_context }
%struct.mbedtls_sha512_context = type { [2 x i64], [8 x i64], [128 x i8], i32 }

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @psa_hash_abort(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @mbedtls_to_psa_error(i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @psa_hash_finish(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3) #2 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i64 %2, ptr %8, align 8, !tbaa !9
  store ptr %3, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store i32 -110, ptr %11, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %14 = load ptr, ptr %6, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %14, i32 0, i32 0
  %16 = load i32, ptr %15, align 8, !tbaa !13
  %17 = and i32 %16, 255
  %18 = or i32 16777216, %17
  %19 = icmp eq i32 %18, 16777217
  br i1 %19, label %20, label %21

20:                                               ; preds = %4
  br label %160

21:                                               ; preds = %4
  %22 = load ptr, ptr %6, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %22, i32 0, i32 0
  %24 = load i32, ptr %23, align 8, !tbaa !13
  %25 = and i32 %24, 255
  %26 = or i32 16777216, %25
  %27 = icmp eq i32 %26, 16777218
  br i1 %27, label %28, label %29

28:                                               ; preds = %21
  br label %158

29:                                               ; preds = %21
  %30 = load ptr, ptr %6, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %30, i32 0, i32 0
  %32 = load i32, ptr %31, align 8, !tbaa !13
  %33 = and i32 %32, 255
  %34 = or i32 16777216, %33
  %35 = icmp eq i32 %34, 16777219
  br i1 %35, label %36, label %37

36:                                               ; preds = %29
  br label %156

37:                                               ; preds = %29
  %38 = load ptr, ptr %6, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %38, i32 0, i32 0
  %40 = load i32, ptr %39, align 8, !tbaa !13
  %41 = and i32 %40, 255
  %42 = or i32 16777216, %41
  %43 = icmp eq i32 %42, 16777220
  br i1 %43, label %44, label %45

44:                                               ; preds = %37
  br label %154

45:                                               ; preds = %37
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %46, i32 0, i32 0
  %48 = load i32, ptr %47, align 8, !tbaa !13
  %49 = and i32 %48, 255
  %50 = or i32 16777216, %49
  %51 = icmp eq i32 %50, 16777221
  br i1 %51, label %52, label %53

52:                                               ; preds = %45
  br label %152

53:                                               ; preds = %45
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %54, i32 0, i32 0
  %56 = load i32, ptr %55, align 8, !tbaa !13
  %57 = and i32 %56, 255
  %58 = or i32 16777216, %57
  %59 = icmp eq i32 %58, 16777224
  br i1 %59, label %60, label %61

60:                                               ; preds = %53
  br label %150

61:                                               ; preds = %53
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %62, i32 0, i32 0
  %64 = load i32, ptr %63, align 8, !tbaa !13
  %65 = and i32 %64, 255
  %66 = or i32 16777216, %65
  %67 = icmp eq i32 %66, 16777225
  br i1 %67, label %68, label %69

68:                                               ; preds = %61
  br label %148

69:                                               ; preds = %61
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %70, i32 0, i32 0
  %72 = load i32, ptr %71, align 8, !tbaa !13
  %73 = and i32 %72, 255
  %74 = or i32 16777216, %73
  %75 = icmp eq i32 %74, 16777226
  br i1 %75, label %76, label %77

76:                                               ; preds = %69
  br label %146

77:                                               ; preds = %69
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %78, i32 0, i32 0
  %80 = load i32, ptr %79, align 8, !tbaa !13
  %81 = and i32 %80, 255
  %82 = or i32 16777216, %81
  %83 = icmp eq i32 %82, 16777227
  br i1 %83, label %84, label %85

84:                                               ; preds = %77
  br label %144

85:                                               ; preds = %77
  %86 = load ptr, ptr %6, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %86, i32 0, i32 0
  %88 = load i32, ptr %87, align 8, !tbaa !13
  %89 = and i32 %88, 255
  %90 = or i32 16777216, %89
  %91 = icmp eq i32 %90, 16777228
  br i1 %91, label %92, label %93

92:                                               ; preds = %85
  br label %142

93:                                               ; preds = %85
  %94 = load ptr, ptr %6, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %94, i32 0, i32 0
  %96 = load i32, ptr %95, align 8, !tbaa !13
  %97 = and i32 %96, 255
  %98 = or i32 16777216, %97
  %99 = icmp eq i32 %98, 16777229
  br i1 %99, label %100, label %101

100:                                              ; preds = %93
  br label %140

101:                                              ; preds = %93
  %102 = load ptr, ptr %6, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %102, i32 0, i32 0
  %104 = load i32, ptr %103, align 8, !tbaa !13
  %105 = and i32 %104, 255
  %106 = or i32 16777216, %105
  %107 = icmp eq i32 %106, 16777232
  br i1 %107, label %108, label %109

108:                                              ; preds = %101
  br label %138

109:                                              ; preds = %101
  %110 = load ptr, ptr %6, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %110, i32 0, i32 0
  %112 = load i32, ptr %111, align 8, !tbaa !13
  %113 = and i32 %112, 255
  %114 = or i32 16777216, %113
  %115 = icmp eq i32 %114, 16777233
  br i1 %115, label %116, label %117

116:                                              ; preds = %109
  br label %136

117:                                              ; preds = %109
  %118 = load ptr, ptr %6, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %118, i32 0, i32 0
  %120 = load i32, ptr %119, align 8, !tbaa !13
  %121 = and i32 %120, 255
  %122 = or i32 16777216, %121
  %123 = icmp eq i32 %122, 16777234
  br i1 %123, label %124, label %125

124:                                              ; preds = %117
  br label %134

125:                                              ; preds = %117
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %126, i32 0, i32 0
  %128 = load i32, ptr %127, align 8, !tbaa !13
  %129 = and i32 %128, 255
  %130 = or i32 16777216, %129
  %131 = icmp eq i32 %130, 16777235
  %132 = zext i1 %131 to i64
  %133 = select i1 %131, i32 64, i32 0
  br label %134

134:                                              ; preds = %125, %124
  %135 = phi i32 [ 48, %124 ], [ %133, %125 ]
  br label %136

136:                                              ; preds = %134, %116
  %137 = phi i32 [ 32, %116 ], [ %135, %134 ]
  br label %138

138:                                              ; preds = %136, %108
  %139 = phi i32 [ 28, %108 ], [ %137, %136 ]
  br label %140

140:                                              ; preds = %138, %100
  %141 = phi i32 [ 32, %100 ], [ %139, %138 ]
  br label %142

142:                                              ; preds = %140, %92
  %143 = phi i32 [ 28, %92 ], [ %141, %140 ]
  br label %144

144:                                              ; preds = %142, %84
  %145 = phi i32 [ 64, %84 ], [ %143, %142 ]
  br label %146

146:                                              ; preds = %144, %76
  %147 = phi i32 [ 48, %76 ], [ %145, %144 ]
  br label %148

148:                                              ; preds = %146, %68
  %149 = phi i32 [ 32, %68 ], [ %147, %146 ]
  br label %150

150:                                              ; preds = %148, %60
  %151 = phi i32 [ 28, %60 ], [ %149, %148 ]
  br label %152

152:                                              ; preds = %150, %52
  %153 = phi i32 [ 20, %52 ], [ %151, %150 ]
  br label %154

154:                                              ; preds = %152, %44
  %155 = phi i32 [ 20, %44 ], [ %153, %152 ]
  br label %156

156:                                              ; preds = %154, %36
  %157 = phi i32 [ 16, %36 ], [ %155, %154 ]
  br label %158

158:                                              ; preds = %156, %28
  %159 = phi i32 [ 16, %28 ], [ %157, %156 ]
  br label %160

160:                                              ; preds = %158, %20
  %161 = phi i32 [ 16, %20 ], [ %159, %158 ]
  %162 = sext i32 %161 to i64
  store i64 %162, ptr %12, align 8, !tbaa !9
  %163 = load i64, ptr %8, align 8, !tbaa !9
  %164 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %163, ptr %164, align 8, !tbaa !9
  %165 = load i64, ptr %8, align 8, !tbaa !9
  %166 = icmp ne i64 %165, 0
  br i1 %166, label %167, label %170

167:                                              ; preds = %160
  %168 = load ptr, ptr %7, align 8, !tbaa !5
  %169 = load i64, ptr %8, align 8, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 1 %168, i8 33, i64 %169, i1 false)
  br label %170

170:                                              ; preds = %167, %160
  %171 = load i64, ptr %8, align 8, !tbaa !9
  %172 = load i64, ptr %12, align 8, !tbaa !9
  %173 = icmp ult i64 %171, %172
  br i1 %173, label %174, label %175

174:                                              ; preds = %170
  store i32 -138, ptr %10, align 4, !tbaa !11
  br label %208

175:                                              ; preds = %170
  %176 = load ptr, ptr %6, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %176, i32 0, i32 0
  %178 = load i32, ptr %177, align 8, !tbaa !13
  switch i32 %178, label %204 [
    i32 16777219, label %179
    i32 16777220, label %184
    i32 16777221, label %189
    i32 16777224, label %194
    i32 16777225, label %194
    i32 16777226, label %199
    i32 16777227, label %199
  ]

179:                                              ; preds = %175
  %180 = load ptr, ptr %6, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %180, i32 0, i32 1
  %182 = load ptr, ptr %7, align 8, !tbaa !5
  %183 = call i32 @mbedtls_md5_finish_ret(ptr noundef %181, ptr noundef %182)
  store i32 %183, ptr %11, align 4, !tbaa !11
  br label %205

184:                                              ; preds = %175
  %185 = load ptr, ptr %6, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %185, i32 0, i32 1
  %187 = load ptr, ptr %7, align 8, !tbaa !5
  %188 = call i32 @mbedtls_ripemd160_finish_ret(ptr noundef %186, ptr noundef %187)
  store i32 %188, ptr %11, align 4, !tbaa !11
  br label %205

189:                                              ; preds = %175
  %190 = load ptr, ptr %6, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %190, i32 0, i32 1
  %192 = load ptr, ptr %7, align 8, !tbaa !5
  %193 = call i32 @mbedtls_sha1_finish_ret(ptr noundef %191, ptr noundef %192)
  store i32 %193, ptr %11, align 4, !tbaa !11
  br label %205

194:                                              ; preds = %175, %175
  %195 = load ptr, ptr %6, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %195, i32 0, i32 1
  %197 = load ptr, ptr %7, align 8, !tbaa !5
  %198 = call i32 @mbedtls_sha256_finish_ret(ptr noundef %196, ptr noundef %197)
  store i32 %198, ptr %11, align 4, !tbaa !11
  br label %205

199:                                              ; preds = %175, %175
  %200 = load ptr, ptr %6, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.psa_hash_operation_s, ptr %200, i32 0, i32 1
  %202 = load ptr, ptr %7, align 8, !tbaa !5
  %203 = call i32 @mbedtls_sha512_finish_ret(ptr noundef %201, ptr noundef %202)
  store i32 %203, ptr %11, align 4, !tbaa !11
  br label %205

204:                                              ; preds = %175
  store i32 -137, ptr %5, align 4
  store i32 1, ptr %13, align 4
  br label %220

205:                                              ; preds = %199, %194, %189, %184, %179
  %206 = load i32, ptr %11, align 4, !tbaa !11
  %207 = call i32 @mbedtls_to_psa_error(i32 noundef %206)
  store i32 %207, ptr %10, align 4, !tbaa !11
  br label %208

208:                                              ; preds = %205, %174
  %209 = load i32, ptr %10, align 4, !tbaa !11
  %210 = icmp eq i32 %209, 0
  br i1 %210, label %211, label %216

211:                                              ; preds = %208
  %212 = load i64, ptr %12, align 8, !tbaa !9
  %213 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %212, ptr %213, align 8, !tbaa !9
  %214 = load ptr, ptr %6, align 8, !tbaa !5
  %215 = call i32 @psa_hash_abort(ptr noundef %214)
  store i32 %215, ptr %5, align 4
  store i32 1, ptr %13, align 4
  br label %220

216:                                              ; preds = %208
  %217 = load ptr, ptr %6, align 8, !tbaa !5
  %218 = call i32 @psa_hash_abort(ptr noundef %217)
  %219 = load i32, ptr %10, align 4, !tbaa !11
  store i32 %219, ptr %5, align 4
  store i32 1, ptr %13, align 4
  br label %220

220:                                              ; preds = %216, %211, %204
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  %221 = load i32, ptr %5, align 4
  ret i32 %221
}

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { 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 #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 = { 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, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 0}
!14 = !{!"psa_hash_operation_s", !12, i64 0, !7, i64 8}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@switch.table.psa_hash_finish = private unnamed_addr constant [18 x i64] [i64 16, i64 16, i64 16, i64 20, i64 20, i64 16, i64 16, i64 28, i64 32, i64 48, i64 64, i64 28, i64 32, i64 16, i64 16, i64 28, i64 32, i64 48], align 8

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @psa_hash_finish(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr nocapture noundef writeonly %3) local_unnamed_addr #1 {
  %5 = load i32, ptr %0, align 8, !tbaa !5
  %trunc = trunc i32 %5 to i8
  %switch.tableidx = add i8 %trunc, -1
  %6 = icmp ult i8 %switch.tableidx, 18
  br i1 %6, label %switch.hole_check, label %7

7:                                                ; preds = %switch.hole_check, %4
  %8 = and i32 %5, 255
  %9 = icmp eq i32 %8, 19
  %10 = select i1 %9, i64 64, i64 0
  br label %12

switch.hole_check:                                ; preds = %4
  %switch.maskindex = zext nneg i8 %switch.tableidx to i32
  %switch.shifted = lshr i32 237471, %switch.maskindex
  %switch.lobit = trunc i32 %switch.shifted to i1
  br i1 %switch.lobit, label %switch.lookup, label %7

switch.lookup:                                    ; preds = %switch.hole_check
  %11 = zext nneg i8 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [18 x i64], ptr @switch.table.psa_hash_finish, i64 0, i64 %11
  %switch.load = load i64, ptr %switch.gep, align 8
  br label %12

12:                                               ; preds = %switch.lookup, %7
  %13 = phi i64 [ %10, %7 ], [ %switch.load, %switch.lookup ]
  store i64 %2, ptr %3, align 8, !tbaa !10
  %.not = icmp eq i64 %2, 0
  br i1 %.not, label %15, label %14

14:                                               ; preds = %12
  tail call void @llvm.memset.p0.i64(ptr align 1 %1, i8 33, i64 %2, i1 false)
  br label %15

15:                                               ; preds = %14, %12
  %16 = icmp ugt i64 %13, %2
  br i1 %16, label %.thread, label %17

17:                                               ; preds = %15
  %18 = load i32, ptr %0, align 8, !tbaa !5
  switch i32 %18, label %40 [
    i32 16777219, label %19
    i32 16777220, label %22
    i32 16777221, label %25
    i32 16777224, label %28
    i32 16777225, label %28
    i32 16777226, label %31
    i32 16777227, label %31
  ]

19:                                               ; preds = %17
  %20 = getelementptr inbounds i8, ptr %0, i64 8
  %21 = tail call i32 @mbedtls_md5_finish_ret(ptr noundef nonnull %20, ptr noundef %1) #3
  br label %34

22:                                               ; preds = %17
  %23 = getelementptr inbounds i8, ptr %0, i64 8
  %24 = tail call i32 @mbedtls_ripemd160_finish_ret(ptr noundef nonnull %23, ptr noundef %1) #3
  br label %34

25:                                               ; preds = %17
  %26 = getelementptr inbounds i8, ptr %0, i64 8
  %27 = tail call i32 @mbedtls_sha1_finish_ret(ptr noundef nonnull %26, ptr noundef %1) #3
  br label %34

28:                                               ; preds = %17, %17
  %29 = getelementptr inbounds i8, ptr %0, i64 8
  %30 = tail call i32 @mbedtls_sha256_finish_ret(ptr noundef nonnull %29, ptr noundef %1) #3
  br label %34

31:                                               ; preds = %17, %17
  %32 = getelementptr inbounds i8, ptr %0, i64 8
  %33 = tail call i32 @mbedtls_sha512_finish_ret(ptr noundef nonnull %32, ptr noundef %1) #3
  br label %34

34:                                               ; preds = %19, %22, %25, %28, %31
  %.040 = phi i32 [ %33, %31 ], [ %30, %28 ], [ %27, %25 ], [ %24, %22 ], [ %21, %19 ]
  %35 = tail call i32 @mbedtls_to_psa_error(i32 noundef %.040)
  %36 = icmp eq i32 %35, 0
  br i1 %36, label %37, label %.thread

37:                                               ; preds = %34
  store i64 %13, ptr %3, align 8, !tbaa !10
  %38 = tail call i32 @psa_hash_abort(ptr noundef nonnull %0)
  br label %40

.thread:                                          ; preds = %15, %34
  %.04155 = phi i32 [ %35, %34 ], [ -138, %15 ]
  %39 = tail call i32 @psa_hash_abort(ptr noundef nonnull %0)
  br label %40

40:                                               ; preds = %17, %.thread, %37
  %.0 = phi i32 [ %38, %37 ], [ %.04155, %.thread ], [ -137, %17 ]
  ret i32 %.0
}

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
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, !7, i64 0}
!6 = !{!"psa_hash_operation_s", !7, i64 0, !8, i64 8}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !11, i64 0}
!11 = !{!"long", !8, i64 0}


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