; LLVM IR from ermig1979/Simd :: src/Simd (SimdBaseSynetConvolution32fGemm)

; 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.SimdConvolutionParameters = type { i64, i64, i64, i32, i32, i64, i64, i64, i32, i32, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i32 }
%"struct.Simd::ConvParam" = type <{ %struct.SimdConvolutionParameters, i32, [4 x i8], i64, i32, [4 x i8] }>

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd9ConvParam10IsDilationEm(ptr noundef nonnull align 8 dereferenceable(180), i64 noundef) #0 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd9ConvParam8IsStrideEm(ptr noundef nonnull align 8 dereferenceable(180), i64 noundef) #0 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180), i64 noundef) #0 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEm(ptr noundef nonnull align 8 dereferenceable(180), i64 noundef) #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN4Simd4Base27SynetConvolution32fWinograd10PreferableERKNS_9ConvParamE(ptr noundef nonnull align 8 dereferenceable(180) %0) #1 align 2 {
  %2 = alloca i1, align 1
  %3 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  %4 = load ptr, ptr %3, align 8, !tbaa !5
  %5 = call noundef zeroext i1 @_ZNK4Simd9ConvParam10IsDilationEm(ptr noundef nonnull align 8 dereferenceable(180) %4, i64 noundef 1)
  br i1 %5, label %6, label %19

6:                                                ; preds = %1
  %7 = load ptr, ptr %3, align 8, !tbaa !5
  %8 = call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsStrideEm(ptr noundef nonnull align 8 dereferenceable(180) %7, i64 noundef 1)
  br i1 %8, label %9, label %19

9:                                                ; preds = %6
  %10 = load ptr, ptr %3, align 8, !tbaa !5
  %11 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %10, i32 0, i32 20
  %12 = load i64, ptr %11, align 8, !tbaa !9
  %13 = icmp ne i64 %12, 1
  br i1 %13, label %19, label %14

14:                                               ; preds = %9
  %15 = load ptr, ptr %3, align 8, !tbaa !5
  %16 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %15, i32 0, i32 0
  %17 = load i64, ptr %16, align 8, !tbaa !15
  %18 = icmp ule i64 %17, 16
  br i1 %18, label %19, label %20

19:                                               ; preds = %14, %9, %6, %1
  store i1 false, ptr %2, align 1
  br label %221

20:                                               ; preds = %14
  %21 = load ptr, ptr %3, align 8, !tbaa !5
  %22 = call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEmm(ptr noundef nonnull align 8 dereferenceable(180) %21, i64 noundef 1, i64 noundef 3)
  br i1 %22, label %23, label %68

23:                                               ; preds = %20
  %24 = load ptr, ptr %3, align 8, !tbaa !5
  %25 = call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %24, i64 noundef 0)
  br i1 %25, label %37, label %26

26:                                               ; preds = %23
  %27 = load ptr, ptr %3, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %27, i32 0, i32 17
  %29 = load i64, ptr %28, align 8, !tbaa !16
  %30 = icmp eq i64 %29, 1
  br i1 %30, label %31, label %36

31:                                               ; preds = %26
  %32 = load ptr, ptr %3, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %32, i32 0, i32 19
  %34 = load i64, ptr %33, align 8, !tbaa !17
  %35 = icmp eq i64 %34, 1
  br i1 %35, label %37, label %36

36:                                               ; preds = %31, %26
  store i1 false, ptr %2, align 1
  br label %221

37:                                               ; preds = %31, %23
  %38 = load ptr, ptr %3, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %38, i32 0, i32 0
  %40 = load i64, ptr %39, align 8, !tbaa !15
  %41 = icmp ule i64 %40, 32
  br i1 %41, label %42, label %43

42:                                               ; preds = %37
  store i1 false, ptr %2, align 1
  br label %221

43:                                               ; preds = %37
  %44 = load ptr, ptr %3, align 8, !tbaa !5
  %45 = getelementptr inbounds %"struct.Simd::ConvParam", ptr %44, i32 0, i32 1
  %46 = load i32, ptr %45, align 8, !tbaa !18
  %47 = icmp ne i32 %46, 0
  br i1 %47, label %48, label %66

