; LLVM IR from XiaoMi/mace :: micro/ops/nhwc/conv_2d_c4_s4.ll (ZN5micro3ops12Conv2dC4S4Op7ComputeERA4_i)

; 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.micro::base::Logger" = type { i32 }
%"class.micro::ops::Conv2dBase" = type <{ %"class.micro::ops::FilterOpBase", ptr, ptr, i32, [4 x i8], ptr, ptr, i32, [4 x i8], ptr, ptr, i32, [4 x i8], ptr, %"class.micro::ops::Activation", [4 x i8] }>
%"class.micro::ops::FilterOpBase" = type { %"class.micro::framework::Operator", i32, ptr, [2 x i32], [2 x i32] }
%"class.micro::framework::Operator" = type { ptr, ptr, ptr, ptr }
%"class.micro::ops::Activation" = type { i32, float, float }

@.str = external hidden unnamed_addr constant [77 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [73 x i8], align 1
@__const._ZN5micro3ops12Conv2dC4S4Op7ComputeERA4_i.h_valid = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN5micro3ops12Conv2dC4S4Op7ComputeERA4_i(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 4 dereferenceable(16) %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"class.micro::base::Logger", align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca [4 x i32], align 16
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca [16 x float], align 16
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca [4 x i8], align 1
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca [4 x i8], align 1
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca [4 x i32], align 16
  %74 = alloca i32, align 4
  %75 = alloca float, align 4
  %76 = alloca float, align 4
  %77 = alloca float, align 4
  %78 = alloca float, align 4
  %79 = alloca float, align 4
  %80 = alloca float, align 4
  %81 = alloca float, align 4
  %82 = alloca float, align 4
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %86 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  %87 = load ptr, ptr %4, align 8, !tbaa !5
  %88 = getelementptr inbounds [4 x i32], ptr %87, i64 0, i64 0
  %89 = load i32, ptr %88, align 4, !tbaa !9
  store i32 %89, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  %90 = load ptr, ptr %4, align 8, !tbaa !5
  %91 = getelementptr inbounds [4 x i32], ptr %90, i64 0, i64 1
  %92 = load i32, ptr %91, align 4, !tbaa !9
  store i32 %92, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  %93 = load ptr, ptr %4, align 8, !tbaa !5
  %94 = getelementptr inbounds [4 x i32], ptr %93, i64 0, i64 2
  %95 = load i32, ptr %94, align 4, !tbaa !9
  store i32 %95, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  %96 = load ptr, ptr %4, align 8, !tbaa !5
  %97 = getelementptr inbounds [4 x i32], ptr %96, i64 0, i64 3
  %98 = load i32, ptr %97, align 4, !tbaa !9
  store i32 %98, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  %99 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 6
  %100 = load ptr, ptr %99, align 8, !tbaa !11
  %101 = getelementptr inbounds i32, ptr %100, i64 1
  %102 = load i32, ptr %101, align 4, !tbaa !9
  store i32 %102, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  %103 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 6
  %104 = load ptr, ptr %103, align 8, !tbaa !11
  %105 = getelementptr inbounds i32, ptr %104, i64 2
  %106 = load i32, ptr %105, align 4, !tbaa !9
  store i32 %106, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  %107 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 6
  %108 = load ptr, ptr %107, align 8, !tbaa !11
  %109 = getelementptr inbounds i32, ptr %108, i64 3
  %110 = load i32, ptr %109, align 4, !tbaa !9
  store i32 %110, ptr %11, align 4, !tbaa !9
  %111 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 6
  %112 = load ptr, ptr %111, align 8, !tbaa !11
  %113 = getelementptr inbounds i32, ptr %112, i64 0
  %114 = load i32, ptr %113, align 4, !tbaa !9
  %115 = load i32, ptr %8, align 4, !tbaa !9
  %116 = icmp eq i32 %114, %115
  br i1 %116, label %117, label %124

117:                                              ; preds = %2
  %118 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 2
  %119 = load ptr, ptr %118, align 8, !tbaa !19
  %120 = getelementptr inbounds i32, ptr %119, i64 3
  %121 = load i32, ptr %120, align 4, !tbaa !9
  %122 = load i32, ptr %11, align 4, !tbaa !9
  %123 = icmp eq i32 %121, %122
  br i1 %123, label %131, label %124

124:                                              ; preds = %117, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  call void @_ZN5micro4base6LoggerC1EPKcjNS_8LogLevelE(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef @.str, i32 noundef 30, i32 noundef 4)
  %125 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5micro4base6LoggerlsEPKc(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef @.str.1)
          to label %126 unwind label %127

126:                                              ; preds = %124
  call void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4) %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  br label %131

127:                                              ; preds = %124
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %13, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %14, align 4
  call void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4) %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  br label %779

131:                                              ; preds = %126, %117
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %132 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 2
  %133 = load ptr, ptr %132, align 8, !tbaa !19
  %134 = getelementptr inbounds i32, ptr %133, i64 1
  %135 = load i32, ptr %134, align 4, !tbaa !9
  store i32 %135, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  %136 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 2
  %137 = load ptr, ptr %136, align 8, !tbaa !19
  %138 = getelementptr inbounds i32, ptr %137, i64 2
  %139 = load i32, ptr %138, align 4, !tbaa !9
  store i32 %139, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  %140 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 2
  %141 = load ptr, ptr %140, align 8, !tbaa !19
  %142 = getelementptr inbounds i32, ptr %141, i64 3
  %143 = load i32, ptr %142, align 4, !tbaa !9
  store i32 %143, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %144 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 3
  %145 = getelementptr inbounds [2 x i32], ptr %144, i64 0, i64 0
  %146 = load i32, ptr %145, align 8, !tbaa !9
  %147 = ashr i32 %146, 1
  store i32 %147, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  %148 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 3
  %149 = getelementptr inbounds [2 x i32], ptr %148, i64 0, i64 1
  %150 = load i32, ptr %149, align 4, !tbaa !9
  %151 = ashr i32 %150, 1
  store i32 %151, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  %152 = load i32, ptr %5, align 4, !tbaa !9
  %153 = load i32, ptr %6, align 4, !tbaa !9
  %154 = mul nsw i32 %152, %153
  %155 = load i32, ptr %7, align 4, !tbaa !9
  %156 = mul nsw i32 %154, %155
  store i32 %156, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %157 = load i32, ptr %20, align 4, !tbaa !9
  %158 = sub nsw i32 %157, 4
  store i32 %158, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  %159 = load i32, ptr %8, align 4, !tbaa !9
  %160 = sub nsw i32 %159, 4
  store i32 %160, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %161

161:                                              ; preds = %775, %131
  %162 = load i32, ptr %23, align 4, !tbaa !9
  %163 = load i32, ptr %20, align 4, !tbaa !9
  %164 = icmp slt i32 %162, %163
  br i1 %164, label %166, label %165

165:                                              ; preds = %161
  store i32 2, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %778

166:                                              ; preds = %161
  %167 = load i32, ptr %23, align 4, !tbaa !9
  %168 = load i32, ptr %21, align 4, !tbaa !9
  %169 = icmp sgt i32 %167, %168
  br i1 %169, label %170, label %172

170:                                              ; preds = %166
  %171 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %171, ptr %23, align 4, !tbaa !9
  br label %172

172:                                              ; preds = %170, %166
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %173 = load i32, ptr %23, align 4, !tbaa !9
  %174 = load i32, ptr %7, align 4, !tbaa !9
  %175 = sdiv i32 %173, %174
  %176 = load i32, ptr %6, align 4, !tbaa !9
  %177 = srem i32 %175, %176
  store i32 %177, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %178 = load i32, ptr %23, align 4, !tbaa !9
  %179 = add nsw i32 %178, 1
  %180 = load i32, ptr %7, align 4, !tbaa !9
  %181 = sdiv i32 %179, %180
  %182 = load i32, ptr %6, align 4, !tbaa !9
  %183 = srem i32 %181, %182
  store i32 %183, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  %184 = load i32, ptr %23, align 4, !tbaa !9
  %185 = add nsw i32 %184, 2
  %186 = load i32, ptr %7, align 4, !tbaa !9
  %187 = sdiv i32 %185, %186
  %188 = load i32, ptr %6, align 4, !tbaa !9
  %189 = srem i32 %187, %188
  store i32 %189, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %190 = load i32, ptr %23, align 4, !tbaa !9
  %191 = add nsw i32 %190, 3
  %192 = load i32, ptr %7, align 4, !tbaa !9
  %193 = sdiv i32 %191, %192
  %194 = load i32, ptr %6, align 4, !tbaa !9
  %195 = srem i32 %193, %194
  store i32 %195, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  %196 = load i32, ptr %25, align 4, !tbaa !9
  %197 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 2
  %198 = load ptr, ptr %197, align 8, !tbaa !20
  %199 = getelementptr inbounds i32, ptr %198, i64 0
  %200 = load i32, ptr %199, align 4, !tbaa !9
  %201 = mul nsw i32 %196, %200
  %202 = load i32, ptr %18, align 4, !tbaa !9
  %203 = sub nsw i32 %201, %202
  store i32 %203, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  %204 = load i32, ptr %26, align 4, !tbaa !9
  %205 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 2
  %206 = load ptr, ptr %205, align 8, !tbaa !20
  %207 = getelementptr inbounds i32, ptr %206, i64 0
  %208 = load i32, ptr %207, align 4, !tbaa !9
  %209 = mul nsw i32 %204, %208
  %210 = load i32, ptr %18, align 4, !tbaa !9
  %211 = sub nsw i32 %209, %210
  store i32 %211, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  %212 = load i32, ptr %27, align 4, !tbaa !9
  %213 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 2
  %214 = load ptr, ptr %213, align 8, !tbaa !20
  %215 = getelementptr inbounds i32, ptr %214, i64 0
  %216 = load i32, ptr %215, align 4, !tbaa !9
  %217 = mul nsw i32 %212, %216
  %218 = load i32, ptr %18, align 4, !tbaa !9
  %219 = sub nsw i32 %217, %218
  store i32 %219, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  %220 = load i32, ptr %28, align 4, !tbaa !9
  %221 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 2
  %222 = load ptr, ptr %221, align 8, !tbaa !20
  %223 = getelementptr inbounds i32, ptr %222, i64 0
  %224 = load i32, ptr %223, align 4, !tbaa !9
  %225 = mul nsw i32 %220, %224
  %226 = load i32, ptr %18, align 4, !tbaa !9
  %227 = sub nsw i32 %225, %226
  store i32 %227, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  %228 = load i32, ptr %23, align 4, !tbaa !9
  %229 = load i32, ptr %7, align 4, !tbaa !9
  %230 = srem i32 %228, %229
  store i32 %230, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  %231 = load i32, ptr %23, align 4, !tbaa !9
  %232 = add nsw i32 %231, 1
  %233 = load i32, ptr %7, align 4, !tbaa !9
  %234 = srem i32 %232, %233
  store i32 %234, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  %235 = load i32, ptr %23, align 4, !tbaa !9
  %236 = add nsw i32 %235, 2
  %237 = load i32, ptr %7, align 4, !tbaa !9
  %238 = srem i32 %236, %237
  store i32 %238, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  %239 = load i32, ptr %23, align 4, !tbaa !9
  %240 = add nsw i32 %239, 3
  %241 = load i32, ptr %7, align 4, !tbaa !9
  %242 = srem i32 %240, %241
  store i32 %242, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #7
  %243 = load i32, ptr %23, align 4, !tbaa !9
  %244 = load i32, ptr %8, align 4, !tbaa !9
  %245 = mul nsw i32 %243, %244
  store i32 %245, ptr %37, align 4, !tbaa !9
  %246 = getelementptr inbounds i32, ptr %37, i64 1
  %247 = getelementptr inbounds i32, ptr %37, i64 4
  br label %248

