; LLVM IR from XiaoMi/mace :: micro/ops/nhwc (depthwise_conv_2d_kb2_s4)

; 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::framework::ScratchBuffer" = type <{ ptr, i32, [4 x i8] }>
%"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 [88 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [43 x i8], align 1
@__const._ZN5micro3ops22DepthwiseConv2dKB2S4Op7ComputeERA4_i.h_valid = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN5micro3ops22DepthwiseConv2dKB2S4Op7ComputeERA4_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 i32, align 4
  %13 = alloca %"class.micro::base::Logger", align 4
  %14 = alloca ptr, align 8
  %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 i32, align 4
  %38 = alloca [4 x i32], align 16
  %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 ptr, align 8
  %48 = alloca %"class.micro::framework::ScratchBuffer", align 8
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca [4 x i8], align 1
  %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 [4 x i8], align 1
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca [4 x i32], align 16
  %71 = alloca i32, align 4
  %72 = alloca ptr, align 8
  %73 = alloca float, align 4
  %74 = alloca float, align 4
  %75 = alloca float, align 4
  %76 = alloca float, align 4
  %77 = alloca float, align 4
  %78 = alloca float, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %85 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  %86 = load ptr, ptr %4, align 8, !tbaa !5
  %87 = getelementptr inbounds [4 x i32], ptr %86, i64 0, i64 0
  %88 = load i32, ptr %87, align 4, !tbaa !9
  store i32 %88, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  %89 = load ptr, ptr %4, align 8, !tbaa !5
  %90 = getelementptr inbounds [4 x i32], ptr %89, i64 0, i64 1
  %91 = load i32, ptr %90, align 4, !tbaa !9
  store i32 %91, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  %92 = load ptr, ptr %4, align 8, !tbaa !5
  %93 = getelementptr inbounds [4 x i32], ptr %92, i64 0, i64 2
  %94 = load i32, ptr %93, align 4, !tbaa !9
  store i32 %94, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  %95 = load ptr, ptr %4, align 8, !tbaa !5
  %96 = getelementptr inbounds [4 x i32], ptr %95, i64 0, i64 3
  %97 = load i32, ptr %96, align 4, !tbaa !9
  store i32 %97, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  %98 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 6
  %99 = load ptr, ptr %98, align 8, !tbaa !11
  %100 = getelementptr inbounds i32, ptr %99, i64 0
  %101 = load i32, ptr %100, align 4, !tbaa !9
  store i32 %101, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  %102 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 6
  %103 = load ptr, ptr %102, align 8, !tbaa !11
  %104 = getelementptr inbounds i32, ptr %103, i64 1
  %105 = load i32, ptr %104, align 4, !tbaa !9
  store i32 %105, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  %106 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 6
  %107 = load ptr, ptr %106, align 8, !tbaa !11
  %108 = getelementptr inbounds i32, ptr %107, i64 2
  %109 = load i32, ptr %108, align 4, !tbaa !9
  store i32 %109, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  %110 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 6
  %111 = load ptr, ptr %110, align 8, !tbaa !11
  %112 = getelementptr inbounds i32, ptr %111, i64 3
  %113 = load i32, ptr %112, align 4, !tbaa !9
  store i32 %113, ptr %12, align 4, !tbaa !9
  %114 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 2
  %115 = load ptr, ptr %114, align 8, !tbaa !19
  %116 = getelementptr inbounds i32, ptr %115, i64 3
  %117 = load i32, ptr %116, align 4, !tbaa !9
  %118 = load i32, ptr %12, align 4, !tbaa !9
  %119 = icmp eq i32 %117, %118
  br i1 %119, label %127, label %120

120:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  call void @_ZN5micro4base6LoggerC1EPKcjNS_8LogLevelE(ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef @.str, i32 noundef 33, i32 noundef 4)
  %121 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5micro4base6LoggerlsEPKc(ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef @.str.1)
          to label %122 unwind label %123

122:                                              ; preds = %120
  call void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4) %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %127

123:                                              ; preds = %120
  %124 = landingpad { ptr, i32 }
          cleanup
  %125 = extractvalue { ptr, i32 } %124, 0
  store ptr %125, ptr %14, align 8
  %126 = extractvalue { ptr, i32 } %124, 1
  store i32 %126, ptr %15, align 4
  call void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4) %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %740

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

157:                                              ; preds = %736, %127
  %158 = load i32, ptr %24, align 4, !tbaa !9
  %159 = load i32, ptr %21, align 4, !tbaa !9
  %160 = icmp slt i32 %158, %159
  br i1 %160, label %162, label %161

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

162:                                              ; preds = %157
  %163 = load i32, ptr %24, align 4, !tbaa !9
  %164 = load i32, ptr %22, align 4, !tbaa !9
  %165 = icmp sgt i32 %163, %164
  br i1 %165, label %166, label %169

166:                                              ; preds = %162
  %167 = load i32, ptr %21, align 4, !tbaa !9
  %168 = sub nsw i32 %167, 4
  store i32 %168, ptr %24, align 4, !tbaa !9
  br label %169

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

245:                                              ; preds = %245, %169
  %246 = phi ptr [ %243, %169 ], [ %247, %245 ]
  store i32 0, ptr %246, align 4, !tbaa !9
  %247 = getelementptr inbounds i32, ptr %246, i64 1
  %248 = icmp eq ptr %247, %244
  br i1 %248, label %249, label %245

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

297:                                              ; preds = %732, %249
  %298 = load i32, ptr %43, align 4, !tbaa !9
  %299 = load i32, ptr %9, align 4, !tbaa !9
  %300 = icmp slt i32 %298, %299
  br i1 %300, label %302, label %301

301:                                              ; preds = %297
  store i32 5, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  br label %735

302:                                              ; preds = %297
  %303 = load i32, ptr %43, align 4, !tbaa !9
  %304 = load i32, ptr %23, align 4, !tbaa !9
  %305 = icmp sgt i32 %303, %304
  br i1 %305, label %306, label %309

306:                                              ; preds = %302
  %307 = load i32, ptr %9, align 4, !tbaa !9
  %308 = sub nsw i32 %307, 2
  store i32 %308, ptr %43, align 4, !tbaa !9
  br label %309

309:                                              ; preds = %306, %302
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  %310 = load i32, ptr %43, align 4, !tbaa !9
  %311 = load i32, ptr %10, align 4, !tbaa !9
  %312 = mul nsw i32 %310, %311
  store i32 %312, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #7
  %313 = load i32, ptr %44, align 4, !tbaa !9
  %314 = load i32, ptr %10, align 4, !tbaa !9
  %315 = add nsw i32 %313, %314
  store i32 %315, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #7
  %316 = load i32, ptr %12, align 4, !tbaa !9
  %317 = mul nsw i32 %316, 8
  store i32 %317, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #7
  %318 = getelementptr inbounds %"class.micro::framework::Operator", ptr %85, i32 0, i32 2
  %319 = load ptr, ptr %318, align 8, !tbaa !21
  call void @_ZN5micro9framework13ScratchBufferC1EPNS_21MaceMicroEngineConfigE(ptr noundef nonnull align 8 dereferenceable(12) %48, ptr noundef %319)
  %320 = load i32, ptr %46, align 4, !tbaa !9
  %321 = invoke noundef ptr @_ZN5micro9framework13ScratchBuffer9GetBufferIfEEPT_i(ptr noundef nonnull align 8 dereferenceable(12) %48, i32 noundef %320)
          to label %322 unwind label %330

322:                                              ; preds = %309
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %48) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #7
  store ptr %321, ptr %47, align 8, !tbaa !5
  %323 = load ptr, ptr %47, align 8, !tbaa !5
  %324 = load i32, ptr %46, align 4, !tbaa !9
  call void @_ZN5micro4base6memsetIfEEvPT_S2_j(ptr noundef %323, float noundef 0.000000e+00, i32 noundef %324)
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #7
  store i32 0, ptr %49, align 4, !tbaa !9
  br label %325

325:                                              ; preds = %671, %322
  %326 = load i32, ptr %49, align 4, !tbaa !9
  %327 = load i32, ptr %10, align 4, !tbaa !9
  %328 = icmp slt i32 %326, %327
  br i1 %328, label %334, label %329

329:                                              ; preds = %325
  store i32 8, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #7
  br label %674

330:                                              ; preds = %309
  %331 = landingpad { ptr, i32 }
          cleanup
  %332 = extractvalue { ptr, i32 } %331, 0
  store ptr %332, ptr %14, align 8
  %333 = extractvalue { ptr, i32 } %331, 1
  store i32 %333, ptr %15, align 4
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %48) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  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 16, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 4, 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 %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  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
  br label %740

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

365:                                              ; preds = %334
  %366 = load i32, ptr %50, align 4, !tbaa !9
  %367 = load i32, ptr %16, align 4, !tbaa !9
  %368 = icmp sge i32 %366, %367
  br i1 %368, label %369, label %371

369:                                              ; preds = %365, %334
  %370 = getelementptr inbounds [4 x i8], ptr %54, i64 0, i64 0
  store i8 0, ptr %370, align 1, !tbaa !22
  br label %371

371:                                              ; preds = %369, %365
  %372 = load i32, ptr %51, align 4, !tbaa !9
  %373 = icmp slt i32 %372, 0
  br i1 %373, label %378, label %374

374:                                              ; preds = %371
  %375 = load i32, ptr %51, align 4, !tbaa !9
  %376 = load i32, ptr %16, align 4, !tbaa !9
  %377 = icmp sge i32 %375, %376
  br i1 %377, label %378, label %380

378:                                              ; preds = %374, %371
  %379 = getelementptr inbounds [4 x i8], ptr %54, i64 0, i64 1
  store i8 0, ptr %379, align 1, !tbaa !22
  br label %380

380:                                              ; preds = %378, %374
  %381 = load i32, ptr %52, align 4, !tbaa !9
  %382 = icmp slt i32 %381, 0
  br i1 %382, label %387, label %383

383:                                              ; preds = %380
  %384 = load i32, ptr %52, align 4, !tbaa !9
  %385 = load i32, ptr %16, align 4, !tbaa !9
  %386 = icmp sge i32 %384, %385
  br i1 %386, label %387, label %389

387:                                              ; preds = %383, %380
  %388 = getelementptr inbounds [4 x i8], ptr %54, i64 0, i64 2
  store i8 0, ptr %388, align 1, !tbaa !22
  br label %389

389:                                              ; preds = %387, %383
  %390 = load i32, ptr %53, align 4, !tbaa !9
  %391 = icmp slt i32 %390, 0
  br i1 %391, label %396, label %392

392:                                              ; preds = %389
  %393 = load i32, ptr %53, align 4, !tbaa !9
  %394 = load i32, ptr %16, align 4, !tbaa !9
  %395 = icmp sge i32 %393, %394
  br i1 %395, label %396, label %398

396:                                              ; preds = %392, %389
  %397 = getelementptr inbounds [4 x i8], ptr %54, i64 0, i64 3
  store i8 0, ptr %397, align 1, !tbaa !22
  br label %398

398:                                              ; preds = %396, %392
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #7
  %399 = load i32, ptr %44, align 4, !tbaa !9
  %400 = load i32, ptr %49, align 4, !tbaa !9
  %401 = add nsw i32 %399, %400
  %402 = load i32, ptr %11, 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 %49, align 4, !tbaa !9
  %406 = add nsw i32 %404, %405
  %407 = load i32, ptr %11, 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 %50, align 4, !tbaa !9
  %410 = load i32, ptr %17, align 4, !tbaa !9
  %411 = mul nsw i32 %409, %410
  store i32 %411, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #7
  %412 = load i32, ptr %51, align 4, !tbaa !9
  %413 = load i32, ptr %17, align 4, !tbaa !9
  %414 = mul nsw i32 %412, %413
  store i32 %414, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #7
  %415 = load i32, ptr %52, align 4, !tbaa !9
  %416 = load i32, ptr %17, align 4, !tbaa !9
  %417 = mul nsw i32 %415, %416
  store i32 %417, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #7
  %418 = load i32, ptr %53, align 4, !tbaa !9
  %419 = load i32, ptr %17, align 4, !tbaa !9
  %420 = mul nsw i32 %418, %419
  store i32 %420, ptr %60, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #7
  store i32 0, ptr %61, align 4, !tbaa !9
  br label %421

421:                                              ; preds = %667, %398
  %422 = load i32, ptr %61, align 4, !tbaa !9
  %423 = load i32, ptr %11, align 4, !tbaa !9
  %424 = icmp slt i32 %422, %423
  br i1 %424, label %426, label %425

425:                                              ; preds = %421
  store i32 11, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #7
  br label %670

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

465:                                              ; preds = %426
  %466 = load i32, ptr %63, align 4, !tbaa !9
  %467 = load i32, ptr %17, align 4, !tbaa !9
  %468 = icmp sge i32 %466, %467
  br i1 %468, label %469, label %471

469:                                              ; preds = %465, %426
  %470 = getelementptr inbounds [4 x i8], ptr %67, i64 0, i64 0
  store i8 0, ptr %470, align 1, !tbaa !22
  br label %471

471:                                              ; preds = %469, %465
  %472 = load i32, ptr %64, align 4, !tbaa !9
  %473 = icmp slt i32 %472, 0
  br i1 %473, label %478, label %474

474:                                              ; preds = %471
  %475 = load i32, ptr %64, align 4, !tbaa !9
  %476 = load i32, ptr %17, align 4, !tbaa !9
  %477 = icmp sge i32 %475, %476
  br i1 %477, label %478, label %480

478:                                              ; preds = %474, %471
  %479 = getelementptr inbounds [4 x i8], ptr %67, i64 0, i64 1
  store i8 0, ptr %479, align 1, !tbaa !22
  br label %480

480:                                              ; preds = %478, %474
  %481 = load i32, ptr %65, align 4, !tbaa !9
  %482 = icmp slt i32 %481, 0
  br i1 %482, label %487, label %483

483:                                              ; preds = %480
  %484 = load i32, ptr %65, align 4, !tbaa !9
  %485 = load i32, ptr %17, align 4, !tbaa !9
  %486 = icmp sge i32 %484, %485
  br i1 %486, label %487, label %489

487:                                              ; preds = %483, %480
  %488 = getelementptr inbounds [4 x i8], ptr %67, i64 0, i64 2
  store i8 0, ptr %488, align 1, !tbaa !22
  br label %489

489:                                              ; preds = %487, %483
  %490 = load i32, ptr %66, align 4, !tbaa !9
  %491 = icmp slt i32 %490, 0
  br i1 %491, label %496, label %492

492:                                              ; preds = %489
  %493 = load i32, ptr %66, align 4, !tbaa !9
  %494 = load i32, ptr %17, align 4, !tbaa !9
  %495 = icmp sge i32 %493, %494
  br i1 %495, label %496, label %498

496:                                              ; preds = %492, %489
  %497 = getelementptr inbounds [4 x i8], ptr %67, i64 0, i64 3
  store i8 0, ptr %497, align 1, !tbaa !22
  br label %498

498:                                              ; preds = %496, %492
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #7
  %499 = load i32, ptr %55, align 4, !tbaa !9
  %500 = load i32, ptr %61, align 4, !tbaa !9
  %501 = add nsw i32 %499, %500
  %502 = load i32, ptr %12, align 4, !tbaa !9
  %503 = mul nsw i32 %501, %502
  store i32 %503, ptr %68, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #7
  %504 = load i32, ptr %56, align 4, !tbaa !9
  %505 = load i32, ptr %61, align 4, !tbaa !9
  %506 = add nsw i32 %504, %505
  %507 = load i32, ptr %12, 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 16, ptr %70) #7
  %509 = load i32, ptr %57, align 4, !tbaa !9
  %510 = load i32, ptr %63, align 4, !tbaa !9
  %511 = add nsw i32 %509, %510
  %512 = load i32, ptr %18, align 4, !tbaa !9
  %513 = mul nsw i32 %511, %512
  store i32 %513, ptr %70, align 4, !tbaa !9
  %514 = getelementptr inbounds i32, ptr %70, i64 1
  %515 = load i32, ptr %58, align 4, !tbaa !9
  %516 = load i32, ptr %64, align 4, !tbaa !9
  %517 = add nsw i32 %515, %516
  %518 = load i32, ptr %18, align 4, !tbaa !9
  %519 = mul nsw i32 %517, %518
  store i32 %519, ptr %514, align 4, !tbaa !9
  %520 = getelementptr inbounds i32, ptr %70, i64 2
  %521 = load i32, ptr %59, align 4, !tbaa !9
  %522 = load i32, ptr %65, align 4, !tbaa !9
  %523 = add nsw i32 %521, %522
  %524 = load i32, ptr %18, align 4, !tbaa !9
  %525 = mul nsw i32 %523, %524
  store i32 %525, ptr %520, align 4, !tbaa !9
  %526 = getelementptr inbounds i32, ptr %70, i64 3
  %527 = load i32, ptr %60, align 4, !tbaa !9
  %528 = load i32, ptr %66, align 4, !tbaa !9
  %529 = add nsw i32 %527, %528
  %530 = load i32, ptr %18, align 4, !tbaa !9
  %531 = mul nsw i32 %529, %530
  store i32 %531, ptr %526, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #7
  store i32 0, ptr %71, align 4, !tbaa !9
  br label %532

532:                                              ; preds = %663, %498
  %533 = load i32, ptr %71, align 4, !tbaa !9
  %534 = load i32, ptr %12, align 4, !tbaa !9
  %535 = icmp slt i32 %533, %534
  br i1 %535, label %537, label %536

536:                                              ; preds = %532
  store i32 14, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #7
  br label %666

537:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #7
  %538 = load ptr, ptr %47, align 8, !tbaa !5
  %539 = load i32, ptr %71, align 4, !tbaa !9
  %540 = mul nsw i32 %539, 8
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds float, ptr %538, i64 %541
  store ptr %542, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #7
  %543 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 5
  %544 = load ptr, ptr %543, align 8, !tbaa !26
  %545 = load i32, ptr %68, align 4, !tbaa !9
  %546 = load i32, ptr %71, align 4, !tbaa !9
  %547 = add nsw i32 %545, %546
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds float, ptr %544, i64 %548
  %550 = load float, ptr %549, align 4, !tbaa !27
  store float %550, ptr %73, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #7
  %551 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 5
  %552 = load ptr, ptr %551, align 8, !tbaa !26
  %553 = load i32, ptr %69, align 4, !tbaa !9
  %554 = load i32, ptr %71, align 4, !tbaa !9
  %555 = add nsw i32 %553, %554
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds float, ptr %552, i64 %556
  %558 = load float, ptr %557, align 4, !tbaa !27
  store float %558, ptr %74, align 4, !tbaa !27
  %559 = getelementptr inbounds [4 x i8], ptr %67, i64 0, i64 0
  %560 = load i8, ptr %559, align 1, !tbaa !22, !range !24, !noundef !25
  %561 = trunc i8 %560 to i1
  br i1 %561, label %562, label %584

562:                                              ; preds = %537
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #7
  %563 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 1
  %564 = load ptr, ptr %563, align 8, !tbaa !28
  %565 = getelementptr inbounds [4 x i32], ptr %70, i64 0, i64 0
  %566 = load i32, ptr %565, align 16, !tbaa !9
  %567 = load i32, ptr %71, align 4, !tbaa !9
  %568 = add nsw i32 %566, %567
  %569 = sext i32 %568 to i64
  %570 = getelementptr inbounds float, ptr %564, i64 %569
  %571 = load float, ptr %570, align 4, !tbaa !27
  store float %571, ptr %75, align 4, !tbaa !27
  %572 = load float, ptr %75, align 4, !tbaa !27
  %573 = load float, ptr %73, align 4, !tbaa !27
  %574 = load ptr, ptr %72, align 8, !tbaa !5
  %575 = getelementptr inbounds float, ptr %574, i64 0
  %576 = load float, ptr %575, align 4, !tbaa !27
  %577 = call float @llvm.fmuladd.f32(float %572, float %573, float %576)
  store float %577, ptr %575, align 4, !tbaa !27
  %578 = load float, ptr %75, align 4, !tbaa !27
  %579 = load float, ptr %74, align 4, !tbaa !27
  %580 = load ptr, ptr %72, align 8, !tbaa !5
  %581 = getelementptr inbounds float, ptr %580, i64 1
  %582 = load float, ptr %581, align 4, !tbaa !27
  %583 = call float @llvm.fmuladd.f32(float %578, float %579, float %582)
  store float %583, ptr %581, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #7
  br label %584

584:                                              ; preds = %562, %537
  %585 = getelementptr inbounds [4 x i8], ptr %67, i64 0, i64 1
  %586 = load i8, ptr %585, align 1, !tbaa !22, !range !24, !noundef !25
  %587 = trunc i8 %586 to i1
  br i1 %587, label %588, label %610

588:                                              ; preds = %584
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #7
  %589 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 1
  %590 = load ptr, ptr %589, align 8, !tbaa !28
  %591 = getelementptr inbounds [4 x i32], ptr %70, i64 0, i64 1
  %592 = load i32, ptr %591, align 4, !tbaa !9
  %593 = load i32, ptr %71, 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 !27
  store float %597, ptr %76, align 4, !tbaa !27
  %598 = load float, ptr %76, align 4, !tbaa !27
  %599 = load float, ptr %73, align 4, !tbaa !27
  %600 = load ptr, ptr %72, align 8, !tbaa !5
  %601 = getelementptr inbounds float, ptr %600, i64 2
  %602 = load float, ptr %601, align 4, !tbaa !27
  %603 = call float @llvm.fmuladd.f32(float %598, float %599, float %602)
  store float %603, ptr %601, align 4, !tbaa !27
  %604 = load float, ptr %76, align 4, !tbaa !27
  %605 = load float, ptr %74, align 4, !tbaa !27
  %606 = load ptr, ptr %72, align 8, !tbaa !5
  %607 = getelementptr inbounds float, ptr %606, i64 3
  %608 = load float, ptr %607, align 4, !tbaa !27
  %609 = call float @llvm.fmuladd.f32(float %604, float %605, float %608)
  store float %609, ptr %607, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #7
  br label %610

610:                                              ; preds = %588, %584
  %611 = getelementptr inbounds [4 x i8], ptr %67, i64 0, i64 2
  %612 = load i8, ptr %611, align 1, !tbaa !22, !range !24, !noundef !25
  %613 = trunc i8 %612 to i1
  br i1 %613, label %614, label %636

614:                                              ; preds = %610
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #7
  %615 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 1
  %616 = load ptr, ptr %615, align 8, !tbaa !28
  %617 = getelementptr inbounds [4 x i32], ptr %70, i64 0, i64 2
  %618 = load i32, ptr %617, align 8, !tbaa !9
  %619 = load i32, ptr %71, align 4, !tbaa !9
  %620 = add nsw i32 %618, %619
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds float, ptr %616, i64 %621
  %623 = load float, ptr %622, align 4, !tbaa !27
  store float %623, ptr %77, align 4, !tbaa !27
  %624 = load float, ptr %77, align 4, !tbaa !27
  %625 = load float, ptr %73, align 4, !tbaa !27
  %626 = load ptr, ptr %72, align 8, !tbaa !5
  %627 = getelementptr inbounds float, ptr %626, i64 4
  %628 = load float, ptr %627, align 4, !tbaa !27
  %629 = call float @llvm.fmuladd.f32(float %624, float %625, float %628)
  store float %629, ptr %627, align 4, !tbaa !27
  %630 = load float, ptr %77, align 4, !tbaa !27
  %631 = load float, ptr %74, align 4, !tbaa !27
  %632 = load ptr, ptr %72, align 8, !tbaa !5
  %633 = getelementptr inbounds float, ptr %632, i64 5
  %634 = load float, ptr %633, align 4, !tbaa !27
  %635 = call float @llvm.fmuladd.f32(float %630, float %631, float %634)
  store float %635, ptr %633, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #7
  br label %636

636:                                              ; preds = %614, %610
  %637 = getelementptr inbounds [4 x i8], ptr %67, i64 0, i64 3
  %638 = load i8, ptr %637, align 1, !tbaa !22, !range !24, !noundef !25
  %639 = trunc i8 %638 to i1
  br i1 %639, label %640, label %662

640:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #7
  %641 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 1
  %642 = load ptr, ptr %641, align 8, !tbaa !28
  %643 = getelementptr inbounds [4 x i32], ptr %70, i64 0, i64 3
  %644 = load i32, ptr %643, align 4, !tbaa !9
  %645 = load i32, ptr %71, align 4, !tbaa !9
  %646 = add nsw i32 %644, %645
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds float, ptr %642, i64 %647
  %649 = load float, ptr %648, align 4, !tbaa !27
  store float %649, ptr %78, align 4, !tbaa !27
  %650 = load float, ptr %78, align 4, !tbaa !27
  %651 = load float, ptr %73, align 4, !tbaa !27
  %652 = load ptr, ptr %72, align 8, !tbaa !5
  %653 = getelementptr inbounds float, ptr %652, i64 6
  %654 = load float, ptr %653, align 4, !tbaa !27
  %655 = call float @llvm.fmuladd.f32(float %650, float %651, float %654)
  store float %655, ptr %653, align 4, !tbaa !27
  %656 = load float, ptr %78, align 4, !tbaa !27
  %657 = load float, ptr %74, align 4, !tbaa !27
  %658 = load ptr, ptr %72, align 8, !tbaa !5
  %659 = getelementptr inbounds float, ptr %658, i64 7
  %660 = load float, ptr %659, align 4, !tbaa !27
  %661 = call float @llvm.fmuladd.f32(float %656, float %657, float %660)
  store float %661, ptr %659, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #7
  br label %662

662:                                              ; preds = %640, %636
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #7
  br label %663

663:                                              ; preds = %662
  %664 = load i32, ptr %71, align 4, !tbaa !9
  %665 = add nsw i32 %664, 1
  store i32 %665, ptr %71, align 4, !tbaa !9
  br label %532, !llvm.loop !29

666:                                              ; preds = %536
  call void @llvm.lifetime.end.p0(i64 16, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #7
  br label %667

667:                                              ; preds = %666
  %668 = load i32, ptr %61, align 4, !tbaa !9
  %669 = add nsw i32 %668, 1
  store i32 %669, ptr %61, align 4, !tbaa !9
  br label %421, !llvm.loop !31

670:                                              ; preds = %425
  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
  br label %671

671:                                              ; preds = %670
  %672 = load i32, ptr %49, align 4, !tbaa !9
  %673 = add nsw i32 %672, 1
  store i32 %673, ptr %49, align 4, !tbaa !9
  br label %325, !llvm.loop !32

674:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #7
  store i32 0, ptr %79, align 4, !tbaa !9
  br label %675

675:                                              ; preds = %728, %674
  %676 = load i32, ptr %79, align 4, !tbaa !9
  %677 = icmp slt i32 %676, 4
  br i1 %677, label %679, label %678

678:                                              ; preds = %675
  store i32 17, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #7
  br label %731

679:                                              ; preds = %675
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #7
  store i32 0, ptr %80, align 4, !tbaa !9
  br label %680

680:                                              ; preds = %724, %679
  %681 = load i32, ptr %80, align 4, !tbaa !9
  %682 = icmp slt i32 %681, 2
  br i1 %682, label %684, label %683

683:                                              ; preds = %680
  store i32 20, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #7
  br label %727

684:                                              ; preds = %680
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #7
  %685 = load i32, ptr %79, align 4, !tbaa !9
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds [4 x i32], ptr %38, i64 0, i64 %686
  %688 = load i32, ptr %687, align 4, !tbaa !9
  %689 = load i32, ptr %43, align 4, !tbaa !9
  %690 = add nsw i32 %688, %689
  %691 = load i32, ptr %80, align 4, !tbaa !9
  %692 = add nsw i32 %690, %691
  store i32 %692, ptr %81, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #7
  %693 = load i32, ptr %79, align 4, !tbaa !9
  %694 = mul nsw i32 %693, 2
  %695 = load i32, ptr %80, align 4, !tbaa !9
  %696 = add nsw i32 %694, %695
  store i32 %696, ptr %82, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #7
  store i32 0, ptr %83, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #7
  store i32 0, ptr %84, align 4, !tbaa !9
  br label %697

697:                                              ; preds = %717, %684
  %698 = load i32, ptr %83, align 4, !tbaa !9
  %699 = load i32, ptr %8, align 4, !tbaa !9
  %700 = icmp slt i32 %698, %699
  br i1 %700, label %702, label %701

701:                                              ; preds = %697
  store i32 23, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #7
  br label %723

702:                                              ; preds = %697
  %703 = load ptr, ptr %47, align 8, !tbaa !5
  %704 = load i32, ptr %84, align 4, !tbaa !9
  %705 = load i32, ptr %82, align 4, !tbaa !9
  %706 = add nsw i32 %704, %705
  %707 = sext i32 %706 to i64
  %708 = getelementptr inbounds float, ptr %703, i64 %707
  %709 = load float, ptr %708, align 4, !tbaa !27
  %710 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %85, i32 0, i32 13
  %711 = load ptr, ptr %710, align 8, !tbaa !33
  %712 = load i32, ptr %81, align 4, !tbaa !9
  %713 = load i32, ptr %83, align 4, !tbaa !9
  %714 = add nsw i32 %712, %713
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds float, ptr %711, i64 %715
  store float %709, ptr %716, align 4, !tbaa !27
  br label %717

717:                                              ; preds = %702
  %718 = load i32, ptr %9, align 4, !tbaa !9
  %719 = load i32, ptr %83, align 4, !tbaa !9
  %720 = add nsw i32 %719, %718
  store i32 %720, ptr %83, align 4, !tbaa !9
  %721 = load i32, ptr %84, align 4, !tbaa !9
  %722 = add nsw i32 %721, 8
  store i32 %722, ptr %84, align 4, !tbaa !9
  br label %697, !llvm.loop !34

723:                                              ; preds = %701
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #7
  br label %724

724:                                              ; preds = %723
  %725 = load i32, ptr %80, align 4, !tbaa !9
  %726 = add nsw i32 %725, 1
  store i32 %726, ptr %80, align 4, !tbaa !9
  br label %680, !llvm.loop !35

727:                                              ; preds = %683
  br label %728

728:                                              ; preds = %727
  %729 = load i32, ptr %79, align 4, !tbaa !9
  %730 = add nsw i32 %729, 1
  store i32 %730, ptr %79, align 4, !tbaa !9
  br label %675, !llvm.loop !36

731:                                              ; preds = %678
  call void @llvm.lifetime.end.p0(i64 8, 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
  br label %732

732:                                              ; preds = %731
  %733 = load i32, ptr %43, align 4, !tbaa !9
  %734 = add nsw i32 %733, 2
  store i32 %734, ptr %43, align 4, !tbaa !9
  br label %297, !llvm.loop !37

735:                                              ; preds = %301
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  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 16, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 4, 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
  br label %736

736:                                              ; preds = %735
  %737 = load i32, ptr %24, align 4, !tbaa !9
  %738 = add nsw i32 %737, 4
  store i32 %738, ptr %24, align 4, !tbaa !9
  br label %157, !llvm.loop !38

739:                                              ; preds = %161
  store i32 1, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  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 %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
  ret i32 0

740:                                              ; preds = %330, %123
  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 %741

741:                                              ; preds = %740
  %742 = load ptr, ptr %14, align 8
  %743 = load i32, ptr %15, align 4
  %744 = insertvalue { ptr, i32 } poison, ptr %742, 0
  %745 = insertvalue { ptr, i32 } %744, i32 %743, 1
  resume { ptr, i32 } %745
}

; 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

declare void @_ZN5micro9framework13ScratchBufferC1EPNS_21MaceMicroEngineConfigE(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN5micro9framework13ScratchBuffer9GetBufferIfEEPT_i(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) #0 align 2

; Function Attrs: nounwind
declare void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5micro4base6memsetIfEEvPT_S2_j(ptr noundef, float noundef, i32 noundef) #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 = { 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 #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 = !{!14, !6, i64 16}
!22 = !{!23, !23, i64 0}
!23 = !{!"bool", !7, i64 0}
!24 = !{i8 0, i8 2}
!25 = !{}
!26 = !{!12, !6, i64 88}
!27 = !{!18, !18, i64 0}
!28 = !{!12, !6, i64 64}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = distinct !{!32, !30}
!33 = !{!12, !6, i64 136}
!34 = distinct !{!34, !30}
!35 = distinct !{!35, !30}
!36 = distinct !{!36, !30}
!37 = distinct !{!37, !30}
!38 = distinct !{!38, !30}


; 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 }
%"class.micro::framework::ScratchBuffer" = type <{ ptr, i32, [4 x i8] }>

@.str = external hidden unnamed_addr constant [88 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [43 x i8], align 1
@__const._ZN5micro3ops22DepthwiseConv2dKB2S4Op7ComputeERA4_i.h_valid = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN5micro3ops22DepthwiseConv2dKB2S4Op7ComputeERA4_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 = alloca %"class.micro::framework::ScratchBuffer", align 8
  %5 = load i32, ptr %1, align 4, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %1, i64 4
  %7 = load i32, ptr %6, align 4, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %1, i64 8
  %9 = load i32, ptr %8, align 4, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %1, i64 12
  %11 = load i32, ptr %10, align 4, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %0, i64 96
  %13 = load ptr, ptr %12, align 8, !tbaa !9
  %14 = load i32, ptr %13, align 4, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %13, i64 4
  %16 = load i32, ptr %15, align 4, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %13, i64 8
  %18 = load i32, ptr %17, align 4, !tbaa !5
  %19 = getelementptr inbounds i8, ptr %13, i64 12
  %20 = load i32, ptr %19, align 4, !tbaa !5
  %21 = getelementptr inbounds i8, ptr %0, i64 72
  %22 = load ptr, ptr %21, align 8, !tbaa !18
  %23 = getelementptr inbounds i8, ptr %22, i64 12
  %24 = load i32, ptr %23, align 4, !tbaa !5
  %25 = icmp eq i32 %24, %20
  br i1 %25, label %31, label %26

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

28:                                               ; preds = %26
  call void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4) %3) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #6
  %.pre = load ptr, ptr %21, align 8, !tbaa !18
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.pre, i64 12
  %.pre306 = load i32, ptr %.phi.trans.insert, align 4, !tbaa !5
  br label %31

29:                                               ; preds = %26
  %30 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4) %3) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #6
  br label %470

31:                                               ; preds = %28, %2
  %32 = phi i32 [ %.pre306, %28 ], [ %20, %2 ]
  %33 = phi ptr [ %.pre, %28 ], [ %22, %2 ]
  %34 = getelementptr inbounds i8, ptr %33, i64 4
  %35 = load i32, ptr %34, align 4, !tbaa !5
  %36 = getelementptr inbounds i8, ptr %33, i64 8
  %37 = load i32, ptr %36, align 4, !tbaa !5
  %38 = getelementptr inbounds i8, ptr %0, i64 48
  %39 = load i32, ptr %38, align 8, !tbaa !5
  %40 = ashr i32 %39, 1
  %41 = getelementptr inbounds i8, ptr %0, i64 52
  %42 = load i32, ptr %41, align 4, !tbaa !5
  %43 = ashr i32 %42, 1
  %44 = mul nsw i32 %7, %5
  %45 = mul nsw i32 %44, %9
  %46 = add i32 %45, -4
  %47 = add nsw i32 %14, -2
  %48 = icmp sgt i32 %45, 0
  br i1 %48, label %.lr.ph271, label %._crit_edge272

.lr.ph271:                                        ; preds = %31
  %49 = getelementptr inbounds i8, ptr %0, i64 40
  %50 = icmp sgt i32 %14, 0
  %51 = shl nsw i32 %20, 3
  %52 = getelementptr inbounds i8, ptr %0, i64 16
  %53 = icmp sgt i32 %16, 0
  %54 = getelementptr inbounds i8, ptr %0, i64 56
  %.sroa.579.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const._ZN5micro3ops22DepthwiseConv2dKB2S4Op7ComputeERA4_i.h_valid, i64 1), align 1
  %.sroa.7.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const._ZN5micro3ops22DepthwiseConv2dKB2S4Op7ComputeERA4_i.h_valid, i64 2), align 1
  %.sroa.9.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const._ZN5micro3ops22DepthwiseConv2dKB2S4Op7ComputeERA4_i.h_valid, i64 3), align 1
  %.sroa.078.0.copyload = load i8, ptr @__const._ZN5micro3ops22DepthwiseConv2dKB2S4Op7ComputeERA4_i.h_valid, align 1
  %55 = icmp sgt i32 %18, 0
  %56 = getelementptr inbounds i8, ptr %0, i64 60
  %57 = trunc i8 %.sroa.078.0.copyload to i1
  %58 = trunc i8 %.sroa.579.0.copyload to i1
  %59 = trunc i8 %.sroa.7.0.copyload to i1
  %60 = trunc i8 %.sroa.9.0.copyload to i1
  %61 = icmp sgt i32 %20, 0
  %62 = getelementptr inbounds i8, ptr %0, i64 88
  %63 = getelementptr inbounds i8, ptr %0, i64 64
  %64 = icmp sgt i32 %11, 0
  %65 = getelementptr inbounds i8, ptr %0, i64 136
  %66 = sext i32 %20 to i64
  %67 = sext i32 %18 to i64
  %68 = sext i32 %14 to i64
  %69 = sext i32 %11 to i64
  %wide.trip.count284 = zext nneg i32 %16 to i64
  %wide.trip.count279 = zext nneg i32 %18 to i64
  %wide.trip.count = zext nneg i32 %20 to i64
  %70 = add nsw i64 %69, -1
  %71 = add nsw i64 %69, -1
  %72 = add nsw i64 %69, -1
  %73 = add nsw i64 %69, -1
  %74 = add nsw i64 %69, -1
  %75 = add nsw i64 %69, -1
  %76 = add nsw i64 %69, -1
  %77 = add nsw i64 %69, -1
  %78 = add nsw i64 %69, -1
  %79 = add nsw i64 %69, -1
  %80 = add nsw i64 %69, -1
  %81 = add nsw i64 %69, -1
  %82 = add nsw i64 %69, -1
  %83 = add nsw i64 %69, -1
  %84 = add nsw i64 %69, -1
  %85 = add nsw i64 %69, -1
  %ident.check529.not = icmp eq i32 %14, 1
  %86 = shl nsw i64 %84, 2
  %87 = shl nsw i64 %84, 5
  %88 = or disjoint i64 %87, 4
  %ident.check498.not = icmp eq i32 %14, 1
  %89 = shl nsw i64 %82, 2
  %90 = shl nsw i64 %82, 5
  %91 = or disjoint i64 %90, 8
  %ident.check467.not = icmp eq i32 %14, 1
  %92 = shl nsw i64 %80, 2
  %93 = shl nsw i64 %80, 5
  %94 = or disjoint i64 %93, 12
  %ident.check436.not = icmp eq i32 %14, 1
  %95 = shl nsw i64 %78, 2
  %96 = shl nsw i64 %78, 5
  %97 = or disjoint i64 %96, 16
  %ident.check405.not = icmp eq i32 %14, 1
  %98 = shl nsw i64 %76, 2
  %99 = shl nsw i64 %76, 5
  %100 = or disjoint i64 %99, 20
  %ident.check374.not = icmp eq i32 %14, 1
  %101 = shl nsw i64 %74, 2
  %102 = shl nsw i64 %74, 5
  %103 = or disjoint i64 %102, 24
  %ident.check343.not = icmp eq i32 %14, 1
  %104 = shl nsw i64 %72, 2
  %105 = shl nsw i64 %72, 5
  %106 = or disjoint i64 %105, 28
  %ident.check.not = icmp eq i32 %14, 1
  %107 = shl nsw i64 %70, 2
  %108 = shl nsw i64 %70, 5
  br label %109

._crit_edge272:                                   ; preds = %._crit_edge, %31
  ret i32 0

109:                                              ; preds = %.lr.ph271, %._crit_edge
  %.0217269 = phi i32 [ 0, %.lr.ph271 ], [ %153, %._crit_edge ]
  %spec.select = call i32 @llvm.smin.i32(i32 %.0217269, i32 %46)
  %110 = sdiv i32 %spec.select, %9
  %111 = srem i32 %110, %7
  %112 = add nsw i32 %spec.select, 1
  %113 = sdiv i32 %112, %9
  %114 = srem i32 %113, %7
  %115 = add nsw i32 %spec.select, 2
  %116 = sdiv i32 %115, %9
  %117 = srem i32 %116, %7
  %118 = add nsw i32 %spec.select, 3
  %119 = sdiv i32 %118, %9
  %120 = srem i32 %119, %7
  %121 = load ptr, ptr %49, align 8, !tbaa !19
  %122 = load i32, ptr %121, align 4, !tbaa !5
  %123 = mul nsw i32 %122, %111
  %124 = mul nsw i32 %122, %114
  %125 = mul nsw i32 %122, %117
  %126 = mul nsw i32 %122, %120
  %127 = srem i32 %spec.select, %9
  %128 = srem i32 %115, %9
  %129 = mul i32 %spec.select, %11
  %130 = sub nsw i32 %123, %40
  %131 = sub nsw i32 %124, %40
  %132 = sub nsw i32 %125, %40
  %133 = sub nsw i32 %126, %40
  %134 = srem i32 %112, %9
  %135 = srem i32 %118, %9
  %136 = add i32 %129, %11
  %137 = add i32 %136, %11
  %138 = add i32 %137, %11
  %139 = getelementptr inbounds i8, ptr %121, i64 4
  %140 = load i32, ptr %139, align 4, !tbaa !5
  %141 = mul nsw i32 %140, %127
  %142 = sub nsw i32 %141, %43
  %143 = mul nsw i32 %140, %134
  %144 = sub nsw i32 %143, %43
  %145 = mul nsw i32 %140, %128
  %146 = sub nsw i32 %145, %43
  %147 = mul nsw i32 %140, %135
  %148 = sub nsw i32 %147, %43
  br i1 %50, label %.lr.ph268.preheader, label %._crit_edge

.lr.ph268.preheader:                              ; preds = %109
  %149 = add i32 %138, 1
  %150 = add i32 %137, 1
  %151 = add i32 %136, 1
  %152 = add i32 %129, 1
  br label %.lr.ph268

._crit_edge:                                      ; preds = %.split266.us, %109
  %153 = add nsw i32 %spec.select, 4
  %154 = icmp slt i32 %153, %45
  br i1 %154, label %109, label %._crit_edge272, !llvm.loop !20

.lr.ph268:                                        ; preds = %.lr.ph268.preheader, %.split266.us
  %.0218267 = phi i32 [ %468, %.split266.us ], [ 0, %.lr.ph268.preheader ]
  %spec.select244 = call i32 @llvm.smin.i32(i32 %.0218267, i32 %47)
  %155 = mul nsw i32 %spec.select244, %16
  %156 = add nsw i32 %155, %16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #6
  %157 = load ptr, ptr %52, align 8, !tbaa !22
  call void @_ZN5micro9framework13ScratchBufferC1EPNS_21MaceMicroEngineConfigE(ptr noundef nonnull align 8 dereferenceable(12) %4, ptr noundef %157)
  %158 = invoke noundef ptr @_ZN5micro9framework13ScratchBuffer9GetBufferIfEEPT_i(ptr noundef nonnull align 8 dereferenceable(12) %4, i32 noundef %51)
          to label %159 unwind label %364

159:                                              ; preds = %.lr.ph268
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %4) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #6
  call void @_ZN5micro4base6memsetIfEEvPT_S2_j(ptr noundef %158, float noundef 0.000000e+00, i32 noundef %51)
  br i1 %53, label %.lr.ph, label %.preheader252

.lr.ph:                                           ; preds = %159
  %160 = load i32, ptr %54, align 8, !tbaa !5
  %161 = load i32, ptr %56, align 4
  %162 = sext i32 %155 to i64
  %163 = sext i32 %156 to i64
  br label %366

.preheader252:                                    ; preds = %._crit_edge257, %159
  br i1 %64, label %.preheader.us.preheader, label %.split266.us

.preheader.us.preheader:                          ; preds = %.preheader252
  %164 = load ptr, ptr %65, align 8
  %165 = add i32 %spec.select244, %129
  %166 = sext i32 %165 to i64
  %invariant.gep317 = getelementptr float, ptr %164, i64 %166
  %167 = udiv i64 %85, %68
  %168 = add i64 %167, 1
  %min.iters.check541 = icmp ugt i64 %168, 16
  %or.cond = select i1 %min.iters.check541, i1 %ident.check529.not, i1 false
  br i1 %or.cond, label %vector.memcheck530, label %scalar.ph540.preheader

vector.memcheck530:                               ; preds = %.preheader.us.preheader
  %smin531 = call i32 @llvm.smin.i32(i32 %.0218267, i32 -1)
  %169 = add i32 %129, %smin531
  %170 = sext i32 %169 to i64
  %171 = shl nsw i64 %170, 2
  %scevgep532 = getelementptr i8, ptr %164, i64 %171
  %172 = getelementptr i8, ptr %164, i64 %86
  %scevgep533 = getelementptr i8, ptr %172, i64 4
  %scevgep534 = getelementptr i8, ptr %scevgep533, i64 %171
  %scevgep535 = getelementptr i8, ptr %158, i64 %88
  %bound0536 = icmp ult ptr %scevgep532, %scevgep535
  %bound1537 = icmp ult ptr %158, %scevgep534
  %found.conflict538 = and i1 %bound0536, %bound1537
  br i1 %found.conflict538, label %scalar.ph540.preheader, label %vector.ph542

vector.ph542:                                     ; preds = %vector.memcheck530
  %n.mod.vf543 = and i64 %168, 7
  %173 = icmp eq i64 %n.mod.vf543, 0
  %174 = select i1 %173, i64 8, i64 %n.mod.vf543
  %n.vec544 = sub i64 %168, %174
  %ind.end545 = mul nuw i64 %n.vec544, %68
  %ind.end547 = shl i64 %n.vec544, 3
  br label %vector.body549

vector.body549:                                   ; preds = %vector.body549, %vector.ph542
  %index550 = phi i64 [ 0, %vector.ph542 ], [ %index.next553, %vector.body549 ]
  %offset.idx551 = mul nuw i64 %index550, %68
  %offset.idx552 = shl i64 %index550, 3
  %175 = or disjoint i64 %offset.idx552, 8
  %176 = or disjoint i64 %offset.idx552, 16
  %177 = or disjoint i64 %offset.idx552, 24
  %178 = or disjoint i64 %offset.idx552, 32
  %179 = or disjoint i64 %offset.idx552, 40
  %180 = or disjoint i64 %offset.idx552, 48
  %181 = or disjoint i64 %offset.idx552, 56
  %182 = getelementptr inbounds float, ptr %158, i64 %offset.idx552
  %183 = getelementptr inbounds float, ptr %158, i64 %175
  %184 = getelementptr inbounds float, ptr %158, i64 %176
  %185 = getelementptr inbounds float, ptr %158, i64 %177
  %186 = getelementptr inbounds float, ptr %158, i64 %178
  %187 = getelementptr inbounds float, ptr %158, i64 %179
  %188 = getelementptr inbounds float, ptr %158, i64 %180
  %189 = getelementptr inbounds float, ptr %158, i64 %181
  %190 = load float, ptr %182, align 4, !tbaa !23, !alias.scope !24
  %191 = load float, ptr %183, align 4, !tbaa !23, !alias.scope !24
  %192 = load float, ptr %184, align 4, !tbaa !23, !alias.scope !24
  %193 = load float, ptr %185, align 4, !tbaa !23, !alias.scope !24
  %194 = insertelement <4 x float> poison, float %190, i64 0
  %195 = insertelement <4 x float> %194, float %191, i64 1
  %196 = insertelement <4 x float> %195, float %192, i64 2
  %197 = insertelement <4 x float> %196, float %193, i64 3
  %198 = load float, ptr %186, align 4, !tbaa !23, !alias.scope !24
  %199 = load float, ptr %187, align 4, !tbaa !23, !alias.scope !24
  %200 = load float, ptr %188, align 4, !tbaa !23, !alias.scope !24
  %201 = load float, ptr %189, align 4, !tbaa !23, !alias.scope !24
  %202 = insertelement <4 x float> poison, float %198, i64 0
  %203 = insertelement <4 x float> %202, float %199, i64 1
  %204 = insertelement <4 x float> %203, float %200, i64 2
  %205 = insertelement <4 x float> %204, float %201, i64 3
  %206 = getelementptr float, ptr %invariant.gep317, i64 %offset.idx551
  %207 = getelementptr i8, ptr %206, i64 16
  store <4 x float> %197, ptr %206, align 4, !tbaa !23, !alias.scope !27, !noalias !24
  store <4 x float> %205, ptr %207, align 4, !tbaa !23, !alias.scope !27, !noalias !24
  %index.next553 = add nuw i64 %index550, 8
  %208 = icmp eq i64 %index.next553, %n.vec544
  br i1 %208, label %scalar.ph540.preheader, label %vector.body549, !llvm.loop !29

scalar.ph540.preheader:                           ; preds = %vector.body549, %vector.memcheck530, %.preheader.us.preheader
  %indvars.iv288.ph = phi i64 [ 0, %vector.memcheck530 ], [ 0, %.preheader.us.preheader ], [ %ind.end545, %vector.body549 ]
  %indvars.iv286.ph = phi i64 [ 0, %vector.memcheck530 ], [ 0, %.preheader.us.preheader ], [ %ind.end547, %vector.body549 ]
  br label %scalar.ph540

scalar.ph540:                                     ; preds = %scalar.ph540.preheader, %scalar.ph540
  %indvars.iv288 = phi i64 [ %indvars.iv.next289, %scalar.ph540 ], [ %indvars.iv288.ph, %scalar.ph540.preheader ]
  %indvars.iv286 = phi i64 [ %indvars.iv.next287, %scalar.ph540 ], [ %indvars.iv286.ph, %scalar.ph540.preheader ]
  %209 = getelementptr inbounds float, ptr %158, i64 %indvars.iv286
  %210 = load float, ptr %209, align 4, !tbaa !23
  %gep318 = getelementptr float, ptr %invariant.gep317, i64 %indvars.iv288
  store float %210, ptr %gep318, align 4, !tbaa !23
  %indvars.iv.next289 = add nuw nsw i64 %indvars.iv288, %68
  %indvars.iv.next287 = add nuw nsw i64 %indvars.iv286, 8
  %211 = icmp slt i64 %indvars.iv.next289, %69
  br i1 %211, label %scalar.ph540, label %._crit_edge.us263.us, !llvm.loop !32

._crit_edge.us263.us:                             ; preds = %scalar.ph540
  %212 = add nsw i32 %spec.select244, 1
  %213 = add i32 %212, %129
  %214 = sext i32 %213 to i64
  %invariant.gep319 = getelementptr float, ptr %164, i64 %214
  %215 = udiv i64 %83, %68
  %216 = add i64 %215, 1
  %min.iters.check511 = icmp ugt i64 %216, 12
  %or.cond554 = select i1 %min.iters.check511, i1 %ident.check498.not, i1 false
  br i1 %or.cond554, label %vector.memcheck499, label %scalar.ph510.preheader

vector.memcheck499:                               ; preds = %._crit_edge.us263.us
  %smin500 = call i32 @llvm.smin.i32(i32 %.0218267, i32 -1)
  %217 = add i32 %152, %smin500
  %218 = sext i32 %217 to i64
  %219 = shl nsw i64 %218, 2
  %scevgep501 = getelementptr i8, ptr %164, i64 %219
  %220 = getelementptr i8, ptr %164, i64 %89
  %scevgep502 = getelementptr i8, ptr %220, i64 4
  %scevgep503 = getelementptr i8, ptr %scevgep502, i64 %219
  %scevgep504 = getelementptr i8, ptr %158, i64 4
  %scevgep505 = getelementptr i8, ptr %158, i64 %91
  %bound0506 = icmp ult ptr %scevgep501, %scevgep505
  %bound1507 = icmp ult ptr %scevgep504, %scevgep503
  %found.conflict508 = and i1 %bound0506, %bound1507
  br i1 %found.conflict508, label %scalar.ph510.preheader, label %vector.ph512

vector.ph512:                                     ; preds = %vector.memcheck499
  %n.mod.vf513 = and i64 %216, 7
  %221 = icmp eq i64 %n.mod.vf513, 0
  %222 = select i1 %221, i64 8, i64 %n.mod.vf513
  %n.vec514 = sub i64 %216, %222
  %ind.end515 = mul nuw i64 %n.vec514, %68
  %ind.end517 = shl i64 %n.vec514, 3
  br label %vector.body519

vector.body519:                                   ; preds = %vector.body519, %vector.ph512
  %index520 = phi i64 [ 0, %vector.ph512 ], [ %index.next527, %vector.body519 ]
  %offset.idx521 = mul nuw i64 %index520, %68
  %offset.idx522 = shl i64 %index520, 3
  %223 = or disjoint i64 %offset.idx522, 1
  %224 = or disjoint i64 %offset.idx522, 33
  %225 = getelementptr inbounds float, ptr %158, i64 %223
  %226 = getelementptr inbounds float, ptr %158, i64 %224
  %wide.vec523 = load <32 x float>, ptr %225, align 4, !tbaa !23
  %wide.vec524 = load <32 x float>, ptr %226, align 4, !tbaa !23
  %strided.vec525 = shufflevector <32 x float> %wide.vec523, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %strided.vec526 = shufflevector <32 x float> %wide.vec524, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %227 = getelementptr float, ptr %invariant.gep319, i64 %offset.idx521
  %228 = getelementptr i8, ptr %227, i64 16
  store <4 x float> %strided.vec525, ptr %227, align 4, !tbaa !23, !alias.scope !33, !noalias !36
  store <4 x float> %strided.vec526, ptr %228, align 4, !tbaa !23, !alias.scope !33, !noalias !36
  %index.next527 = add nuw i64 %index520, 8
  %229 = icmp eq i64 %index.next527, %n.vec514
  br i1 %229, label %scalar.ph510.preheader, label %vector.body519, !llvm.loop !38

scalar.ph510.preheader:                           ; preds = %vector.body519, %vector.memcheck499, %._crit_edge.us263.us
  %indvars.iv288.1.ph = phi i64 [ 0, %vector.memcheck499 ], [ 0, %._crit_edge.us263.us ], [ %ind.end515, %vector.body519 ]
  %indvars.iv286.1.ph = phi i64 [ 0, %vector.memcheck499 ], [ 0, %._crit_edge.us263.us ], [ %ind.end517, %vector.body519 ]
  br label %scalar.ph510

scalar.ph510:                                     ; preds = %scalar.ph510.preheader, %scalar.ph510
  %indvars.iv288.1 = phi i64 [ %indvars.iv.next289.1, %scalar.ph510 ], [ %indvars.iv288.1.ph, %scalar.ph510.preheader ]
  %indvars.iv286.1 = phi i64 [ %indvars.iv.next287.1, %scalar.ph510 ], [ %indvars.iv286.1.ph, %scalar.ph510.preheader ]
  %230 = or disjoint i64 %indvars.iv286.1, 1
  %231 = getelementptr inbounds float, ptr %158, i64 %230
  %232 = load float, ptr %231, align 4, !tbaa !23
  %gep320 = getelementptr float, ptr %invariant.gep319, i64 %indvars.iv288.1
  store float %232, ptr %gep320, align 4, !tbaa !23
  %indvars.iv.next289.1 = add nuw nsw i64 %indvars.iv288.1, %68
  %indvars.iv.next287.1 = add nuw nsw i64 %indvars.iv286.1, 8
  %233 = icmp slt i64 %indvars.iv.next289.1, %69
  br i1 %233, label %scalar.ph510, label %._crit_edge.us263.us.1, !llvm.loop !39

._crit_edge.us263.us.1:                           ; preds = %scalar.ph510
  %234 = load ptr, ptr %65, align 8
  %235 = add i32 %spec.select244, %136
  %236 = sext i32 %235 to i64
  %invariant.gep321 = getelementptr float, ptr %234, i64 %236
  %237 = udiv i64 %81, %68
  %238 = add i64 %237, 1
  %min.iters.check480 = icmp ugt i64 %238, 12
  %or.cond555 = select i1 %min.iters.check480, i1 %ident.check467.not, i1 false
  br i1 %or.cond555, label %vector.memcheck468, label %scalar.ph479.preheader

vector.memcheck468:                               ; preds = %._crit_edge.us263.us.1
  %smin469 = call i32 @llvm.smin.i32(i32 %.0218267, i32 -1)
  %239 = add i32 %136, %smin469
  %240 = sext i32 %239 to i64
  %241 = shl nsw i64 %240, 2
  %scevgep470 = getelementptr i8, ptr %234, i64 %241
  %242 = getelementptr i8, ptr %234, i64 %92
  %scevgep471 = getelementptr i8, ptr %242, i64 4
  %scevgep472 = getelementptr i8, ptr %scevgep471, i64 %241
  %scevgep473 = getelementptr i8, ptr %158, i64 8
  %scevgep474 = getelementptr i8, ptr %158, i64 %94
  %bound0475 = icmp ult ptr %scevgep470, %scevgep474
  %bound1476 = icmp ult ptr %scevgep473, %scevgep472
  %found.conflict477 = and i1 %bound0475, %bound1476
  br i1 %found.conflict477, label %scalar.ph479.preheader, label %vector.ph481

vector.ph481:                                     ; preds = %vector.memcheck468
  %n.mod.vf482 = and i64 %238, 7
  %243 = icmp eq i64 %n.mod.vf482, 0
  %244 = select i1 %243, i64 8, i64 %n.mod.vf482
  %n.vec483 = sub i64 %238, %244
  %ind.end484 = mul nuw i64 %n.vec483, %68
  %ind.end486 = shl i64 %n.vec483, 3
  br label %vector.body488

vector.body488:                                   ; preds = %vector.body488, %vector.ph481
  %index489 = phi i64 [ 0, %vector.ph481 ], [ %index.next496, %vector.body488 ]
  %offset.idx490 = mul nuw i64 %index489, %68
  %offset.idx491 = shl i64 %index489, 3
  %245 = or disjoint i64 %offset.idx491, 2
  %246 = or disjoint i64 %offset.idx491, 34
  %247 = getelementptr inbounds float, ptr %158, i64 %245
  %248 = getelementptr inbounds float, ptr %158, i64 %246
  %wide.vec492 = load <32 x float>, ptr %247, align 4, !tbaa !23
  %wide.vec493 = load <32 x float>, ptr %248, align 4, !tbaa !23
  %strided.vec494 = shufflevector <32 x float> %wide.vec492, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %strided.vec495 = shufflevector <32 x float> %wide.vec493, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %249 = getelementptr float, ptr %invariant.gep321, i64 %offset.idx490
  %250 = getelementptr i8, ptr %249, i64 16
  store <4 x float> %strided.vec494, ptr %249, align 4, !tbaa !23, !alias.scope !40, !noalias !43
  store <4 x float> %strided.vec495, ptr %250, align 4, !tbaa !23, !alias.scope !40, !noalias !43
  %index.next496 = add nuw i64 %index489, 8
  %251 = icmp eq i64 %index.next496, %n.vec483
  br i1 %251, label %scalar.ph479.preheader, label %vector.body488, !llvm.loop !45

scalar.ph479.preheader:                           ; preds = %vector.body488, %vector.memcheck468, %._crit_edge.us263.us.1
  %indvars.iv288.1300.ph = phi i64 [ 0, %vector.memcheck468 ], [ 0, %._crit_edge.us263.us.1 ], [ %ind.end484, %vector.body488 ]
  %indvars.iv286.1301.ph = phi i64 [ 0, %vector.memcheck468 ], [ 0, %._crit_edge.us263.us.1 ], [ %ind.end486, %vector.body488 ]
  br label %scalar.ph479

scalar.ph479:                                     ; preds = %scalar.ph479.preheader, %scalar.ph479
  %indvars.iv288.1300 = phi i64 [ %indvars.iv.next289.1302, %scalar.ph479 ], [ %indvars.iv288.1300.ph, %scalar.ph479.preheader ]
  %indvars.iv286.1301 = phi i64 [ %indvars.iv.next287.1303, %scalar.ph479 ], [ %indvars.iv286.1301.ph, %scalar.ph479.preheader ]
  %252 = or disjoint i64 %indvars.iv286.1301, 2
  %253 = getelementptr inbounds float, ptr %158, i64 %252
  %254 = load float, ptr %253, align 4, !tbaa !23
  %gep322 = getelementptr float, ptr %invariant.gep321, i64 %indvars.iv288.1300
  store float %254, ptr %gep322, align 4, !tbaa !23
  %indvars.iv.next289.1302 = add nuw nsw i64 %indvars.iv288.1300, %68
  %indvars.iv.next287.1303 = add nuw nsw i64 %indvars.iv286.1301, 8
  %255 = icmp slt i64 %indvars.iv.next289.1302, %69
  br i1 %255, label %scalar.ph479, label %._crit_edge.us263.us.1304, !llvm.loop !46

._crit_edge.us263.us.1304:                        ; preds = %scalar.ph479
  %256 = add i32 %212, %136
  %257 = sext i32 %256 to i64
  %invariant.gep323 = getelementptr float, ptr %234, i64 %257
  %258 = udiv i64 %79, %68
  %259 = add i64 %258, 1
  %min.iters.check449 = icmp ugt i64 %259, 12
  %or.cond556 = select i1 %min.iters.check449, i1 %ident.check436.not, i1 false
  br i1 %or.cond556, label %vector.memcheck437, label %scalar.ph448.preheader

vector.memcheck437:                               ; preds = %._crit_edge.us263.us.1304
  %smin438 = call i32 @llvm.smin.i32(i32 %.0218267, i32 -1)
  %260 = add i32 %151, %smin438
  %261 = sext i32 %260 to i64
  %262 = shl nsw i64 %261, 2
  %scevgep439 = getelementptr i8, ptr %234, i64 %262
  %263 = getelementptr i8, ptr %234, i64 %95
  %scevgep440 = getelementptr i8, ptr %263, i64 4
  %scevgep441 = getelementptr i8, ptr %scevgep440, i64 %262
  %scevgep442 = getelementptr i8, ptr %158, i64 12
  %scevgep443 = getelementptr i8, ptr %158, i64 %97
  %bound0444 = icmp ult ptr %scevgep439, %scevgep443
  %bound1445 = icmp ult ptr %scevgep442, %scevgep441
  %found.conflict446 = and i1 %bound0444, %bound1445
  br i1 %found.conflict446, label %scalar.ph448.preheader, label %vector.ph450

vector.ph450:                                     ; preds = %vector.memcheck437
  %n.mod.vf451 = and i64 %259, 7
  %264 = icmp eq i64 %n.mod.vf451, 0
  %265 = select i1 %264, i64 8, i64 %n.mod.vf451
  %n.vec452 = sub i64 %259, %265
  %ind.end453 = mul nuw i64 %n.vec452, %68
  %ind.end455 = shl i64 %n.vec452, 3
  br label %vector.body457

vector.body457:                                   ; preds = %vector.body457, %vector.ph450
  %index458 = phi i64 [ 0, %vector.ph450 ], [ %index.next465, %vector.body457 ]
  %offset.idx459 = mul nuw i64 %index458, %68
  %offset.idx460 = shl i64 %index458, 3
  %266 = or disjoint i64 %offset.idx460, 3
  %267 = or disjoint i64 %offset.idx460, 35
  %268 = getelementptr inbounds float, ptr %158, i64 %266
  %269 = getelementptr inbounds float, ptr %158, i64 %267
  %wide.vec461 = load <32 x float>, ptr %268, align 4, !tbaa !23
  %wide.vec462 = load <32 x float>, ptr %269, align 4, !tbaa !23
  %strided.vec463 = shufflevector <32 x float> %wide.vec461, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %strided.vec464 = shufflevector <32 x float> %wide.vec462, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %270 = getelementptr float, ptr %invariant.gep323, i64 %offset.idx459
  %271 = getelementptr i8, ptr %270, i64 16
  store <4 x float> %strided.vec463, ptr %270, align 4, !tbaa !23, !alias.scope !47, !noalias !50
  store <4 x float> %strided.vec464, ptr %271, align 4, !tbaa !23, !alias.scope !47, !noalias !50
  %index.next465 = add nuw i64 %index458, 8
  %272 = icmp eq i64 %index.next465, %n.vec452
  br i1 %272, label %scalar.ph448.preheader, label %vector.body457, !llvm.loop !52

scalar.ph448.preheader:                           ; preds = %vector.body457, %vector.memcheck437, %._crit_edge.us263.us.1304
  %indvars.iv288.1.1.ph = phi i64 [ 0, %vector.memcheck437 ], [ 0, %._crit_edge.us263.us.1304 ], [ %ind.end453, %vector.body457 ]
  %indvars.iv286.1.1.ph = phi i64 [ 0, %vector.memcheck437 ], [ 0, %._crit_edge.us263.us.1304 ], [ %ind.end455, %vector.body457 ]
  br label %scalar.ph448

scalar.ph448:                                     ; preds = %scalar.ph448.preheader, %scalar.ph448
  %indvars.iv288.1.1 = phi i64 [ %indvars.iv.next289.1.1, %scalar.ph448 ], [ %indvars.iv288.1.1.ph, %scalar.ph448.preheader ]
  %indvars.iv286.1.1 = phi i64 [ %indvars.iv.next287.1.1, %scalar.ph448 ], [ %indvars.iv286.1.1.ph, %scalar.ph448.preheader ]
  %273 = or disjoint i64 %indvars.iv286.1.1, 3
  %274 = getelementptr inbounds float, ptr %158, i64 %273
  %275 = load float, ptr %274, align 4, !tbaa !23
  %gep324 = getelementptr float, ptr %invariant.gep323, i64 %indvars.iv288.1.1
  store float %275, ptr %gep324, align 4, !tbaa !23
  %indvars.iv.next289.1.1 = add nuw nsw i64 %indvars.iv288.1.1, %68
  %indvars.iv.next287.1.1 = add nuw nsw i64 %indvars.iv286.1.1, 8
  %276 = icmp slt i64 %indvars.iv.next289.1.1, %69
  br i1 %276, label %scalar.ph448, label %._crit_edge.us263.us.1.1, !llvm.loop !53

._crit_edge.us263.us.1.1:                         ; preds = %scalar.ph448
  %277 = load ptr, ptr %65, align 8
  %278 = add i32 %spec.select244, %137
  %279 = sext i32 %278 to i64
  %invariant.gep325 = getelementptr float, ptr %277, i64 %279
  %280 = udiv i64 %77, %68
  %281 = add i64 %280, 1
  %min.iters.check418 = icmp ugt i64 %281, 12
  %or.cond557 = select i1 %min.iters.check418, i1 %ident.check405.not, i1 false
  br i1 %or.cond557, label %vector.memcheck406, label %scalar.ph417.preheader

vector.memcheck406:                               ; preds = %._crit_edge.us263.us.1.1
  %smin407 = call i32 @llvm.smin.i32(i32 %.0218267, i32 -1)
  %282 = add i32 %137, %smin407
  %283 = sext i32 %282 to i64
  %284 = shl nsw i64 %283, 2
  %scevgep408 = getelementptr i8, ptr %277, i64 %284
  %285 = getelementptr i8, ptr %277, i64 %98
  %scevgep409 = getelementptr i8, ptr %285, i64 4
  %scevgep410 = getelementptr i8, ptr %scevgep409, i64 %284
  %scevgep411 = getelementptr i8, ptr %158, i64 16
  %scevgep412 = getelementptr i8, ptr %158, i64 %100
  %bound0413 = icmp ult ptr %scevgep408, %scevgep412
  %bound1414 = icmp ult ptr %scevgep411, %scevgep410
  %found.conflict415 = and i1 %bound0413, %bound1414
  br i1 %found.conflict415, label %scalar.ph417.preheader, label %vector.ph419

vector.ph419:                                     ; preds = %vector.memcheck406
  %n.mod.vf420 = and i64 %281, 7
  %286 = icmp eq i64 %n.mod.vf420, 0
  %287 = select i1 %286, i64 8, i64 %n.mod.vf420
  %n.vec421 = sub i64 %281, %287
  %ind.end422 = mul nuw i64 %n.vec421, %68
  %ind.end424 = shl i64 %n.vec421, 3
  br label %vector.body426

vector.body426:                                   ; preds = %vector.body426, %vector.ph419
  %index427 = phi i64 [ 0, %vector.ph419 ], [ %index.next434, %vector.body426 ]
  %offset.idx428 = mul nuw i64 %index427, %68
  %offset.idx429 = shl i64 %index427, 3
  %288 = or disjoint i64 %offset.idx429, 4
  %289 = or disjoint i64 %offset.idx429, 36
  %290 = getelementptr inbounds float, ptr %158, i64 %288
  %291 = getelementptr inbounds float, ptr %158, i64 %289
  %wide.vec430 = load <32 x float>, ptr %290, align 4, !tbaa !23
  %wide.vec431 = load <32 x float>, ptr %291, align 4, !tbaa !23
  %strided.vec432 = shufflevector <32 x float> %wide.vec430, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %strided.vec433 = shufflevector <32 x float> %wide.vec431, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %292 = getelementptr float, ptr %invariant.gep325, i64 %offset.idx428
  %293 = getelementptr i8, ptr %292, i64 16
  store <4 x float> %strided.vec432, ptr %292, align 4, !tbaa !23, !alias.scope !54, !noalias !57
  store <4 x float> %strided.vec433, ptr %293, align 4, !tbaa !23, !alias.scope !54, !noalias !57
  %index.next434 = add nuw i64 %index427, 8
  %294 = icmp eq i64 %index.next434, %n.vec421
  br i1 %294, label %scalar.ph417.preheader, label %vector.body426, !llvm.loop !59

scalar.ph417.preheader:                           ; preds = %vector.body426, %vector.memcheck406, %._crit_edge.us263.us.1.1
  %indvars.iv288.2.ph = phi i64 [ 0, %vector.memcheck406 ], [ 0, %._crit_edge.us263.us.1.1 ], [ %ind.end422, %vector.body426 ]
  %indvars.iv286.2.ph = phi i64 [ 0, %vector.memcheck406 ], [ 0, %._crit_edge.us263.us.1.1 ], [ %ind.end424, %vector.body426 ]
  br label %scalar.ph417

scalar.ph417:                                     ; preds = %scalar.ph417.preheader, %scalar.ph417
  %indvars.iv288.2 = phi i64 [ %indvars.iv.next289.2, %scalar.ph417 ], [ %indvars.iv288.2.ph, %scalar.ph417.preheader ]
  %indvars.iv286.2 = phi i64 [ %indvars.iv.next287.2, %scalar.ph417 ], [ %indvars.iv286.2.ph, %scalar.ph417.preheader ]
  %295 = or disjoint i64 %indvars.iv286.2, 4
  %296 = getelementptr inbounds float, ptr %158, i64 %295
  %297 = load float, ptr %296, align 4, !tbaa !23
  %gep326 = getelementptr float, ptr %invariant.gep325, i64 %indvars.iv288.2
  store float %297, ptr %gep326, align 4, !tbaa !23
  %indvars.iv.next289.2 = add nuw nsw i64 %indvars.iv288.2, %68
  %indvars.iv.next287.2 = add nuw nsw i64 %indvars.iv286.2, 8
  %298 = icmp slt i64 %indvars.iv.next289.2, %69
  br i1 %298, label %scalar.ph417, label %._crit_edge.us263.us.2, !llvm.loop !60

._crit_edge.us263.us.2:                           ; preds = %scalar.ph417
  %299 = add i32 %212, %137
  %300 = sext i32 %299 to i64
  %invariant.gep327 = getelementptr float, ptr %277, i64 %300
  %301 = udiv i64 %75, %68
  %302 = add i64 %301, 1
  %min.iters.check387 = icmp ugt i64 %302, 12
  %or.cond558 = select i1 %min.iters.check387, i1 %ident.check374.not, i1 false
  br i1 %or.cond558, label %vector.memcheck375, label %scalar.ph386.preheader

vector.memcheck375:                               ; preds = %._crit_edge.us263.us.2
  %smin376 = call i32 @llvm.smin.i32(i32 %.0218267, i32 -1)
  %303 = add i32 %150, %smin376
  %304 = sext i32 %303 to i64
  %305 = shl nsw i64 %304, 2
  %scevgep377 = getelementptr i8, ptr %277, i64 %305
  %306 = getelementptr i8, ptr %277, i64 %101
  %scevgep378 = getelementptr i8, ptr %306, i64 4
  %scevgep379 = getelementptr i8, ptr %scevgep378, i64 %305
  %scevgep380 = getelementptr i8, ptr %158, i64 20
  %scevgep381 = getelementptr i8, ptr %158, i64 %103
  %bound0382 = icmp ult ptr %scevgep377, %scevgep381
  %bound1383 = icmp ult ptr %scevgep380, %scevgep379
  %found.conflict384 = and i1 %bound0382, %bound1383
  br i1 %found.conflict384, label %scalar.ph386.preheader, label %vector.ph388

vector.ph388:                                     ; preds = %vector.memcheck375
  %n.mod.vf389 = and i64 %302, 7
  %307 = icmp eq i64 %n.mod.vf389, 0
  %308 = select i1 %307, i64 8, i64 %n.mod.vf389
  %n.vec390 = sub i64 %302, %308
  %ind.end391 = mul nuw i64 %n.vec390, %68
  %ind.end393 = shl i64 %n.vec390, 3
  br label %vector.body395

vector.body395:                                   ; preds = %vector.body395, %vector.ph388
  %index396 = phi i64 [ 0, %vector.ph388 ], [ %index.next403, %vector.body395 ]
  %offset.idx397 = mul nuw i64 %index396, %68
  %offset.idx398 = shl i64 %index396, 3
  %309 = or disjoint i64 %offset.idx398, 5
  %310 = or disjoint i64 %offset.idx398, 37
  %311 = getelementptr inbounds float, ptr %158, i64 %309
  %312 = getelementptr inbounds float, ptr %158, i64 %310
  %wide.vec399 = load <32 x float>, ptr %311, align 4, !tbaa !23
  %wide.vec400 = load <32 x float>, ptr %312, align 4, !tbaa !23
  %strided.vec401 = shufflevector <32 x float> %wide.vec399, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %strided.vec402 = shufflevector <32 x float> %wide.vec400, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %313 = getelementptr float, ptr %invariant.gep327, i64 %offset.idx397
  %314 = getelementptr i8, ptr %313, i64 16
  store <4 x float> %strided.vec401, ptr %313, align 4, !tbaa !23, !alias.scope !61, !noalias !64
  store <4 x float> %strided.vec402, ptr %314, align 4, !tbaa !23, !alias.scope !61, !noalias !64
  %index.next403 = add nuw i64 %index396, 8
  %315 = icmp eq i64 %index.next403, %n.vec390
  br i1 %315, label %scalar.ph386.preheader, label %vector.body395, !llvm.loop !66

scalar.ph386.preheader:                           ; preds = %vector.body395, %vector.memcheck375, %._crit_edge.us263.us.2
  %indvars.iv288.1.2.ph = phi i64 [ 0, %vector.memcheck375 ], [ 0, %._crit_edge.us263.us.2 ], [ %ind.end391, %vector.body395 ]
  %indvars.iv286.1.2.ph = phi i64 [ 0, %vector.memcheck375 ], [ 0, %._crit_edge.us263.us.2 ], [ %ind.end393, %vector.body395 ]
  br label %scalar.ph386

scalar.ph386:                                     ; preds = %scalar.ph386.preheader, %scalar.ph386
  %indvars.iv288.1.2 = phi i64 [ %indvars.iv.next289.1.2, %scalar.ph386 ], [ %indvars.iv288.1.2.ph, %scalar.ph386.preheader ]
  %indvars.iv286.1.2 = phi i64 [ %indvars.iv.next287.1.2, %scalar.ph386 ], [ %indvars.iv286.1.2.ph, %scalar.ph386.preheader ]
  %316 = or disjoint i64 %indvars.iv286.1.2, 5
  %317 = getelementptr inbounds float, ptr %158, i64 %316
  %318 = load float, ptr %317, align 4, !tbaa !23
  %gep328 = getelementptr float, ptr %invariant.gep327, i64 %indvars.iv288.1.2
  store float %318, ptr %gep328, align 4, !tbaa !23
  %indvars.iv.next289.1.2 = add nuw nsw i64 %indvars.iv288.1.2, %68
  %indvars.iv.next287.1.2 = add nuw nsw i64 %indvars.iv286.1.2, 8
  %319 = icmp slt i64 %indvars.iv.next289.1.2, %69
  br i1 %319, label %scalar.ph386, label %._crit_edge.us263.us.1.2, !llvm.loop !67

._crit_edge.us263.us.1.2:                         ; preds = %scalar.ph386
  %320 = load ptr, ptr %65, align 8
  %321 = add i32 %spec.select244, %138
  %322 = sext i32 %321 to i64
  %invariant.gep329 = getelementptr float, ptr %320, i64 %322
  %323 = udiv i64 %73, %68
  %324 = add i64 %323, 1
  %min.iters.check356 = icmp ugt i64 %324, 12
  %or.cond559 = select i1 %min.iters.check356, i1 %ident.check343.not, i1 false
  br i1 %or.cond559, label %vector.memcheck344, label %scalar.ph355.preheader

vector.memcheck344:                               ; preds = %._crit_edge.us263.us.1.2
  %smin345 = call i32 @llvm.smin.i32(i32 %.0218267, i32 -1)
  %325 = add i32 %138, %smin345
  %326 = sext i32 %325 to i64
  %327 = shl nsw i64 %326, 2
  %scevgep346 = getelementptr i8, ptr %320, i64 %327
  %328 = getelementptr i8, ptr %320, i64 %104
  %scevgep347 = getelementptr i8, ptr %328, i64 4
  %scevgep348 = getelementptr i8, ptr %scevgep347, i64 %327
  %scevgep349 = getelementptr i8, ptr %158, i64 24
  %scevgep350 = getelementptr i8, ptr %158, i64 %106
  %bound0351 = icmp ult ptr %scevgep346, %scevgep350
  %bound1352 = icmp ult ptr %scevgep349, %scevgep348
  %found.conflict353 = and i1 %bound0351, %bound1352
  br i1 %found.conflict353, label %scalar.ph355.preheader, label %vector.ph357

vector.ph357:                                     ; preds = %vector.memcheck344
  %n.mod.vf358 = and i64 %324, 7
  %329 = icmp eq i64 %n.mod.vf358, 0
  %330 = select i1 %329, i64 8, i64 %n.mod.vf358
  %n.vec359 = sub i64 %324, %330
  %ind.end360 = mul nuw i64 %n.vec359, %68
  %ind.end362 = shl i64 %n.vec359, 3
  br label %vector.body364

vector.body364:                                   ; preds = %vector.body364, %vector.ph357
  %index365 = phi i64 [ 0, %vector.ph357 ], [ %index.next372, %vector.body364 ]
  %offset.idx366 = mul nuw i64 %index365, %68
  %offset.idx367 = shl i64 %index365, 3
  %331 = or disjoint i64 %offset.idx367, 6
  %332 = or disjoint i64 %offset.idx367, 38
  %333 = getelementptr inbounds float, ptr %158, i64 %331
  %334 = getelementptr inbounds float, ptr %158, i64 %332
  %wide.vec368 = load <32 x float>, ptr %333, align 4, !tbaa !23
  %wide.vec369 = load <32 x float>, ptr %334, align 4, !tbaa !23
  %strided.vec370 = shufflevector <32 x float> %wide.vec368, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %strided.vec371 = shufflevector <32 x float> %wide.vec369, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %335 = getelementptr float, ptr %invariant.gep329, i64 %offset.idx366
  %336 = getelementptr i8, ptr %335, i64 16
  store <4 x float> %strided.vec370, ptr %335, align 4, !tbaa !23, !alias.scope !68, !noalias !71
  store <4 x float> %strided.vec371, ptr %336, align 4, !tbaa !23, !alias.scope !68, !noalias !71
  %index.next372 = add nuw i64 %index365, 8
  %337 = icmp eq i64 %index.next372, %n.vec359
  br i1 %337, label %scalar.ph355.preheader, label %vector.body364, !llvm.loop !73

scalar.ph355.preheader:                           ; preds = %vector.body364, %vector.memcheck344, %._crit_edge.us263.us.1.2
  %indvars.iv288.3.ph = phi i64 [ 0, %vector.memcheck344 ], [ 0, %._crit_edge.us263.us.1.2 ], [ %ind.end360, %vector.body364 ]
  %indvars.iv286.3.ph = phi i64 [ 0, %vector.memcheck344 ], [ 0, %._crit_edge.us263.us.1.2 ], [ %ind.end362, %vector.body364 ]
  br label %scalar.ph355

scalar.ph355:                                     ; preds = %scalar.ph355.preheader, %scalar.ph355
  %indvars.iv288.3 = phi i64 [ %indvars.iv.next289.3, %scalar.ph355 ], [ %indvars.iv288.3.ph, %scalar.ph355.preheader ]
  %indvars.iv286.3 = phi i64 [ %indvars.iv.next287.3, %scalar.ph355 ], [ %indvars.iv286.3.ph, %scalar.ph355.preheader ]
  %338 = or disjoint i64 %indvars.iv286.3, 6
  %339 = getelementptr inbounds float, ptr %158, i64 %338
  %340 = load float, ptr %339, align 4, !tbaa !23
  %gep330 = getelementptr float, ptr %invariant.gep329, i64 %indvars.iv288.3
  store float %340, ptr %gep330, align 4, !tbaa !23
  %indvars.iv.next289.3 = add nuw nsw i64 %indvars.iv288.3, %68
  %indvars.iv.next287.3 = add nuw nsw i64 %indvars.iv286.3, 8
  %341 = icmp slt i64 %indvars.iv.next289.3, %69
  br i1 %341, label %scalar.ph355, label %._crit_edge.us263.us.3, !llvm.loop !74

._crit_edge.us263.us.3:                           ; preds = %scalar.ph355
  %342 = add i32 %212, %138
  %343 = sext i32 %342 to i64
  %invariant.gep331 = getelementptr float, ptr %320, i64 %343
  %344 = udiv i64 %71, %68
  %345 = add i64 %344, 1
  %min.iters.check = icmp ugt i64 %345, 12
  %or.cond560 = select i1 %min.iters.check, i1 %ident.check.not, i1 false
  br i1 %or.cond560, label %vector.memcheck, label %scalar.ph.preheader

vector.memcheck:                                  ; preds = %._crit_edge.us263.us.3
  %smin = call i32 @llvm.smin.i32(i32 %.0218267, i32 -1)
  %346 = add i32 %149, %smin
  %347 = sext i32 %346 to i64
  %348 = shl nsw i64 %347, 2
  %scevgep = getelementptr i8, ptr %320, i64 %348
  %349 = getelementptr i8, ptr %320, i64 %107
  %scevgep333 = getelementptr i8, ptr %349, i64 4
  %scevgep334 = getelementptr i8, ptr %scevgep333, i64 %348
  %scevgep335 = getelementptr i8, ptr %158, i64 28
  %350 = getelementptr i8, ptr %158, i64 %108
  %scevgep336 = getelementptr i8, ptr %350, i64 32
  %bound0 = icmp ult ptr %scevgep, %scevgep336
  %bound1 = icmp ult ptr %scevgep335, %scevgep334
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.mod.vf = and i64 %345, 7
  %351 = icmp eq i64 %n.mod.vf, 0
  %352 = select i1 %351, i64 8, i64 %n.mod.vf
  %n.vec = sub i64 %345, %352
  %ind.end = mul nuw i64 %n.vec, %68
  %ind.end337 = shl i64 %n.vec, 3
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = mul nuw i64 %index, %68
  %offset.idx339 = shl i64 %index, 3
  %353 = or disjoint i64 %offset.idx339, 7
  %354 = or disjoint i64 %offset.idx339, 39
  %355 = getelementptr inbounds float, ptr %158, i64 %353
  %356 = getelementptr inbounds float, ptr %158, i64 %354
  %wide.vec = load <32 x float>, ptr %355, align 4, !tbaa !23
  %wide.vec340 = load <32 x float>, ptr %356, align 4, !tbaa !23
  %strided.vec = shufflevector <32 x float> %wide.vec, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %strided.vec341 = shufflevector <32 x float> %wide.vec340, <32 x float> poison, <4 x i32> <i32 0, i32 8, i32 16, i32 24>
  %357 = getelementptr float, ptr %invariant.gep331, i64 %offset.idx
  %358 = getelementptr i8, ptr %357, i64 16
  store <4 x float> %strided.vec, ptr %357, align 4, !tbaa !23, !alias.scope !75, !noalias !78
  store <4 x float> %strided.vec341, ptr %358, align 4, !tbaa !23, !alias.scope !75, !noalias !78
  %index.next = add nuw i64 %index, 8
  %359 = icmp eq i64 %index.next, %n.vec
  br i1 %359, label %scalar.ph.preheader, label %vector.body, !llvm.loop !80

scalar.ph.preheader:                              ; preds = %vector.body, %vector.memcheck, %._crit_edge.us263.us.3
  %indvars.iv288.1.3.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %._crit_edge.us263.us.3 ], [ %ind.end, %vector.body ]
  %indvars.iv286.1.3.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %._crit_edge.us263.us.3 ], [ %ind.end337, %vector.body ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv288.1.3 = phi i64 [ %indvars.iv.next289.1.3, %scalar.ph ], [ %indvars.iv288.1.3.ph, %scalar.ph.preheader ]
  %indvars.iv286.1.3 = phi i64 [ %indvars.iv.next287.1.3, %scalar.ph ], [ %indvars.iv286.1.3.ph, %scalar.ph.preheader ]
  %360 = or disjoint i64 %indvars.iv286.1.3, 7
  %361 = getelementptr inbounds float, ptr %158, i64 %360
  %362 = load float, ptr %361, align 4, !tbaa !23
  %gep332 = getelementptr float, ptr %invariant.gep331, i64 %indvars.iv288.1.3
  store float %362, ptr %gep332, align 4, !tbaa !23
  %indvars.iv.next289.1.3 = add nuw nsw i64 %indvars.iv288.1.3, %68
  %indvars.iv.next287.1.3 = add nuw nsw i64 %indvars.iv286.1.3, 8
  %363 = icmp slt i64 %indvars.iv.next289.1.3, %69
  br i1 %363, label %scalar.ph, label %.split266.us, !llvm.loop !81

364:                                              ; preds = %.lr.ph268
  %365 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %4) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #6
  br label %470

366:                                              ; preds = %.lr.ph, %._crit_edge257
  %indvars.iv281 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next282, %._crit_edge257 ]
  %367 = trunc i64 %indvars.iv281 to i32
  %368 = mul i32 %160, %367
  %369 = add nsw i32 %368, %130
  %370 = add nsw i32 %368, %131
  %371 = add nsw i32 %368, %132
  %372 = add nsw i32 %368, %133
  %373 = icmp sgt i32 %369, -1
  %.not = icmp slt i32 %369, %35
  %374 = icmp sgt i32 %370, -1
  %.not237 = icmp slt i32 %370, %35
  %375 = icmp sgt i32 %371, -1
  %.not238 = icmp slt i32 %371, %35
  %376 = icmp sgt i32 %372, -1
  %.not239 = icmp slt i32 %372, %35
  %377 = add nsw i64 %indvars.iv281, %162
  %378 = mul nsw i64 %377, %67
  %379 = add nsw i64 %indvars.iv281, %163
  %380 = mul nsw i64 %379, %67
  %381 = mul nsw i32 %369, %37
  %382 = mul nsw i32 %370, %37
  %383 = mul nsw i32 %371, %37
  %384 = mul nsw i32 %372, %37
  br i1 %55, label %.lr.ph256, label %._crit_edge257

.lr.ph256:                                        ; preds = %366
  %385 = load ptr, ptr %62, align 8
  br i1 %61, label %.lr.ph.us, label %._crit_edge257

.lr.ph.us:                                        ; preds = %.lr.ph256, %._crit_edge.us
  %indvars.iv276 = phi i64 [ %indvars.iv.next277, %._crit_edge.us ], [ 0, %.lr.ph256 ]
  %386 = trunc i64 %indvars.iv276 to i32
  %387 = mul i32 %161, %386
  %388 = add nsw i32 %387, %142
  %389 = add nsw i32 %387, %144
  %390 = add nsw i32 %387, %146
  %391 = add nsw i32 %387, %148
  %392 = icmp sgt i32 %388, -1
  %.not240.us = icmp slt i32 %388, %37
  %or.cond248.us = select i1 %392, i1 %.not240.us, i1 false
  %393 = select i1 %or.cond248.us, i1 %373, i1 false
  %394 = select i1 %393, i1 %.not, i1 false
  %395 = icmp sgt i32 %389, -1
  %.not241.us = icmp slt i32 %389, %37
  %or.cond249.us = select i1 %395, i1 %.not241.us, i1 false
  %396 = select i1 %or.cond249.us, i1 %374, i1 false
  %397 = select i1 %396, i1 %.not237, i1 false
  %398 = icmp sgt i32 %390, -1
  %.not242.us = icmp slt i32 %390, %37
  %or.cond250.us = select i1 %398, i1 %.not242.us, i1 false
  %399 = select i1 %or.cond250.us, i1 %375, i1 false
  %400 = select i1 %399, i1 %.not238, i1 false
  %401 = icmp sgt i32 %391, -1
  %.not243.us = icmp slt i32 %391, %37
  %or.cond251.us = select i1 %401, i1 %.not243.us, i1 false
  %402 = select i1 %or.cond251.us, i1 %376, i1 false
  %403 = select i1 %402, i1 %.not239, i1 false
  %404 = add nsw i64 %indvars.iv276, %378
  %405 = mul nsw i64 %404, %66
  %406 = add nsw i64 %indvars.iv276, %380
  %407 = mul nsw i64 %406, %66
  %408 = add nsw i32 %388, %381
  %409 = mul nsw i32 %408, %32
  %410 = add nsw i32 %389, %382
  %411 = mul nsw i32 %410, %32
  %412 = add nsw i32 %390, %383
  %413 = mul nsw i32 %412, %32
  %414 = add nsw i32 %391, %384
  %415 = mul nsw i32 %414, %32
  %416 = select i1 %394, i1 %57, i1 false
  %417 = load ptr, ptr %63, align 8
  %418 = select i1 %397, i1 %58, i1 false
  %419 = select i1 %400, i1 %59, i1 false
  %420 = select i1 %403, i1 %60, i1 false
  %421 = sext i32 %409 to i64
  %422 = sext i32 %411 to i64
  %423 = sext i32 %413 to i64
  %424 = sext i32 %415 to i64
  %invariant.gep = getelementptr float, ptr %385, i64 %405
  %invariant.gep307 = getelementptr float, ptr %385, i64 %407
  %invariant.gep309 = getelementptr float, ptr %417, i64 %421
  %invariant.gep311 = getelementptr float, ptr %417, i64 %422
  %invariant.gep313 = getelementptr float, ptr %417, i64 %423
  %invariant.gep315 = getelementptr float, ptr %417, i64 %424
  br label %425

425:                                              ; preds = %.lr.ph.us, %467
  %indvars.iv = phi i64 [ 0, %.lr.ph.us ], [ %indvars.iv.next, %467 ]
  %.idx = shl nsw i64 %indvars.iv, 5
  %426 = getelementptr inbounds i8, ptr %158, i64 %.idx
  %gep = getelementptr float, ptr %invariant.gep, i64 %indvars.iv
  %427 = load float, ptr %gep, align 4, !tbaa !23
  %gep308 = getelementptr float, ptr %invariant.gep307, i64 %indvars.iv
  %428 = load float, ptr %gep308, align 4, !tbaa !23
  br i1 %416, label %429, label %437

429:                                              ; preds = %425
  %gep310 = getelementptr float, ptr %invariant.gep309, i64 %indvars.iv
  %430 = load float, ptr %gep310, align 4, !tbaa !23
  %431 = load <2 x float>, ptr %426, align 4, !tbaa !23
  %432 = insertelement <2 x float> poison, float %430, i64 0
  %433 = shufflevector <2 x float> %432, <2 x float> poison, <2 x i32> zeroinitializer
  %434 = insertelement <2 x float> poison, float %427, i64 0
  %435 = insertelement <2 x float> %434, float %428, i64 1
  %436 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %433, <2 x float> %435, <2 x float> %431)
  store <2 x float> %436, ptr %426, align 4, !tbaa !23
  br label %437

437:                                              ; preds = %429, %425
  br i1 %418, label %438, label %447

438:                                              ; preds = %437
  %gep312 = getelementptr float, ptr %invariant.gep311, i64 %indvars.iv
  %439 = load float, ptr %gep312, align 4, !tbaa !23
  %440 = getelementptr inbounds i8, ptr %426, i64 8
  %441 = load <2 x float>, ptr %440, align 4, !tbaa !23
  %442 = insertelement <2 x float> poison, float %439, i64 0
  %443 = shufflevector <2 x float> %442, <2 x float> poison, <2 x i32> zeroinitializer
  %444 = insertelement <2 x float> poison, float %427, i64 0
  %445 = insertelement <2 x float> %444, float %428, i64 1
  %446 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %443, <2 x float> %445, <2 x float> %441)
  store <2 x float> %446, ptr %440, align 4, !tbaa !23
  br label %447

447:                                              ; preds = %438, %437
  br i1 %419, label %448, label %457

448:                                              ; preds = %447
  %gep314 = getelementptr float, ptr %invariant.gep313, i64 %indvars.iv
  %449 = load float, ptr %gep314, align 4, !tbaa !23
  %450 = getelementptr inbounds i8, ptr %426, i64 16
  %451 = load <2 x float>, ptr %450, align 4, !tbaa !23
  %452 = insertelement <2 x float> poison, float %449, i64 0
  %453 = shufflevector <2 x float> %452, <2 x float> poison, <2 x i32> zeroinitializer
  %454 = insertelement <2 x float> poison, float %427, i64 0
  %455 = insertelement <2 x float> %454, float %428, i64 1
  %456 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %453, <2 x float> %455, <2 x float> %451)
  store <2 x float> %456, ptr %450, align 4, !tbaa !23
  br label %457

457:                                              ; preds = %448, %447
  br i1 %420, label %458, label %467

458:                                              ; preds = %457
  %gep316 = getelementptr float, ptr %invariant.gep315, i64 %indvars.iv
  %459 = load float, ptr %gep316, align 4, !tbaa !23
  %460 = getelementptr inbounds i8, ptr %426, i64 24
  %461 = load <2 x float>, ptr %460, align 4, !tbaa !23
  %462 = insertelement <2 x float> poison, float %459, i64 0
  %463 = shufflevector <2 x float> %462, <2 x float> poison, <2 x i32> zeroinitializer
  %464 = insertelement <2 x float> poison, float %427, i64 0
  %465 = insertelement <2 x float> %464, float %428, i64 1
  %466 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %463, <2 x float> %465, <2 x float> %461)
  store <2 x float> %466, ptr %460, align 4, !tbaa !23
  br label %467

467:                                              ; preds = %458, %457
  %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 %425, !llvm.loop !82

._crit_edge.us:                                   ; preds = %467
  %indvars.iv.next277 = add nuw nsw i64 %indvars.iv276, 1
  %exitcond280.not = icmp eq i64 %indvars.iv.next277, %wide.trip.count279
  br i1 %exitcond280.not, label %._crit_edge257, label %.lr.ph.us, !llvm.loop !83

._crit_edge257:                                   ; preds = %._crit_edge.us, %.lr.ph256, %366
  %indvars.iv.next282 = add nuw nsw i64 %indvars.iv281, 1
  %exitcond285.not = icmp eq i64 %indvars.iv.next282, %wide.trip.count284
  br i1 %exitcond285.not, label %.preheader252, label %366, !llvm.loop !84

.split266.us:                                     ; preds = %scalar.ph, %.preheader252
  %468 = add nsw i32 %spec.select244, 2
  %469 = icmp slt i32 %468, %14
  br i1 %469, label %.lr.ph268, label %._crit_edge, !llvm.loop !85

470:                                              ; preds = %364, %29
  %.pn = phi { ptr, i32 } [ %365, %364 ], [ %30, %29 ]
  resume { ptr, i32 } %.pn
}

; 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

declare void @_ZN5micro9framework13ScratchBufferC1EPNS_21MaceMicroEngineConfigE(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN5micro9framework13ScratchBuffer9GetBufferIfEEPT_i(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: nounwind
declare void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5micro4base6memsetIfEEvPT_S2_j(ptr noundef, float noundef, i32 noundef) local_unnamed_addr #4

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

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

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 = { 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 = !{!12, !13, i64 16}
!23 = !{!17, !17, i64 0}
!24 = !{!25}
!25 = distinct !{!25, !26}
!26 = distinct !{!26, !"LVerDomain"}
!27 = !{!28}
!28 = distinct !{!28, !26}
!29 = distinct !{!29, !21, !30, !31}
!30 = !{!"llvm.loop.isvectorized", i32 1}
!31 = !{!"llvm.loop.unroll.runtime.disable"}
!32 = distinct !{!32, !21, !30}
!33 = !{!34}
!34 = distinct !{!34, !35}
!35 = distinct !{!35, !"LVerDomain"}
!36 = !{!37}
!37 = distinct !{!37, !35}
!38 = distinct !{!38, !21, !30, !31}
!39 = distinct !{!39, !21, !30}
!40 = !{!41}
!41 = distinct !{!41, !42}
!42 = distinct !{!42, !"LVerDomain"}
!43 = !{!44}
!44 = distinct !{!44, !42}
!45 = distinct !{!45, !21, !30, !31}
!46 = distinct !{!46, !21, !30}
!47 = !{!48}
!48 = distinct !{!48, !49}
!49 = distinct !{!49, !"LVerDomain"}
!50 = !{!51}
!51 = distinct !{!51, !49}
!52 = distinct !{!52, !21, !30, !31}
!53 = distinct !{!53, !21, !30}
!54 = !{!55}
!55 = distinct !{!55, !56}
!56 = distinct !{!56, !"LVerDomain"}
!57 = !{!58}
!58 = distinct !{!58, !56}
!59 = distinct !{!59, !21, !30, !31}
!60 = distinct !{!60, !21, !30}
!61 = !{!62}
!62 = distinct !{!62, !63}
!63 = distinct !{!63, !"LVerDomain"}
!64 = !{!65}
!65 = distinct !{!65, !63}
!66 = distinct !{!66, !21, !30, !31}
!67 = distinct !{!67, !21, !30}
!68 = !{!69}
!69 = distinct !{!69, !70}
!70 = distinct !{!70, !"LVerDomain"}
!71 = !{!72}
!72 = distinct !{!72, !70}
!73 = distinct !{!73, !21, !30, !31}
!74 = distinct !{!74, !21, !30}
!75 = !{!76}
!76 = distinct !{!76, !77}
!77 = distinct !{!77, !"LVerDomain"}
!78 = !{!79}
!79 = distinct !{!79, !77}
!80 = distinct !{!80, !21, !30, !31}
!81 = distinct !{!81, !21, !30}
!82 = distinct !{!82, !21}
!83 = distinct !{!83, !21}
!84 = distinct !{!84, !21}
!85 = distinct !{!85, !21}


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