48:                                               ; preds = %43
  %49 = load ptr, ptr %3, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %49, i32 0, i32 2
  %51 = load i64, ptr %50, align 8, !tbaa !22
  %52 = icmp uge i64 %51, 8
  br i1 %52, label %53, label %66

53:                                               ; preds = %48
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %54, i32 0, i32 1
  %56 = load i64, ptr %55, align 8, !tbaa !23
  %57 = load ptr, ptr %3, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %57, i32 0, i32 2
  %59 = load i64, ptr %58, align 8, !tbaa !22
  %60 = mul i64 %56, %59
  %61 = load ptr, ptr %3, align 8, !tbaa !5
  %62 = getelementptr inbounds %"struct.Simd::ConvParam", ptr %61, i32 0, i32 3
  %63 = load i64, ptr %62, align 8, !tbaa !24
  %64 = mul i64 %60, %63
  %65 = icmp uge i64 %64, 36
  br label %66

66:                                               ; preds = %53, %48, %43
  %67 = phi i1 [ false, %48 ], [ false, %43 ], [ %65, %53 ]
  store i1 %67, ptr %2, align 1
  br label %221

68:                                               ; preds = %20
  %69 = load ptr, ptr %3, align 8, !tbaa !5
  %70 = call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEmm(ptr noundef nonnull align 8 dereferenceable(180) %69, i64 noundef 1, i64 noundef 5)
  br i1 %70, label %71, label %110

71:                                               ; preds = %68
  %72 = load ptr, ptr %3, align 8, !tbaa !5
  %73 = call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %72, i64 noundef 0)
  br i1 %73, label %85, label %74

74:                                               ; preds = %71
  %75 = load ptr, ptr %3, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %75, i32 0, i32 17
  %77 = load i64, ptr %76, align 8, !tbaa !16
  %78 = icmp eq i64 %77, 2
  br i1 %78, label %79, label %84

79:                                               ; preds = %74
  %80 = load ptr, ptr %3, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %80, i32 0, i32 19
  %82 = load i64, ptr %81, align 8, !tbaa !17
  %83 = icmp eq i64 %82, 2
  br i1 %83, label %85, label %84

84:                                               ; preds = %79, %74
  store i1 false, ptr %2, align 1
  br label %221

85:                                               ; preds = %79, %71
  %86 = load ptr, ptr %3, align 8, !tbaa !5
  %87 = getelementptr inbounds %"struct.Simd::ConvParam", ptr %86, i32 0, i32 1
  %88 = load i32, ptr %87, align 8, !tbaa !18
  %89 = icmp ne i32 %88, 0
  br i1 %89, label %90, label %108

90:                                               ; preds = %85
  %91 = load ptr, ptr %3, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %91, i32 0, i32 2
  %93 = load i64, ptr %92, align 8, !tbaa !22
  %94 = icmp uge i64 %93, 8
  br i1 %94, label %95, label %108

95:                                               ; preds = %90
  %96 = load ptr, ptr %3, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %96, i32 0, i32 1
  %98 = load i64, ptr %97, align 8, !tbaa !23
  %99 = load ptr, ptr %3, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %99, i32 0, i32 2
  %101 = load i64, ptr %100, align 8, !tbaa !22
  %102 = mul i64 %98, %101
  %103 = load ptr, ptr %3, align 8, !tbaa !5
  %104 = getelementptr inbounds %"struct.Simd::ConvParam", ptr %103, i32 0, i32 3
  %105 = load i64, ptr %104, align 8, !tbaa !24
  %106 = mul i64 %102, %105
  %107 = icmp uge i64 %106, 36
  br label %108

108:                                              ; preds = %95, %90, %85
  %109 = phi i1 [ false, %90 ], [ false, %85 ], [ %107, %95 ]
  store i1 %109, ptr %2, align 1
  br label %221

110:                                              ; preds = %68
  %111 = load ptr, ptr %3, align 8, !tbaa !5
  %112 = call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEm(ptr noundef nonnull align 8 dereferenceable(180) %111, i64 noundef 2)
  br i1 %112, label %113, label %165