248:                                              ; preds = %248, %172
  %249 = phi ptr [ %246, %172 ], [ %250, %248 ]
  store i32 0, ptr %249, align 4, !tbaa !9
  %250 = getelementptr inbounds i32, ptr %249, i64 1
  %251 = icmp eq ptr %250, %247
  br i1 %251, label %252, label %248

252:                                              ; preds = %248
  %253 = getelementptr inbounds [4 x i32], ptr %37, i64 0, i64 0
  %254 = load i32, ptr %253, align 16, !tbaa !9
  %255 = load i32, ptr %8, align 4, !tbaa !9
  %256 = add nsw i32 %254, %255
  %257 = getelementptr inbounds [4 x i32], ptr %37, i64 0, i64 1
  store i32 %256, ptr %257, align 4, !tbaa !9
  %258 = getelementptr inbounds [4 x i32], ptr %37, i64 0, i64 1
  %259 = load i32, ptr %258, align 4, !tbaa !9
  %260 = load i32, ptr %8, align 4, !tbaa !9
  %261 = add nsw i32 %259, %260
  %262 = getelementptr inbounds [4 x i32], ptr %37, i64 0, i64 2
  store i32 %261, ptr %262, align 8, !tbaa !9
  %263 = getelementptr inbounds [4 x i32], ptr %37, i64 0, i64 2
  %264 = load i32, ptr %263, align 8, !tbaa !9
  %265 = load i32, ptr %8, align 4, !tbaa !9
  %266 = add nsw i32 %264, %265
  %267 = getelementptr inbounds [4 x i32], ptr %37, i64 0, i64 3
  store i32 %266, ptr %267, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  %268 = load i32, ptr %33, align 4, !tbaa !9
  %269 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 2
  %270 = load ptr, ptr %269, align 8, !tbaa !20
  %271 = getelementptr inbounds i32, ptr %270, i64 1
  %272 = load i32, ptr %271, align 4, !tbaa !9
  %273 = mul nsw i32 %268, %272
  %274 = load i32, ptr %19, align 4, !tbaa !9
  %275 = sub nsw i32 %273, %274
  store i32 %275, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #7
  %276 = load i32, ptr %34, align 4, !tbaa !9
  %277 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 2
  %278 = load ptr, ptr %277, align 8, !tbaa !20
  %279 = getelementptr inbounds i32, ptr %278, i64 1
  %280 = load i32, ptr %279, align 4, !tbaa !9
  %281 = mul nsw i32 %276, %280
  %282 = load i32, ptr %19, align 4, !tbaa !9
  %283 = sub nsw i32 %281, %282
  store i32 %283, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #7
  %284 = load i32, ptr %35, align 4, !tbaa !9
  %285 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 2
  %286 = load ptr, ptr %285, align 8, !tbaa !20
  %287 = getelementptr inbounds i32, ptr %286, i64 1
  %288 = load i32, ptr %287, align 4, !tbaa !9
  %289 = mul nsw i32 %284, %288
  %290 = load i32, ptr %19, align 4, !tbaa !9
  %291 = sub nsw i32 %289, %290
  store i32 %291, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  %292 = load i32, ptr %36, align 4, !tbaa !9
  %293 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 2
  %294 = load ptr, ptr %293, align 8, !tbaa !20
  %295 = getelementptr inbounds i32, ptr %294, i64 1
  %296 = load i32, ptr %295, align 4, !tbaa !9
  %297 = mul nsw i32 %292, %296
  %298 = load i32, ptr %19, align 4, !tbaa !9
  %299 = sub nsw i32 %297, %298
  store i32 %299, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %300

300:                                              ; preds = %771, %252
  %301 = load i32, ptr %42, align 4, !tbaa !9
  %302 = load i32, ptr %8, align 4, !tbaa !9
  %303 = icmp slt i32 %301, %302
  br i1 %303, label %305, label %304

304:                                              ; preds = %300
  store i32 5, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  br label %774

305:                                              ; preds = %300
  %306 = load i32, ptr %42, align 4, !tbaa !9
  %307 = load i32, ptr %22, align 4, !tbaa !9
  %308 = icmp sgt i32 %306, %307
  br i1 %308, label %309, label %311

309:                                              ; preds = %305
  %310 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %310, ptr %42, align 4, !tbaa !9
  br label %311

311:                                              ; preds = %309, %305
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  %312 = load i32, ptr %42, align 4, !tbaa !9
  %313 = load i32, ptr %9, align 4, !tbaa !9
  %314 = mul nsw i32 %312, %313
  store i32 %314, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  %315 = load i32, ptr %43, align 4, !tbaa !9
  %316 = load i32, ptr %9, align 4, !tbaa !9
  %317 = add nsw i32 %315, %316
  store i32 %317, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #7
  %318 = load i32, ptr %44, align 4, !tbaa !9
  %319 = load i32, ptr %9, align 4, !tbaa !9
  %320 = add nsw i32 %318, %319
  store i32 %320, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #7
  %321 = load i32, ptr %45, align 4, !tbaa !9
  %322 = load i32, ptr %9, align 4, !tbaa !9
  %323 = add nsw i32 %321, %322
  store i32 %323, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 64, ptr %47) #7
  call void @llvm.memset.p0.i64(ptr align 16 %47, i8 0, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #7
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %324

324:                                              ; preds = %729, %311
  %325 = load i32, ptr %48, align 4, !tbaa !9
  %326 = load i32, ptr %9, align 4, !tbaa !9
  %327 = icmp slt i32 %325, %326
  br i1 %327, label %329, label %328

328:                                              ; preds = %324
  store i32 8, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #7
  br label %732

329:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #7
  %330 = load i32, ptr %29, align 4, !tbaa !9
  %331 = load i32, ptr %48, align 4, !tbaa !9
  %332 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 4
  %333 = getelementptr inbounds [2 x i32], ptr %332, i64 0, i64 0
  %334 = load i32, ptr %333, align 8, !tbaa !9
  %335 = mul nsw i32 %331, %334
  %336 = add nsw i32 %330, %335
  store i32 %336, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #7
  %337 = load i32, ptr %30, align 4, !tbaa !9
  %338 = load i32, ptr %48, align 4, !tbaa !9
  %339 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 4
  %340 = getelementptr inbounds [2 x i32], ptr %339, i64 0, i64 0
  %341 = load i32, ptr %340, align 8, !tbaa !9
  %342 = mul nsw i32 %338, %341
  %343 = add nsw i32 %337, %342
  store i32 %343, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #7
  %344 = load i32, ptr %31, align 4, !tbaa !9
  %345 = load i32, ptr %48, align 4, !tbaa !9
  %346 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 4
  %347 = getelementptr inbounds [2 x i32], ptr %346, i64 0, i64 0
  %348 = load i32, ptr %347, align 8, !tbaa !9
  %349 = mul nsw i32 %345, %348
  %350 = add nsw i32 %344, %349
  store i32 %350, ptr %51, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #7
  %351 = load i32, ptr %32, align 4, !tbaa !9
  %352 = load i32, ptr %48, align 4, !tbaa !9
  %353 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 4
  %354 = getelementptr inbounds [2 x i32], ptr %353, i64 0, i64 0
  %355 = load i32, ptr %354, align 8, !tbaa !9
  %356 = mul nsw i32 %352, %355
  %357 = add nsw i32 %351, %356
  store i32 %357, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %53, ptr align 1 @__const._ZN5micro3ops12Conv2dC4S4Op7ComputeERA4_i.h_valid, i64 4, i1 false)
  %358 = load i32, ptr %49, align 4, !tbaa !9
  %359 = icmp slt i32 %358, 0
  br i1 %359, label %364, label %360

360:                                              ; preds = %329
  %361 = load i32, ptr %49, align 4, !tbaa !9
  %362 = load i32, ptr %15, align 4, !tbaa !9
  %363 = icmp sge i32 %361, %362
  br i1 %363, label %364, label %366

364:                                              ; preds = %360, %329
  %365 = getelementptr inbounds [4 x i8], ptr %53, i64 0, i64 0
  store i8 0, ptr %365, align 1, !tbaa !21
  br label %366

366:                                              ; preds = %364, %360
  %367 = load i32, ptr %50, align 4, !tbaa !9
  %368 = icmp slt i32 %367, 0
  br i1 %368, label %373, label %369

369:                                              ; preds = %366
  %370 = load i32, ptr %50, align 4, !tbaa !9
  %371 = load i32, ptr %15, align 4, !tbaa !9
  %372 = icmp sge i32 %370, %371
  br i1 %372, label %373, label %375

373:                                              ; preds = %369, %366
  %374 = getelementptr inbounds [4 x i8], ptr %53, i64 0, i64 1
  store i8 0, ptr %374, align 1, !tbaa !21
  br label %375

375:                                              ; preds = %373, %369
  %376 = load i32, ptr %51, align 4, !tbaa !9
  %377 = icmp slt i32 %376, 0
  br i1 %377, label %382, label %378

378:                                              ; preds = %375
  %379 = load i32, ptr %51, align 4, !tbaa !9
  %380 = load i32, ptr %15, align 4, !tbaa !9
  %381 = icmp sge i32 %379, %380
  br i1 %381, label %382, label %384

382:                                              ; preds = %378, %375
  %383 = getelementptr inbounds [4 x i8], ptr %53, i64 0, i64 2
  store i8 0, ptr %383, align 1, !tbaa !21
  br label %384

384:                                              ; preds = %382, %378
  %385 = load i32, ptr %52, align 4, !tbaa !9
  %386 = icmp slt i32 %385, 0
  br i1 %386, label %391, label %387

387:                                              ; preds = %384
  %388 = load i32, ptr %52, align 4, !tbaa !9
  %389 = load i32, ptr %15, align 4, !tbaa !9
  %390 = icmp sge i32 %388, %389
  br i1 %390, label %391, label %393

391:                                              ; preds = %387, %384
  %392 = getelementptr inbounds [4 x i8], ptr %53, i64 0, i64 3
  store i8 0, ptr %392, align 1, !tbaa !21
  br label %393

393:                                              ; preds = %391, %387
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #7
  %394 = load i32, ptr %43, align 4, !tbaa !9
  %395 = load i32, ptr %48, align 4, !tbaa !9
  %396 = add nsw i32 %394, %395
  %397 = load i32, ptr %10, align 4, !tbaa !9
  %398 = mul nsw i32 %396, %397
  store i32 %398, ptr %54, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #7
  %399 = load i32, ptr %44, align 4, !tbaa !9
  %400 = load i32, ptr %48, align 4, !tbaa !9
  %401 = add nsw i32 %399, %400
  %402 = load i32, ptr %10, align 4, !tbaa !9
  %403 = mul nsw i32 %401, %402
  store i32 %403, ptr %55, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #7
  %404 = load i32, ptr %45, align 4, !tbaa !9
  %405 = load i32, ptr %48, align 4, !tbaa !9
  %406 = add nsw i32 %404, %405
  %407 = load i32, ptr %10, align 4, !tbaa !9
  %408 = mul nsw i32 %406, %407
  store i32 %408, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #7
  %409 = load i32, ptr %46, align 4, !tbaa !9
  %410 = load i32, ptr %48, align 4, !tbaa !9
  %411 = add nsw i32 %409, %410
  %412 = load i32, ptr %10, align 4, !tbaa !9
  %413 = mul nsw i32 %411, %412
  store i32 %413, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #7
  %414 = load i32, ptr %49, align 4, !tbaa !9
  %415 = load i32, ptr %16, align 4, !tbaa !9
  %416 = mul nsw i32 %414, %415
  store i32 %416, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #7
  %417 = load i32, ptr %50, align 4, !tbaa !9
  %418 = load i32, ptr %16, align 4, !tbaa !9
  %419 = mul nsw i32 %417, %418
  store i32 %419, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #7
  %420 = load i32, ptr %51, align 4, !tbaa !9
  %421 = load i32, ptr %16, align 4, !tbaa !9
  %422 = mul nsw i32 %420, %421
  store i32 %422, ptr %60, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #7
  %423 = load i32, ptr %52, align 4, !tbaa !9
  %424 = load i32, ptr %16, align 4, !tbaa !9
  %425 = mul nsw i32 %423, %424
  store i32 %425, ptr %61, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #7
  store i32 0, ptr %62, align 4, !tbaa !9
  br label %426

426:                                              ; preds = %725, %393
  %427 = load i32, ptr %62, align 4, !tbaa !9
  %428 = load i32, ptr %10, align 4, !tbaa !9
  %429 = icmp slt i32 %427, %428
  br i1 %429, label %431, label %430

430:                                              ; preds = %426
  store i32 11, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #7
  br label %728

431:                                              ; preds = %426
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #7
  %432 = load i32, ptr %62, align 4, !tbaa !9
  %433 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %86, i32 0, i32 4
  %434 = getelementptr inbounds [2 x i32], ptr %433, i64 0, i64 1
  %435 = load i32, ptr %434, align 4, !tbaa !9
  %436 = mul nsw i32 %432, %435
  store i32 %436, ptr %63, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #7
  %437 = load i32, ptr %38, align 4, !tbaa !9
  %438 = load i32, ptr %63, align 4, !tbaa !9
  %439 = add nsw i32 %437, %438
  store i32 %439, ptr %64, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #7
  %440 = load i32, ptr %39, align 4, !tbaa !9
  %441 = load i32, ptr %63, align 4, !tbaa !9
  %442 = add nsw i32 %440, %441
  store i32 %442, ptr %65, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #7
  %443 = load i32, ptr %40, align 4, !tbaa !9
  %444 = load i32, ptr %63, align 4, !tbaa !9
  %445 = add nsw i32 %443, %444
  store i32 %445, ptr %66, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #7
  %446 = load i32, ptr %41, align 4, !tbaa !9
  %447 = load i32, ptr %63, align 4, !tbaa !9
  %448 = add nsw i32 %446, %447
  store i32 %448, ptr %67, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #7
  %449 = getelementptr inbounds [4 x i8], ptr %53, i64 0, i64 0
  %450 = load i8, ptr %449, align 1, !tbaa !21, !range !23, !noundef !24
  %451 = trunc i8 %450 to i1
  %452 = zext i1 %451 to i8
  store i8 %452, ptr %68, align 1, !tbaa !21
  %453 = getelementptr inbounds i8, ptr %68, i64 1
  %454 = getelementptr inbounds [4 x i8], ptr %53, i64 0, i64 1
  %455 = load i8, ptr %454, align 1, !tbaa !21, !range !23, !noundef !24
  %456 = trunc i8 %455 to i1
  %457 = zext i1 %456 to i8
  store i8 %457, ptr %453, align 1, !tbaa !21
  %458 = getelementptr inbounds i8, ptr %68, i64 2
  %459 = getelementptr inbounds [4 x i8], ptr %53, i64 0, i64 2
  %460 = load i8, ptr %459, align 1, !tbaa !21, !range !23, !noundef !24
  %461 = trunc i8 %460 to i1
  %462 = zext i1 %461 to i8
  store i8 %462, ptr %458, align 1, !tbaa !21
  %463 = getelementptr inbounds i8, ptr %68, i64 3
  %464 = getelementptr inbounds [4 x i8], ptr %53, i64 0, i64 3
  %465 = load i8, ptr %464, align 1, !tbaa !21, !range !23, !noundef !24
  %466 = trunc i8 %465 to i1
  %467 = zext i1 %466 to i8
  store i8 %467, ptr %463, align 1, !tbaa !21
  %468 = load i32, ptr %64, align 4, !tbaa !9
  %469 = icmp slt i32 %468, 0
  br i1 %469, label %474, label %470

470:                                              ; preds = %431
  %471 = load i32, ptr %64, align 4, !tbaa !9
  %472 = load i32, ptr %16, align 4, !tbaa !9
  %473 = icmp sge i32 %471, %472
  br i1 %473, label %474, label %476

474:                                              ; preds = %470, %431
  %475 = getelementptr inbounds [4 x i8], ptr %68, i64 0, i64 0
  store i8 0, ptr %475, align 1, !tbaa !21
  br label %476

476:                                              ; preds = %474, %470
  %477 = load i32, ptr %65, align 4, !tbaa !9
  %478 = icmp slt i32 %477, 0
  br i1 %478, label %483, label %479

479:                                              ; preds = %476
  %480 = load i32, ptr %65, align 4, !tbaa !9
  %481 = load i32, ptr %16, align 4, !tbaa !9
  %482 = icmp sge i32 %480, %481
  br i1 %482, label %483, label %485

483:                                              ; preds = %479, %476
  %484 = getelementptr inbounds [4 x i8], ptr %68, i64 0, i64 1
  store i8 0, ptr %484, align 1, !tbaa !21
  br label %485

485:                                              ; preds = %483, %479
  %486 = load i32, ptr %66, align 4, !tbaa !9
  %487 = icmp slt i32 %486, 0
  br i1 %487, label %492, label %488

488:                                              ; preds = %485
  %489 = load i32, ptr %66, align 4, !tbaa !9
  %490 = load i32, ptr %16, align 4, !tbaa !9
  %491 = icmp sge i32 %489, %490
  br i1 %491, label %492, label %494

492:                                              ; preds = %488, %485
  %493 = getelementptr inbounds [4 x i8], ptr %68, i64 0, i64 2
  store i8 0, ptr %493, align 1, !tbaa !21
  br label %494

494:                                              ; preds = %492, %488
  %495 = load i32, ptr %67, align 4, !tbaa !9
  %496 = icmp slt i32 %495, 0
  br i1 %496, label %501, label %497

497:                                              ; preds = %494
  %498 = load i32, ptr %67, align 4, !tbaa !9
  %499 = load i32, ptr %16, align 4, !tbaa !9
  %500 = icmp sge i32 %498, %499
  br i1 %500, label %501, label %503

501:                                              ; preds = %497, %494
  %502 = getelementptr inbounds [4 x i8], ptr %68, i64 0, i64 3
  store i8 0, ptr %502, align 1, !tbaa !21
  br label %503

503:                                              ; preds = %501, %497
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #7
  %504 = load i32, ptr %54, align 4, !tbaa !9
  %505 = load i32, ptr %62, align 4, !tbaa !9
  %506 = add nsw i32 %504, %505
  %507 = load i32, ptr %11, align 4, !tbaa !9
  %508 = mul nsw i32 %506, %507
  store i32 %508, ptr %69, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #7
  %509 = load i32, ptr %55, align 4, !tbaa !9
  %510 = load i32, ptr %62, align 4, !tbaa !9
  %511 = add nsw i32 %509, %510
  %512 = load i32, ptr %11, align 4, !tbaa !9
  %513 = mul nsw i32 %511, %512
  store i32 %513, ptr %70, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #7
  %514 = load i32, ptr %56, align 4, !tbaa !9
  %515 = load i32, ptr %62, align 4, !tbaa !9
  %516 = add nsw i32 %514, %515
  %517 = load i32, ptr %11, align 4, !tbaa !9
  %518 = mul nsw i32 %516, %517
  store i32 %518, ptr %71, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #7
  %519 = load i32, ptr %57, align 4, !tbaa !9
  %520 = load i32, ptr %62, align 4, !tbaa !9
  %521 = add nsw i32 %519, %520
  %522 = load i32, ptr %11, align 4, !tbaa !9
  %523 = mul nsw i32 %521, %522
  store i32 %523, ptr %72, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %73) #7
  %524 = load i32, ptr %58, align 4, !tbaa !9
  %525 = load i32, ptr %64, align 4, !tbaa !9
  %526 = add nsw i32 %524, %525
  %527 = load i32, ptr %17, align 4, !tbaa !9
  %528 = mul nsw i32 %526, %527
  store i32 %528, ptr %73, align 4, !tbaa !9
  %529 = getelementptr inbounds i32, ptr %73, i64 1
  %530 = load i32, ptr %59, align 4, !tbaa !9
  %531 = load i32, ptr %65, align 4, !tbaa !9
  %532 = add nsw i32 %530, %531
  %533 = load i32, ptr %17, align 4, !tbaa !9
  %534 = mul nsw i32 %532, %533
  store i32 %534, ptr %529, align 4, !tbaa !9
  %535 = getelementptr inbounds i32, ptr %73, i64 2
  %536 = load i32, ptr %60, align 4, !tbaa !9
  %537 = load i32, ptr %66, align 4, !tbaa !9
  %538 = add nsw i32 %536, %537
  %539 = load i32, ptr %17, align 4, !tbaa !9
  %540 = mul nsw i32 %538, %539
  store i32 %540, ptr %535, align 4, !tbaa !9
  %541 = getelementptr inbounds i32, ptr %73, i64 3
  %542 = load i32, ptr %61, align 4, !tbaa !9
  %543 = load i32, ptr %67, align 4, !tbaa !9
  %544 = add nsw i32 %542, %543
  %545 = load i32, ptr %17, align 4, !tbaa !9
  %546 = mul nsw i32 %544, %545
  store i32 %546, ptr %541, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #7
  store i32 0, ptr %74, align 4, !tbaa !9
  br label %547

547:                                              ; preds = %721, %503
  %548 = load i32, ptr %74, align 4, !tbaa !9
  %549 = load i32, ptr %11, align 4, !tbaa !9
  %550 = icmp slt i32 %548, %549
  br i1 %550, label %552, label %551

551:                                              ; preds = %547
  store i32 14, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #7
  br label %724

552:                                              ; preds = %547
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #7
  %553 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 5
  %554 = load ptr, ptr %553, align 8, !tbaa !25
  %555 = load i32, ptr %69, align 4, !tbaa !9
  %556 = load i32, ptr %74, align 4, !tbaa !9
  %557 = add nsw i32 %555, %556
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds float, ptr %554, i64 %558
  %560 = load float, ptr %559, align 4, !tbaa !26
  store float %560, ptr %75, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #7
  %561 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 5
  %562 = load ptr, ptr %561, align 8, !tbaa !25
  %563 = load i32, ptr %70, align 4, !tbaa !9
  %564 = load i32, ptr %74, align 4, !tbaa !9
  %565 = add nsw i32 %563, %564
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds float, ptr %562, i64 %566
  %568 = load float, ptr %567, align 4, !tbaa !26
  store float %568, ptr %76, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #7
  %569 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 5
  %570 = load ptr, ptr %569, align 8, !tbaa !25
  %571 = load i32, ptr %71, align 4, !tbaa !9
  %572 = load i32, ptr %74, align 4, !tbaa !9
  %573 = add nsw i32 %571, %572
  %574 = sext i32 %573 to i64
  %575 = getelementptr inbounds float, ptr %570, i64 %574
  %576 = load float, ptr %575, align 4, !tbaa !26
  store float %576, ptr %77, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #7
  %577 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 5
  %578 = load ptr, ptr %577, align 8, !tbaa !25
  %579 = load i32, ptr %72, align 4, !tbaa !9
  %580 = load i32, ptr %74, align 4, !tbaa !9
  %581 = add nsw i32 %579, %580
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds float, ptr %578, i64 %582
  %584 = load float, ptr %583, align 4, !tbaa !26
  store float %584, ptr %78, align 4, !tbaa !26
  %585 = getelementptr inbounds [4 x i8], ptr %68, i64 0, i64 0
  %586 = load i8, ptr %585, align 1, !tbaa !21, !range !23, !noundef !24
  %587 = trunc i8 %586 to i1
  br i1 %587, label %588, label %618

588:                                              ; preds = %552
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #7
  %589 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 1
  %590 = load ptr, ptr %589, align 8, !tbaa !27
  %591 = getelementptr inbounds [4 x i32], ptr %73, i64 0, i64 0
  %592 = load i32, ptr %591, align 16, !tbaa !9
  %593 = load i32, ptr %74, align 4, !tbaa !9
  %594 = add nsw i32 %592, %593
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds float, ptr %590, i64 %595
  %597 = load float, ptr %596, align 4, !tbaa !26
  store float %597, ptr %79, align 4, !tbaa !26
  %598 = load float, ptr %79, align 4, !tbaa !26
  %599 = load float, ptr %75, align 4, !tbaa !26
  %600 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 0
  %601 = load float, ptr %600, align 16, !tbaa !26
  %602 = call float @llvm.fmuladd.f32(float %598, float %599, float %601)
  store float %602, ptr %600, align 16, !tbaa !26
  %603 = load float, ptr %79, align 4, !tbaa !26
  %604 = load float, ptr %76, align 4, !tbaa !26
  %605 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 1
  %606 = load float, ptr %605, align 4, !tbaa !26
  %607 = call float @llvm.fmuladd.f32(float %603, float %604, float %606)
  store float %607, ptr %605, align 4, !tbaa !26
  %608 = load float, ptr %79, align 4, !tbaa !26
  %609 = load float, ptr %77, align 4, !tbaa !26
  %610 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 2
  %611 = load float, ptr %610, align 8, !tbaa !26
  %612 = call float @llvm.fmuladd.f32(float %608, float %609, float %611)
  store float %612, ptr %610, align 8, !tbaa !26
  %613 = load float, ptr %79, align 4, !tbaa !26
  %614 = load float, ptr %78, align 4, !tbaa !26
  %615 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 3
  %616 = load float, ptr %615, align 4, !tbaa !26
  %617 = call float @llvm.fmuladd.f32(float %613, float %614, float %616)
  store float %617, ptr %615, align 4, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #7
  br label %618

618:                                              ; preds = %588, %552
  %619 = getelementptr inbounds [4 x i8], ptr %68, i64 0, i64 1
  %620 = load i8, ptr %619, align 1, !tbaa !21, !range !23, !noundef !24
  %621 = trunc i8 %620 to i1
  br i1 %621, label %622, label %652

622:                                              ; preds = %618
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #7
  %623 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 1
  %624 = load ptr, ptr %623, align 8, !tbaa !27
  %625 = getelementptr inbounds [4 x i32], ptr %73, i64 0, i64 1
  %626 = load i32, ptr %625, align 4, !tbaa !9
  %627 = load i32, ptr %74, align 4, !tbaa !9
  %628 = add nsw i32 %626, %627
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds float, ptr %624, i64 %629
  %631 = load float, ptr %630, align 4, !tbaa !26
  store float %631, ptr %80, align 4, !tbaa !26
  %632 = load float, ptr %80, align 4, !tbaa !26
  %633 = load float, ptr %75, align 4, !tbaa !26
  %634 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 4
  %635 = load float, ptr %634, align 16, !tbaa !26
  %636 = call float @llvm.fmuladd.f32(float %632, float %633, float %635)
  store float %636, ptr %634, align 16, !tbaa !26
  %637 = load float, ptr %80, align 4, !tbaa !26
  %638 = load float, ptr %76, align 4, !tbaa !26
  %639 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 5
  %640 = load float, ptr %639, align 4, !tbaa !26
  %641 = call float @llvm.fmuladd.f32(float %637, float %638, float %640)
  store float %641, ptr %639, align 4, !tbaa !26
  %642 = load float, ptr %80, align 4, !tbaa !26
  %643 = load float, ptr %77, align 4, !tbaa !26
  %644 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 6
  %645 = load float, ptr %644, align 8, !tbaa !26
  %646 = call float @llvm.fmuladd.f32(float %642, float %643, float %645)
  store float %646, ptr %644, align 8, !tbaa !26
  %647 = load float, ptr %80, align 4, !tbaa !26
  %648 = load float, ptr %78, align 4, !tbaa !26
  %649 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 7
  %650 = load float, ptr %649, align 4, !tbaa !26
  %651 = call float @llvm.fmuladd.f32(float %647, float %648, float %650)
  store float %651, ptr %649, align 4, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  br label %652

652:                                              ; preds = %622, %618
  %653 = getelementptr inbounds [4 x i8], ptr %68, i64 0, i64 2
  %654 = load i8, ptr %653, align 1, !tbaa !21, !range !23, !noundef !24
  %655 = trunc i8 %654 to i1
  br i1 %655, label %656, label %686

656:                                              ; preds = %652
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #7
  %657 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 1
  %658 = load ptr, ptr %657, align 8, !tbaa !27
  %659 = getelementptr inbounds [4 x i32], ptr %73, i64 0, i64 2
  %660 = load i32, ptr %659, align 8, !tbaa !9
  %661 = load i32, ptr %74, align 4, !tbaa !9
  %662 = add nsw i32 %660, %661
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds float, ptr %658, i64 %663
  %665 = load float, ptr %664, align 4, !tbaa !26
  store float %665, ptr %81, align 4, !tbaa !26
  %666 = load float, ptr %81, align 4, !tbaa !26
  %667 = load float, ptr %75, align 4, !tbaa !26
  %668 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 8
  %669 = load float, ptr %668, align 16, !tbaa !26
  %670 = call float @llvm.fmuladd.f32(float %666, float %667, float %669)
  store float %670, ptr %668, align 16, !tbaa !26
  %671 = load float, ptr %81, align 4, !tbaa !26
  %672 = load float, ptr %76, align 4, !tbaa !26
  %673 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 9
  %674 = load float, ptr %673, align 4, !tbaa !26
  %675 = call float @llvm.fmuladd.f32(float %671, float %672, float %674)
  store float %675, ptr %673, align 4, !tbaa !26
  %676 = load float, ptr %81, align 4, !tbaa !26
  %677 = load float, ptr %77, align 4, !tbaa !26
  %678 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 10
  %679 = load float, ptr %678, align 8, !tbaa !26
  %680 = call float @llvm.fmuladd.f32(float %676, float %677, float %679)
  store float %680, ptr %678, align 8, !tbaa !26
  %681 = load float, ptr %81, align 4, !tbaa !26
  %682 = load float, ptr %78, align 4, !tbaa !26
  %683 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 11
  %684 = load float, ptr %683, align 4, !tbaa !26
  %685 = call float @llvm.fmuladd.f32(float %681, float %682, float %684)
  store float %685, ptr %683, align 4, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #7
  br label %686

686:                                              ; preds = %656, %652
  %687 = getelementptr inbounds [4 x i8], ptr %68, i64 0, i64 3
  %688 = load i8, ptr %687, align 1, !tbaa !21, !range !23, !noundef !24
  %689 = trunc i8 %688 to i1
  br i1 %689, label %690, label %720

690:                                              ; preds = %686
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #7
  %691 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 1
  %692 = load ptr, ptr %691, align 8, !tbaa !27
  %693 = getelementptr inbounds [4 x i32], ptr %73, i64 0, i64 3
  %694 = load i32, ptr %693, align 4, !tbaa !9
  %695 = load i32, ptr %74, align 4, !tbaa !9
  %696 = add nsw i32 %694, %695
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds float, ptr %692, i64 %697
  %699 = load float, ptr %698, align 4, !tbaa !26
  store float %699, ptr %82, align 4, !tbaa !26
  %700 = load float, ptr %82, align 4, !tbaa !26
  %701 = load float, ptr %75, align 4, !tbaa !26
  %702 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 12
  %703 = load float, ptr %702, align 16, !tbaa !26
  %704 = call float @llvm.fmuladd.f32(float %700, float %701, float %703)
  store float %704, ptr %702, align 16, !tbaa !26
  %705 = load float, ptr %82, align 4, !tbaa !26
  %706 = load float, ptr %76, align 4, !tbaa !26
  %707 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 13
  %708 = load float, ptr %707, align 4, !tbaa !26
  %709 = call float @llvm.fmuladd.f32(float %705, float %706, float %708)
  store float %709, ptr %707, align 4, !tbaa !26
  %710 = load float, ptr %82, align 4, !tbaa !26
  %711 = load float, ptr %77, align 4, !tbaa !26
  %712 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 14
  %713 = load float, ptr %712, align 8, !tbaa !26
  %714 = call float @llvm.fmuladd.f32(float %710, float %711, float %713)
  store float %714, ptr %712, align 8, !tbaa !26
  %715 = load float, ptr %82, align 4, !tbaa !26
  %716 = load float, ptr %78, align 4, !tbaa !26
  %717 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 15
  %718 = load float, ptr %717, align 4, !tbaa !26
  %719 = call float @llvm.fmuladd.f32(float %715, float %716, float %718)
  store float %719, ptr %717, align 4, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #7
  br label %720

720:                                              ; preds = %690, %686
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #7
  br label %721

721:                                              ; preds = %720
  %722 = load i32, ptr %74, align 4, !tbaa !9
  %723 = add nsw i32 %722, 1
  store i32 %723, ptr %74, align 4, !tbaa !9
  br label %547, !llvm.loop !28

724:                                              ; preds = %551
  call void @llvm.lifetime.end.p0(i64 16, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #7
  br label %725

725:                                              ; preds = %724
  %726 = load i32, ptr %62, align 4, !tbaa !9
  %727 = add nsw i32 %726, 1
  store i32 %727, ptr %62, align 4, !tbaa !9
  br label %426, !llvm.loop !30

728:                                              ; preds = %430
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #7
  br label %729

729:                                              ; preds = %728
  %730 = load i32, ptr %48, align 4, !tbaa !9
  %731 = add nsw i32 %730, 1
  store i32 %731, ptr %48, align 4, !tbaa !9
  br label %324, !llvm.loop !31

732:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #7
  store i32 0, ptr %83, align 4, !tbaa !9
  br label %733

733:                                              ; preds = %767, %732
  %734 = load i32, ptr %83, align 4, !tbaa !9
  %735 = icmp slt i32 %734, 4
  br i1 %735, label %737, label %736

736:                                              ; preds = %733
  store i32 17, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #7
  br label %770

737:                                              ; preds = %733
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #7
  store i32 0, ptr %84, align 4, !tbaa !9
  br label %738

738:                                              ; preds = %763, %737
  %739 = load i32, ptr %84, align 4, !tbaa !9
  %740 = icmp slt i32 %739, 4
  br i1 %740, label %742, label %741

741:                                              ; preds = %738
  store i32 20, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #7
  br label %766

742:                                              ; preds = %738
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #7
  %743 = load i32, ptr %83, align 4, !tbaa !9
  %744 = sext i32 %743 to i64
  %745 = getelementptr inbounds [4 x i32], ptr %37, i64 0, i64 %744
  %746 = load i32, ptr %745, align 4, !tbaa !9
  %747 = load i32, ptr %42, align 4, !tbaa !9
  %748 = add nsw i32 %746, %747
  %749 = load i32, ptr %84, align 4, !tbaa !9
  %750 = add nsw i32 %748, %749
  store i32 %750, ptr %85, align 4, !tbaa !9
  %751 = load i32, ptr %83, align 4, !tbaa !9
  %752 = mul nsw i32 %751, 4
  %753 = load i32, ptr %84, align 4, !tbaa !9
  %754 = add nsw i32 %752, %753
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds [16 x float], ptr %47, i64 0, i64 %755
  %757 = load float, ptr %756, align 4, !tbaa !26
  %758 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %86, i32 0, i32 13
  %759 = load ptr, ptr %758, align 8, !tbaa !32
  %760 = load i32, ptr %85, align 4, !tbaa !9
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds float, ptr %759, i64 %761
  store float %757, ptr %762, align 4, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #7
  br label %763

763:                                              ; preds = %742
  %764 = load i32, ptr %84, align 4, !tbaa !9
  %765 = add nsw i32 %764, 1
  store i32 %765, ptr %84, align 4, !tbaa !9
  br label %738, !llvm.loop !33

766:                                              ; preds = %741
  br label %767

767:                                              ; preds = %766
  %768 = load i32, ptr %83, align 4, !tbaa !9
  %769 = add nsw i32 %768, 1
  store i32 %769, ptr %83, align 4, !tbaa !9
  br label %733, !llvm.loop !34

770:                                              ; preds = %736
  call void @llvm.lifetime.end.p0(i64 64, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  br label %771

771:                                              ; preds = %770
  %772 = load i32, ptr %42, align 4, !tbaa !9
  %773 = add nsw i32 %772, 4
  store i32 %773, ptr %42, align 4, !tbaa !9
  br label %300, !llvm.loop !35

774:                                              ; preds = %304
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %775

775:                                              ; preds = %774
  %776 = load i32, ptr %23, align 4, !tbaa !9
  %777 = add nsw i32 %776, 4
  store i32 %777, ptr %23, align 4, !tbaa !9
  br label %161, !llvm.loop !36

778:                                              ; preds = %165
  store i32 1, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  ret i32 0

779:                                              ; preds = %127
  %780 = load ptr, ptr %13, align 8
  %781 = load i32, ptr %14, align 4
  %782 = insertvalue { ptr, i32 } poison, ptr %780, 0
  %783 = insertvalue { ptr, i32 } %782, i32 %781, 1
  resume { ptr, i32 } %783
}

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

declare void @_ZN5micro4base6LoggerC1EPKcjNS_8LogLevelE(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef, i32 noundef, i32 noundef) unnamed_addr #2

declare noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5micro4base6LoggerlsEPKc(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef) #2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nounwind
declare void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #3

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #6

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 96}
!12 = !{!"_ZTSN5micro3ops10Conv2dBaseE", !13, i64 0, !6, i64 64, !6, i64 72, !10, i64 80, !6, i64 88, !6, i64 96, !10, i64 104, !6, i64 112, !6, i64 120, !10, i64 128, !6, i64 136, !16, i64 144}
!13 = !{!"_ZTSN5micro3ops12FilterOpBaseE", !14, i64 0, !15, i64 32, !6, i64 40, !7, i64 48, !7, i64 56}
!14 = !{!"_ZTSN5micro9framework8OperatorE", !6, i64 8, !6, i64 16, !6, i64 24}
!15 = !{!"_ZTSN5micro3ops7PaddingE", !7, i64 0}
!16 = !{!"_ZTSN5micro3ops10ActivationE", !17, i64 0, !18, i64 4, !18, i64 8}
!17 = !{!"_ZTSN5micro3ops14ActivationTypeE", !7, i64 0}
!18 = !{!"float", !7, i64 0}
!19 = !{!12, !6, i64 72}
!20 = !{!13, !6, i64 40}
!21 = !{!22, !22, i64 0}
!22 = !{!"bool", !7, i64 0}
!23 = !{i8 0, i8 2}
!24 = !{}
!25 = !{!12, !6, i64 88}
!26 = !{!18, !18, i64 0}
!27 = !{!12, !6, i64 64}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}
!31 = distinct !{!31, !29}
!32 = !{!12, !6, i64 136}
!33 = distinct !{!33, !29}
!34 = distinct !{!34, !29}
!35 = distinct !{!35, !29}
!36 = distinct !{!36, !29}


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

%"class.micro::base::Logger" = type { i32 }

@.str = external hidden unnamed_addr constant [77 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [73 x i8], align 1
@__const._ZN5micro3ops12Conv2dC4S4Op7ComputeERA4_i.h_valid = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN5micro3ops12Conv2dC4S4Op7ComputeERA4_i(ptr nocapture noundef nonnull readonly align 8 dereferenceable(156) %0, ptr nocapture noundef nonnull readonly align 4 dereferenceable(16) %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.micro::base::Logger", align 4
  %4 = load i32, ptr %1, align 4, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %1, i64 4
  %6 = load i32, ptr %5, align 4, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %1, i64 8
  %8 = load i32, ptr %7, align 4, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %1, i64 12
  %10 = load i32, ptr %9, align 4, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %0, i64 96
  %12 = load ptr, ptr %11, align 8, !tbaa !9
  %13 = getelementptr inbounds i8, ptr %12, i64 4
  %14 = load i32, ptr %13, align 4, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %12, i64 8
  %16 = load i32, ptr %15, align 4, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %12, i64 12
  %18 = load i32, ptr %17, align 4, !tbaa !5
  %19 = load i32, ptr %12, align 4, !tbaa !5
  %20 = icmp eq i32 %19, %10
  br i1 %20, label %21, label %27

21:                                               ; preds = %2
  %22 = getelementptr inbounds i8, ptr %0, i64 72
  %23 = load ptr, ptr %22, align 8, !tbaa !18
  %24 = getelementptr inbounds i8, ptr %23, i64 12
  %25 = load i32, ptr %24, align 4, !tbaa !5
  %26 = icmp eq i32 %25, %18
  br i1 %26, label %32, label %27

27:                                               ; preds = %21, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #5
  call void @_ZN5micro4base6LoggerC1EPKcjNS_8LogLevelE(ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull @.str, i32 noundef 30, i32 noundef 4)
  %28 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5micro4base6LoggerlsEPKc(ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull @.str.1)
          to label %29 unwind label %30

29:                                               ; preds = %27
  call void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4) %3) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #5
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 72
  %.pre = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !18
  %.phi.trans.insert454 = getelementptr inbounds i8, ptr %.pre, i64 12
  %.pre455 = load i32, ptr %.phi.trans.insert454, align 4, !tbaa !5
  br label %32

30:                                               ; preds = %27
  %31 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4) %3) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #5
  resume { ptr, i32 } %31

32:                                               ; preds = %29, %21
  %33 = phi i32 [ %.pre455, %29 ], [ %18, %21 ]
  %34 = phi ptr [ %.pre, %29 ], [ %23, %21 ]
  %35 = getelementptr inbounds i8, ptr %34, i64 4
  %36 = load i32, ptr %35, align 4, !tbaa !5
  %37 = getelementptr inbounds i8, ptr %34, i64 8
  %38 = load i32, ptr %37, align 4, !tbaa !5
  %39 = getelementptr inbounds i8, ptr %0, i64 48
  %40 = load i32, ptr %39, align 8, !tbaa !5
  %41 = ashr i32 %40, 1
  %42 = getelementptr inbounds i8, ptr %0, i64 52
  %43 = load i32, ptr %42, align 4, !tbaa !5
  %44 = ashr i32 %43, 1
  %45 = mul nsw i32 %6, %4
  %46 = mul nsw i32 %45, %8
  %47 = add nsw i32 %46, -4
  %48 = add nsw i32 %10, -4
  %49 = icmp sgt i32 %46, 0
  br i1 %49, label %.lr.ph413, label %._crit_edge414

.lr.ph413:                                        ; preds = %32
  %50 = getelementptr inbounds i8, ptr %0, i64 40
  %51 = load ptr, ptr %50, align 8, !tbaa !19
  %52 = load i32, ptr %51, align 4, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %51, i64 4
  %54 = load i32, ptr %53, align 4, !tbaa !5
  %55 = icmp sgt i32 %10, 0
  %56 = icmp sgt i32 %14, 0
  %57 = getelementptr inbounds i8, ptr %0, i64 56
  %.sroa.588.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const._ZN5micro3ops12Conv2dC4S4Op7ComputeERA4_i.h_valid, i64 1), align 1
  %.sroa.7.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const._ZN5micro3ops12Conv2dC4S4Op7ComputeERA4_i.h_valid, i64 2), align 1
  %.sroa.9.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const._ZN5micro3ops12Conv2dC4S4Op7ComputeERA4_i.h_valid, i64 3), align 1
  %.sroa.087.0.copyload = load i8, ptr @__const._ZN5micro3ops12Conv2dC4S4Op7ComputeERA4_i.h_valid, align 1
  %58 = icmp sgt i32 %16, 0
  %59 = getelementptr inbounds i8, ptr %0, i64 60
  %60 = trunc i8 %.sroa.087.0.copyload to i1
  %61 = trunc i8 %.sroa.588.0.copyload to i1
  %62 = trunc i8 %.sroa.7.0.copyload to i1
  %63 = trunc i8 %.sroa.9.0.copyload to i1
  %64 = icmp sgt i32 %18, 0
  %65 = getelementptr inbounds i8, ptr %0, i64 88
  %66 = getelementptr inbounds i8, ptr %0, i64 64
  %67 = getelementptr inbounds i8, ptr %0, i64 136
  %68 = load ptr, ptr %67, align 8
  %69 = sext i32 %18 to i64
  %70 = sext i32 %16 to i64
  %wide.trip.count440 = zext nneg i32 %14 to i64
  %wide.trip.count435 = zext nneg i32 %16 to i64
  %wide.trip.count = zext nneg i32 %18 to i64
  br label %71

._crit_edge414:                                   ; preds = %._crit_edge, %32
  ret i32 0

71:                                               ; preds = %.lr.ph413, %._crit_edge
  %.0411 = phi i32 [ 0, %.lr.ph413 ], [ %108, %._crit_edge ]
  %spec.select = call i32 @llvm.smin.i32(i32 %.0411, i32 %47)
  %72 = sdiv i32 %spec.select, %8
  %73 = srem i32 %72, %6
  %74 = add nsw i32 %spec.select, 1
  %75 = sdiv i32 %74, %8
  %76 = srem i32 %75, %6
  %77 = add nsw i32 %spec.select, 2
  %78 = sdiv i32 %77, %8
  %79 = srem i32 %78, %6
  %80 = add nsw i32 %spec.select, 3
  %81 = sdiv i32 %80, %8
  %82 = srem i32 %81, %6
  %83 = mul nsw i32 %52, %73
  %84 = mul nsw i32 %52, %76
  %85 = mul nsw i32 %52, %79
  %86 = mul nsw i32 %52, %82
  %87 = srem i32 %spec.select, %8
  %88 = srem i32 %77, %8
  %89 = mul nsw i32 %spec.select, %10
  %90 = sub nsw i32 %83, %41
  %91 = sub nsw i32 %84, %41
  %92 = sub nsw i32 %85, %41
  %93 = sub nsw i32 %86, %41
  %94 = srem i32 %74, %8
  %95 = srem i32 %80, %8
  %96 = add nsw i32 %89, %10
  %97 = add nsw i32 %96, %10
  %98 = add nsw i32 %97, %10
  %99 = mul nsw i32 %54, %87
  %100 = sub nsw i32 %99, %44
  %101 = mul nsw i32 %54, %94
  %102 = sub nsw i32 %101, %44
  %103 = mul nsw i32 %54, %88
  %104 = sub nsw i32 %103, %44
  %105 = mul nsw i32 %54, %95
  %106 = sub nsw i32 %105, %44
  br i1 %55, label %.lr.ph410, label %._crit_edge

.lr.ph410:                                        ; preds = %71
  %107 = load i32, ptr %57, align 8
  br label %110

._crit_edge:                                      ; preds = %.preheader260, %71
  %108 = add nsw i32 %spec.select, 4
  %109 = icmp slt i32 %108, %46
  br i1 %109, label %71, label %._crit_edge414, !llvm.loop !20

110:                                              ; preds = %.lr.ph410, %.preheader260
  %.0228409 = phi i32 [ 0, %.lr.ph410 ], [ %193, %.preheader260 ]
  %spec.select252 = call i32 @llvm.smin.i32(i32 %.0228409, i32 %48)
  br i1 %56, label %.lr.ph, label %.preheader260

.lr.ph:                                           ; preds = %110
  %111 = mul nsw i32 %spec.select252, %14
  %112 = add nsw i32 %111, %14
  %113 = add nsw i32 %112, %14
  %114 = add nsw i32 %113, %14
  %115 = load i32, ptr %59, align 4
  %116 = load ptr, ptr %65, align 8
  %117 = load ptr, ptr %66, align 8
  %118 = sext i32 %111 to i64
  %119 = sext i32 %112 to i64
  %120 = sext i32 %113 to i64
  %121 = sext i32 %114 to i64
  br label %195

.preheader260:                                    ; preds = %._crit_edge298, %110
  %122 = phi <4 x float> [ zeroinitializer, %110 ], [ %321, %._crit_edge298 ]
  %123 = phi <4 x float> [ zeroinitializer, %110 ], [ %322, %._crit_edge298 ]
  %124 = phi <4 x float> [ zeroinitializer, %110 ], [ %323, %._crit_edge298 ]
  %125 = phi <4 x float> [ zeroinitializer, %110 ], [ %324, %._crit_edge298 ]
  %126 = add i32 %spec.select252, %89
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds float, ptr %68, i64 %127
  %129 = extractelement <4 x float> %122, i64 3
  store float %129, ptr %128, align 4, !tbaa !22
  %130 = add nsw i32 %spec.select252, 1
  %131 = add i32 %130, %89
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds float, ptr %68, i64 %132
  %134 = extractelement <4 x float> %122, i64 0
  store float %134, ptr %133, align 4, !tbaa !22
  %135 = add nsw i32 %spec.select252, 2
  %136 = add i32 %135, %89
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds float, ptr %68, i64 %137
  %139 = extractelement <4 x float> %122, i64 1
  store float %139, ptr %138, align 4, !tbaa !22
  %140 = add nsw i32 %spec.select252, 3
  %141 = add i32 %140, %89
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds float, ptr %68, i64 %142
  %144 = extractelement <4 x float> %122, i64 2
  store float %144, ptr %143, align 4, !tbaa !22
  %145 = add i32 %spec.select252, %96
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds float, ptr %68, i64 %146
  %148 = extractelement <4 x float> %123, i64 0
  store float %148, ptr %147, align 4, !tbaa !22
  %149 = add i32 %130, %96
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds float, ptr %68, i64 %150
  %152 = extractelement <4 x float> %123, i64 1
  store float %152, ptr %151, align 4, !tbaa !22
  %153 = add i32 %135, %96
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds float, ptr %68, i64 %154
  %156 = extractelement <4 x float> %123, i64 2
  store float %156, ptr %155, align 4, !tbaa !22
  %157 = add i32 %140, %96
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds float, ptr %68, i64 %158
  %160 = extractelement <4 x float> %123, i64 3
  store float %160, ptr %159, align 4, !tbaa !22
  %161 = add i32 %spec.select252, %97
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds float, ptr %68, i64 %162
  %164 = extractelement <4 x float> %124, i64 0
  store float %164, ptr %163, align 4, !tbaa !22
  %165 = add i32 %130, %97
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds float, ptr %68, i64 %166
  %168 = extractelement <4 x float> %124, i64 1
  store float %168, ptr %167, align 4, !tbaa !22
  %169 = add i32 %135, %97
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds float, ptr %68, i64 %170
  %172 = extractelement <4 x float> %124, i64 2
  store float %172, ptr %171, align 4, !tbaa !22
  %173 = add i32 %140, %97
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds float, ptr %68, i64 %174
  %176 = extractelement <4 x float> %124, i64 3
  store float %176, ptr %175, align 4, !tbaa !22
  %177 = add i32 %spec.select252, %98
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds float, ptr %68, i64 %178
  %180 = extractelement <4 x float> %125, i64 0
  store float %180, ptr %179, align 4, !tbaa !22
  %181 = add i32 %130, %98
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds float, ptr %68, i64 %182
  %184 = extractelement <4 x float> %125, i64 1
  store float %184, ptr %183, align 4, !tbaa !22
  %185 = add i32 %135, %98
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds float, ptr %68, i64 %186
  %188 = extractelement <4 x float> %125, i64 2
  store float %188, ptr %187, align 4, !tbaa !22
  %189 = add i32 %140, %98
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds float, ptr %68, i64 %190
  %192 = extractelement <4 x float> %125, i64 3
  store float %192, ptr %191, align 4, !tbaa !22
  %193 = add nsw i32 %spec.select252, 4
  %194 = icmp slt i32 %193, %10
  br i1 %194, label %110, label %._crit_edge, !llvm.loop !23

195:                                              ; preds = %.lr.ph, %._crit_edge298
  %indvars.iv437 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next438, %._crit_edge298 ]
  %196 = phi <4 x float> [ zeroinitializer, %.lr.ph ], [ %321, %._crit_edge298 ]
  %197 = phi <4 x float> [ zeroinitializer, %.lr.ph ], [ %322, %._crit_edge298 ]
  %198 = phi <4 x float> [ zeroinitializer, %.lr.ph ], [ %323, %._crit_edge298 ]
  %199 = phi <4 x float> [ zeroinitializer, %.lr.ph ], [ %324, %._crit_edge298 ]
  %200 = trunc i64 %indvars.iv437 to i32
  %201 = mul i32 %107, %200
  %202 = add nsw i32 %201, %90
  %203 = add nsw i32 %201, %91
  %204 = add nsw i32 %201, %92
  %205 = add nsw i32 %201, %93
  %206 = icmp sgt i32 %202, -1
  %.not = icmp slt i32 %202, %36
  %207 = icmp sgt i32 %203, -1
  %.not245 = icmp slt i32 %203, %36
  %208 = icmp sgt i32 %204, -1
  %.not246 = icmp slt i32 %204, %36
  %209 = icmp sgt i32 %205, -1
  %.not247 = icmp slt i32 %205, %36
  %210 = add nsw i64 %indvars.iv437, %118
  %211 = mul nsw i64 %210, %70
  %212 = add nsw i64 %indvars.iv437, %119
  %213 = mul nsw i64 %212, %70
  %214 = add nsw i64 %indvars.iv437, %120
  %215 = mul nsw i64 %214, %70
  %216 = add nsw i64 %indvars.iv437, %121
  %217 = mul nsw i64 %216, %70
  %218 = mul nsw i32 %202, %38
  %219 = mul nsw i32 %203, %38
  %220 = mul nsw i32 %204, %38
  %221 = mul nsw i32 %205, %38
  br i1 %58, label %.lr.ph297, label %._crit_edge298

.lr.ph297:                                        ; preds = %195
  br i1 %64, label %.lr.ph.us, label %._crit_edge298

.lr.ph.us:                                        ; preds = %.lr.ph297, %._crit_edge.us
  %indvars.iv432 = phi i64 [ %indvars.iv.next433, %._crit_edge.us ], [ 0, %.lr.ph297 ]
  %222 = phi <4 x float> [ %287, %._crit_edge.us ], [ %196, %.lr.ph297 ]
  %223 = phi <4 x float> [ %298, %._crit_edge.us ], [ %197, %.lr.ph297 ]
  %224 = phi <4 x float> [ %309, %._crit_edge.us ], [ %198, %.lr.ph297 ]
  %225 = phi <4 x float> [ %320, %._crit_edge.us ], [ %199, %.lr.ph297 ]
  %226 = trunc i64 %indvars.iv432 to i32
  %227 = mul i32 %115, %226
  %228 = add nsw i32 %227, %100
  %229 = add nsw i32 %227, %102
  %230 = add nsw i32 %227, %104
  %231 = add nsw i32 %227, %106
  %232 = icmp sgt i32 %228, -1
  %.not248.us = icmp slt i32 %228, %38
  %or.cond256.us = select i1 %232, i1 %.not248.us, i1 false
  %233 = select i1 %or.cond256.us, i1 %206, i1 false
  %234 = select i1 %233, i1 %.not, i1 false
  %235 = icmp sgt i32 %229, -1
  %.not249.us = icmp slt i32 %229, %38
  %or.cond257.us = select i1 %235, i1 %.not249.us, i1 false
  %236 = select i1 %or.cond257.us, i1 %207, i1 false
  %237 = select i1 %236, i1 %.not245, i1 false
  %238 = icmp sgt i32 %230, -1
  %.not250.us = icmp slt i32 %230, %38
  %or.cond258.us = select i1 %238, i1 %.not250.us, i1 false
  %239 = select i1 %or.cond258.us, i1 %208, i1 false
  %240 = select i1 %239, i1 %.not246, i1 false
  %241 = icmp sgt i32 %231, -1
  %.not251.us = icmp slt i32 %231, %38
  %or.cond259.us = select i1 %241, i1 %.not251.us, i1 false
  %242 = select i1 %or.cond259.us, i1 %209, i1 false
  %243 = select i1 %242, i1 %.not247, i1 false
  %244 = add nsw i64 %indvars.iv432, %211
  %245 = mul nsw i64 %244, %69
  %246 = add nsw i64 %indvars.iv432, %213
  %247 = mul nsw i64 %246, %69
  %248 = add nsw i64 %indvars.iv432, %215
  %249 = mul nsw i64 %248, %69
  %250 = add nsw i64 %indvars.iv432, %217
  %251 = mul nsw i64 %250, %69
  %252 = add nsw i32 %228, %218
  %253 = mul nsw i32 %252, %33
  %254 = add nsw i32 %229, %219
  %255 = mul nsw i32 %254, %33
  %256 = add nsw i32 %230, %220
  %257 = mul nsw i32 %256, %33
  %258 = add nsw i32 %231, %221
  %259 = mul nsw i32 %258, %33
  %260 = select i1 %234, i1 %60, i1 false
  %261 = select i1 %237, i1 %61, i1 false
  %262 = select i1 %240, i1 %62, i1 false
  %263 = select i1 %243, i1 %63, i1 false
  %264 = sext i32 %253 to i64
  %265 = sext i32 %255 to i64
  %266 = sext i32 %257 to i64
  %267 = sext i32 %259 to i64
  %invariant.gep = getelementptr float, ptr %116, i64 %245
  %invariant.gep471 = getelementptr float, ptr %116, i64 %247
  %invariant.gep473 = getelementptr float, ptr %116, i64 %249
  %invariant.gep475 = getelementptr float, ptr %116, i64 %251
  %invariant.gep477 = getelementptr float, ptr %117, i64 %264
  %invariant.gep479 = getelementptr float, ptr %117, i64 %265
  %invariant.gep481 = getelementptr float, ptr %117, i64 %266
  %invariant.gep483 = getelementptr float, ptr %117, i64 %267
  br label %268

268:                                              ; preds = %.lr.ph.us, %319
  %indvars.iv = phi i64 [ 0, %.lr.ph.us ], [ %indvars.iv.next, %319 ]
  %269 = phi <4 x float> [ %222, %.lr.ph.us ], [ %287, %319 ]
  %270 = phi <4 x float> [ %223, %.lr.ph.us ], [ %298, %319 ]
  %271 = phi <4 x float> [ %224, %.lr.ph.us ], [ %309, %319 ]
  %272 = phi <4 x float> [ %225, %.lr.ph.us ], [ %320, %319 ]
  %gep = getelementptr float, ptr %invariant.gep, i64 %indvars.iv
  %273 = load float, ptr %gep, align 4, !tbaa !22
  %gep472 = getelementptr float, ptr %invariant.gep471, i64 %indvars.iv
  %274 = load float, ptr %gep472, align 4, !tbaa !22
  %gep474 = getelementptr float, ptr %invariant.gep473, i64 %indvars.iv
  %275 = load float, ptr %gep474, align 4, !tbaa !22
  %gep476 = getelementptr float, ptr %invariant.gep475, i64 %indvars.iv
  %276 = load float, ptr %gep476, align 4, !tbaa !22
  br i1 %260, label %277, label %286

277:                                              ; preds = %268
  %gep478 = getelementptr float, ptr %invariant.gep477, i64 %indvars.iv
  %278 = load float, ptr %gep478, align 4, !tbaa !22
  %279 = insertelement <4 x float> poison, float %278, i64 0
  %280 = shufflevector <4 x float> %279, <4 x float> poison, <4 x i32> zeroinitializer
  %281 = insertelement <4 x float> poison, float %274, i64 0
  %282 = insertelement <4 x float> %281, float %275, i64 1
  %283 = insertelement <4 x float> %282, float %276, i64 2
  %284 = insertelement <4 x float> %283, float %273, i64 3
  %285 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %280, <4 x float> %284, <4 x float> %269)
  br label %286

286:                                              ; preds = %277, %268
  %287 = phi <4 x float> [ %285, %277 ], [ %269, %268 ]
  br i1 %261, label %288, label %297

288:                                              ; preds = %286
  %gep480 = getelementptr float, ptr %invariant.gep479, i64 %indvars.iv
  %289 = load float, ptr %gep480, align 4, !tbaa !22
  %290 = insertelement <4 x float> poison, float %289, i64 0
  %291 = shufflevector <4 x float> %290, <4 x float> poison, <4 x i32> zeroinitializer
  %292 = insertelement <4 x float> poison, float %273, i64 0
  %293 = insertelement <4 x float> %292, float %274, i64 1
  %294 = insertelement <4 x float> %293, float %275, i64 2
  %295 = insertelement <4 x float> %294, float %276, i64 3
  %296 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %291, <4 x float> %295, <4 x float> %270)
  br label %297

297:                                              ; preds = %288, %286
  %298 = phi <4 x float> [ %296, %288 ], [ %270, %286 ]
  br i1 %262, label %299, label %308

299:                                              ; preds = %297
  %gep482 = getelementptr float, ptr %invariant.gep481, i64 %indvars.iv
  %300 = load float, ptr %gep482, align 4, !tbaa !22
  %301 = insertelement <4 x float> poison, float %300, i64 0
  %302 = shufflevector <4 x float> %301, <4 x float> poison, <4 x i32> zeroinitializer
  %303 = insertelement <4 x float> poison, float %273, i64 0
  %304 = insertelement <4 x float> %303, float %274, i64 1
  %305 = insertelement <4 x float> %304, float %275, i64 2
  %306 = insertelement <4 x float> %305, float %276, i64 3
  %307 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %302, <4 x float> %306, <4 x float> %271)
  br label %308

308:                                              ; preds = %299, %297
  %309 = phi <4 x float> [ %307, %299 ], [ %271, %297 ]
  br i1 %263, label %310, label %319

310:                                              ; preds = %308
  %gep484 = getelementptr float, ptr %invariant.gep483, i64 %indvars.iv
  %311 = load float, ptr %gep484, align 4, !tbaa !22
  %312 = insertelement <4 x float> poison, float %311, i64 0
  %313 = shufflevector <4 x float> %312, <4 x float> poison, <4 x i32> zeroinitializer
  %314 = insertelement <4 x float> poison, float %273, i64 0
  %315 = insertelement <4 x float> %314, float %274, i64 1
  %316 = insertelement <4 x float> %315, float %275, i64 2
  %317 = insertelement <4 x float> %316, float %276, i64 3
  %318 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %313, <4 x float> %317, <4 x float> %272)
  br label %319

319:                                              ; preds = %310, %308
  %320 = phi <4 x float> [ %318, %310 ], [ %272, %308 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.us, label %268, !llvm.loop !24

._crit_edge.us:                                   ; preds = %319
  %indvars.iv.next433 = add nuw nsw i64 %indvars.iv432, 1
  %exitcond436.not = icmp eq i64 %indvars.iv.next433, %wide.trip.count435
  br i1 %exitcond436.not, label %._crit_edge298, label %.lr.ph.us, !llvm.loop !25

._crit_edge298:                                   ; preds = %._crit_edge.us, %.lr.ph297, %195
  %321 = phi <4 x float> [ %196, %195 ], [ %196, %.lr.ph297 ], [ %287, %._crit_edge.us ]
  %322 = phi <4 x float> [ %197, %195 ], [ %197, %.lr.ph297 ], [ %298, %._crit_edge.us ]
  %323 = phi <4 x float> [ %198, %195 ], [ %198, %.lr.ph297 ], [ %309, %._crit_edge.us ]
  %324 = phi <4 x float> [ %199, %195 ], [ %199, %.lr.ph297 ], [ %320, %._crit_edge.us ]
  %indvars.iv.next438 = add nuw nsw i64 %indvars.iv437, 1
  %exitcond441.not = icmp eq i64 %indvars.iv.next438, %wide.trip.count440
  br i1 %exitcond441.not, label %.preheader260, label %195, !llvm.loop !26
}

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

declare void @_ZN5micro4base6LoggerC1EPKcjNS_8LogLevelE(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef, i32 noundef, i32 noundef) unnamed_addr #2

declare noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5micro4base6LoggerlsEPKc(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef) local_unnamed_addr #2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nounwind
declare void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #3

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #4

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !13, i64 96}
!10 = !{!"_ZTSN5micro3ops10Conv2dBaseE", !11, i64 0, !13, i64 64, !13, i64 72, !6, i64 80, !13, i64 88, !13, i64 96, !6, i64 104, !13, i64 112, !13, i64 120, !6, i64 128, !13, i64 136, !15, i64 144}
!11 = !{!"_ZTSN5micro3ops12FilterOpBaseE", !12, i64 0, !14, i64 32, !13, i64 40, !7, i64 48, !7, i64 56}
!12 = !{!"_ZTSN5micro9framework8OperatorE", !13, i64 8, !13, i64 16, !13, i64 24}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!"_ZTSN5micro3ops7PaddingE", !7, i64 0}
!15 = !{!"_ZTSN5micro3ops10ActivationE", !16, i64 0, !17, i64 4, !17, i64 8}
!16 = !{!"_ZTSN5micro3ops14ActivationTypeE", !7, i64 0}
!17 = !{!"float", !7, i64 0}
!18 = !{!10, !13, i64 72}
!19 = !{!11, !13, i64 40}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!17, !17, i64 0}
!23 = distinct !{!23, !21}
!24 = distinct !{!24, !21}
!25 = distinct !{!25, !21}
!26 = distinct !{!26, !21}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass