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

%"class.Simd::SynetConvolution32f" = type { %"struct.Simd::Deletable", %"struct.Simd::ConvParam", %"struct.Simd::Array", float, float, ptr, ptr, ptr, %"struct.Simd::Runtime", %"struct.Simd::Runtime.3", %"struct.Simd::Array", ptr, ptr, ptr, %"class.std::__cxx11::basic_string" }
%"struct.Simd::Deletable" = type { ptr }
%"struct.Simd::ConvParam" = type <{ %struct.SimdConvolutionParameters, i32, [4 x i8], i64, i32, [4 x i8] }>
%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::Runtime" = type { ptr, %"class.std::vector", %"class.std::__cxx11::basic_string" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Simd::Runtime<Simd::GemmFunc, Simd::GemmArgs>::Candidate, std::allocator<Simd::Runtime<Simd::GemmFunc, Simd::GemmArgs>::Candidate>>::_Vector_impl" }
%"struct.std::_Vector_base<Simd::Runtime<Simd::GemmFunc, Simd::GemmArgs>::Candidate, std::allocator<Simd::Runtime<Simd::GemmFunc, Simd::GemmArgs>::Candidate>>::_Vector_impl" = type { %"struct.std::_Vector_base<Simd::Runtime<Simd::GemmFunc, Simd::GemmArgs>::Candidate, std::allocator<Simd::Runtime<Simd::GemmFunc, Simd::GemmArgs>::Candidate>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Simd::Runtime<Simd::GemmFunc, Simd::GemmArgs>::Candidate, std::allocator<Simd::Runtime<Simd::GemmFunc, Simd::GemmArgs>::Candidate>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.Simd::Runtime.3" = type { ptr, %"class.std::vector.4", %"class.std::__cxx11::basic_string" }
%"class.std::vector.4" = type { %"struct.std::_Vector_base.5" }
%"struct.std::_Vector_base.5" = type { %"struct.std::_Vector_base<Simd::Runtime<Simd::GemmCbFunc, Simd::GemmCbArgs>::Candidate, std::allocator<Simd::Runtime<Simd::GemmCbFunc, Simd::GemmCbArgs>::Candidate>>::_Vector_impl" }
%"struct.std::_Vector_base<Simd::Runtime<Simd::GemmCbFunc, Simd::GemmCbArgs>::Candidate, std::allocator<Simd::Runtime<Simd::GemmCbFunc, Simd::GemmCbArgs>::Candidate>>::_Vector_impl" = type { %"struct.std::_Vector_base<Simd::Runtime<Simd::GemmCbFunc, Simd::GemmCbArgs>::Candidate, std::allocator<Simd::Runtime<Simd::GemmCbFunc, Simd::GemmCbArgs>::Candidate>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Simd::Runtime<Simd::GemmCbFunc, Simd::GemmCbArgs>::Candidate, std::allocator<Simd::Runtime<Simd::GemmCbFunc, Simd::GemmCbArgs>::Candidate>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.Simd::Array" = type { ptr, i64 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

@.str.1 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [9 x i8], align 1
@__PRETTY_FUNCTION__._ZN4Simd4Base25SynetConvolution32fGemmNN8ImgToColEPKfPf = external hidden unnamed_addr constant [85 x i8], align 1

; 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Simd4Base25SynetConvolution32fGemmNN8ImgToColEPKfPf(ptr noundef nonnull align 8 dereferenceable(560) %0, ptr noundef %1, ptr noundef %2) unnamed_addr #3 align 2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i32, align 4
  %11 = alloca i64, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %32 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  %33 = getelementptr inbounds %"class.Simd::SynetConvolution32f", ptr %32, i32 0, i32 1
  store ptr %33, ptr %7, align 8, !tbaa !5
  %34 = load ptr, ptr %7, align 8, !tbaa !5
  %35 = getelementptr inbounds %"struct.Simd::ConvParam", ptr %34, i32 0, i32 1
  %36 = load i32, ptr %35, align 8, !tbaa !9
  %37 = icmp ne i32 %36, 0
  %38 = xor i1 %37, true
  br i1 %38, label %39, label %40

39:                                               ; preds = %3
  br label %42

40:                                               ; preds = %3
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 462, ptr noundef @__PRETTY_FUNCTION__._ZN4Simd4Base25SynetConvolution32fGemmNN8ImgToColEPKfPf) #5
  unreachable

41:                                               ; No predecessors!
  br label %42

42:                                               ; preds = %41, %39
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %43 = load ptr, ptr %7, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %43, i32 0, i32 2
  %45 = load i64, ptr %44, align 8, !tbaa !18
  %46 = load ptr, ptr %7, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %46, i32 0, i32 1
  %48 = load i64, ptr %47, align 8, !tbaa !19
  %49 = mul i64 %45, %48
  store i64 %49, ptr %8, align 8, !tbaa !20
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = call noundef zeroext i1 @_ZNK4Simd9ConvParam10IsDilationEm(ptr noundef nonnull align 8 dereferenceable(180) %50, i64 noundef 1)
  br i1 %51, label %52, label %117

52:                                               ; preds = %42
  %53 = load ptr, ptr %7, align 8, !tbaa !5
  %54 = call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsStrideEm(ptr noundef nonnull align 8 dereferenceable(180) %53, i64 noundef 2)
  br i1 %54, label %55, label %117

55:                                               ; preds = %52
  %56 = load ptr, ptr %7, align 8, !tbaa !5
  %57 = call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %56, i64 noundef 0)
  br i1 %57, label %58, label %117

58:                                               ; preds = %55
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEm(ptr noundef nonnull align 8 dereferenceable(180) %59, i64 noundef 1)
  br i1 %60, label %61, label %117

61:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  store i64 0, ptr %9, align 8, !tbaa !20
  br label %62

62:                                               ; preds = %113, %61
  %63 = load i64, ptr %9, align 8, !tbaa !20
  %64 = load ptr, ptr %7, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %64, i32 0, i32 0
  %66 = load i64, ptr %65, align 8, !tbaa !21
  %67 = icmp ult i64 %63, %66
  br i1 %67, label %69, label %68

68:                                               ; preds = %62
  store i32 2, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  br label %116

69:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  store i64 0, ptr %11, align 8, !tbaa !20
  br label %70

70:                                               ; preds = %106, %69
  %71 = load i64, ptr %11, align 8, !tbaa !20
  %72 = load ptr, ptr %7, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %72, i32 0, i32 6
  %74 = load i64, ptr %73, align 8, !tbaa !22
  %75 = icmp ult i64 %71, %74
  br i1 %75, label %77, label %76

76:                                               ; preds = %70
  store i32 5, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  br label %109

77:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = load i64, ptr %11, align 8, !tbaa !20
  %80 = mul i64 2, %79
  %81 = load ptr, ptr %7, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %81, i32 0, i32 2
  %83 = load i64, ptr %82, align 8, !tbaa !18
  %84 = mul i64 %80, %83
  %85 = getelementptr inbounds float, ptr %78, i64 %84
  store ptr %85, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  store i64 0, ptr %13, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  store i64 0, ptr %14, align 8, !tbaa !20
  br label %86

86:                                               ; preds = %100, %77
  %87 = load i64, ptr %13, align 8, !tbaa !20
  %88 = load ptr, ptr %7, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %88, i32 0, i32 7
  %90 = load i64, ptr %89, align 8, !tbaa !23
  %91 = icmp ult i64 %87, %90
  br i1 %91, label %93, label %92

92:                                               ; preds = %86
  store i32 8, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  br label %105

93:                                               ; preds = %86
  %94 = load ptr, ptr %12, align 8, !tbaa !5
  %95 = load i64, ptr %14, align 8, !tbaa !20
  %96 = getelementptr inbounds float, ptr %94, i64 %95
  %97 = load float, ptr %96, align 4, !tbaa !24
  %98 = load ptr, ptr %6, align 8, !tbaa !5
  %99 = getelementptr inbounds float, ptr %98, i32 1
  store ptr %99, ptr %6, align 8, !tbaa !5
  store float %97, ptr %98, align 4, !tbaa !24
  br label %100

100:                                              ; preds = %93
  %101 = load i64, ptr %13, align 8, !tbaa !20
  %102 = add i64 %101, 1
  store i64 %102, ptr %13, align 8, !tbaa !20
  %103 = load i64, ptr %14, align 8, !tbaa !20
  %104 = add i64 %103, 2
  store i64 %104, ptr %14, align 8, !tbaa !20
  br label %86, !llvm.loop !26

105:                                              ; preds = %92
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  br label %106

106:                                              ; preds = %105
  %107 = load i64, ptr %11, align 8, !tbaa !20
  %108 = add i64 %107, 1
  store i64 %108, ptr %11, align 8, !tbaa !20
  br label %70, !llvm.loop !28

109:                                              ; preds = %76
  %110 = load i64, ptr %8, align 8, !tbaa !20
  %111 = load ptr, ptr %5, align 8, !tbaa !5
  %112 = getelementptr inbounds float, ptr %111, i64 %110
  store ptr %112, ptr %5, align 8, !tbaa !5
  br label %113

113:                                              ; preds = %109
  %114 = load i64, ptr %9, align 8, !tbaa !20
  %115 = add i64 %114, 1
  store i64 %115, ptr %9, align 8, !tbaa !20
  br label %62, !llvm.loop !29

116:                                              ; preds = %68
  br label %382

117:                                              ; preds = %58, %55, %52, %42
  %118 = load ptr, ptr %7, align 8, !tbaa !5
  %119 = call noundef zeroext i1 @_ZNK4Simd9ConvParam10IsDilationEm(ptr noundef nonnull align 8 dereferenceable(180) %118, i64 noundef 1)
  br i1 %119, label %120, label %245

120:                                              ; preds = %117
  %121 = load ptr, ptr %7, align 8, !tbaa !5
  %122 = call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsStrideEm(ptr noundef nonnull align 8 dereferenceable(180) %121, i64 noundef 1)
  br i1 %122, label %123, label %245

123:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  store i64 0, ptr %15, align 8, !tbaa !20
  br label %124

124:                                              ; preds = %241, %123
  %125 = load i64, ptr %15, align 8, !tbaa !20
  %126 = load ptr, ptr %7, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %126, i32 0, i32 0
  %128 = load i64, ptr %127, align 8, !tbaa !21
  %129 = icmp ult i64 %125, %128
  br i1 %129, label %131, label %130

130:                                              ; preds = %124
  store i32 11, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  br label %244

131:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  store i64 0, ptr %16, align 8, !tbaa !20
  br label %132

132:                                              ; preds = %234, %131
  %133 = load i64, ptr %16, align 8, !tbaa !20
  %134 = load ptr, ptr %7, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %134, i32 0, i32 10
  %136 = load i64, ptr %135, align 8, !tbaa !30
  %137 = icmp ult i64 %133, %136
  br i1 %137, label %139, label %138

138:                                              ; preds = %132
  store i32 14, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  br label %237

139:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  store i64 0, ptr %17, align 8, !tbaa !20
  br label %140

140:                                              ; preds = %230, %139
  %141 = load i64, ptr %17, align 8, !tbaa !20
  %142 = load ptr, ptr %7, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %142, i32 0, i32 11
  %144 = load i64, ptr %143, align 8, !tbaa !31
  %145 = icmp ult i64 %141, %144
  br i1 %145, label %147, label %146

146:                                              ; preds = %140
  store i32 17, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  br label %233

147:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  %148 = load i64, ptr %16, align 8, !tbaa !20
  %149 = load ptr, ptr %7, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %149, i32 0, i32 16
  %151 = load i64, ptr %150, align 8, !tbaa !32
  %152 = sub i64 %148, %151
  store i64 %152, ptr %18, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  store i64 0, ptr %19, align 8, !tbaa !20
  br label %153

153:                                              ; preds = %224, %147
  %154 = load i64, ptr %19, align 8, !tbaa !20
  %155 = load ptr, ptr %7, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %155, i32 0, i32 6
  %157 = load i64, ptr %156, align 8, !tbaa !22
  %158 = icmp ult i64 %154, %157
  br i1 %158, label %160, label %159

159:                                              ; preds = %153
  store i32 20, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  br label %229

160:                                              ; preds = %153
  %161 = load i64, ptr %18, align 8, !tbaa !20
  %162 = load ptr, ptr %7, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %162, i32 0, i32 1
  %164 = load i64, ptr %163, align 8, !tbaa !19
  %165 = icmp ult i64 %161, %164
  br i1 %165, label %166, label %208

166:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  %167 = load i64, ptr %17, align 8, !tbaa !20
  %168 = load ptr, ptr %7, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %168, i32 0, i32 17
  %170 = load i64, ptr %169, align 8, !tbaa !33
  %171 = sub i64 %167, %170
  store i64 %171, ptr %20, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  store i64 0, ptr %21, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  store i64 0, ptr %22, align 8, !tbaa !20
  br label %172

172:                                              ; preds = %202, %166
  %173 = load i64, ptr %22, align 8, !tbaa !20
  %174 = load ptr, ptr %7, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %174, i32 0, i32 7
  %176 = load i64, ptr %175, align 8, !tbaa !23
  %177 = icmp ult i64 %173, %176
  br i1 %177, label %179, label %178

178:                                              ; preds = %172
  store i32 23, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  br label %207

179:                                              ; preds = %172
  %180 = load i64, ptr %20, align 8, !tbaa !20
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %181, i32 0, i32 2
  %183 = load i64, ptr %182, align 8, !tbaa !18
  %184 = icmp ult i64 %180, %183
  br i1 %184, label %185, label %198

185:                                              ; preds = %179
  %186 = load ptr, ptr %5, align 8, !tbaa !5
  %187 = load i64, ptr %18, align 8, !tbaa !20
  %188 = load ptr, ptr %7, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %188, i32 0, i32 2
  %190 = load i64, ptr %189, align 8, !tbaa !18
  %191 = mul i64 %187, %190
  %192 = load i64, ptr %20, align 8, !tbaa !20
  %193 = add i64 %191, %192
  %194 = getelementptr inbounds float, ptr %186, i64 %193
  %195 = load float, ptr %194, align 4, !tbaa !24
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  %197 = getelementptr inbounds float, ptr %196, i32 1
  store ptr %197, ptr %6, align 8, !tbaa !5
  store float %195, ptr %196, align 4, !tbaa !24
  br label %201

198:                                              ; preds = %179
  %199 = load ptr, ptr %6, align 8, !tbaa !5
  %200 = getelementptr inbounds float, ptr %199, i32 1
  store ptr %200, ptr %6, align 8, !tbaa !5
  store float 0.000000e+00, ptr %199, align 4, !tbaa !24
  br label %201

201:                                              ; preds = %198, %185
  br label %202

202:                                              ; preds = %201
  %203 = load i64, ptr %22, align 8, !tbaa !20
  %204 = add i64 %203, 1
  store i64 %204, ptr %22, align 8, !tbaa !20
  %205 = load i64, ptr %20, align 8, !tbaa !20
  %206 = add i64 %205, 1
  store i64 %206, ptr %20, align 8, !tbaa !20
  br label %172, !llvm.loop !34

207:                                              ; preds = %178
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  br label %223

208:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  store i64 0, ptr %23, align 8, !tbaa !20
  br label %209

209:                                              ; preds = %219, %208
  %210 = load i64, ptr %23, align 8, !tbaa !20
  %211 = load ptr, ptr %7, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %211, i32 0, i32 7
  %213 = load i64, ptr %212, align 8, !tbaa !23
  %214 = icmp ult i64 %210, %213
  br i1 %214, label %216, label %215

215:                                              ; preds = %209
  store i32 26, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  br label %222

216:                                              ; preds = %209
  %217 = load ptr, ptr %6, align 8, !tbaa !5
  %218 = getelementptr inbounds float, ptr %217, i32 1
  store ptr %218, ptr %6, align 8, !tbaa !5
  store float 0.000000e+00, ptr %217, align 4, !tbaa !24
  br label %219

219:                                              ; preds = %216
  %220 = load i64, ptr %23, align 8, !tbaa !20
  %221 = add i64 %220, 1
  store i64 %221, ptr %23, align 8, !tbaa !20
  br label %209, !llvm.loop !35

222:                                              ; preds = %215
  br label %223

223:                                              ; preds = %222, %207
  br label %224

224:                                              ; preds = %223
  %225 = load i64, ptr %19, align 8, !tbaa !20
  %226 = add i64 %225, 1
  store i64 %226, ptr %19, align 8, !tbaa !20
  %227 = load i64, ptr %18, align 8, !tbaa !20
  %228 = add i64 %227, 1
  store i64 %228, ptr %18, align 8, !tbaa !20
  br label %153, !llvm.loop !36

229:                                              ; preds = %159
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  br label %230

230:                                              ; preds = %229
  %231 = load i64, ptr %17, align 8, !tbaa !20
  %232 = add i64 %231, 1
  store i64 %232, ptr %17, align 8, !tbaa !20
  br label %140, !llvm.loop !37

233:                                              ; preds = %146
  br label %234

234:                                              ; preds = %233
  %235 = load i64, ptr %16, align 8, !tbaa !20
  %236 = add i64 %235, 1
  store i64 %236, ptr %16, align 8, !tbaa !20
  br label %132, !llvm.loop !38

237:                                              ; preds = %138
  %238 = load i64, ptr %8, align 8, !tbaa !20
  %239 = load ptr, ptr %5, align 8, !tbaa !5
  %240 = getelementptr inbounds float, ptr %239, i64 %238
  store ptr %240, ptr %5, align 8, !tbaa !5
  br label %241

241:                                              ; preds = %237
  %242 = load i64, ptr %15, align 8, !tbaa !20
  %243 = add i64 %242, 1
  store i64 %243, ptr %15, align 8, !tbaa !20
  br label %124, !llvm.loop !39

244:                                              ; preds = %130
  br label %381

245:                                              ; preds = %120, %117
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  store i64 0, ptr %24, align 8, !tbaa !20
  br label %246

246:                                              ; preds = %377, %245
  %247 = load i64, ptr %24, align 8, !tbaa !20
  %248 = load ptr, ptr %7, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %248, i32 0, i32 0
  %250 = load i64, ptr %249, align 8, !tbaa !21
  %251 = icmp ult i64 %247, %250
  br i1 %251, label %253, label %252

252:                                              ; preds = %246
  store i32 29, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  br label %380

253:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  store i64 0, ptr %25, align 8, !tbaa !20
  br label %254

254:                                              ; preds = %370, %253
  %255 = load i64, ptr %25, align 8, !tbaa !20
  %256 = load ptr, ptr %7, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %256, i32 0, i32 10
  %258 = load i64, ptr %257, align 8, !tbaa !30
  %259 = icmp ult i64 %255, %258
  br i1 %259, label %261, label %260

260:                                              ; preds = %254
  store i32 32, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  br label %373

261:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  store i64 0, ptr %26, align 8, !tbaa !20
  br label %262

262:                                              ; preds = %366, %261
  %263 = load i64, ptr %26, align 8, !tbaa !20
  %264 = load ptr, ptr %7, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %264, i32 0, i32 11
  %266 = load i64, ptr %265, align 8, !tbaa !31
  %267 = icmp ult i64 %263, %266
  br i1 %267, label %269, label %268

268:                                              ; preds = %262
  store i32 35, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  br label %369

269:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  %270 = load i64, ptr %25, align 8, !tbaa !20
  %271 = load ptr, ptr %7, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %271, i32 0, i32 12
  %273 = load i64, ptr %272, align 8, !tbaa !40
  %274 = mul i64 %270, %273
  %275 = load ptr, ptr %7, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %275, i32 0, i32 16
  %277 = load i64, ptr %276, align 8, !tbaa !32
  %278 = sub i64 %274, %277
  store i64 %278, ptr %27, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  store i64 0, ptr %28, align 8, !tbaa !20
  br label %279

279:                                              ; preds = %362, %269
  %280 = load i64, ptr %28, align 8, !tbaa !20
  %281 = load ptr, ptr %7, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %281, i32 0, i32 6
  %283 = load i64, ptr %282, align 8, !tbaa !22
  %284 = icmp ult i64 %280, %283
  br i1 %284, label %286, label %285

285:                                              ; preds = %279
  store i32 38, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  br label %365

286:                                              ; preds = %279
  %287 = load i64, ptr %27, align 8, !tbaa !20
  %288 = load ptr, ptr %7, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %288, i32 0, i32 1
  %290 = load i64, ptr %289, align 8, !tbaa !19
  %291 = icmp ult i64 %287, %290
  br i1 %291, label %292, label %341

292:                                              ; preds = %286
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  %293 = load i64, ptr %26, align 8, !tbaa !20
  %294 = load ptr, ptr %7, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %294, i32 0, i32 13
  %296 = load i64, ptr %295, align 8, !tbaa !41
  %297 = mul i64 %293, %296
  %298 = load ptr, ptr %7, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %298, i32 0, i32 17
  %300 = load i64, ptr %299, align 8, !tbaa !33
  %301 = sub i64 %297, %300
  store i64 %301, ptr %29, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  store i64 0, ptr %30, align 8, !tbaa !20
  br label %302

302:                                              ; preds = %337, %292
  %303 = load i64, ptr %30, align 8, !tbaa !20
  %304 = load ptr, ptr %7, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %304, i32 0, i32 7
  %306 = load i64, ptr %305, align 8, !tbaa !23
  %307 = icmp ult i64 %303, %306
  br i1 %307, label %309, label %308

308:                                              ; preds = %302
  store i32 41, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  br label %340

309:                                              ; preds = %302
  %310 = load i64, ptr %29, align 8, !tbaa !20
  %311 = load ptr, ptr %7, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %311, i32 0, i32 2
  %313 = load i64, ptr %312, align 8, !tbaa !18
  %314 = icmp ult i64 %310, %313
  br i1 %314, label %315, label %328

315:                                              ; preds = %309
  %316 = load ptr, ptr %5, align 8, !tbaa !5
  %317 = load i64, ptr %27, align 8, !tbaa !20
  %318 = load ptr, ptr %7, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %318, i32 0, i32 2
  %320 = load i64, ptr %319, align 8, !tbaa !18
  %321 = mul i64 %317, %320
  %322 = load i64, ptr %29, align 8, !tbaa !20
  %323 = add i64 %321, %322
  %324 = getelementptr inbounds float, ptr %316, i64 %323
  %325 = load float, ptr %324, align 4, !tbaa !24
  %326 = load ptr, ptr %6, align 8, !tbaa !5
  %327 = getelementptr inbounds float, ptr %326, i32 1
  store ptr %327, ptr %6, align 8, !tbaa !5
  store float %325, ptr %326, align 4, !tbaa !24
  br label %331

328:                                              ; preds = %309
  %329 = load ptr, ptr %6, align 8, !tbaa !5
  %330 = getelementptr inbounds float, ptr %329, i32 1
  store ptr %330, ptr %6, align 8, !tbaa !5
  store float 0.000000e+00, ptr %329, align 4, !tbaa !24
  br label %331

331:                                              ; preds = %328, %315
  %332 = load ptr, ptr %7, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %332, i32 0, i32 15
  %334 = load i64, ptr %333, align 8, !tbaa !42
  %335 = load i64, ptr %29, align 8, !tbaa !20
  %336 = add i64 %335, %334
  store i64 %336, ptr %29, align 8, !tbaa !20
  br label %337

337:                                              ; preds = %331
  %338 = load i64, ptr %30, align 8, !tbaa !20
  %339 = add i64 %338, 1
  store i64 %339, ptr %30, align 8, !tbaa !20
  br label %302, !llvm.loop !43

340:                                              ; preds = %308
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  br label %356

341:                                              ; preds = %286
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  store i64 0, ptr %31, align 8, !tbaa !20
  br label %342

342:                                              ; preds = %352, %341
  %343 = load i64, ptr %31, align 8, !tbaa !20
  %344 = load ptr, ptr %7, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %344, i32 0, i32 7
  %346 = load i64, ptr %345, align 8, !tbaa !23
  %347 = icmp ult i64 %343, %346
  br i1 %347, label %349, label %348

348:                                              ; preds = %342
  store i32 44, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  br label %355

349:                                              ; preds = %342
  %350 = load ptr, ptr %6, align 8, !tbaa !5
  %351 = getelementptr inbounds float, ptr %350, i32 1
  store ptr %351, ptr %6, align 8, !tbaa !5
  store float 0.000000e+00, ptr %350, align 4, !tbaa !24
  br label %352

352:                                              ; preds = %349
  %353 = load i64, ptr %31, align 8, !tbaa !20
  %354 = add i64 %353, 1
  store i64 %354, ptr %31, align 8, !tbaa !20
  br label %342, !llvm.loop !44

355:                                              ; preds = %348
  br label %356

356:                                              ; preds = %355, %340
  %357 = load ptr, ptr %7, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %357, i32 0, i32 14
  %359 = load i64, ptr %358, align 8, !tbaa !45
  %360 = load i64, ptr %27, align 8, !tbaa !20
  %361 = add i64 %360, %359
  store i64 %361, ptr %27, align 8, !tbaa !20
  br label %362

362:                                              ; preds = %356
  %363 = load i64, ptr %28, align 8, !tbaa !20
  %364 = add i64 %363, 1
  store i64 %364, ptr %28, align 8, !tbaa !20
  br label %279, !llvm.loop !46

365:                                              ; preds = %285
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  br label %366

366:                                              ; preds = %365
  %367 = load i64, ptr %26, align 8, !tbaa !20
  %368 = add i64 %367, 1
  store i64 %368, ptr %26, align 8, !tbaa !20
  br label %262, !llvm.loop !47

369:                                              ; preds = %268
  br label %370

370:                                              ; preds = %369
  %371 = load i64, ptr %25, align 8, !tbaa !20
  %372 = add i64 %371, 1
  store i64 %372, ptr %25, align 8, !tbaa !20
  br label %254, !llvm.loop !48

373:                                              ; preds = %260
  %374 = load i64, ptr %8, align 8, !tbaa !20
  %375 = load ptr, ptr %5, align 8, !tbaa !5
  %376 = getelementptr inbounds float, ptr %375, i64 %374
  store ptr %376, ptr %5, align 8, !tbaa !5
  br label %377

377:                                              ; preds = %373
  %378 = load i64, ptr %24, align 8, !tbaa !20
  %379 = add i64 %378, 1
  store i64 %379, ptr %24, align 8, !tbaa !20
  br label %246, !llvm.loop !49

380:                                              ; preds = %252
  br label %381

381:                                              ; preds = %380, %244
  br label %382

382:                                              ; preds = %381, %116
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noreturn nounwind "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 = { 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 #3 = { 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" }
attributes #4 = { nounwind }
attributes #5 = { noreturn 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++ TBAA"}
!9 = !{!10, !16, i64 160}
!10 = !{!"_ZTSN4Simd9ConvParamE", !11, i64 0, !16, i64 160, !12, i64 168, !17, i64 176}
!11 = !{!"_ZTS25SimdConvolutionParameters", !12, i64 0, !12, i64 8, !12, i64 16, !13, i64 24, !14, i64 28, !12, i64 32, !12, i64 40, !12, i64 48, !13, i64 56, !14, i64 60, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !15, i64 152}
!12 = !{!"long", !7, i64 0}
!13 = !{!"_ZTS18SimdTensorDataType", !7, i64 0}
!14 = !{!"_ZTS20SimdTensorFormatType", !7, i64 0}
!15 = !{!"_ZTS29SimdConvolutionActivationType", !7, i64 0}
!16 = !{!"_ZTS8SimdBool", !7, i64 0}
!17 = !{!"_ZTS26SimdSynetCompatibilityType", !7, i64 0}
!18 = !{!11, !12, i64 16}
!19 = !{!11, !12, i64 8}
!20 = !{!12, !12, i64 0}
!21 = !{!11, !12, i64 0}
!22 = !{!11, !12, i64 40}
!23 = !{!11, !12, i64 48}
!24 = !{!25, !25, i64 0}
!25 = !{!"float", !7, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = distinct !{!28, !27}
!29 = distinct !{!29, !27}
!30 = !{!11, !12, i64 64}
!31 = !{!11, !12, i64 72}
!32 = !{!11, !12, i64 112}
!33 = !{!11, !12, i64 120}
!34 = distinct !{!34, !27}
!35 = distinct !{!35, !27}
!36 = distinct !{!36, !27}
!37 = distinct !{!37, !27}
!38 = distinct !{!38, !27}
!39 = distinct !{!39, !27}
!40 = !{!11, !12, i64 80}
!41 = !{!11, !12, i64 88}
!42 = !{!11, !12, i64 104}
!43 = distinct !{!43, !27}
!44 = distinct !{!44, !27}
!45 = !{!11, !12, i64 96}
!46 = distinct !{!46, !27}
!47 = distinct !{!47, !27}
!48 = distinct !{!48, !27}
!49 = distinct !{!49, !27}


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

@.str.1 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [9 x i8], align 1
@__PRETTY_FUNCTION__._ZN4Simd4Base25SynetConvolution32fGemmNN8ImgToColEPKfPf = external hidden unnamed_addr constant [85 x i8], align 1

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

; 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 #1 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 #1 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 #1 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 #1 align 2

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN4Simd4Base25SynetConvolution32fGemmNN8ImgToColEPKfPf(ptr noundef nonnull align 8 dereferenceable(560) %0, ptr nocapture noundef readonly %1, ptr nocapture noundef writeonly %2) unnamed_addr #2 align 2 {
  %4 = getelementptr inbounds i8, ptr %0, i64 8
  %5 = getelementptr inbounds i8, ptr %0, i64 168
  %6 = load i32, ptr %5, align 8, !tbaa !5
  %.not = icmp eq i32 %6, 0
  br i1 %.not, label %8, label %7

7:                                                ; preds = %3
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 462, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN4Simd4Base25SynetConvolution32fGemmNN8ImgToColEPKfPf) #4
  unreachable

8:                                                ; preds = %3
  %9 = getelementptr inbounds i8, ptr %0, i64 24
  %10 = load i64, ptr %9, align 8, !tbaa !16
  %11 = getelementptr inbounds i8, ptr %0, i64 16
  %12 = load i64, ptr %11, align 8, !tbaa !17
  %13 = mul i64 %12, %10
  %14 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam10IsDilationEm(ptr noundef nonnull align 8 dereferenceable(180) %4, i64 noundef 1)
  br i1 %14, label %15, label %94

15:                                               ; preds = %8
  %16 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsStrideEm(ptr noundef nonnull align 8 dereferenceable(180) %4, i64 noundef 2)
  br i1 %16, label %17, label %94

17:                                               ; preds = %15
  %18 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam5IsPadEm(ptr noundef nonnull align 8 dereferenceable(180) %4, i64 noundef 0)
  br i1 %18, label %19, label %94

19:                                               ; preds = %17
  %20 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsKernelEm(ptr noundef nonnull align 8 dereferenceable(180) %4, i64 noundef 1)
  br i1 %20, label %.preheader131, label %94

.preheader131:                                    ; preds = %19
  %21 = load i64, ptr %4, align 8, !tbaa !18
  %.not304 = icmp eq i64 %21, 0
  br i1 %.not304, label %.loopexit, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %.preheader131
  %22 = getelementptr inbounds i8, ptr %0, i64 48
  %23 = load i64, ptr %22, align 8, !tbaa !19
  %.not305 = icmp eq i64 %23, 0
  %24 = load i64, ptr %9, align 8
  %factor.op.mul = shl i64 %24, 1
  %25 = getelementptr inbounds i8, ptr %0, i64 56
  %26 = load i64, ptr %25, align 8
  %.not306 = icmp eq i64 %26, 0
  %or.cond = select i1 %.not305, i1 true, i1 %.not306
  br i1 %or.cond, label %.loopexit, label %.preheader.us.us.preheader

.preheader.us.us.preheader:                       ; preds = %.preheader.lr.ph
  %27 = shl i64 %26, 2
  %28 = add i64 %23, 2305843009213693951
  %29 = mul i64 %24, %28
  %30 = add i64 %29, %26
  %31 = shl i64 %30, 3
  %32 = mul i64 %12, %10
  %33 = shl i64 %32, 2
  %34 = getelementptr i8, ptr %1, i64 %31
  %35 = getelementptr i8, ptr %34, i64 -4
  %min.iters.check = icmp ult i64 %26, 8
  %.mask = and i64 %24, 1152921504606846976
  %stride.check = icmp ne i64 %.mask, 0
  %n.vec = and i64 %26, -8
  %ind.end = shl i64 %n.vec, 1
  %36 = shl i64 %n.vec, 2
  %cmp.n = icmp eq i64 %26, %n.vec
  %xtraiter369 = and i64 %26, 3
  %lcmp.mod370.not = icmp eq i64 %xtraiter369, 0
  br label %.preheader.us.us

.preheader.us.us:                                 ; preds = %.preheader.us.us.preheader, %._crit_edge281.split.us.us.us
  %.0114285.us.us = phi ptr [ %92, %._crit_edge281.split.us.us.us ], [ %1, %.preheader.us.us.preheader ]
  %.0123284.us.us = phi ptr [ %.lcssa, %._crit_edge281.split.us.us.us ], [ %2, %.preheader.us.us.preheader ]
  %.0127283.us.us = phi i64 [ %93, %._crit_edge281.split.us.us.us ], [ 0, %.preheader.us.us.preheader ]
  %37 = mul i64 %33, %.0127283.us.us
  %scevgep353 = getelementptr i8, ptr %35, i64 %37
  br label %.lr.ph.us.us.us

.lr.ph.us.us.us:                                  ; preds = %._crit_edge.us.us.us, %.preheader.us.us
  %.1124279.us.us.us = phi ptr [ %.0123284.us.us, %.preheader.us.us ], [ %.lcssa, %._crit_edge.us.us.us ]
  %.0126278.us.us.us = phi i64 [ 0, %.preheader.us.us ], [ %91, %._crit_edge.us.us.us ]
  %.reass.us.us.us = mul i64 %.0126278.us.us.us, %factor.op.mul
  %38 = getelementptr inbounds float, ptr %.0114285.us.us, i64 %.reass.us.us.us
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph.us.us.us
  %scevgep352 = getelementptr i8, ptr %.1124279.us.us.us, i64 %27
  %bound0 = icmp ult ptr %.1124279.us.us.us, %scevgep353
  %bound1 = icmp ult ptr %.0114285.us.us, %scevgep352
  %found.conflict = and i1 %bound0, %bound1
  %39 = or i1 %found.conflict, %stride.check
  br i1 %39, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %ind.end355 = getelementptr i8, ptr %.1124279.us.us.us, i64 %36
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = shl i64 %index, 1
  %40 = or disjoint i64 %offset.idx, 2
  %41 = or disjoint i64 %offset.idx, 4
  %42 = or disjoint i64 %offset.idx, 6
  %43 = or disjoint i64 %offset.idx, 8
  %44 = or disjoint i64 %offset.idx, 10
  %45 = or disjoint i64 %offset.idx, 12
  %46 = or disjoint i64 %offset.idx, 14
  %offset.idx357 = shl i64 %index, 2
  %next.gep = getelementptr i8, ptr %.1124279.us.us.us, i64 %offset.idx357
  %47 = getelementptr inbounds float, ptr %38, i64 %offset.idx
  %48 = getelementptr inbounds float, ptr %38, i64 %40
  %49 = getelementptr inbounds float, ptr %38, i64 %41
  %50 = getelementptr inbounds float, ptr %38, i64 %42
  %51 = getelementptr inbounds float, ptr %38, i64 %43
  %52 = getelementptr inbounds float, ptr %38, i64 %44
  %53 = getelementptr inbounds float, ptr %38, i64 %45
  %54 = getelementptr inbounds float, ptr %38, i64 %46
  %55 = load float, ptr %47, align 4, !tbaa !20, !alias.scope !22
  %56 = load float, ptr %48, align 4, !tbaa !20, !alias.scope !22
  %57 = load float, ptr %49, align 4, !tbaa !20, !alias.scope !22
  %58 = load float, ptr %50, align 4, !tbaa !20, !alias.scope !22
  %59 = insertelement <4 x float> poison, float %55, i64 0
  %60 = insertelement <4 x float> %59, float %56, i64 1
  %61 = insertelement <4 x float> %60, float %57, i64 2
  %62 = insertelement <4 x float> %61, float %58, i64 3
  %63 = load float, ptr %51, align 4, !tbaa !20, !alias.scope !22
  %64 = load float, ptr %52, align 4, !tbaa !20, !alias.scope !22
  %65 = load float, ptr %53, align 4, !tbaa !20, !alias.scope !22
  %66 = load float, ptr %54, align 4, !tbaa !20, !alias.scope !22
  %67 = insertelement <4 x float> poison, float %63, i64 0
  %68 = insertelement <4 x float> %67, float %64, i64 1
  %69 = insertelement <4 x float> %68, float %65, i64 2
  %70 = insertelement <4 x float> %69, float %66, i64 3
  %71 = getelementptr i8, ptr %next.gep, i64 16
  store <4 x float> %62, ptr %next.gep, align 4, !tbaa !20, !alias.scope !25, !noalias !22
  store <4 x float> %70, ptr %71, align 4, !tbaa !20, !alias.scope !25, !noalias !22
  %index.next = add nuw i64 %index, 8
  %72 = icmp eq i64 %index.next, %n.vec
  br i1 %72, label %middle.block, label %vector.body, !llvm.loop !27

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge.us.us.us, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph.us.us.us
  %.0121277.us.us.us.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph.us.us.us ], [ %ind.end, %middle.block ]
  %.0122276.us.us.us.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph.us.us.us ], [ %n.vec, %middle.block ]
  %.2125275.us.us.us.ph = phi ptr [ %.1124279.us.us.us, %vector.memcheck ], [ %.1124279.us.us.us, %.lr.ph.us.us.us ], [ %ind.end355, %middle.block ]
  br i1 %lcmp.mod370.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %.0121277.us.us.us.prol = phi i64 [ %77, %scalar.ph.prol ], [ %.0121277.us.us.us.ph, %scalar.ph.preheader ]
  %.0122276.us.us.us.prol = phi i64 [ %76, %scalar.ph.prol ], [ %.0122276.us.us.us.ph, %scalar.ph.preheader ]
  %.2125275.us.us.us.prol = phi ptr [ %75, %scalar.ph.prol ], [ %.2125275.us.us.us.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %73 = getelementptr inbounds float, ptr %38, i64 %.0121277.us.us.us.prol
  %74 = load float, ptr %73, align 4, !tbaa !20
  %75 = getelementptr inbounds i8, ptr %.2125275.us.us.us.prol, i64 4
  store float %74, ptr %.2125275.us.us.us.prol, align 4, !tbaa !20
  %76 = add nuw i64 %.0122276.us.us.us.prol, 1
  %77 = add i64 %.0121277.us.us.us.prol, 2
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter369
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !31

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.lcssa359.unr = phi ptr [ poison, %scalar.ph.preheader ], [ %75, %scalar.ph.prol ]
  %.0121277.us.us.us.unr = phi i64 [ %.0121277.us.us.us.ph, %scalar.ph.preheader ], [ %77, %scalar.ph.prol ]
  %.0122276.us.us.us.unr = phi i64 [ %.0122276.us.us.us.ph, %scalar.ph.preheader ], [ %76, %scalar.ph.prol ]
  %.2125275.us.us.us.unr = phi ptr [ %.2125275.us.us.us.ph, %scalar.ph.preheader ], [ %75, %scalar.ph.prol ]
  %78 = sub i64 %.0122276.us.us.us.ph, %26
  %79 = icmp ugt i64 %78, -4
  br i1 %79, label %._crit_edge.us.us.us, label %scalar.ph.preheader.new

scalar.ph.preheader.new:                          ; preds = %scalar.ph.prol.loopexit
  %invariant.gep = getelementptr i8, ptr %38, i64 8
  %invariant.gep377 = getelementptr i8, ptr %38, i64 16
  %invariant.gep379 = getelementptr i8, ptr %38, i64 24
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph, %scalar.ph.preheader.new
  %.0121277.us.us.us = phi i64 [ %.0121277.us.us.us.unr, %scalar.ph.preheader.new ], [ %90, %scalar.ph ]
  %.0122276.us.us.us = phi i64 [ %.0122276.us.us.us.unr, %scalar.ph.preheader.new ], [ %89, %scalar.ph ]
  %.2125275.us.us.us = phi ptr [ %.2125275.us.us.us.unr, %scalar.ph.preheader.new ], [ %88, %scalar.ph ]
  %80 = getelementptr inbounds float, ptr %38, i64 %.0121277.us.us.us
  %81 = load float, ptr %80, align 4, !tbaa !20
  %82 = getelementptr inbounds i8, ptr %.2125275.us.us.us, i64 4
  store float %81, ptr %.2125275.us.us.us, align 4, !tbaa !20
  %gep = getelementptr float, ptr %invariant.gep, i64 %.0121277.us.us.us
  %83 = load float, ptr %gep, align 4, !tbaa !20
  %84 = getelementptr inbounds i8, ptr %.2125275.us.us.us, i64 8
  store float %83, ptr %82, align 4, !tbaa !20
  %gep378 = getelementptr float, ptr %invariant.gep377, i64 %.0121277.us.us.us
  %85 = load float, ptr %gep378, align 4, !tbaa !20
  %86 = getelementptr inbounds i8, ptr %.2125275.us.us.us, i64 12
  store float %85, ptr %84, align 4, !tbaa !20
  %gep380 = getelementptr float, ptr %invariant.gep379, i64 %.0121277.us.us.us
  %87 = load float, ptr %gep380, align 4, !tbaa !20
  %88 = getelementptr inbounds i8, ptr %.2125275.us.us.us, i64 16
  store float %87, ptr %86, align 4, !tbaa !20
  %89 = add nuw i64 %.0122276.us.us.us, 4
  %90 = add i64 %.0121277.us.us.us, 8
  %exitcond342.not.3 = icmp eq i64 %89, %26
  br i1 %exitcond342.not.3, label %._crit_edge.us.us.us, label %scalar.ph, !llvm.loop !33

._crit_edge.us.us.us:                             ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %.lcssa = phi ptr [ %ind.end355, %middle.block ], [ %.lcssa359.unr, %scalar.ph.prol.loopexit ], [ %88, %scalar.ph ]
  %91 = add nuw i64 %.0126278.us.us.us, 1
  %exitcond343.not = icmp eq i64 %91, %23
  br i1 %exitcond343.not, label %._crit_edge281.split.us.us.us, label %.lr.ph.us.us.us, !llvm.loop !34

._crit_edge281.split.us.us.us:                    ; preds = %._crit_edge.us.us.us
  %92 = getelementptr inbounds float, ptr %.0114285.us.us, i64 %13
  %93 = add nuw i64 %.0127283.us.us, 1
  %exitcond344.not = icmp eq i64 %93, %21
  br i1 %exitcond344.not, label %.loopexit, label %.preheader.us.us, !llvm.loop !35

94:                                               ; preds = %19, %17, %15, %8
  %95 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam10IsDilationEm(ptr noundef nonnull align 8 dereferenceable(180) %4, i64 noundef 1)
  br i1 %95, label %96, label %144

96:                                               ; preds = %94
  %97 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsStrideEm(ptr noundef nonnull align 8 dereferenceable(180) %4, i64 noundef 1)
  br i1 %97, label %.preheader137, label %144

.preheader137:                                    ; preds = %96
  %98 = load i64, ptr %4, align 8, !tbaa !18
  %.not297 = icmp eq i64 %98, 0
  br i1 %.not297, label %.loopexit, label %.preheader136.lr.ph

.preheader136.lr.ph:                              ; preds = %.preheader137
  %99 = getelementptr inbounds i8, ptr %0, i64 72
  %100 = load i64, ptr %99, align 8, !tbaa !36
  %.not298 = icmp eq i64 %100, 0
  %101 = getelementptr inbounds i8, ptr %0, i64 80
  %102 = load i64, ptr %101, align 8
  %103 = getelementptr inbounds i8, ptr %0, i64 120
  %104 = getelementptr inbounds i8, ptr %0, i64 48
  %105 = getelementptr inbounds i8, ptr %0, i64 56
  %106 = getelementptr inbounds i8, ptr %0, i64 128
  %.not299 = icmp eq i64 %102, 0
  %or.cond347 = select i1 %.not298, i1 true, i1 %.not299
  br i1 %or.cond347, label %.loopexit, label %.preheader136.us.us

.preheader136.us.us:                              ; preds = %.preheader136.lr.ph, %._crit_edge.split.us.us.us267
  %.1256.us.us = phi ptr [ %109, %._crit_edge.split.us.us.us267 ], [ %1, %.preheader136.lr.ph ]
  %.0120255.us.us = phi i64 [ %110, %._crit_edge.split.us.us.us267 ], [ 0, %.preheader136.lr.ph ]
  %.3254.us.us = phi ptr [ %.us-phi253.us.us, %._crit_edge.split.us.us.us267 ], [ %2, %.preheader136.lr.ph ]
  %107 = load i64, ptr %103, align 8
  %108 = load i64, ptr %104, align 8
  %.not300 = icmp eq i64 %108, 0
  br i1 %.not300, label %._crit_edge.split.us.us.us267, label %.preheader135.us.us.us.us

._crit_edge.split.us.us.us267:                    ; preds = %._crit_edge236.split.us.us.us.us.us, %.preheader136.us.us
  %.us-phi253.us.us = phi ptr [ %.3254.us.us, %.preheader136.us.us ], [ %.us-phi.us.us.us.us.us270, %._crit_edge236.split.us.us.us.us.us ]
  %109 = getelementptr inbounds float, ptr %.1256.us.us, i64 %13
  %110 = add nuw i64 %.0120255.us.us, 1
  %exitcond341.not = icmp eq i64 %110, %98
  br i1 %exitcond341.not, label %.loopexit, label %.preheader136.us.us, !llvm.loop !37

.preheader135.us.us.us.us:                        ; preds = %.preheader136.us.us, %._crit_edge236.split.us.us.us.us.us
  %.0119247.us.us.us.us = phi i64 [ %143, %._crit_edge236.split.us.us.us.us.us ], [ 0, %.preheader136.us.us ]
  %.4246.us.us.us.us = phi ptr [ %.us-phi.us.us.us.us.us270, %._crit_edge236.split.us.us.us.us.us ], [ %.3254.us.us, %.preheader136.us.us ]
  %111 = sub i64 %.0119247.us.us.us.us, %107
  %112 = load i64, ptr %11, align 8
  br label %.lr.ph216.us.us.us.us.us

.lr.ph216.us.us.us.us.us:                         ; preds = %._crit_edge.us.us.us.us.us269, %.preheader135.us.us.us.us
  %.0118235.us.us.us.us.us = phi i64 [ 0, %.preheader135.us.us.us.us ], [ %119, %._crit_edge.us.us.us.us.us269 ]
  %.5234.us.us.us.us.us = phi ptr [ %.4246.us.us.us.us, %.preheader135.us.us.us.us ], [ %.us-phi.us.us.us.us.us270, %._crit_edge.us.us.us.us.us269 ]
  %113 = load i64, ptr %105, align 8
  %.fr301 = freeze i64 %113
  %.not303 = icmp eq i64 %.fr301, 0
  %114 = load i64, ptr %106, align 8
  %115 = sub i64 %.0118235.us.us.us.us.us, %114
  %116 = load i64, ptr %9, align 8
  br i1 %.not303, label %._crit_edge.us.us.us.us.us269, label %.lr.ph216.split.us.us.us.us.us.us.preheader

.lr.ph216.split.us.us.us.us.us.us.preheader:      ; preds = %.lr.ph216.us.us.us.us.us
  %117 = shl nuw i64 %.fr301, 2
  %xtraiter364 = and i64 %.fr301, 1
  %118 = icmp eq i64 %.fr301, 1
  %unroll_iter367 = and i64 %.fr301, -2
  %lcmp.mod365.not = icmp eq i64 %xtraiter364, 0
  br label %.lr.ph216.split.us.us.us.us.us.us

._crit_edge.us.us.us.us.us269:                    ; preds = %.loopexit134.us.us.us.us.us.us, %.lr.ph216.us.us.us.us.us
  %.us-phi.us.us.us.us.us270 = phi ptr [ %.5234.us.us.us.us.us, %.lr.ph216.us.us.us.us.us ], [ %.10.us.us.us.us.us.us, %.loopexit134.us.us.us.us.us.us ]
  %119 = add nuw i64 %.0118235.us.us.us.us.us, 1
  %exitcond339.not = icmp eq i64 %119, %102
  br i1 %exitcond339.not, label %._crit_edge236.split.us.us.us.us.us, label %.lr.ph216.us.us.us.us.us, !llvm.loop !38

.lr.ph216.split.us.us.us.us.us.us:                ; preds = %.lr.ph216.split.us.us.us.us.us.us.preheader, %.loopexit134.us.us.us.us.us.us
  %.0116215.us.us.us.us.us.us = phi i64 [ %127, %.loopexit134.us.us.us.us.us.us ], [ 0, %.lr.ph216.split.us.us.us.us.us.us.preheader ]
  %.0117213.us.us.us.us.us.us = phi i64 [ %128, %.loopexit134.us.us.us.us.us.us ], [ %111, %.lr.ph216.split.us.us.us.us.us.us.preheader ]
  %.6212.us.us.us.us.us.us = phi ptr [ %.10.us.us.us.us.us.us, %.loopexit134.us.us.us.us.us.us ], [ %.5234.us.us.us.us.us, %.lr.ph216.split.us.us.us.us.us.us.preheader ]
  %120 = icmp ult i64 %.0117213.us.us.us.us.us.us, %112
  br i1 %120, label %.lr.ph210.us.us.us.us.us.us, label %.lr.ph.us.us.us.us.us.us271.preheader

.lr.ph210.us.us.us.us.us.us:                      ; preds = %.lr.ph216.split.us.us.us.us.us.us
  %121 = mul i64 %116, %.0117213.us.us.us.us.us.us
  br i1 %118, label %.loopexit134.us.us.us.us.us.us.loopexit.unr-lcssa, label %.lr.ph210.us.us.us.us.us.us.new

.loopexit134.us.us.us.us.us.us.loopexit.unr-lcssa: ; preds = %141, %.lr.ph210.us.us.us.us.us.us
  %.8.us.us.us.us.us.us.lcssa.ph = phi ptr [ poison, %.lr.ph210.us.us.us.us.us.us ], [ %.8.us.us.us.us.us.us.1, %141 ]
  %.0115208.us.us.us.us.us.us.unr = phi i64 [ %115, %.lr.ph210.us.us.us.us.us.us ], [ %142, %141 ]
  %.7207.us.us.us.us.us.us.unr = phi ptr [ %.6212.us.us.us.us.us.us, %.lr.ph210.us.us.us.us.us.us ], [ %.8.us.us.us.us.us.us.1, %141 ]
  br i1 %lcmp.mod365.not, label %.loopexit134.us.us.us.us.us.us, label %.epil.preheader363

.epil.preheader363:                               ; preds = %.loopexit134.us.us.us.us.us.us.loopexit.unr-lcssa
  %122 = icmp ult i64 %.0115208.us.us.us.us.us.us.unr, %116
  br i1 %122, label %123, label %.loopexit134.us.us.us.us.us.us.loopexit.epilog-lcssa

123:                                              ; preds = %.epil.preheader363
  %124 = add i64 %121, %.0115208.us.us.us.us.us.us.unr
  %125 = getelementptr inbounds float, ptr %.1256.us.us, i64 %124
  %126 = load float, ptr %125, align 4, !tbaa !20
  br label %.loopexit134.us.us.us.us.us.us.loopexit.epilog-lcssa

.loopexit134.us.us.us.us.us.us.loopexit.epilog-lcssa: ; preds = %123, %.epil.preheader363
  %storemerge130.us.us.us.us.us.us.epil = phi float [ %126, %123 ], [ 0.000000e+00, %.epil.preheader363 ]
  %.8.us.us.us.us.us.us.epil = getelementptr inbounds i8, ptr %.7207.us.us.us.us.us.us.unr, i64 4
  store float %storemerge130.us.us.us.us.us.us.epil, ptr %.7207.us.us.us.us.us.us.unr, align 4, !tbaa !20
  br label %.loopexit134.us.us.us.us.us.us

.loopexit134.us.us.us.us.us.us:                   ; preds = %.loopexit134.us.us.us.us.us.us.loopexit.epilog-lcssa, %.loopexit134.us.us.us.us.us.us.loopexit.unr-lcssa, %.lr.ph.us.us.us.us.us.us271.preheader
  %.10.us.us.us.us.us.us = phi ptr [ %scevgep334, %.lr.ph.us.us.us.us.us.us271.preheader ], [ %.8.us.us.us.us.us.us.lcssa.ph, %.loopexit134.us.us.us.us.us.us.loopexit.unr-lcssa ], [ %.8.us.us.us.us.us.us.epil, %.loopexit134.us.us.us.us.us.us.loopexit.epilog-lcssa ]
  %127 = add nuw i64 %.0116215.us.us.us.us.us.us, 1
  %128 = add i64 %.0117213.us.us.us.us.us.us, 1
  %exitcond336.not = icmp eq i64 %127, %108
  br i1 %exitcond336.not, label %._crit_edge.us.us.us.us.us269, label %.lr.ph216.split.us.us.us.us.us.us, !llvm.loop !39

.lr.ph210.us.us.us.us.us.us.new:                  ; preds = %.lr.ph210.us.us.us.us.us.us, %141
  %.0115208.us.us.us.us.us.us = phi i64 [ %142, %141 ], [ %115, %.lr.ph210.us.us.us.us.us.us ]
  %.7207.us.us.us.us.us.us = phi ptr [ %.8.us.us.us.us.us.us.1, %141 ], [ %.6212.us.us.us.us.us.us, %.lr.ph210.us.us.us.us.us.us ]
  %niter368 = phi i64 [ %niter368.next.1, %141 ], [ 0, %.lr.ph210.us.us.us.us.us.us ]
  %129 = icmp ult i64 %.0115208.us.us.us.us.us.us, %116
  br i1 %129, label %130, label %134

130:                                              ; preds = %.lr.ph210.us.us.us.us.us.us.new
  %131 = add i64 %121, %.0115208.us.us.us.us.us.us
  %132 = getelementptr inbounds float, ptr %.1256.us.us, i64 %131
  %133 = load float, ptr %132, align 4, !tbaa !20
  br label %134

134:                                              ; preds = %130, %.lr.ph210.us.us.us.us.us.us.new
  %storemerge130.us.us.us.us.us.us = phi float [ %133, %130 ], [ 0.000000e+00, %.lr.ph210.us.us.us.us.us.us.new ]
  %.8.us.us.us.us.us.us = getelementptr inbounds i8, ptr %.7207.us.us.us.us.us.us, i64 4
  store float %storemerge130.us.us.us.us.us.us, ptr %.7207.us.us.us.us.us.us, align 4, !tbaa !20
  %135 = add i64 %.0115208.us.us.us.us.us.us, 1
  %136 = icmp ult i64 %135, %116
  br i1 %136, label %137, label %141

137:                                              ; preds = %134
  %138 = add i64 %121, %135
  %139 = getelementptr inbounds float, ptr %.1256.us.us, i64 %138
  %140 = load float, ptr %139, align 4, !tbaa !20
  br label %141

141:                                              ; preds = %137, %134
  %storemerge130.us.us.us.us.us.us.1 = phi float [ %140, %137 ], [ 0.000000e+00, %134 ]
  %.8.us.us.us.us.us.us.1 = getelementptr inbounds i8, ptr %.7207.us.us.us.us.us.us, i64 8
  store float %storemerge130.us.us.us.us.us.us.1, ptr %.8.us.us.us.us.us.us, align 4, !tbaa !20
  %142 = add i64 %.0115208.us.us.us.us.us.us, 2
  %niter368.next.1 = add i64 %niter368, 2
  %niter368.ncmp.1 = icmp eq i64 %niter368.next.1, %unroll_iter367
  br i1 %niter368.ncmp.1, label %.loopexit134.us.us.us.us.us.us.loopexit.unr-lcssa, label %.lr.ph210.us.us.us.us.us.us.new, !llvm.loop !40

.lr.ph.us.us.us.us.us.us271.preheader:            ; preds = %.lr.ph216.split.us.us.us.us.us.us
  tail call void @llvm.memset.p0.i64(ptr align 4 %.6212.us.us.us.us.us.us, i8 0, i64 %117, i1 false), !tbaa !20
  %scevgep334 = getelementptr i8, ptr %.6212.us.us.us.us.us.us, i64 %117
  br label %.loopexit134.us.us.us.us.us.us

._crit_edge236.split.us.us.us.us.us:              ; preds = %._crit_edge.us.us.us.us.us269
  %143 = add nuw i64 %.0119247.us.us.us.us, 1
  %exitcond340.not = icmp eq i64 %143, %100
  br i1 %exitcond340.not, label %._crit_edge.split.us.us.us267, label %.preheader135.us.us.us.us, !llvm.loop !41

144:                                              ; preds = %96, %94
  %145 = load i64, ptr %4, align 8, !tbaa !18
  %.not290 = icmp eq i64 %145, 0
  br i1 %.not290, label %.loopexit, label %.preheader143.lr.ph

.preheader143.lr.ph:                              ; preds = %144
  %146 = getelementptr inbounds i8, ptr %0, i64 72
  %147 = load i64, ptr %146, align 8, !tbaa !36
  %.not291 = icmp eq i64 %147, 0
  %148 = getelementptr inbounds i8, ptr %0, i64 80
  %149 = load i64, ptr %148, align 8
  %150 = getelementptr inbounds i8, ptr %0, i64 88
  %151 = getelementptr inbounds i8, ptr %0, i64 120
  %152 = getelementptr inbounds i8, ptr %0, i64 48
  %153 = getelementptr inbounds i8, ptr %0, i64 56
  %154 = getelementptr inbounds i8, ptr %0, i64 96
  %155 = getelementptr inbounds i8, ptr %0, i64 128
  %156 = getelementptr inbounds i8, ptr %0, i64 112
  %157 = getelementptr inbounds i8, ptr %0, i64 104
  %.not292 = icmp eq i64 %149, 0
  %or.cond348 = select i1 %.not291, i1 true, i1 %.not292
  %158 = load i64, ptr %152, align 8
  %.not293 = icmp eq i64 %158, 0
  %or.cond349 = select i1 %or.cond348, i1 true, i1 %.not293
  br i1 %or.cond349, label %.loopexit, label %.preheader143.us.us

.preheader143.us.usthread-pre-split:              ; preds = %._crit_edge.split.us.us.us
  %159 = getelementptr inbounds float, ptr %.2193.us.us, i64 %13
  %.pr = load i64, ptr %152, align 8
  br label %.preheader143.us.us

.preheader143.us.us:                              ; preds = %.preheader143.lr.ph, %.preheader143.us.usthread-pre-split
  %160 = phi i64 [ %.pr, %.preheader143.us.usthread-pre-split ], [ %158, %.preheader143.lr.ph ]
  %.0111196.us.us = phi i64 [ %163, %.preheader143.us.usthread-pre-split ], [ 0, %.preheader143.lr.ph ]
  %.2193.us.us = phi ptr [ %159, %.preheader143.us.usthread-pre-split ], [ %1, %.preheader143.lr.ph ]
  %.11192.us.us = phi ptr [ %.us-phi191.us.us, %.preheader143.us.usthread-pre-split ], [ %2, %.preheader143.lr.ph ]
  %161 = load i64, ptr %150, align 8
  %162 = load i64, ptr %151, align 8
  %.not294 = icmp eq i64 %160, 0
  br i1 %.not294, label %._crit_edge.split.us.us.us, label %.preheader142.us.us.us.us

._crit_edge.split.us.us.us:                       ; preds = %._crit_edge176.split.us.us.us.us.us, %.preheader143.us.us
  %.us-phi191.us.us = phi ptr [ %.11192.us.us, %.preheader143.us.us ], [ %.us-phi.us.us.us.us.us, %._crit_edge176.split.us.us.us.us.us ]
  %163 = add nuw i64 %.0111196.us.us, 1
  %exitcond333.not = icmp eq i64 %163, %145
  br i1 %exitcond333.not, label %.loopexit, label %.preheader143.us.usthread-pre-split, !llvm.loop !42

.preheader142.us.us.us.us:                        ; preds = %.preheader143.us.us, %._crit_edge176.split.us.us.us.us.us
  %.0110187.us.us.us.us = phi i64 [ %201, %._crit_edge176.split.us.us.us.us.us ], [ 0, %.preheader143.us.us ]
  %.12186.us.us.us.us = phi ptr [ %.us-phi.us.us.us.us.us, %._crit_edge176.split.us.us.us.us.us ], [ %.11192.us.us, %.preheader143.us.us ]
  %164 = mul i64 %161, %.0110187.us.us.us.us
  %165 = sub i64 %164, %162
  %166 = load i64, ptr %11, align 8
  %167 = load i64, ptr %157, align 8
  br label %.lr.ph156.us.us.us.us.us

.lr.ph156.us.us.us.us.us:                         ; preds = %._crit_edge.us.us.us.us.us, %.preheader142.us.us.us.us
  %.0109175.us.us.us.us.us = phi i64 [ 0, %.preheader142.us.us.us.us ], [ %177, %._crit_edge.us.us.us.us.us ]
  %.13174.us.us.us.us.us = phi ptr [ %.12186.us.us.us.us, %.preheader142.us.us.us.us ], [ %.us-phi.us.us.us.us.us, %._crit_edge.us.us.us.us.us ]
  %168 = load i64, ptr %153, align 8
  %.fr = freeze i64 %168
  %.not296 = icmp eq i64 %.fr, 0
  %169 = load i64, ptr %154, align 8
  %170 = mul i64 %169, %.0109175.us.us.us.us.us
  %171 = load i64, ptr %155, align 8
  %172 = sub i64 %170, %171
  %173 = load i64, ptr %9, align 8
  %174 = load i64, ptr %156, align 8
  br i1 %.not296, label %._crit_edge.us.us.us.us.us, label %.lr.ph156.split.us.us.us.us.us.us.preheader

.lr.ph156.split.us.us.us.us.us.us.preheader:      ; preds = %.lr.ph156.us.us.us.us.us
  %175 = shl nuw i64 %.fr, 2
  %xtraiter = and i64 %.fr, 1
  %176 = icmp eq i64 %.fr, 1
  %unroll_iter = and i64 %.fr, -2
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.lr.ph156.split.us.us.us.us.us.us

._crit_edge.us.us.us.us.us:                       ; preds = %.loopexit141.us.us.us.us.us.us, %.lr.ph156.us.us.us.us.us
  %.us-phi.us.us.us.us.us = phi ptr [ %.13174.us.us.us.us.us, %.lr.ph156.us.us.us.us.us ], [ %.18.us.us.us.us.us.us, %.loopexit141.us.us.us.us.us.us ]
  %177 = add nuw i64 %.0109175.us.us.us.us.us, 1
  %exitcond331.not = icmp eq i64 %177, %149
  br i1 %exitcond331.not, label %._crit_edge176.split.us.us.us.us.us, label %.lr.ph156.us.us.us.us.us, !llvm.loop !44

.lr.ph156.split.us.us.us.us.us.us:                ; preds = %.lr.ph156.split.us.us.us.us.us.us.preheader, %.loopexit141.us.us.us.us.us.us
  %.0107155.us.us.us.us.us.us = phi i64 [ %186, %.loopexit141.us.us.us.us.us.us ], [ 0, %.lr.ph156.split.us.us.us.us.us.us.preheader ]
  %.0108153.us.us.us.us.us.us = phi i64 [ %185, %.loopexit141.us.us.us.us.us.us ], [ %165, %.lr.ph156.split.us.us.us.us.us.us.preheader ]
  %.14152.us.us.us.us.us.us = phi ptr [ %.18.us.us.us.us.us.us, %.loopexit141.us.us.us.us.us.us ], [ %.13174.us.us.us.us.us, %.lr.ph156.split.us.us.us.us.us.us.preheader ]
  %178 = icmp ult i64 %.0108153.us.us.us.us.us.us, %166
  br i1 %178, label %.lr.ph150.us.us.us.us.us.us, label %.lr.ph.us.us.us.us.us.us.preheader

.lr.ph150.us.us.us.us.us.us:                      ; preds = %.lr.ph156.split.us.us.us.us.us.us
  %179 = mul i64 %173, %.0108153.us.us.us.us.us.us
  br i1 %176, label %.loopexit141.us.us.us.us.us.us.loopexit.unr-lcssa, label %.lr.ph150.us.us.us.us.us.us.new

.loopexit141.us.us.us.us.us.us.loopexit.unr-lcssa: ; preds = %199, %.lr.ph150.us.us.us.us.us.us
  %.16.us.us.us.us.us.us.lcssa.ph = phi ptr [ poison, %.lr.ph150.us.us.us.us.us.us ], [ %.16.us.us.us.us.us.us.1, %199 ]
  %.0106148.us.us.us.us.us.us.unr = phi i64 [ %172, %.lr.ph150.us.us.us.us.us.us ], [ %200, %199 ]
  %.15147.us.us.us.us.us.us.unr = phi ptr [ %.14152.us.us.us.us.us.us, %.lr.ph150.us.us.us.us.us.us ], [ %.16.us.us.us.us.us.us.1, %199 ]
  br i1 %lcmp.mod.not, label %.loopexit141.us.us.us.us.us.us, label %.epil.preheader

.epil.preheader:                                  ; preds = %.loopexit141.us.us.us.us.us.us.loopexit.unr-lcssa
  %180 = icmp ult i64 %.0106148.us.us.us.us.us.us.unr, %173
  br i1 %180, label %181, label %.loopexit141.us.us.us.us.us.us.loopexit.epilog-lcssa

181:                                              ; preds = %.epil.preheader
  %182 = add i64 %179, %.0106148.us.us.us.us.us.us.unr
  %183 = getelementptr inbounds float, ptr %.2193.us.us, i64 %182
  %184 = load float, ptr %183, align 4, !tbaa !20
  br label %.loopexit141.us.us.us.us.us.us.loopexit.epilog-lcssa

.loopexit141.us.us.us.us.us.us.loopexit.epilog-lcssa: ; preds = %181, %.epil.preheader
  %storemerge.us.us.us.us.us.us.epil = phi float [ %184, %181 ], [ 0.000000e+00, %.epil.preheader ]
  %.16.us.us.us.us.us.us.epil = getelementptr inbounds i8, ptr %.15147.us.us.us.us.us.us.unr, i64 4
  store float %storemerge.us.us.us.us.us.us.epil, ptr %.15147.us.us.us.us.us.us.unr, align 4, !tbaa !20
  br label %.loopexit141.us.us.us.us.us.us

.loopexit141.us.us.us.us.us.us:                   ; preds = %.loopexit141.us.us.us.us.us.us.loopexit.epilog-lcssa, %.loopexit141.us.us.us.us.us.us.loopexit.unr-lcssa, %.lr.ph.us.us.us.us.us.us.preheader
  %.18.us.us.us.us.us.us = phi ptr [ %scevgep, %.lr.ph.us.us.us.us.us.us.preheader ], [ %.16.us.us.us.us.us.us.lcssa.ph, %.loopexit141.us.us.us.us.us.us.loopexit.unr-lcssa ], [ %.16.us.us.us.us.us.us.epil, %.loopexit141.us.us.us.us.us.us.loopexit.epilog-lcssa ]
  %185 = add i64 %167, %.0108153.us.us.us.us.us.us
  %186 = add nuw i64 %.0107155.us.us.us.us.us.us, 1
  %exitcond328.not = icmp eq i64 %186, %160
  br i1 %exitcond328.not, label %._crit_edge.us.us.us.us.us, label %.lr.ph156.split.us.us.us.us.us.us, !llvm.loop !45

.lr.ph150.us.us.us.us.us.us.new:                  ; preds = %.lr.ph150.us.us.us.us.us.us, %199
  %.0106148.us.us.us.us.us.us = phi i64 [ %200, %199 ], [ %172, %.lr.ph150.us.us.us.us.us.us ]
  %.15147.us.us.us.us.us.us = phi ptr [ %.16.us.us.us.us.us.us.1, %199 ], [ %.14152.us.us.us.us.us.us, %.lr.ph150.us.us.us.us.us.us ]
  %niter = phi i64 [ %niter.next.1, %199 ], [ 0, %.lr.ph150.us.us.us.us.us.us ]
  %187 = icmp ult i64 %.0106148.us.us.us.us.us.us, %173
  br i1 %187, label %188, label %192

188:                                              ; preds = %.lr.ph150.us.us.us.us.us.us.new
  %189 = add i64 %179, %.0106148.us.us.us.us.us.us
  %190 = getelementptr inbounds float, ptr %.2193.us.us, i64 %189
  %191 = load float, ptr %190, align 4, !tbaa !20
  br label %192

192:                                              ; preds = %188, %.lr.ph150.us.us.us.us.us.us.new
  %storemerge.us.us.us.us.us.us = phi float [ %191, %188 ], [ 0.000000e+00, %.lr.ph150.us.us.us.us.us.us.new ]
  %.16.us.us.us.us.us.us = getelementptr inbounds i8, ptr %.15147.us.us.us.us.us.us, i64 4
  store float %storemerge.us.us.us.us.us.us, ptr %.15147.us.us.us.us.us.us, align 4, !tbaa !20
  %193 = add i64 %174, %.0106148.us.us.us.us.us.us
  %194 = icmp ult i64 %193, %173
  br i1 %194, label %195, label %199

195:                                              ; preds = %192
  %196 = add i64 %179, %193
  %197 = getelementptr inbounds float, ptr %.2193.us.us, i64 %196
  %198 = load float, ptr %197, align 4, !tbaa !20
  br label %199

199:                                              ; preds = %195, %192
  %storemerge.us.us.us.us.us.us.1 = phi float [ %198, %195 ], [ 0.000000e+00, %192 ]
  %.16.us.us.us.us.us.us.1 = getelementptr inbounds i8, ptr %.15147.us.us.us.us.us.us, i64 8
  store float %storemerge.us.us.us.us.us.us.1, ptr %.16.us.us.us.us.us.us, align 4, !tbaa !20
  %200 = add i64 %174, %193
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit141.us.us.us.us.us.us.loopexit.unr-lcssa, label %.lr.ph150.us.us.us.us.us.us.new, !llvm.loop !46

.lr.ph.us.us.us.us.us.us.preheader:               ; preds = %.lr.ph156.split.us.us.us.us.us.us
  tail call void @llvm.memset.p0.i64(ptr align 4 %.14152.us.us.us.us.us.us, i8 0, i64 %175, i1 false), !tbaa !20
  %scevgep = getelementptr i8, ptr %.14152.us.us.us.us.us.us, i64 %175
  br label %.loopexit141.us.us.us.us.us.us

._crit_edge176.split.us.us.us.us.us:              ; preds = %._crit_edge.us.us.us.us.us
  %201 = add nuw i64 %.0110187.us.us.us.us, 1
  %exitcond332.not = icmp eq i64 %201, %147
  br i1 %exitcond332.not, label %._crit_edge.split.us.us.us, label %.preheader142.us.us.us.us, !llvm.loop !47

.loopexit:                                        ; preds = %._crit_edge.split.us.us.us, %._crit_edge.split.us.us.us267, %._crit_edge281.split.us.us.us, %.preheader143.lr.ph, %.preheader136.lr.ph, %.preheader.lr.ph, %144, %.preheader137, %.preheader131
  ret void
}

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

attributes #0 = { noreturn nounwind "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 = { 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 #2 = { 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 #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { noreturn 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, !14, i64 160}
!6 = !{!"_ZTSN4Simd9ConvParamE", !7, i64 0, !14, i64 160, !8, i64 168, !15, i64 176}
!7 = !{!"_ZTS25SimdConvolutionParameters", !8, i64 0, !8, i64 8, !8, i64 16, !11, i64 24, !12, i64 28, !8, i64 32, !8, i64 40, !8, i64 48, !11, i64 56, !12, i64 60, !8, i64 64, !8, i64 72, !8, i64 80, !8, i64 88, !8, i64 96, !8, i64 104, !8, i64 112, !8, i64 120, !8, i64 128, !8, i64 136, !8, i64 144, !13, i64 152}
!8 = !{!"long", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"_ZTS18SimdTensorDataType", !9, i64 0}
!12 = !{!"_ZTS20SimdTensorFormatType", !9, i64 0}
!13 = !{!"_ZTS29SimdConvolutionActivationType", !9, i64 0}
!14 = !{!"_ZTS8SimdBool", !9, i64 0}
!15 = !{!"_ZTS26SimdSynetCompatibilityType", !9, i64 0}
!16 = !{!7, !8, i64 16}
!17 = !{!7, !8, i64 8}
!18 = !{!7, !8, i64 0}
!19 = !{!7, !8, i64 40}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !9, i64 0}
!22 = !{!23}
!23 = distinct !{!23, !24}
!24 = distinct !{!24, !"LVerDomain"}
!25 = !{!26}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !28, !29, !30}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!"llvm.loop.isvectorized", i32 1}
!30 = !{!"llvm.loop.unroll.runtime.disable"}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.unroll.disable"}
!33 = distinct !{!33, !28, !29}
!34 = distinct !{!34, !28}
!35 = distinct !{!35, !28}
!36 = !{!7, !8, i64 64}
!37 = distinct !{!37, !28}
!38 = distinct !{!38, !28}
!39 = distinct !{!39, !28}
!40 = distinct !{!40, !28}
!41 = distinct !{!41, !28}
!42 = distinct !{!42, !28, !43}
!43 = !{!"llvm.loop.unswitch.partial.disable"}
!44 = distinct !{!44, !28}
!45 = distinct !{!45, !28}
!46 = distinct !{!46, !28}
!47 = distinct !{!47, !28}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass,TailCallElimPass