113:                                              ; preds = %110
  %114 = load ptr, ptr %3, align 8, !tbaa !5
  %115 = call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %114, i64 noundef 0)
  br i1 %115, label %135, label %116

116:                                              ; preds = %113
  %117 = load ptr, ptr %3, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %117, i32 0, i32 16
  %119 = load i64, ptr %118, align 8, !tbaa !25
  %120 = load ptr, ptr %3, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %120, i32 0, i32 18
  %122 = load i64, ptr %121, align 8, !tbaa !26
  %123 = add i64 %119, %122
  %124 = icmp eq i64 %123, 1
  br i1 %124, label %125, label %134

125:                                              ; preds = %116
  %126 = load ptr, ptr %3, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %126, i32 0, i32 17
  %128 = load i64, ptr %127, align 8, !tbaa !16
  %129 = load ptr, ptr %3, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %129, i32 0, i32 19
  %131 = load i64, ptr %130, align 8, !tbaa !17
  %132 = add i64 %128, %131
  %133 = icmp eq i64 %132, 1
  br i1 %133, label %135, label %134

134:                                              ; preds = %125, %116
  store i1 false, ptr %2, align 1
  br label %221

135:                                              ; preds = %125, %113
  %136 = load ptr, ptr %3, align 8, !tbaa !5
  %137 = getelementptr inbounds %"struct.Simd::ConvParam", ptr %136, i32 0, i32 1
  %138 = load i32, ptr %137, align 8, !tbaa !18
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %140, label %163

140:                                              ; preds = %135
  %141 = load ptr, ptr %3, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %141, i32 0, i32 1
  %143 = load i64, ptr %142, align 8, !tbaa !23
  %144 = icmp uge i64 %143, 4
  br i1 %144, label %145, label %163

145:                                              ; preds = %140
  %146 = load ptr, ptr %3, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %146, i32 0, i32 2
  %148 = load i64, ptr %147, align 8, !tbaa !22
  %149 = icmp uge i64 %148, 4
  br i1 %149, label %150, label %163

150:                                              ; preds = %145
  %151 = load ptr, ptr %3, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %151, i32 0, i32 1
  %153 = load i64, ptr %152, align 8, !tbaa !23
  %154 = load ptr, ptr %3, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %154, i32 0, i32 2
  %156 = load i64, ptr %155, align 8, !tbaa !22
  %157 = mul i64 %153, %156
  %158 = load ptr, ptr %3, align 8, !tbaa !5
  %159 = getelementptr inbounds %"struct.Simd::ConvParam", ptr %158, i32 0, i32 3
  %160 = load i64, ptr %159, align 8, !tbaa !24
  %161 = mul i64 %157, %160
  %162 = icmp uge i64 %161, 36
  br label %163

163:                                              ; preds = %150, %145, %140, %135
  %164 = phi i1 [ false, %145 ], [ false, %140 ], [ false, %135 ], [ %162, %150 ]
  store i1 %164, ptr %2, align 1
  br label %221

165:                                              ; preds = %110
  %166 = load ptr, ptr %3, align 8, !tbaa !5
  %167 = call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEm(ptr noundef nonnull align 8 dereferenceable(180) %166, i64 noundef 3)
  br i1 %167, label %168, label %217

168:                                              ; preds = %165
  %169 = load ptr, ptr %3, align 8, !tbaa !5
  %170 = call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %169, i64 noundef 0)
  br i1 %170, label %175, label %171

171:                                              ; preds = %168
  %172 = load ptr, ptr %3, align 8, !tbaa !5
  %173 = call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %172, i64 noundef 1)
  br i1 %173, label %175, label %174

174:                                              ; preds = %171
  store i1 false, ptr %2, align 1
  br label %221

175:                                              ; preds = %171, %168
  %176 = load ptr, ptr %3, align 8, !tbaa !5
  %177 = getelementptr inbounds %"struct.Simd::ConvParam", ptr %176, i32 0, i32 1
  %178 = load i32, ptr %177, align 8, !tbaa !18
  %179 = icmp ne i32 %178, 0
  br i1 %179, label %180, label %205

180:                                              ; preds = %175
  %181 = load ptr, ptr %3, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %181, i32 0, i32 1
  %183 = load i64, ptr %182, align 8, !tbaa !23
  %184 = icmp uge i64 %183, 4
  br i1 %184, label %185, label %203

185:                                              ; preds = %180
  %186 = load ptr, ptr %3, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %186, i32 0, i32 2
  %188 = load i64, ptr %187, align 8, !tbaa !22
  %189 = icmp uge i64 %188, 4
  br i1 %189, label %190, label %203

190:                                              ; preds = %185
  %191 = load ptr, ptr %3, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %191, i32 0, i32 1
  %193 = load i64, ptr %192, align 8, !tbaa !23
  %194 = load ptr, ptr %3, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %194, i32 0, i32 2
  %196 = load i64, ptr %195, align 8, !tbaa !22
  %197 = mul i64 %193, %196
  %198 = load ptr, ptr %3, align 8, !tbaa !5
  %199 = getelementptr inbounds %"struct.Simd::ConvParam", ptr %198, i32 0, i32 3
  %200 = load i64, ptr %199, align 8, !tbaa !24
  %201 = mul i64 %197, %200
  %202 = icmp uge i64 %201, 36
  br label %203

203:                                              ; preds = %190, %185, %180
  %204 = phi i1 [ false, %185 ], [ false, %180 ], [ %202, %190 ]
  store i1 %204, ptr %2, align 1
  br label %221

205:                                              ; preds = %175
  %206 = load ptr, ptr %3, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %206, i32 0, i32 1
  %208 = load i64, ptr %207, align 8, !tbaa !23
  %209 = icmp uge i64 %208, 6
  br i1 %209, label %210, label %215

210:                                              ; preds = %205
  %211 = load ptr, ptr %3, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %211, i32 0, i32 2
  %213 = load i64, ptr %212, align 8, !tbaa !22
  %214 = icmp uge i64 %213, 6
  br label %215

215:                                              ; preds = %210, %205
  %216 = phi i1 [ false, %205 ], [ %214, %210 ]
  store i1 %216, ptr %2, align 1
  br label %221

217:                                              ; preds = %165
  br label %218

218:                                              ; preds = %217
  br label %219

219:                                              ; preds = %218
  br label %220

220:                                              ; preds = %219
  store i1 false, ptr %2, align 1
  br label %221

221:                                              ; preds = %220, %215, %203, %174, %163, %134, %108, %84, %66, %42, %36, %19
  %222 = load i1, ptr %2, align 1
  ret i1 %222
}

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEmm(ptr noundef nonnull align 8 dereferenceable(180), i64 noundef, i64 noundef) #0 align 2

attributes #0 = { alwaysinline mustprogress 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 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" }

!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++ TBAA"}
!9 = !{!10, !11, i64 144}
!10 = !{!"_ZTS25SimdConvolutionParameters", !11, i64 0, !11, i64 8, !11, i64 16, !12, i64 24, !13, i64 28, !11, i64 32, !11, i64 40, !11, i64 48, !12, i64 56, !13, i64 60, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !14, i64 152}
!11 = !{!"long", !7, i64 0}
!12 = !{!"_ZTS18SimdTensorDataType", !7, i64 0}
!13 = !{!"_ZTS20SimdTensorFormatType", !7, i64 0}
!14 = !{!"_ZTS29SimdConvolutionActivationType", !7, i64 0}
!15 = !{!10, !11, i64 0}
!16 = !{!10, !11, i64 120}
!17 = !{!10, !11, i64 136}
!18 = !{!19, !20, i64 160}
!19 = !{!"_ZTSN4Simd9ConvParamE", !10, i64 0, !20, i64 160, !11, i64 168, !21, i64 176}
!20 = !{!"_ZTS8SimdBool", !7, i64 0}
!21 = !{!"_ZTS26SimdSynetCompatibilityType", !7, i64 0}
!22 = !{!10, !11, i64 16}
!23 = !{!10, !11, i64 8}
!24 = !{!19, !11, i64 168}
!25 = !{!10, !11, i64 112}
!26 = !{!10, !11, i64 128}


; 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: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd9ConvParam10IsDilationEm(ptr noundef nonnull align 8 dereferenceable(180), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd9ConvParam8IsStrideEm(ptr noundef nonnull align 8 dereferenceable(180), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEm(ptr noundef nonnull align 8 dereferenceable(180), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef zeroext i1 @_ZN4Simd4Base27SynetConvolution32fWinograd10PreferableERKNS_9ConvParamE(ptr noundef nonnull align 8 dereferenceable(180) %0) local_unnamed_addr #1 align 2 {
  %2 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam10IsDilationEm(ptr noundef nonnull align 8 dereferenceable(180) %0, i64 noundef 1)
  br i1 %2, label %3, label %128

3:                                                ; preds = %1
  %4 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsStrideEm(ptr noundef nonnull align 8 dereferenceable(180) %0, i64 noundef 1)
  %5 = getelementptr inbounds i8, ptr %0, i64 144
  %6 = load i64, ptr %5, align 8
  %.not = icmp ne i64 %6, 1
  %not. = xor i1 %4, true
  %or.cond = select i1 %not., i1 true, i1 %.not
  %7 = load i64, ptr %0, align 8
  %8 = icmp ult i64 %7, 17
  %or.cond59 = select i1 %or.cond, i1 true, i1 %8
  br i1 %or.cond59, label %128, label %9

9:                                                ; preds = %3
  %10 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEmm(ptr noundef nonnull align 8 dereferenceable(180) %0, i64 noundef 1, i64 noundef 3)
  br i1 %10, label %11, label %38

11:                                               ; preds = %9
  %12 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %0, i64 noundef 0)
  br i1 %12, label %22, label %13

13:                                               ; preds = %11
  %14 = getelementptr inbounds i8, ptr %0, i64 120
  %15 = load i64, ptr %14, align 8, !tbaa !5
  %16 = icmp ne i64 %15, 1
  %17 = getelementptr inbounds i8, ptr %0, i64 136
  %18 = load i64, ptr %17, align 8
  %19 = icmp ne i64 %18, 1
  %or.cond62.not79 = select i1 %16, i1 true, i1 %19
  %20 = load i64, ptr %0, align 8
  %21 = icmp ult i64 %20, 33
  %or.cond67 = select i1 %or.cond62.not79, i1 true, i1 %21
  br i1 %or.cond67, label %128, label %23

22:                                               ; preds = %11
  %.old = load i64, ptr %0, align 8, !tbaa !13
  %.old66 = icmp ult i64 %.old, 33
  br i1 %.old66, label %128, label %23

23:                                               ; preds = %13, %22
  %24 = getelementptr inbounds i8, ptr %0, i64 160
  %25 = load i32, ptr %24, align 8, !tbaa !14
  %.not56 = icmp eq i32 %25, 0
  br i1 %.not56, label %128, label %26

26:                                               ; preds = %23
  %27 = getelementptr inbounds i8, ptr %0, i64 16
  %28 = load i64, ptr %27, align 8, !tbaa !18
  %29 = icmp ugt i64 %28, 7
  br i1 %29, label %30, label %128

30:                                               ; preds = %26
  %31 = getelementptr inbounds i8, ptr %0, i64 8
  %32 = load i64, ptr %31, align 8, !tbaa !19
  %33 = mul i64 %32, %28
  %34 = getelementptr inbounds i8, ptr %0, i64 168
  %35 = load i64, ptr %34, align 8, !tbaa !20
  %36 = mul i64 %33, %35
  %37 = icmp ugt i64 %36, 35
  br label %128

38:                                               ; preds = %9
  %39 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEmm(ptr noundef nonnull align 8 dereferenceable(180) %0, i64 noundef 1, i64 noundef 5)
  br i1 %39, label %40, label %64

40:                                               ; preds = %38
  %41 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %0, i64 noundef 0)
  br i1 %41, label %51, label %42

42:                                               ; preds = %40
  %43 = getelementptr inbounds i8, ptr %0, i64 120
  %44 = load i64, ptr %43, align 8, !tbaa !5
  %45 = icmp ne i64 %44, 2
  %46 = getelementptr inbounds i8, ptr %0, i64 136
  %47 = load i64, ptr %46, align 8
  %48 = icmp ne i64 %47, 2
  %or.cond65.not76 = select i1 %45, i1 true, i1 %48
  %49 = getelementptr inbounds i8, ptr %0, i64 160
  %50 = load i32, ptr %49, align 8
  %.not55 = icmp eq i32 %50, 0
  %or.cond70 = select i1 %or.cond65.not76, i1 true, i1 %.not55
  br i1 %or.cond70, label %128, label %52

51:                                               ; preds = %40
  %.old68 = getelementptr inbounds i8, ptr %0, i64 160
  %.old69 = load i32, ptr %.old68, align 8, !tbaa !14
  %.not55.old = icmp eq i32 %.old69, 0
  br i1 %.not55.old, label %128, label %52

52:                                               ; preds = %42, %51
  %53 = getelementptr inbounds i8, ptr %0, i64 16
  %54 = load i64, ptr %53, align 8, !tbaa !18
  %55 = icmp ugt i64 %54, 7
  br i1 %55, label %56, label %128

56:                                               ; preds = %52
  %57 = getelementptr inbounds i8, ptr %0, i64 8
  %58 = load i64, ptr %57, align 8, !tbaa !19
  %59 = mul i64 %58, %54
  %60 = getelementptr inbounds i8, ptr %0, i64 168
  %61 = load i64, ptr %60, align 8, !tbaa !20
  %62 = mul i64 %59, %61
  %63 = icmp ugt i64 %62, 35
  br label %128

64:                                               ; preds = %38
  %65 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEm(ptr noundef nonnull align 8 dereferenceable(180) %0, i64 noundef 2)
  br i1 %65, label %66, label %99

66:                                               ; preds = %64
  %67 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %0, i64 noundef 0)
  br i1 %67, label %84, label %68

68:                                               ; preds = %66
  %69 = getelementptr inbounds i8, ptr %0, i64 112
  %70 = load i64, ptr %69, align 8, !tbaa !21
  %71 = getelementptr inbounds i8, ptr %0, i64 128
  %72 = load i64, ptr %71, align 8, !tbaa !22
  %73 = add i64 %72, %70
  %74 = icmp eq i64 %73, 1
  br i1 %74, label %75, label %128

75:                                               ; preds = %68
  %76 = getelementptr inbounds i8, ptr %0, i64 120
  %77 = load i64, ptr %76, align 8, !tbaa !5
  %78 = getelementptr inbounds i8, ptr %0, i64 136
  %79 = load i64, ptr %78, align 8, !tbaa !23
  %80 = add i64 %79, %77
  %81 = icmp ne i64 %80, 1
  %82 = getelementptr inbounds i8, ptr %0, i64 160
  %83 = load i32, ptr %82, align 8
  %.not54 = icmp eq i32 %83, 0
  %or.cond73 = select i1 %81, i1 true, i1 %.not54
  br i1 %or.cond73, label %128, label %85

84:                                               ; preds = %66
  %.old71 = getelementptr inbounds i8, ptr %0, i64 160
  %.old72 = load i32, ptr %.old71, align 8, !tbaa !14
  %.not54.old = icmp eq i32 %.old72, 0
  br i1 %.not54.old, label %128, label %85

85:                                               ; preds = %75, %84
  %86 = getelementptr inbounds i8, ptr %0, i64 8
  %87 = load i64, ptr %86, align 8, !tbaa !19
  %88 = icmp ugt i64 %87, 3
  br i1 %88, label %89, label %128

89:                                               ; preds = %85
  %90 = getelementptr inbounds i8, ptr %0, i64 16
  %91 = load i64, ptr %90, align 8, !tbaa !18
  %92 = icmp ugt i64 %91, 3
  br i1 %92, label %93, label %128

93:                                               ; preds = %89
  %94 = mul i64 %91, %87
  %95 = getelementptr inbounds i8, ptr %0, i64 168
  %96 = load i64, ptr %95, align 8, !tbaa !20
  %97 = mul i64 %94, %96
  %98 = icmp ugt i64 %97, 35
  br label %128

99:                                               ; preds = %64
  %100 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEm(ptr noundef nonnull align 8 dereferenceable(180) %0, i64 noundef 3)
  br i1 %100, label %101, label %128

101:                                              ; preds = %99
  %102 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %0, i64 noundef 0)
  br i1 %102, label %105, label %103

103:                                              ; preds = %101
  %104 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %0, i64 noundef 1)
  br i1 %104, label %105, label %128

105:                                              ; preds = %103, %101
  %106 = getelementptr inbounds i8, ptr %0, i64 160
  %107 = load i32, ptr %106, align 8, !tbaa !14
  %.not53 = icmp eq i32 %107, 0
  %108 = getelementptr inbounds i8, ptr %0, i64 8
  %109 = load i64, ptr %108, align 8, !tbaa !19
  br i1 %.not53, label %122, label %110

110:                                              ; preds = %105
  %111 = icmp ugt i64 %109, 3
  br i1 %111, label %112, label %128

112:                                              ; preds = %110
  %113 = getelementptr inbounds i8, ptr %0, i64 16
  %114 = load i64, ptr %113, align 8, !tbaa !18
  %115 = icmp ugt i64 %114, 3
  br i1 %115, label %116, label %128

116:                                              ; preds = %112
  %117 = mul i64 %114, %109
  %118 = getelementptr inbounds i8, ptr %0, i64 168
  %119 = load i64, ptr %118, align 8, !tbaa !20
  %120 = mul i64 %117, %119
  %121 = icmp ugt i64 %120, 35
  br label %128

122:                                              ; preds = %105
  %123 = icmp ugt i64 %109, 5
  %124 = getelementptr inbounds i8, ptr %0, i64 16
  %125 = load i64, ptr %124, align 8
  %126 = icmp ugt i64 %125, 5
  %127 = select i1 %123, i1 %126, i1 false
  br label %128

128:                                              ; preds = %99, %110, %112, %116, %103, %84, %85, %89, %93, %68, %75, %51, %52, %56, %42, %23, %26, %30, %22, %13, %1, %3, %122
  %.0 = phi i1 [ %127, %122 ], [ false, %3 ], [ false, %1 ], [ false, %13 ], [ false, %22 ], [ false, %26 ], [ false, %23 ], [ %37, %30 ], [ false, %42 ], [ false, %52 ], [ false, %51 ], [ %63, %56 ], [ false, %75 ], [ false, %68 ], [ false, %89 ], [ false, %85 ], [ false, %84 ], [ %98, %93 ], [ false, %103 ], [ false, %112 ], [ false, %110 ], [ %121, %116 ], [ false, %99 ]
  ret i1 %.0
}

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEmm(ptr noundef nonnull align 8 dereferenceable(180), i64 noundef, i64 noundef) local_unnamed_addr #0 align 2

attributes #0 = { alwaysinline mustprogress 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 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" }

!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 120}
!6 = !{!"_ZTS25SimdConvolutionParameters", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !11, i64 28, !7, i64 32, !7, i64 40, !7, i64 48, !10, i64 56, !11, i64 60, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !12, i64 152}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTS18SimdTensorDataType", !8, i64 0}
!11 = !{!"_ZTS20SimdTensorFormatType", !8, i64 0}
!12 = !{!"_ZTS29SimdConvolutionActivationType", !8, i64 0}
!13 = !{!6, !7, i64 0}
!14 = !{!15, !16, i64 160}
!15 = !{!"_ZTSN4Simd9ConvParamE", !6, i64 0, !16, i64 160, !7, i64 168, !17, i64 176}
!16 = !{!"_ZTS8SimdBool", !8, i64 0}
!17 = !{!"_ZTS26SimdSynetCompatibilityType", !8, i64 0}
!18 = !{!6, !7, i64 16}
!19 = !{!6, !7, i64 8}
!20 = !{!15, !7, i64 168}
!21 = !{!6, !7, i64 112}
!22 = !{!6, !7, i64 128}
!23 = !{!6, !7, i64 136}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass