; LLVM IR from XiaoMi/mace :: micro/ops/nhwc (depthwise_conv_2d_kb1_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 [67 x i8], align 1
@__const._ZN5micro3ops22DepthwiseConv2dKB1S4Op7ComputeERA4_i.h_valid = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN5micro3ops22DepthwiseConv2dKB1S4Op7ComputeERA4_i(ptr noundef nonnull align 8 dereferenceable(156) %0, ptr noundef nonnull align 4 dereferenceable(16) %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"class.micro::base::Logger", align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca %"class.micro::framework::ScratchBuffer", align 8
  %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 i32, align 4
  %39 = alloca [4 x i32], align 16
  %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 i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca [4 x i8], align 1
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca [4 x i8], align 1
  %62 = alloca i32, align 4
  %63 = alloca [4 x i32], align 16
  %64 = alloca i32, align 4
  %65 = alloca ptr, align 8
  %66 = alloca float, align 4
  %67 = alloca float, align 4
  %68 = alloca float, align 4
  %69 = alloca float, align 4
  %70 = alloca float, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %75 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  %76 = load ptr, ptr %4, align 8, !tbaa !5
  %77 = getelementptr inbounds [4 x i32], ptr %76, i64 0, i64 0
  %78 = load i32, ptr %77, align 4, !tbaa !9
  store i32 %78, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  %79 = load ptr, ptr %4, align 8, !tbaa !5
  %80 = getelementptr inbounds [4 x i32], ptr %79, i64 0, i64 1
  %81 = load i32, ptr %80, align 4, !tbaa !9
  store i32 %81, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  %82 = load ptr, ptr %4, align 8, !tbaa !5
  %83 = getelementptr inbounds [4 x i32], ptr %82, i64 0, i64 2
  %84 = load i32, ptr %83, align 4, !tbaa !9
  store i32 %84, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  %85 = load ptr, ptr %4, align 8, !tbaa !5
  %86 = getelementptr inbounds [4 x i32], ptr %85, i64 0, i64 3
  %87 = load i32, ptr %86, align 4, !tbaa !9
  store i32 %87, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  %88 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 6
  %89 = load ptr, ptr %88, align 8, !tbaa !11
  %90 = getelementptr inbounds i32, ptr %89, i64 1
  %91 = load i32, ptr %90, align 4, !tbaa !9
  store i32 %91, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  %92 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 6
  %93 = load ptr, ptr %92, align 8, !tbaa !11
  %94 = getelementptr inbounds i32, ptr %93, i64 2
  %95 = load i32, ptr %94, align 4, !tbaa !9
  store i32 %95, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  %96 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 6
  %97 = load ptr, ptr %96, align 8, !tbaa !11
  %98 = getelementptr inbounds i32, ptr %97, i64 3
  %99 = load i32, ptr %98, align 4, !tbaa !9
  store i32 %99, ptr %11, align 4, !tbaa !9
  %100 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 6
  %101 = load ptr, ptr %100, align 8, !tbaa !11
  %102 = getelementptr inbounds i32, ptr %101, i64 0
  %103 = load i32, ptr %102, align 4, !tbaa !9
  %104 = icmp eq i32 %103, 1
  br i1 %104, label %105, label %112

105:                                              ; preds = %2
  %106 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 2
  %107 = load ptr, ptr %106, align 8, !tbaa !19
  %108 = getelementptr inbounds i32, ptr %107, i64 3
  %109 = load i32, ptr %108, align 4, !tbaa !9
  %110 = load i32, ptr %11, align 4, !tbaa !9
  %111 = icmp eq i32 %109, %110
  br i1 %111, label %119, label %112

112:                                              ; preds = %105, %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  call void @_ZN5micro4base6LoggerC1EPKcjNS_8LogLevelE(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef @.str, i32 noundef 32, i32 noundef 4)
  %113 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5micro4base6LoggerlsEPKc(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef @.str.1)
          to label %114 unwind label %115

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

115:                                              ; preds = %112
  %116 = landingpad { ptr, i32 }
          cleanup
  %117 = extractvalue { ptr, i32 } %116, 0
  store ptr %117, ptr %13, align 8
  %118 = extractvalue { ptr, i32 } %116, 1
  store i32 %118, ptr %14, align 4
  call void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4) %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  br label %644

119:                                              ; preds = %114, %105
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %120 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 2
  %121 = load ptr, ptr %120, align 8, !tbaa !19
  %122 = getelementptr inbounds i32, ptr %121, i64 1
  %123 = load i32, ptr %122, align 4, !tbaa !9
  store i32 %123, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  %124 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 2
  %125 = load ptr, ptr %124, align 8, !tbaa !19
  %126 = getelementptr inbounds i32, ptr %125, i64 2
  %127 = load i32, ptr %126, align 4, !tbaa !9
  store i32 %127, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  %128 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 2
  %129 = load ptr, ptr %128, align 8, !tbaa !19
  %130 = getelementptr inbounds i32, ptr %129, i64 3
  %131 = load i32, ptr %130, align 4, !tbaa !9
  store i32 %131, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %132 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 3
  %133 = getelementptr inbounds [2 x i32], ptr %132, i64 0, i64 0
  %134 = load i32, ptr %133, align 8, !tbaa !9
  %135 = ashr i32 %134, 1
  store i32 %135, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  %136 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 3
  %137 = getelementptr inbounds [2 x i32], ptr %136, i64 0, i64 1
  %138 = load i32, ptr %137, align 4, !tbaa !9
  %139 = ashr i32 %138, 1
  store i32 %139, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  %140 = load i32, ptr %5, align 4, !tbaa !9
  %141 = load i32, ptr %6, align 4, !tbaa !9
  %142 = mul nsw i32 %140, %141
  %143 = load i32, ptr %7, align 4, !tbaa !9
  %144 = mul nsw i32 %142, %143
  store i32 %144, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %145 = load i32, ptr %20, align 4, !tbaa !9
  %146 = sub nsw i32 %145, 4
  store i32 %146, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  %147 = load i32, ptr %11, align 4, !tbaa !9
  %148 = mul nsw i32 %147, 4
  store i32 %148, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #7
  %149 = getelementptr inbounds %"class.micro::framework::Operator", ptr %75, i32 0, i32 2
  %150 = load ptr, ptr %149, align 8, !tbaa !20
  call void @_ZN5micro9framework13ScratchBufferC1EPNS_21MaceMicroEngineConfigE(ptr noundef nonnull align 8 dereferenceable(12) %24, ptr noundef %150)
  %151 = load i32, ptr %22, align 4, !tbaa !9
  %152 = invoke noundef ptr @_ZN5micro9framework13ScratchBuffer9GetBufferIfEEPT_i(ptr noundef nonnull align 8 dereferenceable(12) %24, i32 noundef %151)
          to label %153 unwind label %159

153:                                              ; preds = %119
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %24) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #7
  store ptr %152, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %154

154:                                              ; preds = %640, %153
  %155 = load i32, ptr %25, align 4, !tbaa !9
  %156 = load i32, ptr %20, align 4, !tbaa !9
  %157 = icmp slt i32 %155, %156
  br i1 %157, label %163, label %158

158:                                              ; preds = %154
  store i32 2, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %643

159:                                              ; preds = %119
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %13, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %14, align 4
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %24) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, 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 %15) #7
  br label %644

163:                                              ; preds = %154
  %164 = load i32, ptr %25, align 4, !tbaa !9
  %165 = load i32, ptr %21, align 4, !tbaa !9
  %166 = icmp sgt i32 %164, %165
  br i1 %166, label %167, label %169

167:                                              ; preds = %163
  %168 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %168, ptr %25, align 4, !tbaa !9
  br label %169

169:                                              ; preds = %167, %163
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  %170 = load i32, ptr %25, 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 %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %175 = load i32, ptr %25, 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 %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  %181 = load i32, ptr %25, 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 %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  %187 = load i32, ptr %25, 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 %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  %193 = load i32, ptr %27, align 4, !tbaa !9
  %194 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 2
  %195 = load ptr, ptr %194, align 8, !tbaa !21
  %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 %18, align 4, !tbaa !9
  %200 = sub nsw i32 %198, %199
  store i32 %200, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  %201 = load i32, ptr %28, align 4, !tbaa !9
  %202 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 2
  %203 = load ptr, ptr %202, align 8, !tbaa !21
  %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 %18, align 4, !tbaa !9
  %208 = sub nsw i32 %206, %207
  store i32 %208, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  %209 = load i32, ptr %29, align 4, !tbaa !9
  %210 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 2
  %211 = load ptr, ptr %210, align 8, !tbaa !21
  %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 %18, align 4, !tbaa !9
  %216 = sub nsw i32 %214, %215
  store i32 %216, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  %217 = load i32, ptr %30, align 4, !tbaa !9
  %218 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 2
  %219 = load ptr, ptr %218, align 8, !tbaa !21
  %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 %18, align 4, !tbaa !9
  %224 = sub nsw i32 %222, %223
  store i32 %224, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  %225 = load i32, ptr %25, align 4, !tbaa !9
  %226 = load i32, ptr %7, align 4, !tbaa !9
  %227 = srem i32 %225, %226
  store i32 %227, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  %228 = load i32, ptr %25, 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 %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  %232 = load i32, ptr %25, 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 %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  %236 = load i32, ptr %25, 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 %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #7
  %240 = load i32, ptr %25, align 4, !tbaa !9
  %241 = load i32, ptr %8, align 4, !tbaa !9
  %242 = mul nsw i32 %240, %241
  store i32 %242, ptr %39, align 4, !tbaa !9
  %243 = getelementptr inbounds i32, ptr %39, i64 1
  %244 = getelementptr inbounds i32, ptr %39, 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 %39, 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 %39, i64 0, i64 1
  store i32 %253, ptr %254, align 4, !tbaa !9
  %255 = getelementptr inbounds [4 x i32], ptr %39, 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 %39, i64 0, i64 2
  store i32 %258, ptr %259, align 8, !tbaa !9
  %260 = getelementptr inbounds [4 x i32], ptr %39, 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 %39, i64 0, i64 3
  store i32 %263, ptr %264, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #7
  %265 = load i32, ptr %35, align 4, !tbaa !9
  %266 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 2
  %267 = load ptr, ptr %266, align 8, !tbaa !21
  %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 %19, align 4, !tbaa !9
  %272 = sub nsw i32 %270, %271
  store i32 %272, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  %273 = load i32, ptr %36, align 4, !tbaa !9
  %274 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 2
  %275 = load ptr, ptr %274, align 8, !tbaa !21
  %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 %19, align 4, !tbaa !9
  %280 = sub nsw i32 %278, %279
  store i32 %280, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  %281 = load i32, ptr %37, align 4, !tbaa !9
  %282 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 2
  %283 = load ptr, ptr %282, align 8, !tbaa !21
  %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 %19, align 4, !tbaa !9
  %288 = sub nsw i32 %286, %287
  store i32 %288, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  %289 = load i32, ptr %38, align 4, !tbaa !9
  %290 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 2
  %291 = load ptr, ptr %290, align 8, !tbaa !21
  %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 %19, align 4, !tbaa !9
  %296 = sub nsw i32 %294, %295
  store i32 %296, ptr %43, align 4, !tbaa !9
  %297 = load ptr, ptr %23, align 8, !tbaa !5
  %298 = load i32, ptr %22, align 4, !tbaa !9
  call void @_ZN5micro4base6memsetIfEEvPT_S2_j(ptr noundef %297, float noundef 0.000000e+00, i32 noundef %298)
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  store i32 0, ptr %44, align 4, !tbaa !9
  br label %299

299:                                              ; preds = %597, %249
  %300 = load i32, ptr %44, align 4, !tbaa !9
  %301 = load i32, ptr %9, align 4, !tbaa !9
  %302 = icmp slt i32 %300, %301
  br i1 %302, label %304, label %303

303:                                              ; preds = %299
  store i32 5, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  br label %600

304:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #7
  %305 = load i32, ptr %31, align 4, !tbaa !9
  %306 = load i32, ptr %44, align 4, !tbaa !9
  %307 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 4
  %308 = getelementptr inbounds [2 x i32], ptr %307, i64 0, i64 0
  %309 = load i32, ptr %308, align 8, !tbaa !9
  %310 = mul nsw i32 %306, %309
  %311 = add nsw i32 %305, %310
  store i32 %311, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #7
  %312 = load i32, ptr %32, align 4, !tbaa !9
  %313 = load i32, ptr %44, align 4, !tbaa !9
  %314 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 4
  %315 = getelementptr inbounds [2 x i32], ptr %314, i64 0, i64 0
  %316 = load i32, ptr %315, align 8, !tbaa !9
  %317 = mul nsw i32 %313, %316
  %318 = add nsw i32 %312, %317
  store i32 %318, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #7
  %319 = load i32, ptr %33, align 4, !tbaa !9
  %320 = load i32, ptr %44, align 4, !tbaa !9
  %321 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 4
  %322 = getelementptr inbounds [2 x i32], ptr %321, i64 0, i64 0
  %323 = load i32, ptr %322, align 8, !tbaa !9
  %324 = mul nsw i32 %320, %323
  %325 = add nsw i32 %319, %324
  store i32 %325, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #7
  %326 = load i32, ptr %34, align 4, !tbaa !9
  %327 = load i32, ptr %44, align 4, !tbaa !9
  %328 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 4
  %329 = getelementptr inbounds [2 x i32], ptr %328, i64 0, i64 0
  %330 = load i32, ptr %329, align 8, !tbaa !9
  %331 = mul nsw i32 %327, %330
  %332 = add nsw i32 %326, %331
  store i32 %332, ptr %48, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %49, ptr align 1 @__const._ZN5micro3ops22DepthwiseConv2dKB1S4Op7ComputeERA4_i.h_valid, i64 4, i1 false)
  %333 = load i32, ptr %45, align 4, !tbaa !9
  %334 = icmp slt i32 %333, 0
  br i1 %334, label %339, label %335

335:                                              ; preds = %304
  %336 = load i32, ptr %45, align 4, !tbaa !9
  %337 = load i32, ptr %15, align 4, !tbaa !9
  %338 = icmp sge i32 %336, %337
  br i1 %338, label %339, label %341

339:                                              ; preds = %335, %304
  %340 = getelementptr inbounds [4 x i8], ptr %49, i64 0, i64 0
  store i8 0, ptr %340, align 1, !tbaa !22
  br label %341

341:                                              ; preds = %339, %335
  %342 = load i32, ptr %46, align 4, !tbaa !9
  %343 = icmp slt i32 %342, 0
  br i1 %343, label %348, label %344

344:                                              ; preds = %341
  %345 = load i32, ptr %46, align 4, !tbaa !9
  %346 = load i32, ptr %15, align 4, !tbaa !9
  %347 = icmp sge i32 %345, %346
  br i1 %347, label %348, label %350

348:                                              ; preds = %344, %341
  %349 = getelementptr inbounds [4 x i8], ptr %49, i64 0, i64 1
  store i8 0, ptr %349, align 1, !tbaa !22
  br label %350

350:                                              ; preds = %348, %344
  %351 = load i32, ptr %47, align 4, !tbaa !9
  %352 = icmp slt i32 %351, 0
  br i1 %352, label %357, label %353

353:                                              ; preds = %350
  %354 = load i32, ptr %47, align 4, !tbaa !9
  %355 = load i32, ptr %15, align 4, !tbaa !9
  %356 = icmp sge i32 %354, %355
  br i1 %356, label %357, label %359

357:                                              ; preds = %353, %350
  %358 = getelementptr inbounds [4 x i8], ptr %49, i64 0, i64 2
  store i8 0, ptr %358, align 1, !tbaa !22
  br label %359

359:                                              ; preds = %357, %353
  %360 = load i32, ptr %48, align 4, !tbaa !9
  %361 = icmp slt i32 %360, 0
  br i1 %361, label %366, label %362

362:                                              ; preds = %359
  %363 = load i32, ptr %48, align 4, !tbaa !9
  %364 = load i32, ptr %15, align 4, !tbaa !9
  %365 = icmp sge i32 %363, %364
  br i1 %365, label %366, label %368

366:                                              ; preds = %362, %359
  %367 = getelementptr inbounds [4 x i8], ptr %49, i64 0, i64 3
  store i8 0, ptr %367, align 1, !tbaa !22
  br label %368

368:                                              ; preds = %366, %362
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #7
  %369 = load i32, ptr %44, align 4, !tbaa !9
  %370 = load i32, ptr %10, align 4, !tbaa !9
  %371 = mul nsw i32 %369, %370
  store i32 %371, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #7
  %372 = load i32, ptr %45, align 4, !tbaa !9
  %373 = load i32, ptr %16, align 4, !tbaa !9
  %374 = mul nsw i32 %372, %373
  store i32 %374, ptr %51, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #7
  %375 = load i32, ptr %46, align 4, !tbaa !9
  %376 = load i32, ptr %16, align 4, !tbaa !9
  %377 = mul nsw i32 %375, %376
  store i32 %377, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #7
  %378 = load i32, ptr %47, align 4, !tbaa !9
  %379 = load i32, ptr %16, align 4, !tbaa !9
  %380 = mul nsw i32 %378, %379
  store i32 %380, ptr %53, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #7
  %381 = load i32, ptr %48, align 4, !tbaa !9
  %382 = load i32, ptr %16, align 4, !tbaa !9
  %383 = mul nsw i32 %381, %382
  store i32 %383, ptr %54, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #7
  store i32 0, ptr %55, align 4, !tbaa !9
  br label %384

384:                                              ; preds = %593, %368
  %385 = load i32, ptr %55, align 4, !tbaa !9
  %386 = load i32, ptr %10, align 4, !tbaa !9
  %387 = icmp slt i32 %385, %386
  br i1 %387, label %389, label %388

388:                                              ; preds = %384
  store i32 8, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #7
  br label %596

389:                                              ; preds = %384
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #7
  %390 = load i32, ptr %55, align 4, !tbaa !9
  %391 = getelementptr inbounds %"class.micro::ops::FilterOpBase", ptr %75, i32 0, i32 4
  %392 = getelementptr inbounds [2 x i32], ptr %391, i64 0, i64 1
  %393 = load i32, ptr %392, align 4, !tbaa !9
  %394 = mul nsw i32 %390, %393
  store i32 %394, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #7
  %395 = load i32, ptr %40, align 4, !tbaa !9
  %396 = load i32, ptr %56, align 4, !tbaa !9
  %397 = add nsw i32 %395, %396
  store i32 %397, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #7
  %398 = load i32, ptr %41, align 4, !tbaa !9
  %399 = load i32, ptr %56, align 4, !tbaa !9
  %400 = add nsw i32 %398, %399
  store i32 %400, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #7
  %401 = load i32, ptr %42, align 4, !tbaa !9
  %402 = load i32, ptr %56, align 4, !tbaa !9
  %403 = add nsw i32 %401, %402
  store i32 %403, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #7
  %404 = load i32, ptr %43, align 4, !tbaa !9
  %405 = load i32, ptr %56, align 4, !tbaa !9
  %406 = add nsw i32 %404, %405
  store i32 %406, ptr %60, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #7
  %407 = getelementptr inbounds [4 x i8], ptr %49, i64 0, i64 0
  %408 = load i8, ptr %407, align 1, !tbaa !22, !range !24, !noundef !25
  %409 = trunc i8 %408 to i1
  %410 = zext i1 %409 to i8
  store i8 %410, ptr %61, align 1, !tbaa !22
  %411 = getelementptr inbounds i8, ptr %61, i64 1
  %412 = getelementptr inbounds [4 x i8], ptr %49, i64 0, i64 1
  %413 = load i8, ptr %412, align 1, !tbaa !22, !range !24, !noundef !25
  %414 = trunc i8 %413 to i1
  %415 = zext i1 %414 to i8
  store i8 %415, ptr %411, align 1, !tbaa !22
  %416 = getelementptr inbounds i8, ptr %61, i64 2
  %417 = getelementptr inbounds [4 x i8], ptr %49, i64 0, i64 2
  %418 = load i8, ptr %417, align 1, !tbaa !22, !range !24, !noundef !25
  %419 = trunc i8 %418 to i1
  %420 = zext i1 %419 to i8
  store i8 %420, ptr %416, align 1, !tbaa !22
  %421 = getelementptr inbounds i8, ptr %61, i64 3
  %422 = getelementptr inbounds [4 x i8], ptr %49, i64 0, i64 3
  %423 = load i8, ptr %422, align 1, !tbaa !22, !range !24, !noundef !25
  %424 = trunc i8 %423 to i1
  %425 = zext i1 %424 to i8
  store i8 %425, ptr %421, align 1, !tbaa !22
  %426 = load i32, ptr %57, align 4, !tbaa !9
  %427 = icmp slt i32 %426, 0
  br i1 %427, label %432, label %428

428:                                              ; preds = %389
  %429 = load i32, ptr %57, align 4, !tbaa !9
  %430 = load i32, ptr %16, align 4, !tbaa !9
  %431 = icmp sge i32 %429, %430
  br i1 %431, label %432, label %434

432:                                              ; preds = %428, %389
  %433 = getelementptr inbounds [4 x i8], ptr %61, i64 0, i64 0
  store i8 0, ptr %433, align 1, !tbaa !22
  br label %434

434:                                              ; preds = %432, %428
  %435 = load i32, ptr %58, align 4, !tbaa !9
  %436 = icmp slt i32 %435, 0
  br i1 %436, label %441, label %437

437:                                              ; preds = %434
  %438 = load i32, ptr %58, align 4, !tbaa !9
  %439 = load i32, ptr %16, align 4, !tbaa !9
  %440 = icmp sge i32 %438, %439
  br i1 %440, label %441, label %443

441:                                              ; preds = %437, %434
  %442 = getelementptr inbounds [4 x i8], ptr %61, i64 0, i64 1
  store i8 0, ptr %442, align 1, !tbaa !22
  br label %443

443:                                              ; preds = %441, %437
  %444 = load i32, ptr %59, align 4, !tbaa !9
  %445 = icmp slt i32 %444, 0
  br i1 %445, label %450, label %446

446:                                              ; preds = %443
  %447 = load i32, ptr %59, align 4, !tbaa !9
  %448 = load i32, ptr %16, align 4, !tbaa !9
  %449 = icmp sge i32 %447, %448
  br i1 %449, label %450, label %452

450:                                              ; preds = %446, %443
  %451 = getelementptr inbounds [4 x i8], ptr %61, i64 0, i64 2
  store i8 0, ptr %451, align 1, !tbaa !22
  br label %452

452:                                              ; preds = %450, %446
  %453 = load i32, ptr %60, align 4, !tbaa !9
  %454 = icmp slt i32 %453, 0
  br i1 %454, label %459, label %455

455:                                              ; preds = %452
  %456 = load i32, ptr %60, align 4, !tbaa !9
  %457 = load i32, ptr %16, align 4, !tbaa !9
  %458 = icmp sge i32 %456, %457
  br i1 %458, label %459, label %461

459:                                              ; preds = %455, %452
  %460 = getelementptr inbounds [4 x i8], ptr %61, i64 0, i64 3
  store i8 0, ptr %460, align 1, !tbaa !22
  br label %461

461:                                              ; preds = %459, %455
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #7
  %462 = load i32, ptr %50, align 4, !tbaa !9
  %463 = load i32, ptr %55, align 4, !tbaa !9
  %464 = add nsw i32 %462, %463
  %465 = load i32, ptr %11, align 4, !tbaa !9
  %466 = mul nsw i32 %464, %465
  store i32 %466, ptr %62, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %63) #7
  %467 = load i32, ptr %51, align 4, !tbaa !9
  %468 = load i32, ptr %57, align 4, !tbaa !9
  %469 = add nsw i32 %467, %468
  %470 = load i32, ptr %17, align 4, !tbaa !9
  %471 = mul nsw i32 %469, %470
  store i32 %471, ptr %63, align 4, !tbaa !9
  %472 = getelementptr inbounds i32, ptr %63, i64 1
  %473 = load i32, ptr %52, align 4, !tbaa !9
  %474 = load i32, ptr %58, align 4, !tbaa !9
  %475 = add nsw i32 %473, %474
  %476 = load i32, ptr %17, align 4, !tbaa !9
  %477 = mul nsw i32 %475, %476
  store i32 %477, ptr %472, align 4, !tbaa !9
  %478 = getelementptr inbounds i32, ptr %63, i64 2
  %479 = load i32, ptr %53, align 4, !tbaa !9
  %480 = load i32, ptr %59, align 4, !tbaa !9
  %481 = add nsw i32 %479, %480
  %482 = load i32, ptr %17, align 4, !tbaa !9
  %483 = mul nsw i32 %481, %482
  store i32 %483, ptr %478, align 4, !tbaa !9
  %484 = getelementptr inbounds i32, ptr %63, i64 3
  %485 = load i32, ptr %54, align 4, !tbaa !9
  %486 = load i32, ptr %60, align 4, !tbaa !9
  %487 = add nsw i32 %485, %486
  %488 = load i32, ptr %17, align 4, !tbaa !9
  %489 = mul nsw i32 %487, %488
  store i32 %489, ptr %484, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #7
  store i32 0, ptr %64, align 4, !tbaa !9
  br label %490

490:                                              ; preds = %589, %461
  %491 = load i32, ptr %64, align 4, !tbaa !9
  %492 = load i32, ptr %11, align 4, !tbaa !9
  %493 = icmp slt i32 %491, %492
  br i1 %493, label %495, label %494

494:                                              ; preds = %490
  store i32 11, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #7
  br label %592

495:                                              ; preds = %490
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #7
  %496 = load ptr, ptr %23, align 8, !tbaa !5
  %497 = load i32, ptr %64, align 4, !tbaa !9
  %498 = mul nsw i32 %497, 4
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds float, ptr %496, i64 %499
  store ptr %500, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #7
  %501 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 5
  %502 = load ptr, ptr %501, align 8, !tbaa !26
  %503 = load i32, ptr %62, align 4, !tbaa !9
  %504 = load i32, ptr %64, align 4, !tbaa !9
  %505 = add nsw i32 %503, %504
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds float, ptr %502, i64 %506
  %508 = load float, ptr %507, align 4, !tbaa !27
  store float %508, ptr %66, align 4, !tbaa !27
  %509 = getelementptr inbounds [4 x i8], ptr %61, i64 0, i64 0
  %510 = load i8, ptr %509, align 1, !tbaa !22, !range !24, !noundef !25
  %511 = trunc i8 %510 to i1
  br i1 %511, label %512, label %528

512:                                              ; preds = %495
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #7
  %513 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 1
  %514 = load ptr, ptr %513, align 8, !tbaa !28
  %515 = getelementptr inbounds [4 x i32], ptr %63, i64 0, i64 0
  %516 = load i32, ptr %515, align 16, !tbaa !9
  %517 = load i32, ptr %64, align 4, !tbaa !9
  %518 = add nsw i32 %516, %517
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds float, ptr %514, i64 %519
  %521 = load float, ptr %520, align 4, !tbaa !27
  store float %521, ptr %67, align 4, !tbaa !27
  %522 = load float, ptr %67, align 4, !tbaa !27
  %523 = load float, ptr %66, align 4, !tbaa !27
  %524 = load ptr, ptr %65, align 8, !tbaa !5
  %525 = getelementptr inbounds float, ptr %524, i64 0
  %526 = load float, ptr %525, align 4, !tbaa !27
  %527 = call float @llvm.fmuladd.f32(float %522, float %523, float %526)
  store float %527, ptr %525, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #7
  br label %528

528:                                              ; preds = %512, %495
  %529 = getelementptr inbounds [4 x i8], ptr %61, i64 0, i64 1
  %530 = load i8, ptr %529, align 1, !tbaa !22, !range !24, !noundef !25
  %531 = trunc i8 %530 to i1
  br i1 %531, label %532, label %548

532:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #7
  %533 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 1
  %534 = load ptr, ptr %533, align 8, !tbaa !28
  %535 = getelementptr inbounds [4 x i32], ptr %63, i64 0, i64 1
  %536 = load i32, ptr %535, align 4, !tbaa !9
  %537 = load i32, ptr %64, align 4, !tbaa !9
  %538 = add nsw i32 %536, %537
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds float, ptr %534, i64 %539
  %541 = load float, ptr %540, align 4, !tbaa !27
  store float %541, ptr %68, align 4, !tbaa !27
  %542 = load float, ptr %68, align 4, !tbaa !27
  %543 = load float, ptr %66, align 4, !tbaa !27
  %544 = load ptr, ptr %65, align 8, !tbaa !5
  %545 = getelementptr inbounds float, ptr %544, i64 1
  %546 = load float, ptr %545, align 4, !tbaa !27
  %547 = call float @llvm.fmuladd.f32(float %542, float %543, float %546)
  store float %547, ptr %545, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #7
  br label %548

548:                                              ; preds = %532, %528
  %549 = getelementptr inbounds [4 x i8], ptr %61, i64 0, i64 2
  %550 = load i8, ptr %549, align 1, !tbaa !22, !range !24, !noundef !25
  %551 = trunc i8 %550 to i1
  br i1 %551, label %552, label %568

552:                                              ; preds = %548
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #7
  %553 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 1
  %554 = load ptr, ptr %553, align 8, !tbaa !28
  %555 = getelementptr inbounds [4 x i32], ptr %63, i64 0, i64 2
  %556 = load i32, ptr %555, align 8, !tbaa !9
  %557 = load i32, ptr %64, align 4, !tbaa !9
  %558 = add nsw i32 %556, %557
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds float, ptr %554, i64 %559
  %561 = load float, ptr %560, align 4, !tbaa !27
  store float %561, ptr %69, align 4, !tbaa !27
  %562 = load float, ptr %69, align 4, !tbaa !27
  %563 = load float, ptr %66, align 4, !tbaa !27
  %564 = load ptr, ptr %65, align 8, !tbaa !5
  %565 = getelementptr inbounds float, ptr %564, i64 2
  %566 = load float, ptr %565, align 4, !tbaa !27
  %567 = call float @llvm.fmuladd.f32(float %562, float %563, float %566)
  store float %567, ptr %565, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #7
  br label %568

568:                                              ; preds = %552, %548
  %569 = getelementptr inbounds [4 x i8], ptr %61, i64 0, i64 3
  %570 = load i8, ptr %569, align 1, !tbaa !22, !range !24, !noundef !25
  %571 = trunc i8 %570 to i1
  br i1 %571, label %572, label %588

572:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #7
  %573 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 1
  %574 = load ptr, ptr %573, align 8, !tbaa !28
  %575 = getelementptr inbounds [4 x i32], ptr %63, i64 0, i64 3
  %576 = load i32, ptr %575, align 4, !tbaa !9
  %577 = load i32, ptr %64, align 4, !tbaa !9
  %578 = add nsw i32 %576, %577
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds float, ptr %574, i64 %579
  %581 = load float, ptr %580, align 4, !tbaa !27
  store float %581, ptr %70, align 4, !tbaa !27
  %582 = load float, ptr %70, align 4, !tbaa !27
  %583 = load float, ptr %66, align 4, !tbaa !27
  %584 = load ptr, ptr %65, align 8, !tbaa !5
  %585 = getelementptr inbounds float, ptr %584, i64 3
  %586 = load float, ptr %585, align 4, !tbaa !27
  %587 = call float @llvm.fmuladd.f32(float %582, float %583, float %586)
  store float %587, ptr %585, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #7
  br label %588

588:                                              ; preds = %572, %568
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  br label %589

589:                                              ; preds = %588
  %590 = load i32, ptr %64, align 4, !tbaa !9
  %591 = add nsw i32 %590, 1
  store i32 %591, ptr %64, align 4, !tbaa !9
  br label %490, !llvm.loop !29

592:                                              ; preds = %494
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #7
  br label %593

593:                                              ; preds = %592
  %594 = load i32, ptr %55, align 4, !tbaa !9
  %595 = add nsw i32 %594, 1
  store i32 %595, ptr %55, align 4, !tbaa !9
  br label %384, !llvm.loop !31

596:                                              ; preds = %388
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 4, 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
  br label %597

597:                                              ; preds = %596
  %598 = load i32, ptr %44, align 4, !tbaa !9
  %599 = add nsw i32 %598, 1
  store i32 %599, ptr %44, align 4, !tbaa !9
  br label %299, !llvm.loop !32

600:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #7
  store i32 0, ptr %71, align 4, !tbaa !9
  br label %601

601:                                              ; preds = %636, %600
  %602 = load i32, ptr %71, align 4, !tbaa !9
  %603 = icmp slt i32 %602, 4
  br i1 %603, label %605, label %604

604:                                              ; preds = %601
  store i32 14, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #7
  br label %639

605:                                              ; preds = %601
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #7
  %606 = load i32, ptr %71, align 4, !tbaa !9
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds [4 x i32], ptr %39, i64 0, i64 %607
  %609 = load i32, ptr %608, align 4, !tbaa !9
  store i32 %609, ptr %72, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #7
  store i32 0, ptr %73, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #7
  store i32 0, ptr %74, align 4, !tbaa !9
  br label %610

610:                                              ; preds = %630, %605
  %611 = load i32, ptr %73, align 4, !tbaa !9
  %612 = load i32, ptr %8, align 4, !tbaa !9
  %613 = icmp slt i32 %611, %612
  br i1 %613, label %615, label %614

614:                                              ; preds = %610
  store i32 17, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #7
  br label %635

615:                                              ; preds = %610
  %616 = load ptr, ptr %23, align 8, !tbaa !5
  %617 = load i32, ptr %74, align 4, !tbaa !9
  %618 = load i32, ptr %71, align 4, !tbaa !9
  %619 = add nsw i32 %617, %618
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds float, ptr %616, i64 %620
  %622 = load float, ptr %621, align 4, !tbaa !27
  %623 = getelementptr inbounds %"class.micro::ops::Conv2dBase", ptr %75, i32 0, i32 13
  %624 = load ptr, ptr %623, align 8, !tbaa !33
  %625 = load i32, ptr %72, align 4, !tbaa !9
  %626 = load i32, ptr %73, align 4, !tbaa !9
  %627 = add nsw i32 %625, %626
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds float, ptr %624, i64 %628
  store float %622, ptr %629, align 4, !tbaa !27
  br label %630

630:                                              ; preds = %615
  %631 = load i32, ptr %73, align 4, !tbaa !9
  %632 = add nsw i32 %631, 1
  store i32 %632, ptr %73, align 4, !tbaa !9
  %633 = load i32, ptr %74, align 4, !tbaa !9
  %634 = add nsw i32 %633, 4
  store i32 %634, ptr %74, align 4, !tbaa !9
  br label %610, !llvm.loop !34

635:                                              ; preds = %614
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #7
  br label %636

636:                                              ; preds = %635
  %637 = load i32, ptr %71, align 4, !tbaa !9
  %638 = add nsw i32 %637, 1
  store i32 %638, ptr %71, align 4, !tbaa !9
  br label %601, !llvm.loop !35

639:                                              ; preds = %604
  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 16, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, 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
  br label %640

640:                                              ; preds = %639
  %641 = load i32, ptr %25, align 4, !tbaa !9
  %642 = add nsw i32 %641, 4
  store i32 %642, ptr %25, align 4, !tbaa !9
  br label %154, !llvm.loop !36

643:                                              ; preds = %158
  store i32 1, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 8, 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 %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  ret i32 0

644:                                              ; preds = %159, %115
  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 %645

645:                                              ; preds = %644
  %646 = load ptr, ptr %13, align 8
  %647 = load i32, ptr %14, align 4
  %648 = insertvalue { ptr, i32 } poison, ptr %646, 0
  %649 = insertvalue { ptr, i32 } %648, i32 %647, 1
  resume { ptr, i32 } %649
}

; 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 = !{!14, !6, i64 16}
!21 = !{!13, !6, i64 40}
!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}


; 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 [67 x i8], align 1
@__const._ZN5micro3ops22DepthwiseConv2dKB1S4Op7ComputeERA4_i.h_valid = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN5micro3ops22DepthwiseConv2dKB1S4Op7ComputeERA4_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 = getelementptr inbounds i8, ptr %13, i64 4
  %15 = load i32, ptr %14, align 4, !tbaa !5
  %16 = getelementptr inbounds i8, ptr %13, i64 8
  %17 = load i32, ptr %16, align 4, !tbaa !5
  %18 = getelementptr inbounds i8, ptr %13, i64 12
  %19 = load i32, ptr %18, align 4, !tbaa !5
  %20 = load i32, ptr %13, align 4, !tbaa !5
  %21 = icmp eq i32 %20, 1
  br i1 %21, label %22, label %28

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

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

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

31:                                               ; preds = %28
  %32 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5micro4base6LoggerD1Ev(ptr noundef nonnull align 4 dereferenceable(4) %3) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #7
  br label %355

33:                                               ; preds = %30, %22
  %34 = phi i32 [ %.pre257, %30 ], [ %19, %22 ]
  %35 = phi ptr [ %.pre, %30 ], [ %24, %22 ]
  %36 = getelementptr inbounds i8, ptr %35, i64 4
  %37 = load i32, ptr %36, align 4, !tbaa !5
  %38 = getelementptr inbounds i8, ptr %35, i64 8
  %39 = load i32, ptr %38, align 4, !tbaa !5
  %40 = getelementptr inbounds i8, ptr %0, i64 48
  %41 = load i32, ptr %40, align 8, !tbaa !5
  %42 = ashr i32 %41, 1
  %43 = getelementptr inbounds i8, ptr %0, i64 52
  %44 = load i32, ptr %43, align 4, !tbaa !5
  %45 = ashr i32 %44, 1
  %46 = mul nsw i32 %7, %5
  %47 = mul nsw i32 %46, %9
  %48 = add nsw i32 %47, -4
  %49 = shl nsw i32 %19, 2
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #7
  %50 = getelementptr inbounds i8, ptr %0, i64 16
  %51 = load ptr, ptr %50, align 8, !tbaa !19
  call void @_ZN5micro9framework13ScratchBufferC1EPNS_21MaceMicroEngineConfigE(ptr noundef nonnull align 8 dereferenceable(12) %4, ptr noundef %51)
  %52 = invoke noundef ptr @_ZN5micro9framework13ScratchBuffer9GetBufferIfEEPT_i(ptr noundef nonnull align 8 dereferenceable(12) %4, i32 noundef %49)
          to label %53 unwind label %90

53:                                               ; preds = %33
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %4) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #7
  %54 = icmp sgt i32 %47, 0
  br i1 %54, label %.lr.ph222, label %._crit_edge

.lr.ph222:                                        ; preds = %53
  %55 = getelementptr inbounds i8, ptr %0, i64 40
  %56 = icmp sgt i32 %15, 0
  %57 = getelementptr inbounds i8, ptr %0, i64 56
  %.sroa.558.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const._ZN5micro3ops22DepthwiseConv2dKB1S4Op7ComputeERA4_i.h_valid, i64 1), align 1
  %.sroa.7.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const._ZN5micro3ops22DepthwiseConv2dKB1S4Op7ComputeERA4_i.h_valid, i64 2), align 1
  %.sroa.9.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const._ZN5micro3ops22DepthwiseConv2dKB1S4Op7ComputeERA4_i.h_valid, i64 3), align 1
  %.sroa.057.0.copyload = load i8, ptr @__const._ZN5micro3ops22DepthwiseConv2dKB1S4Op7ComputeERA4_i.h_valid, align 1
  %58 = icmp sgt i32 %17, 0
  %59 = getelementptr inbounds i8, ptr %0, i64 60
  %60 = trunc i8 %.sroa.057.0.copyload to i1
  %61 = trunc i8 %.sroa.558.0.copyload to i1
  %62 = trunc i8 %.sroa.7.0.copyload to i1
  %63 = trunc i8 %.sroa.9.0.copyload to i1
  %64 = icmp sgt i32 %19, 0
  %65 = getelementptr inbounds i8, ptr %0, i64 88
  %66 = getelementptr inbounds i8, ptr %0, i64 64
  %67 = icmp sgt i32 %11, 0
  %68 = getelementptr inbounds i8, ptr %0, i64 136
  %69 = sext i32 %19 to i64
  %70 = sext i32 %17 to i64
  %wide.trip.count240 = zext nneg i32 %15 to i64
  %wide.trip.count235 = zext nneg i32 %17 to i64
  %wide.trip.count = zext nneg i32 %19 to i64
  %wide.trip.count230 = zext nneg i32 %19 to i64
  %wide.trip.count249 = zext i32 %11 to i64
  %71 = shl nuw nsw i64 %wide.trip.count249, 2
  %scevgep286 = getelementptr i8, ptr %52, i64 12
  %72 = shl nuw nsw i64 %wide.trip.count249, 4
  %scevgep287 = getelementptr i8, ptr %52, i64 %72
  %73 = shl nuw nsw i64 %wide.trip.count249, 2
  %scevgep294 = getelementptr i8, ptr %52, i64 8
  %74 = shl nuw nsw i64 %wide.trip.count249, 4
  %75 = getelementptr i8, ptr %52, i64 %74
  %scevgep295 = getelementptr i8, ptr %75, i64 -4
  %76 = shl nuw nsw i64 %wide.trip.count249, 2
  %scevgep319 = getelementptr i8, ptr %52, i64 4
  %77 = shl nuw nsw i64 %wide.trip.count249, 4
  %78 = getelementptr i8, ptr %52, i64 %77
  %scevgep320 = getelementptr i8, ptr %78, i64 -8
  %79 = shl nuw nsw i64 %wide.trip.count249, 2
  %80 = shl nuw nsw i64 %wide.trip.count249, 4
  %81 = getelementptr i8, ptr %52, i64 %80
  %scevgep344 = getelementptr i8, ptr %81, i64 -12
  %min.iters.check350 = icmp ult i32 %11, 9
  %n.mod.vf352 = and i64 %wide.trip.count249, 7
  %82 = icmp eq i64 %n.mod.vf352, 0
  %83 = select i1 %82, i64 8, i64 %n.mod.vf352
  %n.vec353 = sub nsw i64 %wide.trip.count249, %83
  %ind.end355 = shl nsw i64 %n.vec353, 2
  %invariant.gep383 = getelementptr i8, ptr %52, i64 16
  %invariant.gep387 = getelementptr i8, ptr %52, i64 32
  %invariant.gep391 = getelementptr i8, ptr %52, i64 48
  %min.iters.check326 = icmp ult i32 %11, 9
  %n.mod.vf328 = and i64 %wide.trip.count249, 7
  %84 = icmp eq i64 %n.mod.vf328, 0
  %85 = select i1 %84, i64 8, i64 %n.mod.vf328
  %n.vec329 = sub nsw i64 %wide.trip.count249, %85
  %ind.end331 = shl nsw i64 %n.vec329, 2
  %invariant.gep395 = getelementptr i8, ptr %52, i64 16
  %invariant.gep399 = getelementptr i8, ptr %52, i64 32
  %invariant.gep403 = getelementptr i8, ptr %52, i64 48
  %min.iters.check301 = icmp ult i32 %11, 9
  %n.mod.vf303 = and i64 %wide.trip.count249, 7
  %86 = icmp eq i64 %n.mod.vf303, 0
  %87 = select i1 %86, i64 8, i64 %n.mod.vf303
  %n.vec304 = sub nsw i64 %wide.trip.count249, %87
  %ind.end306 = shl nsw i64 %n.vec304, 2
  %invariant.gep407 = getelementptr i8, ptr %52, i64 16
  %invariant.gep411 = getelementptr i8, ptr %52, i64 32
  %invariant.gep415 = getelementptr i8, ptr %52, i64 48
  %min.iters.check = icmp ult i32 %11, 9
  %n.mod.vf = and i64 %wide.trip.count249, 7
  %88 = icmp eq i64 %n.mod.vf, 0
  %89 = select i1 %88, i64 8, i64 %n.mod.vf
  %n.vec = sub nsw i64 %wide.trip.count249, %89
  %ind.end = shl nsw i64 %n.vec, 2
  %invariant.gep419 = getelementptr i8, ptr %52, i64 16
  %invariant.gep423 = getelementptr i8, ptr %52, i64 32
  %invariant.gep427 = getelementptr i8, ptr %52, i64 48
  br label %92

._crit_edge:                                      ; preds = %.split.us, %53
  ret i32 0

90:                                               ; preds = %33
  %91 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %4) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #7
  br label %355

92:                                               ; preds = %.lr.ph222, %.split.us
  %.0177221 = phi i32 [ 0, %.lr.ph222 ], [ %353, %.split.us ]
  %spec.select = call i32 @llvm.smin.i32(i32 %.0177221, i32 %48)
  %93 = sdiv i32 %spec.select, %9
  %94 = srem i32 %93, %7
  %95 = add nsw i32 %spec.select, 1
  %96 = sdiv i32 %95, %9
  %97 = srem i32 %96, %7
  %98 = add nsw i32 %spec.select, 2
  %99 = sdiv i32 %98, %9
  %100 = srem i32 %99, %7
  %101 = add nsw i32 %spec.select, 3
  %102 = sdiv i32 %101, %9
  %103 = srem i32 %102, %7
  %104 = load ptr, ptr %55, align 8, !tbaa !20
  %105 = load i32, ptr %104, align 4, !tbaa !5
  %106 = mul nsw i32 %105, %94
  %107 = mul nsw i32 %105, %97
  %108 = mul nsw i32 %105, %100
  %109 = mul nsw i32 %105, %103
  %110 = srem i32 %spec.select, %9
  %111 = srem i32 %98, %9
  %112 = mul nsw i32 %spec.select, %11
  %113 = sub nsw i32 %106, %42
  %114 = sub nsw i32 %107, %42
  %115 = sub nsw i32 %108, %42
  %116 = sub nsw i32 %109, %42
  %117 = srem i32 %95, %9
  %118 = srem i32 %101, %9
  %119 = add nsw i32 %112, %11
  %120 = add nsw i32 %119, %11
  %121 = add nsw i32 %120, %11
  %122 = getelementptr inbounds i8, ptr %104, i64 4
  %123 = load i32, ptr %122, align 4, !tbaa !5
  %124 = mul nsw i32 %123, %110
  %125 = sub nsw i32 %124, %45
  %126 = mul nsw i32 %123, %117
  %127 = sub nsw i32 %126, %45
  %128 = mul nsw i32 %123, %111
  %129 = sub nsw i32 %128, %45
  %130 = mul nsw i32 %123, %118
  %131 = sub nsw i32 %130, %45
  call void @_ZN5micro4base6memsetIfEEvPT_S2_j(ptr noundef %52, float noundef 0.000000e+00, i32 noundef %49)
  br i1 %56, label %.lr.ph, label %.preheader

.lr.ph:                                           ; preds = %92
  %132 = load i32, ptr %57, align 8, !tbaa !5
  %133 = load i32, ptr %59, align 4
  br label %253

.preheader:                                       ; preds = %._crit_edge211, %92
  %134 = load ptr, ptr %68, align 8
  br i1 %67, label %.lr.ph218.us.preheader, label %.split.us

.lr.ph218.us.preheader:                           ; preds = %.preheader
  %135 = sext i32 %112 to i64
  %invariant.gep276 = getelementptr float, ptr %134, i64 %135
  br i1 %min.iters.check350, label %scalar.ph349.preheader, label %vector.memcheck341

vector.memcheck341:                               ; preds = %.lr.ph218.us.preheader
  %scevgep342 = getelementptr i8, ptr %134, i64 %79
  %136 = shl nsw i64 %135, 2
  %scevgep343 = getelementptr i8, ptr %scevgep342, i64 %136
  %bound0345 = icmp ult ptr %invariant.gep276, %scevgep344
  %bound1346 = icmp ult ptr %52, %scevgep343
  %found.conflict347 = and i1 %bound0345, %bound1346
  br i1 %found.conflict347, label %scalar.ph349.preheader, label %vector.body357

vector.body357:                                   ; preds = %vector.memcheck341, %vector.body357
  %index358 = phi i64 [ %index.next360, %vector.body357 ], [ 0, %vector.memcheck341 ]
  %offset.idx359 = shl i64 %index358, 2
  %137 = or disjoint i64 %offset.idx359, 4
  %138 = or disjoint i64 %offset.idx359, 8
  %139 = or disjoint i64 %offset.idx359, 12
  %140 = or disjoint i64 %offset.idx359, 16
  %141 = or disjoint i64 %offset.idx359, 20
  %142 = or disjoint i64 %offset.idx359, 24
  %143 = or disjoint i64 %offset.idx359, 28
  %144 = getelementptr inbounds float, ptr %52, i64 %offset.idx359
  %145 = getelementptr inbounds float, ptr %52, i64 %137
  %146 = getelementptr inbounds float, ptr %52, i64 %138
  %147 = getelementptr inbounds float, ptr %52, i64 %139
  %148 = getelementptr inbounds float, ptr %52, i64 %140
  %149 = getelementptr inbounds float, ptr %52, i64 %141
  %150 = getelementptr inbounds float, ptr %52, i64 %142
  %151 = getelementptr inbounds float, ptr %52, i64 %143
  %152 = load float, ptr %144, align 4, !tbaa !21, !alias.scope !22
  %153 = load float, ptr %145, align 4, !tbaa !21, !alias.scope !22
  %154 = load float, ptr %146, align 4, !tbaa !21, !alias.scope !22
  %155 = load float, ptr %147, align 4, !tbaa !21, !alias.scope !22
  %156 = insertelement <4 x float> poison, float %152, i64 0
  %157 = insertelement <4 x float> %156, float %153, i64 1
  %158 = insertelement <4 x float> %157, float %154, i64 2
  %159 = insertelement <4 x float> %158, float %155, i64 3
  %160 = load float, ptr %148, align 4, !tbaa !21, !alias.scope !22
  %161 = load float, ptr %149, align 4, !tbaa !21, !alias.scope !22
  %162 = load float, ptr %150, align 4, !tbaa !21, !alias.scope !22
  %163 = load float, ptr %151, align 4, !tbaa !21, !alias.scope !22
  %164 = insertelement <4 x float> poison, float %160, i64 0
  %165 = insertelement <4 x float> %164, float %161, i64 1
  %166 = insertelement <4 x float> %165, float %162, i64 2
  %167 = insertelement <4 x float> %166, float %163, i64 3
  %168 = getelementptr float, ptr %invariant.gep276, i64 %index358
  %169 = getelementptr i8, ptr %168, i64 16
  store <4 x float> %159, ptr %168, align 4, !tbaa !21, !alias.scope !25, !noalias !22
  store <4 x float> %167, ptr %169, align 4, !tbaa !21, !alias.scope !25, !noalias !22
  %index.next360 = add nuw i64 %index358, 8
  %170 = icmp eq i64 %index.next360, %n.vec353
  br i1 %170, label %scalar.ph349.preheader, label %vector.body357, !llvm.loop !27

scalar.ph349.preheader:                           ; preds = %vector.body357, %vector.memcheck341, %.lr.ph218.us.preheader
  %indvars.iv244.ph = phi i64 [ 0, %vector.memcheck341 ], [ 0, %.lr.ph218.us.preheader ], [ %n.vec353, %vector.body357 ]
  %indvars.iv242.ph = phi i64 [ 0, %vector.memcheck341 ], [ 0, %.lr.ph218.us.preheader ], [ %ind.end355, %vector.body357 ]
  %171 = sub nsw i64 %wide.trip.count249, %indvars.iv244.ph
  %xtraiter = and i64 %171, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph349.prol.loopexit, label %scalar.ph349.prol

scalar.ph349.prol:                                ; preds = %scalar.ph349.preheader, %scalar.ph349.prol
  %indvars.iv244.prol = phi i64 [ %indvars.iv.next245.prol, %scalar.ph349.prol ], [ %indvars.iv244.ph, %scalar.ph349.preheader ]
  %indvars.iv242.prol = phi i64 [ %indvars.iv.next243.prol, %scalar.ph349.prol ], [ %indvars.iv242.ph, %scalar.ph349.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph349.prol ], [ 0, %scalar.ph349.preheader ]
  %172 = getelementptr inbounds float, ptr %52, i64 %indvars.iv242.prol
  %173 = load float, ptr %172, align 4, !tbaa !21
  %gep277.prol = getelementptr float, ptr %invariant.gep276, i64 %indvars.iv244.prol
  store float %173, ptr %gep277.prol, align 4, !tbaa !21
  %indvars.iv.next245.prol = add nuw nsw i64 %indvars.iv244.prol, 1
  %indvars.iv.next243.prol = add nuw nsw i64 %indvars.iv242.prol, 4
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph349.prol.loopexit, label %scalar.ph349.prol, !llvm.loop !31

scalar.ph349.prol.loopexit:                       ; preds = %scalar.ph349.prol, %scalar.ph349.preheader
  %indvars.iv244.unr = phi i64 [ %indvars.iv244.ph, %scalar.ph349.preheader ], [ %indvars.iv.next245.prol, %scalar.ph349.prol ]
  %indvars.iv242.unr = phi i64 [ %indvars.iv242.ph, %scalar.ph349.preheader ], [ %indvars.iv.next243.prol, %scalar.ph349.prol ]
  %174 = sub nsw i64 %indvars.iv244.ph, %wide.trip.count249
  %175 = icmp ugt i64 %174, -4
  br i1 %175, label %._crit_edge.us220, label %scalar.ph349.preheader.new

scalar.ph349.preheader.new:                       ; preds = %scalar.ph349.prol.loopexit
  %invariant.gep385 = getelementptr i8, ptr %invariant.gep276, i64 4
  %invariant.gep389 = getelementptr i8, ptr %invariant.gep276, i64 8
  %invariant.gep393 = getelementptr i8, ptr %invariant.gep276, i64 12
  br label %scalar.ph349

scalar.ph349:                                     ; preds = %scalar.ph349, %scalar.ph349.preheader.new
  %indvars.iv244 = phi i64 [ %indvars.iv244.unr, %scalar.ph349.preheader.new ], [ %indvars.iv.next245.3372, %scalar.ph349 ]
  %indvars.iv242 = phi i64 [ %indvars.iv242.unr, %scalar.ph349.preheader.new ], [ %indvars.iv.next243.3373, %scalar.ph349 ]
  %176 = getelementptr inbounds float, ptr %52, i64 %indvars.iv242
  %177 = load float, ptr %176, align 4, !tbaa !21
  %gep277 = getelementptr float, ptr %invariant.gep276, i64 %indvars.iv244
  store float %177, ptr %gep277, align 4, !tbaa !21
  %gep384 = getelementptr float, ptr %invariant.gep383, i64 %indvars.iv242
  %178 = load float, ptr %gep384, align 4, !tbaa !21
  %gep386 = getelementptr float, ptr %invariant.gep385, i64 %indvars.iv244
  store float %178, ptr %gep386, align 4, !tbaa !21
  %gep388 = getelementptr float, ptr %invariant.gep387, i64 %indvars.iv242
  %179 = load float, ptr %gep388, align 4, !tbaa !21
  %gep390 = getelementptr float, ptr %invariant.gep389, i64 %indvars.iv244
  store float %179, ptr %gep390, align 4, !tbaa !21
  %gep392 = getelementptr float, ptr %invariant.gep391, i64 %indvars.iv242
  %180 = load float, ptr %gep392, align 4, !tbaa !21
  %gep394 = getelementptr float, ptr %invariant.gep393, i64 %indvars.iv244
  store float %180, ptr %gep394, align 4, !tbaa !21
  %indvars.iv.next245.3372 = add nuw nsw i64 %indvars.iv244, 4
  %indvars.iv.next243.3373 = add nuw nsw i64 %indvars.iv242, 16
  %exitcond250.not.3 = icmp eq i64 %indvars.iv.next245.3372, %wide.trip.count249
  br i1 %exitcond250.not.3, label %._crit_edge.us220, label %scalar.ph349, !llvm.loop !33

._crit_edge.us220:                                ; preds = %scalar.ph349, %scalar.ph349.prol.loopexit
  %181 = sext i32 %119 to i64
  %invariant.gep278 = getelementptr float, ptr %134, i64 %181
  br i1 %min.iters.check326, label %scalar.ph325.preheader, label %vector.memcheck316

vector.memcheck316:                               ; preds = %._crit_edge.us220
  %scevgep317 = getelementptr i8, ptr %134, i64 %76
  %182 = shl nsw i64 %181, 2
  %scevgep318 = getelementptr i8, ptr %scevgep317, i64 %182
  %bound0321 = icmp ult ptr %invariant.gep278, %scevgep320
  %bound1322 = icmp ult ptr %scevgep319, %scevgep318
  %found.conflict323 = and i1 %bound0321, %bound1322
  br i1 %found.conflict323, label %scalar.ph325.preheader, label %vector.body333

vector.body333:                                   ; preds = %vector.memcheck316, %vector.body333
  %index334 = phi i64 [ %index.next340, %vector.body333 ], [ 0, %vector.memcheck316 ]
  %offset.idx335 = shl i64 %index334, 2
  %183 = or disjoint i64 %offset.idx335, 1
  %184 = or disjoint i64 %offset.idx335, 17
  %185 = getelementptr inbounds float, ptr %52, i64 %183
  %186 = getelementptr inbounds float, ptr %52, i64 %184
  %wide.vec336 = load <16 x float>, ptr %185, align 4, !tbaa !21
  %wide.vec337 = load <16 x float>, ptr %186, align 4, !tbaa !21
  %strided.vec338 = shufflevector <16 x float> %wide.vec336, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec339 = shufflevector <16 x float> %wide.vec337, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %187 = getelementptr float, ptr %invariant.gep278, i64 %index334
  %188 = getelementptr i8, ptr %187, i64 16
  store <4 x float> %strided.vec338, ptr %187, align 4, !tbaa !21, !alias.scope !34, !noalias !37
  store <4 x float> %strided.vec339, ptr %188, align 4, !tbaa !21, !alias.scope !34, !noalias !37
  %index.next340 = add nuw i64 %index334, 8
  %189 = icmp eq i64 %index.next340, %n.vec329
  br i1 %189, label %scalar.ph325.preheader, label %vector.body333, !llvm.loop !39

scalar.ph325.preheader:                           ; preds = %vector.body333, %vector.memcheck316, %._crit_edge.us220
  %indvars.iv244.1.ph = phi i64 [ 0, %vector.memcheck316 ], [ 0, %._crit_edge.us220 ], [ %n.vec329, %vector.body333 ]
  %indvars.iv242.1.ph = phi i64 [ 0, %vector.memcheck316 ], [ 0, %._crit_edge.us220 ], [ %ind.end331, %vector.body333 ]
  %190 = sub nsw i64 %wide.trip.count249, %indvars.iv244.1.ph
  %xtraiter374 = and i64 %190, 3
  %lcmp.mod375.not = icmp eq i64 %xtraiter374, 0
  br i1 %lcmp.mod375.not, label %scalar.ph325.prol.loopexit, label %scalar.ph325.prol

scalar.ph325.prol:                                ; preds = %scalar.ph325.preheader, %scalar.ph325.prol
  %indvars.iv244.1.prol = phi i64 [ %indvars.iv.next245.1.prol, %scalar.ph325.prol ], [ %indvars.iv244.1.ph, %scalar.ph325.preheader ]
  %indvars.iv242.1.prol = phi i64 [ %indvars.iv.next243.1.prol, %scalar.ph325.prol ], [ %indvars.iv242.1.ph, %scalar.ph325.preheader ]
  %prol.iter376 = phi i64 [ %prol.iter376.next, %scalar.ph325.prol ], [ 0, %scalar.ph325.preheader ]
  %191 = or disjoint i64 %indvars.iv242.1.prol, 1
  %192 = getelementptr inbounds float, ptr %52, i64 %191
  %193 = load float, ptr %192, align 4, !tbaa !21
  %gep279.prol = getelementptr float, ptr %invariant.gep278, i64 %indvars.iv244.1.prol
  store float %193, ptr %gep279.prol, align 4, !tbaa !21
  %indvars.iv.next245.1.prol = add nuw nsw i64 %indvars.iv244.1.prol, 1
  %indvars.iv.next243.1.prol = add nuw nsw i64 %indvars.iv242.1.prol, 4
  %prol.iter376.next = add i64 %prol.iter376, 1
  %prol.iter376.cmp.not = icmp eq i64 %prol.iter376.next, %xtraiter374
  br i1 %prol.iter376.cmp.not, label %scalar.ph325.prol.loopexit, label %scalar.ph325.prol, !llvm.loop !40

scalar.ph325.prol.loopexit:                       ; preds = %scalar.ph325.prol, %scalar.ph325.preheader
  %indvars.iv244.1.unr = phi i64 [ %indvars.iv244.1.ph, %scalar.ph325.preheader ], [ %indvars.iv.next245.1.prol, %scalar.ph325.prol ]
  %indvars.iv242.1.unr = phi i64 [ %indvars.iv242.1.ph, %scalar.ph325.preheader ], [ %indvars.iv.next243.1.prol, %scalar.ph325.prol ]
  %194 = sub nsw i64 %indvars.iv244.1.ph, %wide.trip.count249
  %195 = icmp ugt i64 %194, -4
  br i1 %195, label %._crit_edge.us220.1, label %scalar.ph325.preheader.new

scalar.ph325.preheader.new:                       ; preds = %scalar.ph325.prol.loopexit
  %invariant.gep397 = getelementptr i8, ptr %invariant.gep278, i64 4
  %invariant.gep401 = getelementptr i8, ptr %invariant.gep278, i64 8
  %invariant.gep405 = getelementptr i8, ptr %invariant.gep278, i64 12
  br label %scalar.ph325

scalar.ph325:                                     ; preds = %scalar.ph325, %scalar.ph325.preheader.new
  %indvars.iv244.1 = phi i64 [ %indvars.iv244.1.unr, %scalar.ph325.preheader.new ], [ %indvars.iv.next245.1.3, %scalar.ph325 ]
  %indvars.iv242.1 = phi i64 [ %indvars.iv242.1.unr, %scalar.ph325.preheader.new ], [ %indvars.iv.next243.1.3, %scalar.ph325 ]
  %196 = or disjoint i64 %indvars.iv242.1, 1
  %197 = getelementptr inbounds float, ptr %52, i64 %196
  %198 = load float, ptr %197, align 4, !tbaa !21
  %gep279 = getelementptr float, ptr %invariant.gep278, i64 %indvars.iv244.1
  store float %198, ptr %gep279, align 4, !tbaa !21
  %199 = or i64 %indvars.iv242.1, 1
  %gep396 = getelementptr float, ptr %invariant.gep395, i64 %199
  %200 = load float, ptr %gep396, align 4, !tbaa !21
  %gep398 = getelementptr float, ptr %invariant.gep397, i64 %indvars.iv244.1
  store float %200, ptr %gep398, align 4, !tbaa !21
  %201 = or i64 %indvars.iv242.1, 1
  %gep400 = getelementptr float, ptr %invariant.gep399, i64 %201
  %202 = load float, ptr %gep400, align 4, !tbaa !21
  %gep402 = getelementptr float, ptr %invariant.gep401, i64 %indvars.iv244.1
  store float %202, ptr %gep402, align 4, !tbaa !21
  %203 = or i64 %indvars.iv242.1, 1
  %gep404 = getelementptr float, ptr %invariant.gep403, i64 %203
  %204 = load float, ptr %gep404, align 4, !tbaa !21
  %gep406 = getelementptr float, ptr %invariant.gep405, i64 %indvars.iv244.1
  store float %204, ptr %gep406, align 4, !tbaa !21
  %indvars.iv.next245.1.3 = add nuw nsw i64 %indvars.iv244.1, 4
  %indvars.iv.next243.1.3 = add nuw nsw i64 %indvars.iv242.1, 16
  %exitcond250.1.not.3 = icmp eq i64 %indvars.iv.next245.1.3, %wide.trip.count249
  br i1 %exitcond250.1.not.3, label %._crit_edge.us220.1, label %scalar.ph325, !llvm.loop !41

._crit_edge.us220.1:                              ; preds = %scalar.ph325, %scalar.ph325.prol.loopexit
  %205 = sext i32 %120 to i64
  %invariant.gep280 = getelementptr float, ptr %134, i64 %205
  br i1 %min.iters.check301, label %scalar.ph300.preheader, label %vector.memcheck291

vector.memcheck291:                               ; preds = %._crit_edge.us220.1
  %scevgep292 = getelementptr i8, ptr %134, i64 %73
  %206 = shl nsw i64 %205, 2
  %scevgep293 = getelementptr i8, ptr %scevgep292, i64 %206
  %bound0296 = icmp ult ptr %invariant.gep280, %scevgep295
  %bound1297 = icmp ult ptr %scevgep294, %scevgep293
  %found.conflict298 = and i1 %bound0296, %bound1297
  br i1 %found.conflict298, label %scalar.ph300.preheader, label %vector.body308

vector.body308:                                   ; preds = %vector.memcheck291, %vector.body308
  %index309 = phi i64 [ %index.next315, %vector.body308 ], [ 0, %vector.memcheck291 ]
  %offset.idx310 = shl i64 %index309, 2
  %207 = or disjoint i64 %offset.idx310, 2
  %208 = or disjoint i64 %offset.idx310, 18
  %209 = getelementptr inbounds float, ptr %52, i64 %207
  %210 = getelementptr inbounds float, ptr %52, i64 %208
  %wide.vec311 = load <16 x float>, ptr %209, align 4, !tbaa !21
  %wide.vec312 = load <16 x float>, ptr %210, align 4, !tbaa !21
  %strided.vec313 = shufflevector <16 x float> %wide.vec311, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec314 = shufflevector <16 x float> %wide.vec312, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %211 = getelementptr float, ptr %invariant.gep280, i64 %index309
  %212 = getelementptr i8, ptr %211, i64 16
  store <4 x float> %strided.vec313, ptr %211, align 4, !tbaa !21, !alias.scope !42, !noalias !45
  store <4 x float> %strided.vec314, ptr %212, align 4, !tbaa !21, !alias.scope !42, !noalias !45
  %index.next315 = add nuw i64 %index309, 8
  %213 = icmp eq i64 %index.next315, %n.vec304
  br i1 %213, label %scalar.ph300.preheader, label %vector.body308, !llvm.loop !47

scalar.ph300.preheader:                           ; preds = %vector.body308, %vector.memcheck291, %._crit_edge.us220.1
  %indvars.iv244.2.ph = phi i64 [ 0, %vector.memcheck291 ], [ 0, %._crit_edge.us220.1 ], [ %n.vec304, %vector.body308 ]
  %indvars.iv242.2.ph = phi i64 [ 0, %vector.memcheck291 ], [ 0, %._crit_edge.us220.1 ], [ %ind.end306, %vector.body308 ]
  %214 = sub nsw i64 %wide.trip.count249, %indvars.iv244.2.ph
  %xtraiter377 = and i64 %214, 3
  %lcmp.mod378.not = icmp eq i64 %xtraiter377, 0
  br i1 %lcmp.mod378.not, label %scalar.ph300.prol.loopexit, label %scalar.ph300.prol

scalar.ph300.prol:                                ; preds = %scalar.ph300.preheader, %scalar.ph300.prol
  %indvars.iv244.2.prol = phi i64 [ %indvars.iv.next245.2.prol, %scalar.ph300.prol ], [ %indvars.iv244.2.ph, %scalar.ph300.preheader ]
  %indvars.iv242.2.prol = phi i64 [ %indvars.iv.next243.2.prol, %scalar.ph300.prol ], [ %indvars.iv242.2.ph, %scalar.ph300.preheader ]
  %prol.iter379 = phi i64 [ %prol.iter379.next, %scalar.ph300.prol ], [ 0, %scalar.ph300.preheader ]
  %215 = or disjoint i64 %indvars.iv242.2.prol, 2
  %216 = getelementptr inbounds float, ptr %52, i64 %215
  %217 = load float, ptr %216, align 4, !tbaa !21
  %gep281.prol = getelementptr float, ptr %invariant.gep280, i64 %indvars.iv244.2.prol
  store float %217, ptr %gep281.prol, align 4, !tbaa !21
  %indvars.iv.next245.2.prol = add nuw nsw i64 %indvars.iv244.2.prol, 1
  %indvars.iv.next243.2.prol = add nuw nsw i64 %indvars.iv242.2.prol, 4
  %prol.iter379.next = add i64 %prol.iter379, 1
  %prol.iter379.cmp.not = icmp eq i64 %prol.iter379.next, %xtraiter377
  br i1 %prol.iter379.cmp.not, label %scalar.ph300.prol.loopexit, label %scalar.ph300.prol, !llvm.loop !48

scalar.ph300.prol.loopexit:                       ; preds = %scalar.ph300.prol, %scalar.ph300.preheader
  %indvars.iv244.2.unr = phi i64 [ %indvars.iv244.2.ph, %scalar.ph300.preheader ], [ %indvars.iv.next245.2.prol, %scalar.ph300.prol ]
  %indvars.iv242.2.unr = phi i64 [ %indvars.iv242.2.ph, %scalar.ph300.preheader ], [ %indvars.iv.next243.2.prol, %scalar.ph300.prol ]
  %218 = sub nsw i64 %indvars.iv244.2.ph, %wide.trip.count249
  %219 = icmp ugt i64 %218, -4
  br i1 %219, label %._crit_edge.us220.2, label %scalar.ph300.preheader.new

scalar.ph300.preheader.new:                       ; preds = %scalar.ph300.prol.loopexit
  %invariant.gep409 = getelementptr i8, ptr %invariant.gep280, i64 4
  %invariant.gep413 = getelementptr i8, ptr %invariant.gep280, i64 8
  %invariant.gep417 = getelementptr i8, ptr %invariant.gep280, i64 12
  br label %scalar.ph300

scalar.ph300:                                     ; preds = %scalar.ph300, %scalar.ph300.preheader.new
  %indvars.iv244.2 = phi i64 [ %indvars.iv244.2.unr, %scalar.ph300.preheader.new ], [ %indvars.iv.next245.2.3, %scalar.ph300 ]
  %indvars.iv242.2 = phi i64 [ %indvars.iv242.2.unr, %scalar.ph300.preheader.new ], [ %indvars.iv.next243.2.3, %scalar.ph300 ]
  %220 = or disjoint i64 %indvars.iv242.2, 2
  %221 = getelementptr inbounds float, ptr %52, i64 %220
  %222 = load float, ptr %221, align 4, !tbaa !21
  %gep281 = getelementptr float, ptr %invariant.gep280, i64 %indvars.iv244.2
  store float %222, ptr %gep281, align 4, !tbaa !21
  %223 = or i64 %indvars.iv242.2, 2
  %gep408 = getelementptr float, ptr %invariant.gep407, i64 %223
  %224 = load float, ptr %gep408, align 4, !tbaa !21
  %gep410 = getelementptr float, ptr %invariant.gep409, i64 %indvars.iv244.2
  store float %224, ptr %gep410, align 4, !tbaa !21
  %225 = or i64 %indvars.iv242.2, 2
  %gep412 = getelementptr float, ptr %invariant.gep411, i64 %225
  %226 = load float, ptr %gep412, align 4, !tbaa !21
  %gep414 = getelementptr float, ptr %invariant.gep413, i64 %indvars.iv244.2
  store float %226, ptr %gep414, align 4, !tbaa !21
  %227 = or i64 %indvars.iv242.2, 2
  %gep416 = getelementptr float, ptr %invariant.gep415, i64 %227
  %228 = load float, ptr %gep416, align 4, !tbaa !21
  %gep418 = getelementptr float, ptr %invariant.gep417, i64 %indvars.iv244.2
  store float %228, ptr %gep418, align 4, !tbaa !21
  %indvars.iv.next245.2.3 = add nuw nsw i64 %indvars.iv244.2, 4
  %indvars.iv.next243.2.3 = add nuw nsw i64 %indvars.iv242.2, 16
  %exitcond250.2.not.3 = icmp eq i64 %indvars.iv.next245.2.3, %wide.trip.count249
  br i1 %exitcond250.2.not.3, label %._crit_edge.us220.2, label %scalar.ph300, !llvm.loop !49

._crit_edge.us220.2:                              ; preds = %scalar.ph300, %scalar.ph300.prol.loopexit
  %229 = sext i32 %121 to i64
  %invariant.gep282 = getelementptr float, ptr %134, i64 %229
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %._crit_edge.us220.2
  %scevgep = getelementptr i8, ptr %134, i64 %71
  %230 = shl nsw i64 %229, 2
  %scevgep285 = getelementptr i8, ptr %scevgep, i64 %230
  %bound0 = icmp ult ptr %invariant.gep282, %scevgep287
  %bound1 = icmp ult ptr %scevgep286, %scevgep285
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %vector.memcheck, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.memcheck ]
  %offset.idx = shl i64 %index, 2
  %231 = or disjoint i64 %offset.idx, 3
  %232 = or disjoint i64 %offset.idx, 19
  %233 = getelementptr inbounds float, ptr %52, i64 %231
  %234 = getelementptr inbounds float, ptr %52, i64 %232
  %wide.vec = load <16 x float>, ptr %233, align 4, !tbaa !21
  %wide.vec289 = load <16 x float>, ptr %234, align 4, !tbaa !21
  %strided.vec = shufflevector <16 x float> %wide.vec, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec290 = shufflevector <16 x float> %wide.vec289, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %235 = getelementptr float, ptr %invariant.gep282, i64 %index
  %236 = getelementptr i8, ptr %235, i64 16
  store <4 x float> %strided.vec, ptr %235, align 4, !tbaa !21, !alias.scope !50, !noalias !53
  store <4 x float> %strided.vec290, ptr %236, align 4, !tbaa !21, !alias.scope !50, !noalias !53
  %index.next = add nuw i64 %index, 8
  %237 = icmp eq i64 %index.next, %n.vec
  br i1 %237, label %scalar.ph.preheader, label %vector.body, !llvm.loop !55

scalar.ph.preheader:                              ; preds = %vector.body, %vector.memcheck, %._crit_edge.us220.2
  %indvars.iv244.3.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %._crit_edge.us220.2 ], [ %n.vec, %vector.body ]
  %indvars.iv242.3.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %._crit_edge.us220.2 ], [ %ind.end, %vector.body ]
  %238 = sub nsw i64 %wide.trip.count249, %indvars.iv244.3.ph
  %xtraiter380 = and i64 %238, 3
  %lcmp.mod381.not = icmp eq i64 %xtraiter380, 0
  br i1 %lcmp.mod381.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv244.3.prol = phi i64 [ %indvars.iv.next245.3.prol, %scalar.ph.prol ], [ %indvars.iv244.3.ph, %scalar.ph.preheader ]
  %indvars.iv242.3.prol = phi i64 [ %indvars.iv.next243.3.prol, %scalar.ph.prol ], [ %indvars.iv242.3.ph, %scalar.ph.preheader ]
  %prol.iter382 = phi i64 [ %prol.iter382.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %239 = or disjoint i64 %indvars.iv242.3.prol, 3
  %240 = getelementptr inbounds float, ptr %52, i64 %239
  %241 = load float, ptr %240, align 4, !tbaa !21
  %gep283.prol = getelementptr float, ptr %invariant.gep282, i64 %indvars.iv244.3.prol
  store float %241, ptr %gep283.prol, align 4, !tbaa !21
  %indvars.iv.next245.3.prol = add nuw nsw i64 %indvars.iv244.3.prol, 1
  %indvars.iv.next243.3.prol = add nuw nsw i64 %indvars.iv242.3.prol, 4
  %prol.iter382.next = add i64 %prol.iter382, 1
  %prol.iter382.cmp.not = icmp eq i64 %prol.iter382.next, %xtraiter380
  br i1 %prol.iter382.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !56

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv244.3.unr = phi i64 [ %indvars.iv244.3.ph, %scalar.ph.preheader ], [ %indvars.iv.next245.3.prol, %scalar.ph.prol ]
  %indvars.iv242.3.unr = phi i64 [ %indvars.iv242.3.ph, %scalar.ph.preheader ], [ %indvars.iv.next243.3.prol, %scalar.ph.prol ]
  %242 = sub nsw i64 %indvars.iv244.3.ph, %wide.trip.count249
  %243 = icmp ugt i64 %242, -4
  br i1 %243, label %.split.us, label %scalar.ph.preheader.new

scalar.ph.preheader.new:                          ; preds = %scalar.ph.prol.loopexit
  %invariant.gep421 = getelementptr i8, ptr %invariant.gep282, i64 4
  %invariant.gep425 = getelementptr i8, ptr %invariant.gep282, i64 8
  %invariant.gep429 = getelementptr i8, ptr %invariant.gep282, i64 12
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph, %scalar.ph.preheader.new
  %indvars.iv244.3 = phi i64 [ %indvars.iv244.3.unr, %scalar.ph.preheader.new ], [ %indvars.iv.next245.3.3, %scalar.ph ]
  %indvars.iv242.3 = phi i64 [ %indvars.iv242.3.unr, %scalar.ph.preheader.new ], [ %indvars.iv.next243.3.3, %scalar.ph ]
  %244 = or disjoint i64 %indvars.iv242.3, 3
  %245 = getelementptr inbounds float, ptr %52, i64 %244
  %246 = load float, ptr %245, align 4, !tbaa !21
  %gep283 = getelementptr float, ptr %invariant.gep282, i64 %indvars.iv244.3
  store float %246, ptr %gep283, align 4, !tbaa !21
  %247 = or i64 %indvars.iv242.3, 3
  %gep420 = getelementptr float, ptr %invariant.gep419, i64 %247
  %248 = load float, ptr %gep420, align 4, !tbaa !21
  %gep422 = getelementptr float, ptr %invariant.gep421, i64 %indvars.iv244.3
  store float %248, ptr %gep422, align 4, !tbaa !21
  %249 = or i64 %indvars.iv242.3, 3
  %gep424 = getelementptr float, ptr %invariant.gep423, i64 %249
  %250 = load float, ptr %gep424, align 4, !tbaa !21
  %gep426 = getelementptr float, ptr %invariant.gep425, i64 %indvars.iv244.3
  store float %250, ptr %gep426, align 4, !tbaa !21
  %251 = or i64 %indvars.iv242.3, 3
  %gep428 = getelementptr float, ptr %invariant.gep427, i64 %251
  %252 = load float, ptr %gep428, align 4, !tbaa !21
  %gep430 = getelementptr float, ptr %invariant.gep429, i64 %indvars.iv244.3
  store float %252, ptr %gep430, align 4, !tbaa !21
  %indvars.iv.next245.3.3 = add nuw nsw i64 %indvars.iv244.3, 4
  %indvars.iv.next243.3.3 = add nuw nsw i64 %indvars.iv242.3, 16
  %exitcond250.3.not.3 = icmp eq i64 %indvars.iv.next245.3.3, %wide.trip.count249
  br i1 %exitcond250.3.not.3, label %.split.us, label %scalar.ph, !llvm.loop !57

253:                                              ; preds = %.lr.ph, %._crit_edge211
  %indvars.iv237 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next238, %._crit_edge211 ]
  %254 = trunc i64 %indvars.iv237 to i32
  %255 = mul i32 %132, %254
  %256 = add nsw i32 %255, %113
  %257 = add nsw i32 %255, %114
  %258 = add nsw i32 %255, %115
  %259 = add nsw i32 %255, %116
  %260 = icmp sgt i32 %256, -1
  %.not = icmp slt i32 %256, %37
  %261 = icmp sgt i32 %257, -1
  %.not193 = icmp slt i32 %257, %37
  %262 = icmp sgt i32 %258, -1
  %.not194 = icmp slt i32 %258, %37
  %263 = icmp sgt i32 %259, -1
  %.not195 = icmp slt i32 %259, %37
  %264 = mul nsw i64 %indvars.iv237, %70
  %265 = mul nsw i32 %256, %39
  %266 = mul nsw i32 %257, %39
  %267 = mul nsw i32 %258, %39
  %268 = mul nsw i32 %259, %39
  br i1 %58, label %.lr.ph210, label %._crit_edge211

.lr.ph210:                                        ; preds = %253
  %269 = load ptr, ptr %65, align 8
  br i1 %64, label %.lr.ph.us, label %._crit_edge211

.lr.ph.us:                                        ; preds = %.lr.ph210, %._crit_edge.us
  %indvars.iv232 = phi i64 [ %indvars.iv.next233, %._crit_edge.us ], [ 0, %.lr.ph210 ]
  %270 = trunc i64 %indvars.iv232 to i32
  %271 = mul i32 %133, %270
  %272 = add nsw i32 %271, %125
  %273 = add nsw i32 %271, %127
  %274 = add nsw i32 %271, %129
  %275 = add nsw i32 %271, %131
  %276 = icmp sgt i32 %272, -1
  %.not196.us = icmp slt i32 %272, %39
  %or.cond203.us = select i1 %276, i1 %.not196.us, i1 false
  %277 = select i1 %or.cond203.us, i1 %260, i1 false
  %278 = select i1 %277, i1 %.not, i1 false
  %279 = icmp sgt i32 %273, -1
  %.not197.us = icmp slt i32 %273, %39
  %or.cond204.us = select i1 %279, i1 %.not197.us, i1 false
  %280 = select i1 %or.cond204.us, i1 %261, i1 false
  %281 = select i1 %280, i1 %.not193, i1 false
  %282 = icmp sgt i32 %274, -1
  %.not198.us = icmp slt i32 %274, %39
  %or.cond205.us = select i1 %282, i1 %.not198.us, i1 false
  %283 = select i1 %or.cond205.us, i1 %262, i1 false
  %284 = select i1 %283, i1 %.not194, i1 false
  %285 = icmp sgt i32 %275, -1
  %.not199.us = icmp slt i32 %275, %39
  %or.cond206.us = select i1 %285, i1 %.not199.us, i1 false
  %286 = select i1 %or.cond206.us, i1 %263, i1 false
  %287 = select i1 %286, i1 %.not195, i1 false
  %288 = add nuw nsw i64 %indvars.iv232, %264
  %289 = mul nuw nsw i64 %288, %69
  %290 = add nsw i32 %273, %266
  %291 = mul nsw i32 %290, %34
  %292 = add nsw i32 %274, %267
  %293 = mul nsw i32 %292, %34
  %294 = add nsw i32 %275, %268
  %295 = mul nsw i32 %294, %34
  %296 = select i1 %278, i1 %60, i1 false
  %297 = load ptr, ptr %66, align 8
  %298 = select i1 %281, i1 %61, i1 false
  %299 = select i1 %284, i1 %62, i1 false
  %300 = select i1 %287, i1 %63, i1 false
  br i1 %296, label %.lr.ph.split.us.us.preheader, label %.lr.ph.split.us214.preheader

.lr.ph.split.us214.preheader:                     ; preds = %.lr.ph.us
  %301 = sext i32 %291 to i64
  %302 = sext i32 %293 to i64
  %303 = sext i32 %295 to i64
  %invariant.gep = getelementptr float, ptr %269, i64 %289
  %invariant.gep260 = getelementptr float, ptr %297, i64 %301
  %invariant.gep262 = getelementptr float, ptr %297, i64 %302
  %invariant.gep264 = getelementptr float, ptr %297, i64 %303
  br label %.lr.ph.split.us214

.lr.ph.split.us.us.preheader:                     ; preds = %.lr.ph.us
  %304 = add nsw i32 %272, %265
  %305 = mul nsw i32 %304, %34
  %306 = sext i32 %305 to i64
  %307 = sext i32 %291 to i64
  %308 = sext i32 %293 to i64
  %309 = sext i32 %295 to i64
  %invariant.gep266 = getelementptr float, ptr %269, i64 %289
  %invariant.gep268 = getelementptr float, ptr %297, i64 %306
  %invariant.gep270 = getelementptr float, ptr %297, i64 %307
  %invariant.gep272 = getelementptr float, ptr %297, i64 %308
  %invariant.gep274 = getelementptr float, ptr %297, i64 %309
  br label %.lr.ph.split.us.us

.lr.ph.split.us214:                               ; preds = %.lr.ph.split.us214.preheader, %329
  %indvars.iv = phi i64 [ 0, %.lr.ph.split.us214.preheader ], [ %indvars.iv.next, %329 ]
  %.idx = shl nsw i64 %indvars.iv, 4
  %310 = getelementptr inbounds i8, ptr %52, i64 %.idx
  %gep = getelementptr float, ptr %invariant.gep, i64 %indvars.iv
  %311 = load float, ptr %gep, align 4, !tbaa !21
  br i1 %298, label %312, label %317

312:                                              ; preds = %.lr.ph.split.us214
  %gep261 = getelementptr float, ptr %invariant.gep260, i64 %indvars.iv
  %313 = load float, ptr %gep261, align 4, !tbaa !21
  %314 = getelementptr inbounds i8, ptr %310, i64 4
  %315 = load float, ptr %314, align 4, !tbaa !21
  %316 = call float @llvm.fmuladd.f32(float %313, float %311, float %315)
  store float %316, ptr %314, align 4, !tbaa !21
  br label %317

317:                                              ; preds = %312, %.lr.ph.split.us214
  br i1 %299, label %318, label %323

318:                                              ; preds = %317
  %gep263 = getelementptr float, ptr %invariant.gep262, i64 %indvars.iv
  %319 = load float, ptr %gep263, align 4, !tbaa !21
  %320 = getelementptr inbounds i8, ptr %310, i64 8
  %321 = load float, ptr %320, align 4, !tbaa !21
  %322 = call float @llvm.fmuladd.f32(float %319, float %311, float %321)
  store float %322, ptr %320, align 4, !tbaa !21
  br label %323

323:                                              ; preds = %318, %317
  br i1 %300, label %324, label %329

324:                                              ; preds = %323
  %gep265 = getelementptr float, ptr %invariant.gep264, i64 %indvars.iv
  %325 = load float, ptr %gep265, align 4, !tbaa !21
  %326 = getelementptr inbounds i8, ptr %310, i64 12
  %327 = load float, ptr %326, align 4, !tbaa !21
  %328 = call float @llvm.fmuladd.f32(float %325, float %311, float %327)
  store float %328, ptr %326, align 4, !tbaa !21
  br label %329

329:                                              ; preds = %324, %323
  %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 %.lr.ph.split.us214, !llvm.loop !58

._crit_edge.us:                                   ; preds = %329, %352
  %indvars.iv.next233 = add nuw nsw i64 %indvars.iv232, 1
  %exitcond236.not = icmp eq i64 %indvars.iv.next233, %wide.trip.count235
  br i1 %exitcond236.not, label %._crit_edge211, label %.lr.ph.us, !llvm.loop !59

.lr.ph.split.us.us:                               ; preds = %.lr.ph.split.us.us.preheader, %352
  %indvars.iv227 = phi i64 [ 0, %.lr.ph.split.us.us.preheader ], [ %indvars.iv.next228, %352 ]
  %.idx258 = shl nsw i64 %indvars.iv227, 4
  %330 = getelementptr inbounds i8, ptr %52, i64 %.idx258
  %gep267 = getelementptr float, ptr %invariant.gep266, i64 %indvars.iv227
  %331 = load float, ptr %gep267, align 4, !tbaa !21
  %gep269 = getelementptr float, ptr %invariant.gep268, i64 %indvars.iv227
  %332 = load float, ptr %gep269, align 4, !tbaa !21
  %333 = load float, ptr %330, align 4, !tbaa !21
  %334 = call float @llvm.fmuladd.f32(float %332, float %331, float %333)
  store float %334, ptr %330, align 4, !tbaa !21
  br i1 %298, label %335, label %340

335:                                              ; preds = %.lr.ph.split.us.us
  %gep271 = getelementptr float, ptr %invariant.gep270, i64 %indvars.iv227
  %336 = load float, ptr %gep271, align 4, !tbaa !21
  %337 = getelementptr inbounds i8, ptr %330, i64 4
  %338 = load float, ptr %337, align 4, !tbaa !21
  %339 = call float @llvm.fmuladd.f32(float %336, float %331, float %338)
  store float %339, ptr %337, align 4, !tbaa !21
  br label %340

340:                                              ; preds = %335, %.lr.ph.split.us.us
  br i1 %299, label %341, label %346

341:                                              ; preds = %340
  %gep273 = getelementptr float, ptr %invariant.gep272, i64 %indvars.iv227
  %342 = load float, ptr %gep273, align 4, !tbaa !21
  %343 = getelementptr inbounds i8, ptr %330, i64 8
  %344 = load float, ptr %343, align 4, !tbaa !21
  %345 = call float @llvm.fmuladd.f32(float %342, float %331, float %344)
  store float %345, ptr %343, align 4, !tbaa !21
  br label %346

346:                                              ; preds = %341, %340
  br i1 %300, label %347, label %352

347:                                              ; preds = %346
  %gep275 = getelementptr float, ptr %invariant.gep274, i64 %indvars.iv227
  %348 = load float, ptr %gep275, align 4, !tbaa !21
  %349 = getelementptr inbounds i8, ptr %330, i64 12
  %350 = load float, ptr %349, align 4, !tbaa !21
  %351 = call float @llvm.fmuladd.f32(float %348, float %331, float %350)
  store float %351, ptr %349, align 4, !tbaa !21
  br label %352

352:                                              ; preds = %347, %346
  %indvars.iv.next228 = add nuw nsw i64 %indvars.iv227, 1
  %exitcond231.not = icmp eq i64 %indvars.iv.next228, %wide.trip.count230
  br i1 %exitcond231.not, label %._crit_edge.us, label %.lr.ph.split.us.us, !llvm.loop !58

._crit_edge211:                                   ; preds = %._crit_edge.us, %.lr.ph210, %253
  %indvars.iv.next238 = add nuw nsw i64 %indvars.iv237, 1
  %exitcond241.not = icmp eq i64 %indvars.iv.next238, %wide.trip.count240
  br i1 %exitcond241.not, label %.preheader, label %253, !llvm.loop !60

.split.us:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %.preheader
  %353 = add nsw i32 %spec.select, 4
  %354 = icmp slt i32 %353, %47
  br i1 %354, label %92, label %._crit_edge, !llvm.loop !61

355:                                              ; preds = %90, %31
  %.pn = phi { ptr, i32 } [ %91, %90 ], [ %32, %31 ]
  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: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #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 = { 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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{!"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 = !{!12, !13, i64 16}
!20 = !{!11, !13, i64 40}
!21 = !{!17, !17, i64 0}
!22 = !{!23}
!23 = distinct !{!23, !24}
!24 = distinct !{!24, !"LVerDomain"}
!25 = !{!26}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !28, !29, !30}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!"llvm.loop.isvectorized", i32 1}
!30 = !{!"llvm.loop.unroll.runtime.disable"}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.unroll.disable"}
!33 = distinct !{!33, !28, !29}
!34 = !{!35}
!35 = distinct !{!35, !36}
!36 = distinct !{!36, !"LVerDomain"}
!37 = !{!38}
!38 = distinct !{!38, !36}
!39 = distinct !{!39, !28, !29, !30}
!40 = distinct !{!40, !32}
!41 = distinct !{!41, !28, !29}
!42 = !{!43}
!43 = distinct !{!43, !44}
!44 = distinct !{!44, !"LVerDomain"}
!45 = !{!46}
!46 = distinct !{!46, !44}
!47 = distinct !{!47, !28, !29, !30}
!48 = distinct !{!48, !32}
!49 = distinct !{!49, !28, !29}
!50 = !{!51}
!51 = distinct !{!51, !52}
!52 = distinct !{!52, !"LVerDomain"}
!53 = !{!54}
!54 = distinct !{!54, !52}
!55 = distinct !{!55, !28, !29, !30}
!56 = distinct !{!56, !32}
!57 = distinct !{!57, !28, !29}
!58 = distinct !{!58, !28}
!59 = distinct !{!59, !28}
!60 = distinct !{!60, !28}
!61 = distinct !{!61, !28}


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