; LLVM IR from XiaoMi/mace :: micro/ops/nhwc/pooling_s4.ll (ZN5micro3ops11PoolingS4Op10AvgPoolingEPKfPKiS5_S5_S5_)

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5micro3ops11PoolingS4Op10AvgPoolingEPKfPKiS5_S5_S5_(ptr noundef nonnull align 8 dereferenceable(144) %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %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 %"class.micro::framework::ScratchBuffer", align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %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 i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca 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 [4 x i8], align 1
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca float, align 4
  %66 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  %67 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %68 = getelementptr inbounds %"class.micro::ops::PoolingBase", ptr %67, i32 0, i32 5
  %69 = load ptr, ptr %68, align 8, !tbaa !9
  %70 = getelementptr inbounds i32, ptr %69, i64 0
  %71 = load i32, ptr %70, align 4, !tbaa !17
  store i32 %71, ptr %13, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %72 = getelementptr inbounds %"class.micro::ops::PoolingBase", ptr %67, i32 0, i32 5
  %73 = load ptr, ptr %72, align 8, !tbaa !9
  %74 = getelementptr inbounds i32, ptr %73, i64 3
  %75 = load i32, ptr %74, align 4, !tbaa !17
  store i32 %75, ptr %14, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  %76 = getelementptr inbounds %"class.micro::ops::PoolingBase", ptr %67, i32 0, i32 5
  %77 = load ptr, ptr %76, align 8, !tbaa !9
  %78 = getelementptr inbounds i32, ptr %77, i64 1
  %79 = load i32, ptr %78, align 4, !tbaa !17
  store i32 %79, ptr %15, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %80 = getelementptr inbounds %"class.micro::ops::PoolingBase", ptr %67, i32 0, i32 5
  %81 = load ptr, ptr %80, align 8, !tbaa !9
  %82 = getelementptr inbounds i32, ptr %81, i64 2
  %83 = load i32, ptr %82, align 4, !tbaa !17
  store i32 %83, ptr %16, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %84 = getelementptr inbounds %"class.micro::ops::PoolingBase", ptr %67, i32 0, i32 2
  %85 = load ptr, ptr %84, align 8, !tbaa !18
  %86 = getelementptr inbounds i32, ptr %85, i64 3
  %87 = load i32, ptr %86, align 4, !tbaa !17
  store i32 %87, ptr %17, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %88 = getelementptr inbounds %"class.micro::ops::PoolingBase", ptr %67, i32 0, i32 2
  %89 = load ptr, ptr %88, align 8, !tbaa !18
  %90 = getelementptr inbounds i32, ptr %89, i64 1
  %91 = load i32, ptr %90, align 4, !tbaa !17
  store i32 %91, ptr %18, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %92 = getelementptr inbounds %"class.micro::ops::PoolingBase", ptr %67, i32 0, i32 2
  %93 = load ptr, ptr %92, align 8, !tbaa !18
  %94 = getelementptr inbounds i32, ptr %93, i64 2
  %95 = load i32, ptr %94, align 4, !tbaa !17
  store i32 %95, ptr %19, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %96 = load ptr, ptr %9, align 8, !tbaa !5
  %97 = getelementptr inbounds i32, ptr %96, i64 0
  %98 = load i32, ptr %97, align 4, !tbaa !17
  %99 = load ptr, ptr %9, align 8, !tbaa !5
  %100 = getelementptr inbounds i32, ptr %99, i64 1
  %101 = load i32, ptr %100, align 4, !tbaa !17
  %102 = mul nsw i32 %98, %101
  store i32 %102, ptr %20, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %103 = load i32, ptr %20, align 4, !tbaa !17
  %104 = sub nsw i32 %103, 4
  store i32 %104, ptr %21, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #4
  %105 = getelementptr inbounds %"class.micro::framework::Operator", ptr %67, i32 0, i32 2
  %106 = load ptr, ptr %105, align 8, !tbaa !19
  call void @_ZN5micro9framework13ScratchBufferC1EPNS_21MaceMicroEngineConfigE(ptr noundef nonnull align 8 dereferenceable(12) %22, ptr noundef %106)
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  %107 = load i32, ptr %17, align 4, !tbaa !17
  %108 = invoke noundef ptr @_ZN5micro9framework13ScratchBuffer9GetBufferIfEEPT_i(ptr noundef nonnull align 8 dereferenceable(12) %22, i32 noundef %107)
          to label %109 unwind label %118

109:                                              ; preds = %6
  store ptr %108, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  %110 = load i32, ptr %17, align 4, !tbaa !17
  %111 = invoke noundef ptr @_ZN5micro9framework13ScratchBuffer9GetBufferIjEEPT_i(ptr noundef nonnull align 8 dereferenceable(12) %22, i32 noundef %110)
          to label %112 unwind label %122

112:                                              ; preds = %109
  store ptr %111, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  store i32 0, ptr %27, align 4, !tbaa !17
  br label %113

113:                                              ; preds = %548, %112
  %114 = load i32, ptr %27, align 4, !tbaa !17
  %115 = load i32, ptr %13, align 4, !tbaa !17
  %116 = icmp slt i32 %114, %115
  br i1 %116, label %126, label %117

117:                                              ; preds = %113
  store i32 2, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  br label %551

118:                                              ; preds = %6
  %119 = landingpad { ptr, i32 }
          cleanup
  %120 = extractvalue { ptr, i32 } %119, 0
  store ptr %120, ptr %24, align 8
  %121 = extractvalue { ptr, i32 } %119, 1
  store i32 %121, ptr %25, align 4
  br label %552

122:                                              ; preds = %109
  %123 = landingpad { ptr, i32 }
          cleanup
  %124 = extractvalue { ptr, i32 } %123, 0
  store ptr %124, ptr %24, align 8
  %125 = extractvalue { ptr, i32 } %123, 1
  store i32 %125, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  br label %552

126:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %127 = load i32, ptr %27, align 4, !tbaa !17
  %128 = load i32, ptr %15, align 4, !tbaa !17
  %129 = mul nsw i32 %127, %128
  store i32 %129, ptr %29, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %130 = load i32, ptr %27, align 4, !tbaa !17
  %131 = load i32, ptr %18, align 4, !tbaa !17
  %132 = mul nsw i32 %130, %131
  store i32 %132, ptr %30, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  store i32 0, ptr %31, align 4, !tbaa !17
  br label %133

133:                                              ; preds = %544, %126
  %134 = load i32, ptr %31, align 4, !tbaa !17
  %135 = load i32, ptr %15, align 4, !tbaa !17
  %136 = icmp slt i32 %134, %135
  br i1 %136, label %138, label %137

137:                                              ; preds = %133
  store i32 5, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  br label %547

138:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %139 = load i32, ptr %29, align 4, !tbaa !17
  %140 = load i32, ptr %31, align 4, !tbaa !17
  %141 = add nsw i32 %139, %140
  %142 = load i32, ptr %16, align 4, !tbaa !17
  %143 = mul nsw i32 %141, %142
  store i32 %143, ptr %32, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %144 = load i32, ptr %31, align 4, !tbaa !17
  %145 = load ptr, ptr %10, align 8, !tbaa !5
  %146 = getelementptr inbounds i32, ptr %145, i64 0
  %147 = load i32, ptr %146, align 4, !tbaa !17
  %148 = mul nsw i32 %144, %147
  %149 = load ptr, ptr %12, align 8, !tbaa !5
  %150 = getelementptr inbounds i32, ptr %149, i64 0
  %151 = load i32, ptr %150, align 4, !tbaa !17
  %152 = sub nsw i32 %148, %151
  store i32 %152, ptr %33, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  store i32 0, ptr %34, align 4, !tbaa !17
  br label %153

153:                                              ; preds = %540, %138
  %154 = load i32, ptr %34, align 4, !tbaa !17
  %155 = load i32, ptr %16, align 4, !tbaa !17
  %156 = icmp slt i32 %154, %155
  br i1 %156, label %158, label %157

157:                                              ; preds = %153
  store i32 8, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %543

158:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %159 = load i32, ptr %32, align 4, !tbaa !17
  %160 = load i32, ptr %34, align 4, !tbaa !17
  %161 = add nsw i32 %159, %160
  %162 = load i32, ptr %14, align 4, !tbaa !17
  %163 = mul nsw i32 %161, %162
  store i32 %163, ptr %35, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %164 = load i32, ptr %34, align 4, !tbaa !17
  %165 = load ptr, ptr %10, align 8, !tbaa !5
  %166 = getelementptr inbounds i32, ptr %165, i64 1
  %167 = load i32, ptr %166, align 4, !tbaa !17
  %168 = mul nsw i32 %164, %167
  %169 = load ptr, ptr %12, align 8, !tbaa !5
  %170 = getelementptr inbounds i32, ptr %169, i64 1
  %171 = load i32, ptr %170, align 4, !tbaa !17
  %172 = sub nsw i32 %168, %171
  store i32 %172, ptr %36, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  store i32 0, ptr %37, align 4, !tbaa !17
  br label %173

173:                                              ; preds = %187, %158
  %174 = load i32, ptr %37, align 4, !tbaa !17
  %175 = load i32, ptr %17, align 4, !tbaa !17
  %176 = icmp slt i32 %174, %175
  br i1 %176, label %178, label %177

177:                                              ; preds = %173
  store i32 11, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  br label %190

178:                                              ; preds = %173
  %179 = load ptr, ptr %23, align 8, !tbaa !5
  %180 = load i32, ptr %37, align 4, !tbaa !17
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds float, ptr %179, i64 %181
  store float 0.000000e+00, ptr %182, align 4, !tbaa !20
  %183 = load ptr, ptr %26, align 8, !tbaa !5
  %184 = load i32, ptr %37, align 4, !tbaa !17
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds i32, ptr %183, i64 %185
  store i32 0, ptr %186, align 4, !tbaa !17
  br label %187

187:                                              ; preds = %178
  %188 = load i32, ptr %37, align 4, !tbaa !17
  %189 = add nsw i32 %188, 1
  store i32 %189, ptr %37, align 4, !tbaa !17
  br label %173, !llvm.loop !22

190:                                              ; preds = %177
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  store i32 0, ptr %38, align 4, !tbaa !17
  br label %191

191:                                              ; preds = %507, %190
  %192 = load i32, ptr %38, align 4, !tbaa !17
  %193 = load i32, ptr %20, align 4, !tbaa !17
  %194 = icmp slt i32 %192, %193
  br i1 %194, label %196, label %195

195:                                              ; preds = %191
  store i32 14, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  br label %510

196:                                              ; preds = %191
  %197 = load i32, ptr %38, align 4, !tbaa !17
  %198 = load i32, ptr %21, align 4, !tbaa !17
  %199 = icmp sgt i32 %197, %198
  br i1 %199, label %200, label %202

200:                                              ; preds = %196
  %201 = load i32, ptr %21, align 4, !tbaa !17
  store i32 %201, ptr %38, align 4, !tbaa !17
  br label %202

202:                                              ; preds = %200, %196
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  %203 = load i32, ptr %38, align 4, !tbaa !17
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr %39, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  %205 = load i32, ptr %39, align 4, !tbaa !17
  %206 = add nsw i32 %205, 1
  store i32 %206, ptr %40, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  %207 = load i32, ptr %40, align 4, !tbaa !17
  %208 = add nsw i32 %207, 1
  store i32 %208, ptr %41, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  %209 = load i32, ptr %38, align 4, !tbaa !17
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  %211 = getelementptr inbounds i32, ptr %210, i64 1
  %212 = load i32, ptr %211, align 4, !tbaa !17
  %213 = sdiv i32 %209, %212
  store i32 %213, ptr %42, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  %214 = load i32, ptr %39, align 4, !tbaa !17
  %215 = load ptr, ptr %9, align 8, !tbaa !5
  %216 = getelementptr inbounds i32, ptr %215, i64 1
  %217 = load i32, ptr %216, align 4, !tbaa !17
  %218 = sdiv i32 %214, %217
  store i32 %218, ptr %43, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  %219 = load i32, ptr %40, align 4, !tbaa !17
  %220 = load ptr, ptr %9, align 8, !tbaa !5
  %221 = getelementptr inbounds i32, ptr %220, i64 1
  %222 = load i32, ptr %221, align 4, !tbaa !17
  %223 = sdiv i32 %219, %222
  store i32 %223, ptr %44, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #4
  %224 = load i32, ptr %41, align 4, !tbaa !17
  %225 = load ptr, ptr %9, align 8, !tbaa !5
  %226 = getelementptr inbounds i32, ptr %225, i64 1
  %227 = load i32, ptr %226, align 4, !tbaa !17
  %228 = sdiv i32 %224, %227
  store i32 %228, ptr %45, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  %229 = load i32, ptr %38, align 4, !tbaa !17
  %230 = load ptr, ptr %9, align 8, !tbaa !5
  %231 = getelementptr inbounds i32, ptr %230, i64 1
  %232 = load i32, ptr %231, align 4, !tbaa !17
  %233 = srem i32 %229, %232
  store i32 %233, ptr %46, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #4
  %234 = load i32, ptr %39, align 4, !tbaa !17
  %235 = load ptr, ptr %9, align 8, !tbaa !5
  %236 = getelementptr inbounds i32, ptr %235, i64 1
  %237 = load i32, ptr %236, align 4, !tbaa !17
  %238 = srem i32 %234, %237
  store i32 %238, ptr %47, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #4
  %239 = load i32, ptr %40, align 4, !tbaa !17
  %240 = load ptr, ptr %9, align 8, !tbaa !5
  %241 = getelementptr inbounds i32, ptr %240, i64 1
  %242 = load i32, ptr %241, align 4, !tbaa !17
  %243 = srem i32 %239, %242
  store i32 %243, ptr %48, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #4
  %244 = load i32, ptr %41, align 4, !tbaa !17
  %245 = load ptr, ptr %9, align 8, !tbaa !5
  %246 = getelementptr inbounds i32, ptr %245, i64 1
  %247 = load i32, ptr %246, align 4, !tbaa !17
  %248 = srem i32 %244, %247
  store i32 %248, ptr %49, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  %249 = load i32, ptr %33, align 4, !tbaa !17
  %250 = load ptr, ptr %11, align 8, !tbaa !5
  %251 = getelementptr inbounds i32, ptr %250, i64 0
  %252 = load i32, ptr %251, align 4, !tbaa !17
  %253 = load i32, ptr %42, align 4, !tbaa !17
  %254 = mul nsw i32 %252, %253
  %255 = add nsw i32 %249, %254
  store i32 %255, ptr %50, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #4
  %256 = load i32, ptr %33, align 4, !tbaa !17
  %257 = load ptr, ptr %11, align 8, !tbaa !5
  %258 = getelementptr inbounds i32, ptr %257, i64 0
  %259 = load i32, ptr %258, align 4, !tbaa !17
  %260 = load i32, ptr %43, align 4, !tbaa !17
  %261 = mul nsw i32 %259, %260
  %262 = add nsw i32 %256, %261
  store i32 %262, ptr %51, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #4
  %263 = load i32, ptr %33, align 4, !tbaa !17
  %264 = load ptr, ptr %11, align 8, !tbaa !5
  %265 = getelementptr inbounds i32, ptr %264, i64 0
  %266 = load i32, ptr %265, align 4, !tbaa !17
  %267 = load i32, ptr %44, align 4, !tbaa !17
  %268 = mul nsw i32 %266, %267
  %269 = add nsw i32 %263, %268
  store i32 %269, ptr %52, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #4
  %270 = load i32, ptr %33, align 4, !tbaa !17
  %271 = load ptr, ptr %11, align 8, !tbaa !5
  %272 = getelementptr inbounds i32, ptr %271, i64 0
  %273 = load i32, ptr %272, align 4, !tbaa !17
  %274 = load i32, ptr %45, align 4, !tbaa !17
  %275 = mul nsw i32 %273, %274
  %276 = add nsw i32 %270, %275
  store i32 %276, ptr %53, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #4
  %277 = load i32, ptr %36, align 4, !tbaa !17
  %278 = load ptr, ptr %11, align 8, !tbaa !5
  %279 = getelementptr inbounds i32, ptr %278, i64 1
  %280 = load i32, ptr %279, align 4, !tbaa !17
  %281 = load i32, ptr %46, align 4, !tbaa !17
  %282 = mul nsw i32 %280, %281
  %283 = add nsw i32 %277, %282
  store i32 %283, ptr %54, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #4
  %284 = load i32, ptr %36, align 4, !tbaa !17
  %285 = load ptr, ptr %11, align 8, !tbaa !5
  %286 = getelementptr inbounds i32, ptr %285, i64 1
  %287 = load i32, ptr %286, align 4, !tbaa !17
  %288 = load i32, ptr %47, align 4, !tbaa !17
  %289 = mul nsw i32 %287, %288
  %290 = add nsw i32 %284, %289
  store i32 %290, ptr %55, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #4
  %291 = load i32, ptr %36, align 4, !tbaa !17
  %292 = load ptr, ptr %11, align 8, !tbaa !5
  %293 = getelementptr inbounds i32, ptr %292, i64 1
  %294 = load i32, ptr %293, align 4, !tbaa !17
  %295 = load i32, ptr %48, align 4, !tbaa !17
  %296 = mul nsw i32 %294, %295
  %297 = add nsw i32 %291, %296
  store i32 %297, ptr %56, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #4
  %298 = load i32, ptr %36, align 4, !tbaa !17
  %299 = load ptr, ptr %11, align 8, !tbaa !5
  %300 = getelementptr inbounds i32, ptr %299, i64 1
  %301 = load i32, ptr %300, align 4, !tbaa !17
  %302 = load i32, ptr %49, align 4, !tbaa !17
  %303 = mul nsw i32 %301, %302
  %304 = add nsw i32 %298, %303
  store i32 %304, ptr %57, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #4
  %305 = load i32, ptr %50, align 4, !tbaa !17
  %306 = icmp sge i32 %305, 0
  br i1 %306, label %307, label %318

307:                                              ; preds = %202
  %308 = load i32, ptr %50, align 4, !tbaa !17
  %309 = load i32, ptr %18, align 4, !tbaa !17
  %310 = icmp slt i32 %308, %309
  br i1 %310, label %311, label %318

311:                                              ; preds = %307
  %312 = load i32, ptr %54, align 4, !tbaa !17
  %313 = icmp sge i32 %312, 0
  br i1 %313, label %314, label %318

314:                                              ; preds = %311
  %315 = load i32, ptr %54, align 4, !tbaa !17
  %316 = load i32, ptr %19, align 4, !tbaa !17
  %317 = icmp slt i32 %315, %316
  br label %318

318:                                              ; preds = %314, %311, %307, %202
  %319 = phi i1 [ false, %311 ], [ false, %307 ], [ false, %202 ], [ %317, %314 ]
  %320 = zext i1 %319 to i8
  store i8 %320, ptr %58, align 1, !tbaa !24
  %321 = getelementptr inbounds i8, ptr %58, i64 1
  %322 = load i32, ptr %51, align 4, !tbaa !17
  %323 = icmp sge i32 %322, 0
  br i1 %323, label %324, label %335

324:                                              ; preds = %318
  %325 = load i32, ptr %51, align 4, !tbaa !17
  %326 = load i32, ptr %18, align 4, !tbaa !17
  %327 = icmp slt i32 %325, %326
  br i1 %327, label %328, label %335

328:                                              ; preds = %324
  %329 = load i32, ptr %55, align 4, !tbaa !17
  %330 = icmp sge i32 %329, 0
  br i1 %330, label %331, label %335

331:                                              ; preds = %328
  %332 = load i32, ptr %55, align 4, !tbaa !17
  %333 = load i32, ptr %19, align 4, !tbaa !17
  %334 = icmp slt i32 %332, %333
  br label %335

335:                                              ; preds = %331, %328, %324, %318
  %336 = phi i1 [ false, %328 ], [ false, %324 ], [ false, %318 ], [ %334, %331 ]
  %337 = zext i1 %336 to i8
  store i8 %337, ptr %321, align 1, !tbaa !24
  %338 = getelementptr inbounds i8, ptr %58, i64 2
  %339 = load i32, ptr %52, align 4, !tbaa !17
  %340 = icmp sge i32 %339, 0
  br i1 %340, label %341, label %352

341:                                              ; preds = %335
  %342 = load i32, ptr %52, align 4, !tbaa !17
  %343 = load i32, ptr %18, align 4, !tbaa !17
  %344 = icmp slt i32 %342, %343
  br i1 %344, label %345, label %352

345:                                              ; preds = %341
  %346 = load i32, ptr %56, align 4, !tbaa !17
  %347 = icmp sge i32 %346, 0
  br i1 %347, label %348, label %352

348:                                              ; preds = %345
  %349 = load i32, ptr %56, align 4, !tbaa !17
  %350 = load i32, ptr %19, align 4, !tbaa !17
  %351 = icmp slt i32 %349, %350
  br label %352

352:                                              ; preds = %348, %345, %341, %335
  %353 = phi i1 [ false, %345 ], [ false, %341 ], [ false, %335 ], [ %351, %348 ]
  %354 = zext i1 %353 to i8
  store i8 %354, ptr %338, align 1, !tbaa !24
  %355 = getelementptr inbounds i8, ptr %58, i64 3
  %356 = load i32, ptr %53, align 4, !tbaa !17
  %357 = icmp sge i32 %356, 0
  br i1 %357, label %358, label %369

358:                                              ; preds = %352
  %359 = load i32, ptr %53, align 4, !tbaa !17
  %360 = load i32, ptr %18, align 4, !tbaa !17
  %361 = icmp slt i32 %359, %360
  br i1 %361, label %362, label %369

362:                                              ; preds = %358
  %363 = load i32, ptr %57, align 4, !tbaa !17
  %364 = icmp sge i32 %363, 0
  br i1 %364, label %365, label %369

365:                                              ; preds = %362
  %366 = load i32, ptr %57, align 4, !tbaa !17
  %367 = load i32, ptr %19, align 4, !tbaa !17
  %368 = icmp slt i32 %366, %367
  br label %369

369:                                              ; preds = %365, %362, %358, %352
  %370 = phi i1 [ false, %362 ], [ false, %358 ], [ false, %352 ], [ %368, %365 ]
  %371 = zext i1 %370 to i8
  store i8 %371, ptr %355, align 1, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #4
  %372 = load i32, ptr %30, align 4, !tbaa !17
  %373 = load i32, ptr %50, align 4, !tbaa !17
  %374 = add nsw i32 %372, %373
  %375 = load i32, ptr %19, align 4, !tbaa !17
  %376 = mul nsw i32 %374, %375
  %377 = load i32, ptr %54, align 4, !tbaa !17
  %378 = add nsw i32 %376, %377
  %379 = load i32, ptr %17, align 4, !tbaa !17
  %380 = mul nsw i32 %378, %379
  store i32 %380, ptr %59, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #4
  %381 = load i32, ptr %30, align 4, !tbaa !17
  %382 = load i32, ptr %51, align 4, !tbaa !17
  %383 = add nsw i32 %381, %382
  %384 = load i32, ptr %19, align 4, !tbaa !17
  %385 = mul nsw i32 %383, %384
  %386 = load i32, ptr %55, align 4, !tbaa !17
  %387 = add nsw i32 %385, %386
  %388 = load i32, ptr %17, align 4, !tbaa !17
  %389 = mul nsw i32 %387, %388
  store i32 %389, ptr %60, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #4
  %390 = load i32, ptr %30, align 4, !tbaa !17
  %391 = load i32, ptr %52, align 4, !tbaa !17
  %392 = add nsw i32 %390, %391
  %393 = load i32, ptr %19, align 4, !tbaa !17
  %394 = mul nsw i32 %392, %393
  %395 = load i32, ptr %56, align 4, !tbaa !17
  %396 = add nsw i32 %394, %395
  %397 = load i32, ptr %17, align 4, !tbaa !17
  %398 = mul nsw i32 %396, %397
  store i32 %398, ptr %61, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #4
  %399 = load i32, ptr %30, align 4, !tbaa !17
  %400 = load i32, ptr %53, align 4, !tbaa !17
  %401 = add nsw i32 %399, %400
  %402 = load i32, ptr %19, align 4, !tbaa !17
  %403 = mul nsw i32 %401, %402
  %404 = load i32, ptr %57, align 4, !tbaa !17
  %405 = add nsw i32 %403, %404
  %406 = load i32, ptr %17, align 4, !tbaa !17
  %407 = mul nsw i32 %405, %406
  store i32 %407, ptr %62, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #4
  %408 = getelementptr inbounds [4 x i8], ptr %58, i64 0, i64 0
  %409 = load i8, ptr %408, align 1, !tbaa !24, !range !26, !noundef !27
  %410 = trunc i8 %409 to i1
  %411 = zext i1 %410 to i32
  %412 = getelementptr inbounds [4 x i8], ptr %58, i64 0, i64 1
  %413 = load i8, ptr %412, align 1, !tbaa !24, !range !26, !noundef !27
  %414 = trunc i8 %413 to i1
  %415 = zext i1 %414 to i32
  %416 = add nsw i32 %411, %415
  %417 = getelementptr inbounds [4 x i8], ptr %58, i64 0, i64 2
  %418 = load i8, ptr %417, align 1, !tbaa !24, !range !26, !noundef !27
  %419 = trunc i8 %418 to i1
  %420 = zext i1 %419 to i32
  %421 = add nsw i32 %416, %420
  %422 = getelementptr inbounds [4 x i8], ptr %58, i64 0, i64 3
  %423 = load i8, ptr %422, align 1, !tbaa !24, !range !26, !noundef !27
  %424 = trunc i8 %423 to i1
  %425 = zext i1 %424 to i32
  %426 = add nsw i32 %421, %425
  store i32 %426, ptr %63, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #4
  store i32 0, ptr %64, align 4, !tbaa !17
  br label %427

427:                                              ; preds = %503, %369
  %428 = load i32, ptr %64, align 4, !tbaa !17
  %429 = load i32, ptr %14, align 4, !tbaa !17
  %430 = icmp slt i32 %428, %429
  br i1 %430, label %432, label %431

431:                                              ; preds = %427
  store i32 17, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #4
  br label %506

432:                                              ; preds = %427
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #4
  store float 0.000000e+00, ptr %65, align 4, !tbaa !20
  %433 = getelementptr inbounds [4 x i8], ptr %58, i64 0, i64 0
  %434 = load i8, ptr %433, align 1, !tbaa !24, !range !26, !noundef !27
  %435 = trunc i8 %434 to i1
  br i1 %435, label %436, label %446

436:                                              ; preds = %432
  %437 = load ptr, ptr %8, align 8, !tbaa !5
  %438 = load i32, ptr %59, align 4, !tbaa !17
  %439 = load i32, ptr %64, align 4, !tbaa !17
  %440 = add nsw i32 %438, %439
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds float, ptr %437, i64 %441
  %443 = load float, ptr %442, align 4, !tbaa !20
  %444 = load float, ptr %65, align 4, !tbaa !20
  %445 = fadd float %444, %443
  store float %445, ptr %65, align 4, !tbaa !20
  br label %446

446:                                              ; preds = %436, %432
  %447 = getelementptr inbounds [4 x i8], ptr %58, i64 0, i64 1
  %448 = load i8, ptr %447, align 1, !tbaa !24, !range !26, !noundef !27
  %449 = trunc i8 %448 to i1
  br i1 %449, label %450, label %460

450:                                              ; preds = %446
  %451 = load ptr, ptr %8, align 8, !tbaa !5
  %452 = load i32, ptr %60, align 4, !tbaa !17
  %453 = load i32, ptr %64, align 4, !tbaa !17
  %454 = add nsw i32 %452, %453
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds float, ptr %451, i64 %455
  %457 = load float, ptr %456, align 4, !tbaa !20
  %458 = load float, ptr %65, align 4, !tbaa !20
  %459 = fadd float %458, %457
  store float %459, ptr %65, align 4, !tbaa !20
  br label %460

460:                                              ; preds = %450, %446
  %461 = getelementptr inbounds [4 x i8], ptr %58, i64 0, i64 2
  %462 = load i8, ptr %461, align 1, !tbaa !24, !range !26, !noundef !27
  %463 = trunc i8 %462 to i1
  br i1 %463, label %464, label %474

464:                                              ; preds = %460
  %465 = load ptr, ptr %8, align 8, !tbaa !5
  %466 = load i32, ptr %61, align 4, !tbaa !17
  %467 = load i32, ptr %64, align 4, !tbaa !17
  %468 = add nsw i32 %466, %467
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds float, ptr %465, i64 %469
  %471 = load float, ptr %470, align 4, !tbaa !20
  %472 = load float, ptr %65, align 4, !tbaa !20
  %473 = fadd float %472, %471
  store float %473, ptr %65, align 4, !tbaa !20
  br label %474

474:                                              ; preds = %464, %460
  %475 = getelementptr inbounds [4 x i8], ptr %58, i64 0, i64 3
  %476 = load i8, ptr %475, align 1, !tbaa !24, !range !26, !noundef !27
  %477 = trunc i8 %476 to i1
  br i1 %477, label %478, label %488

478:                                              ; preds = %474
  %479 = load ptr, ptr %8, align 8, !tbaa !5
  %480 = load i32, ptr %62, align 4, !tbaa !17
  %481 = load i32, ptr %64, align 4, !tbaa !17
  %482 = add nsw i32 %480, %481
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds float, ptr %479, i64 %483
  %485 = load float, ptr %484, align 4, !tbaa !20
  %486 = load float, ptr %65, align 4, !tbaa !20
  %487 = fadd float %486, %485
  store float %487, ptr %65, align 4, !tbaa !20
  br label %488

488:                                              ; preds = %478, %474
  %489 = load float, ptr %65, align 4, !tbaa !20
  %490 = load ptr, ptr %23, align 8, !tbaa !5
  %491 = load i32, ptr %64, align 4, !tbaa !17
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds float, ptr %490, i64 %492
  %494 = load float, ptr %493, align 4, !tbaa !20
  %495 = fadd float %494, %489
  store float %495, ptr %493, align 4, !tbaa !20
  %496 = load i32, ptr %63, align 4, !tbaa !17
  %497 = load ptr, ptr %26, align 8, !tbaa !5
  %498 = load i32, ptr %64, align 4, !tbaa !17
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds i32, ptr %497, i64 %499
  %501 = load i32, ptr %500, align 4, !tbaa !17
  %502 = add i32 %501, %496
  store i32 %502, ptr %500, align 4, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #4
  br label %503

503:                                              ; preds = %488
  %504 = load i32, ptr %64, align 4, !tbaa !17
  %505 = add nsw i32 %504, 1
  store i32 %505, ptr %64, align 4, !tbaa !17
  br label %427, !llvm.loop !28

506:                                              ; preds = %431
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  br label %507

507:                                              ; preds = %506
  %508 = load i32, ptr %38, align 4, !tbaa !17
  %509 = add nsw i32 %508, 4
  store i32 %509, ptr %38, align 4, !tbaa !17
  br label %191, !llvm.loop !29

510:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #4
  store i32 0, ptr %66, align 4, !tbaa !17
  br label %511

511:                                              ; preds = %536, %510
  %512 = load i32, ptr %66, align 4, !tbaa !17
  %513 = load i32, ptr %14, align 4, !tbaa !17
  %514 = icmp slt i32 %512, %513
  br i1 %514, label %516, label %515

515:                                              ; preds = %511
  store i32 20, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #4
  br label %539

516:                                              ; preds = %511
  %517 = load ptr, ptr %23, align 8, !tbaa !5
  %518 = load i32, ptr %66, align 4, !tbaa !17
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds float, ptr %517, i64 %519
  %521 = load float, ptr %520, align 4, !tbaa !20
  %522 = load ptr, ptr %26, align 8, !tbaa !5
  %523 = load i32, ptr %66, align 4, !tbaa !17
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds i32, ptr %522, i64 %524
  %526 = load i32, ptr %525, align 4, !tbaa !17
  %527 = uitofp i32 %526 to float
  %528 = fdiv float %521, %527
  %529 = getelementptr inbounds %"class.micro::ops::PoolingBase", ptr %67, i32 0, i32 4
  %530 = load ptr, ptr %529, align 8, !tbaa !30
  %531 = load i32, ptr %35, align 4, !tbaa !17
  %532 = load i32, ptr %66, align 4, !tbaa !17
  %533 = add nsw i32 %531, %532
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds float, ptr %530, i64 %534
  store float %528, ptr %535, align 4, !tbaa !20
  br label %536

536:                                              ; preds = %516
  %537 = load i32, ptr %66, align 4, !tbaa !17
  %538 = add nsw i32 %537, 1
  store i32 %538, ptr %66, align 4, !tbaa !17
  br label %511, !llvm.loop !31

539:                                              ; preds = %515
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %540

540:                                              ; preds = %539
  %541 = load i32, ptr %34, align 4, !tbaa !17
  %542 = add nsw i32 %541, 1
  store i32 %542, ptr %34, align 4, !tbaa !17
  br label %153, !llvm.loop !32

543:                                              ; preds = %157
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %544

544:                                              ; preds = %543
  %545 = load i32, ptr %31, align 4, !tbaa !17
  %546 = add nsw i32 %545, 1
  store i32 %546, ptr %31, align 4, !tbaa !17
  br label %133, !llvm.loop !33

547:                                              ; preds = %137
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %548

548:                                              ; preds = %547
  %549 = load i32, ptr %27, align 4, !tbaa !17
  %550 = add nsw i32 %549, 1
  store i32 %550, ptr %27, align 4, !tbaa !17
  br label %113, !llvm.loop !34

551:                                              ; preds = %117
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %22) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  ret void

552:                                              ; preds = %122, %118
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %22) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %553

553:                                              ; preds = %552
  %554 = load ptr, ptr %24, align 8
  %555 = load i32, ptr %25, align 4
  %556 = insertvalue { ptr, i32 } poison, ptr %554, 0
  %557 = insertvalue { ptr, i32 } %556, i32 %555, 1
  resume { ptr, i32 } %557
}

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { 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, !6, i64 96}
!10 = !{!"_ZTSN5micro3ops11PoolingBaseE", !11, i64 0, !6, i64 64, !6, i64 72, !14, i64 80, !6, i64 88, !6, i64 96, !14, i64 104, !6, i64 112, !7, i64 120, !15, i64 136, !16, i64 140}
!11 = !{!"_ZTSN5micro3ops12FilterOpBaseE", !12, i64 0, !13, i64 32, !6, i64 40, !7, i64 48, !7, i64 56}
!12 = !{!"_ZTSN5micro9framework8OperatorE", !6, i64 8, !6, i64 16, !6, i64 24}
!13 = !{!"_ZTSN5micro3ops7PaddingE", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!"_ZTSN5micro3ops9RoundTypeE", !7, i64 0}
!16 = !{!"_ZTSN5micro3ops11PoolingTypeE", !7, i64 0}
!17 = !{!14, !14, i64 0}
!18 = !{!10, !6, i64 72}
!19 = !{!12, !6, i64 16}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!25, !25, i64 0}
!25 = !{!"bool", !7, i64 0}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = distinct !{!28, !23}
!29 = distinct !{!29, !23}
!30 = !{!10, !6, i64 88}
!31 = distinct !{!31, !23}
!32 = distinct !{!32, !23}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !23}


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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5micro3ops11PoolingS4Op10AvgPoolingEPKfPKiS5_S5_S5_(ptr nocapture noundef nonnull readonly align 8 dereferenceable(144) %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %"class.micro::framework::ScratchBuffer", align 8
  %8 = getelementptr inbounds i8, ptr %0, i64 96
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %10 = load i32, ptr %9, align 4, !tbaa !16
  %11 = getelementptr inbounds i8, ptr %9, i64 12
  %12 = load i32, ptr %11, align 4, !tbaa !16
  %13 = getelementptr inbounds i8, ptr %9, i64 4
  %14 = load i32, ptr %13, align 4, !tbaa !16
  %15 = getelementptr inbounds i8, ptr %9, i64 8
  %16 = load i32, ptr %15, align 4, !tbaa !16
  %17 = getelementptr inbounds i8, ptr %0, i64 72
  %18 = load ptr, ptr %17, align 8, !tbaa !17
  %19 = getelementptr inbounds i8, ptr %18, i64 12
  %20 = load i32, ptr %19, align 4, !tbaa !16
  %21 = getelementptr inbounds i8, ptr %18, i64 4
  %22 = load i32, ptr %21, align 4, !tbaa !16
  %23 = getelementptr inbounds i8, ptr %18, i64 8
  %24 = load i32, ptr %23, align 4, !tbaa !16
  %25 = load i32, ptr %2, align 4, !tbaa !16
  %26 = getelementptr inbounds i8, ptr %2, i64 4
  %27 = load i32, ptr %26, align 4, !tbaa !16
  %28 = mul nsw i32 %27, %25
  %29 = add nsw i32 %28, -4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #5
  %30 = getelementptr inbounds i8, ptr %0, i64 16
  %31 = load ptr, ptr %30, align 8, !tbaa !18
  call void @_ZN5micro9framework13ScratchBufferC1EPNS_21MaceMicroEngineConfigE(ptr noundef nonnull align 8 dereferenceable(12) %7, ptr noundef %31)
  %32 = invoke noundef ptr @_ZN5micro9framework13ScratchBuffer9GetBufferIfEEPT_i(ptr noundef nonnull align 8 dereferenceable(12) %7, i32 noundef %20)
          to label %33 unwind label %371

33:                                               ; preds = %6
  %34 = ptrtoint ptr %32 to i64
  %35 = invoke noundef ptr @_ZN5micro9framework13ScratchBuffer9GetBufferIjEEPT_i(ptr noundef nonnull align 8 dereferenceable(12) %7, i32 noundef %20)
          to label %.preheader203 unwind label %373

.preheader203:                                    ; preds = %33
  %36 = icmp sgt i32 %10, 0
  br i1 %36, label %.lr.ph254, label %._crit_edge255

.lr.ph254:                                        ; preds = %.preheader203
  %37 = icmp sgt i32 %14, 0
  %38 = getelementptr inbounds i8, ptr %3, i64 4
  %39 = getelementptr inbounds i8, ptr %5, i64 4
  %40 = icmp sgt i32 %20, 0
  %41 = getelementptr inbounds i8, ptr %4, i64 4
  %42 = icmp sgt i32 %12, 0
  %43 = getelementptr inbounds i8, ptr %0, i64 88
  %44 = icmp sgt i32 %16, 0
  %or.cond = select i1 %37, i1 %44, i1 false
  br i1 %or.cond, label %.lr.ph254.split.us.split.us, label %._crit_edge255

.lr.ph254.split.us.split.us:                      ; preds = %.lr.ph254
  %45 = icmp sgt i32 %28, 0
  br i1 %45, label %.lr.ph.us.us.us.preheader, label %.lr.ph254.split.us.split.us.split

.lr.ph.us.us.us.preheader:                        ; preds = %.lr.ph254.split.us.split.us
  %46 = sext i32 %12 to i64
  %47 = zext nneg i32 %16 to i64
  %48 = zext nneg i32 %14 to i64
  %wide.trip.count370 = zext nneg i32 %10 to i64
  %wide.trip.count365 = zext nneg i32 %14 to i64
  %wide.trip.count360 = zext nneg i32 %16 to i64
  %wide.trip.count335 = zext i32 %20 to i64
  %wide.trip.count340 = zext i32 %12 to i64
  %wide.trip.count345 = zext nneg i32 %12 to i64
  %wide.trip.count350 = zext nneg i32 %12 to i64
  %wide.trip.count355 = zext nneg i32 %12 to i64
  %49 = mul nsw i64 %46, %wide.trip.count365
  %50 = mul i64 %49, %wide.trip.count360
  %51 = shl i64 %50, 2
  %52 = mul nsw i64 %46, %wide.trip.count360
  %53 = shl i64 %52, 2
  %54 = shl nsw i64 %46, 2
  %min.iters.check461 = icmp ult i32 %20, 8
  %n.vec464 = and i64 %wide.trip.count335, 2147483640
  %cmp.n469 = icmp eq i64 %n.vec464, %wide.trip.count335
  %min.iters.check448 = icmp ult i32 %12, 4
  %n.vec451 = and i64 %wide.trip.count340, 2147483644
  %cmp.n458 = icmp eq i64 %n.vec451, %wide.trip.count340
  %xtraiter483 = and i64 %wide.trip.count340, 1
  %lcmp.mod484.not = icmp eq i64 %xtraiter483, 0
  %55 = add nsw i64 %wide.trip.count340, -1
  br label %.lr.ph.us.us.us

.lr.ph.us.us.us:                                  ; preds = %.lr.ph.us.us.us.preheader, %._crit_edge.split.us.split.us.us.us.us
  %indvars.iv367 = phi i64 [ 0, %.lr.ph.us.us.us.preheader ], [ %indvars.iv.next368, %._crit_edge.split.us.split.us.us.us.us ]
  %56 = mul i64 %51, %indvars.iv367
  %57 = sub i64 %56, %34
  %58 = mul nuw nsw i64 %indvars.iv367, %48
  %59 = trunc i64 %indvars.iv367 to i32
  %60 = mul i32 %22, %59
  br label %.lr.ph218.us.us.us.us.us

.lr.ph218.us.us.us.us.us:                         ; preds = %._crit_edge219.split.us.us.us.us.us.us, %.lr.ph.us.us.us
  %indvars.iv362 = phi i64 [ %indvars.iv.next363, %._crit_edge219.split.us.us.us.us.us.us ], [ 0, %.lr.ph.us.us.us ]
  %61 = mul i64 %53, %indvars.iv362
  %62 = add i64 %57, %61
  %63 = add nuw nsw i64 %indvars.iv362, %58
  %64 = mul nuw nsw i64 %63, %47
  %65 = load i32, ptr %3, align 4, !tbaa !16
  %66 = trunc nuw nsw i64 %indvars.iv362 to i32
  %67 = mul nsw i32 %65, %66
  %68 = load i32, ptr %5, align 4, !tbaa !16
  %69 = sub nsw i32 %67, %68
  %70 = load ptr, ptr %43, align 8
  %71 = ptrtoint ptr %70 to i64
  %72 = add i64 %62, %71
  br label %73

73:                                               ; preds = %._crit_edge215.us.us.us.us.us.us, %.lr.ph218.us.us.us.us.us
  %indvars.iv357 = phi i64 [ %indvars.iv.next358, %._crit_edge215.us.us.us.us.us.us ], [ 0, %.lr.ph218.us.us.us.us.us ]
  %74 = mul i64 %54, %indvars.iv357
  %75 = add i64 %72, %74
  %76 = add nuw nsw i64 %indvars.iv357, %64
  %77 = mul nsw i64 %76, %46
  %78 = load i32, ptr %38, align 4, !tbaa !16
  %79 = trunc nuw nsw i64 %indvars.iv357 to i32
  %80 = mul nsw i32 %78, %79
  %81 = load i32, ptr %39, align 4, !tbaa !16
  %82 = sub nsw i32 %80, %81
  br i1 %40, label %.lr.ph.us.us.us.us.us.us.preheader, label %.backedge.preheader

.lr.ph.us.us.us.us.us.us.preheader:               ; preds = %73
  br i1 %min.iters.check461, label %.lr.ph.us.us.us.us.us.us.preheader476, label %vector.body466

.lr.ph.us.us.us.us.us.us.preheader476:            ; preds = %middle.block459, %.lr.ph.us.us.us.us.us.us.preheader
  %indvars.iv332.ph = phi i64 [ 0, %.lr.ph.us.us.us.us.us.us.preheader ], [ %n.vec464, %middle.block459 ]
  br label %.lr.ph.us.us.us.us.us.us

vector.body466:                                   ; preds = %.lr.ph.us.us.us.us.us.us.preheader, %vector.body466
  %index467 = phi i64 [ %index.next468, %vector.body466 ], [ 0, %.lr.ph.us.us.us.us.us.us.preheader ]
  %83 = getelementptr inbounds float, ptr %32, i64 %index467
  %84 = getelementptr inbounds i8, ptr %83, i64 16
  store <4 x float> zeroinitializer, ptr %83, align 4, !tbaa !19
  store <4 x float> zeroinitializer, ptr %84, align 4, !tbaa !19
  %85 = getelementptr inbounds i32, ptr %35, i64 %index467
  %86 = getelementptr inbounds i8, ptr %85, i64 16
  store <4 x i32> zeroinitializer, ptr %85, align 4, !tbaa !16
  store <4 x i32> zeroinitializer, ptr %86, align 4, !tbaa !16
  %index.next468 = add nuw i64 %index467, 8
  %87 = icmp eq i64 %index.next468, %n.vec464
  br i1 %87, label %middle.block459, label %vector.body466, !llvm.loop !21

middle.block459:                                  ; preds = %vector.body466
  br i1 %cmp.n469, label %.backedge.preheader, label %.lr.ph.us.us.us.us.us.us.preheader476

._crit_edge215.us.us.us.us.us.us:                 ; preds = %._crit_edge.us.us.us.us.us.us.thread, %.lr.ph214.us.us.us.us.us.us.prol.loopexit, %.lr.ph214.us.us.us.us.us.us, %middle.block446, %..preheader_crit_edge.us.us.us.us.us.us
  %indvars.iv.next358 = add nuw nsw i64 %indvars.iv357, 1
  %exitcond361.not = icmp eq i64 %indvars.iv.next358, %wide.trip.count360
  br i1 %exitcond361.not, label %._crit_edge219.split.us.us.us.us.us.us, label %73, !llvm.loop !25

.lr.ph214.us.us.us.us.us.us:                      ; preds = %.lr.ph214.us.us.us.us.us.us.prol.loopexit, %.lr.ph214.us.us.us.us.us.us
  %indvars.iv352 = phi i64 [ %indvars.iv.next353.1, %.lr.ph214.us.us.us.us.us.us ], [ %indvars.iv352.unr, %.lr.ph214.us.us.us.us.us.us.prol.loopexit ]
  %88 = getelementptr inbounds float, ptr %32, i64 %indvars.iv352
  %89 = load float, ptr %88, align 4, !tbaa !19
  %90 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv352
  %91 = load i32, ptr %90, align 4, !tbaa !16
  %92 = uitofp i32 %91 to float
  %93 = fdiv float %89, %92
  %gep399 = getelementptr float, ptr %invariant.gep398, i64 %indvars.iv352
  store float %93, ptr %gep399, align 4, !tbaa !19
  %indvars.iv.next353 = add nuw nsw i64 %indvars.iv352, 1
  %94 = getelementptr inbounds float, ptr %32, i64 %indvars.iv.next353
  %95 = load float, ptr %94, align 4, !tbaa !19
  %96 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv.next353
  %97 = load i32, ptr %96, align 4, !tbaa !16
  %98 = uitofp i32 %97 to float
  %99 = fdiv float %95, %98
  %gep399.1 = getelementptr float, ptr %invariant.gep398, i64 %indvars.iv.next353
  store float %99, ptr %gep399.1, align 4, !tbaa !19
  %indvars.iv.next353.1 = add nuw nsw i64 %indvars.iv352, 2
  %exitcond356.not.1 = icmp eq i64 %indvars.iv.next353.1, %wide.trip.count355
  br i1 %exitcond356.not.1, label %._crit_edge215.us.us.us.us.us.us, label %.lr.ph214.us.us.us.us.us.us, !llvm.loop !26

.backedge:                                        ; preds = %.backedge.backedge, %.backedge.preheader
  %.0185211.us.us.us.us.us.us = phi i32 [ 0, %.backedge.preheader ], [ %.0185211.us.us.us.us.us.us.be, %.backedge.backedge ]
  %spec.select.us.us.us.us.us.us = call i32 @llvm.smin.i32(i32 %.0185211.us.us.us.us.us.us, i32 %29)
  %100 = add nsw i32 %spec.select.us.us.us.us.us.us, 1
  %101 = add nsw i32 %spec.select.us.us.us.us.us.us, 2
  %102 = add nsw i32 %spec.select.us.us.us.us.us.us, 3
  %103 = load i32, ptr %26, align 4, !tbaa !16
  %104 = sdiv i32 %spec.select.us.us.us.us.us.us, %103
  %105 = sdiv i32 %100, %103
  %106 = sdiv i32 %101, %103
  %107 = sdiv i32 %102, %103
  %108 = srem i32 %spec.select.us.us.us.us.us.us, %103
  %109 = srem i32 %100, %103
  %110 = srem i32 %101, %103
  %111 = srem i32 %102, %103
  %112 = load i32, ptr %4, align 4, !tbaa !16
  %113 = mul nsw i32 %112, %104
  %114 = add nsw i32 %113, %69
  %115 = mul nsw i32 %112, %105
  %116 = add nsw i32 %115, %69
  %117 = mul nsw i32 %112, %106
  %118 = add nsw i32 %117, %69
  %119 = mul nsw i32 %112, %107
  %120 = add nsw i32 %119, %69
  %121 = load i32, ptr %41, align 4, !tbaa !16
  %122 = mul nsw i32 %121, %108
  %123 = add nsw i32 %122, %82
  %124 = mul nsw i32 %121, %109
  %125 = add nsw i32 %124, %82
  %126 = mul nsw i32 %121, %110
  %127 = add nsw i32 %126, %82
  %128 = mul nsw i32 %121, %111
  %129 = add nsw i32 %128, %82
  %130 = icmp sgt i32 %114, -1
  br i1 %130, label %131, label %135

131:                                              ; preds = %.backedge
  %132 = icmp slt i32 %114, %22
  %133 = icmp sgt i32 %123, -1
  %or.cond.us.us.us.us.us.us = select i1 %132, i1 %133, i1 false
  %134 = icmp slt i32 %123, %24
  %spec.select198.us.us.us.us.us.us = select i1 %or.cond.us.us.us.us.us.us, i1 %134, i1 false
  br label %135

135:                                              ; preds = %131, %.backedge
  %136 = phi i1 [ false, %.backedge ], [ %spec.select198.us.us.us.us.us.us, %131 ]
  %137 = icmp sgt i32 %116, -1
  br i1 %137, label %138, label %142

138:                                              ; preds = %135
  %139 = icmp slt i32 %116, %22
  %140 = icmp sgt i32 %125, -1
  %or.cond3.us.us.us.us.us.us = select i1 %139, i1 %140, i1 false
  %141 = icmp slt i32 %125, %24
  %spec.select199.us.us.us.us.us.us = select i1 %or.cond3.us.us.us.us.us.us, i1 %141, i1 false
  br label %142

142:                                              ; preds = %138, %135
  %143 = phi i1 [ false, %135 ], [ %spec.select199.us.us.us.us.us.us, %138 ]
  %144 = icmp sgt i32 %118, -1
  br i1 %144, label %145, label %149

145:                                              ; preds = %142
  %146 = icmp slt i32 %118, %22
  %147 = icmp sgt i32 %127, -1
  %or.cond5.us.us.us.us.us.us = select i1 %146, i1 %147, i1 false
  %148 = icmp slt i32 %127, %24
  %spec.select200.us.us.us.us.us.us = select i1 %or.cond5.us.us.us.us.us.us, i1 %148, i1 false
  br label %149

149:                                              ; preds = %145, %142
  %150 = phi i1 [ false, %142 ], [ %spec.select200.us.us.us.us.us.us, %145 ]
  %151 = icmp sgt i32 %120, -1
  br i1 %151, label %152, label %156

152:                                              ; preds = %149
  %153 = icmp slt i32 %120, %22
  %154 = icmp sgt i32 %129, -1
  %or.cond7.us.us.us.us.us.us = select i1 %153, i1 %154, i1 false
  %155 = icmp slt i32 %129, %24
  %spec.select201.us.us.us.us.us.us = select i1 %or.cond7.us.us.us.us.us.us, i1 %155, i1 false
  br label %156

156:                                              ; preds = %152, %149
  %157 = phi i1 [ false, %149 ], [ %spec.select201.us.us.us.us.us.us, %152 ]
  %158 = add nsw i32 %114, %60
  %159 = mul nsw i32 %158, %24
  %160 = add nsw i32 %159, %123
  %161 = mul nsw i32 %160, %20
  %162 = add nsw i32 %116, %60
  %163 = mul nsw i32 %162, %24
  %164 = add nsw i32 %163, %125
  %165 = mul nsw i32 %164, %20
  %166 = add nsw i32 %118, %60
  %167 = mul nsw i32 %166, %24
  %168 = add nsw i32 %167, %127
  %169 = mul nsw i32 %168, %20
  %170 = add nsw i32 %120, %60
  %171 = mul nsw i32 %170, %24
  %172 = add nsw i32 %171, %129
  %173 = mul nsw i32 %172, %20
  %174 = zext i1 %136 to i32
  %175 = zext i1 %143 to i32
  %176 = add nuw nsw i32 %175, %174
  %177 = zext i1 %150 to i32
  %178 = add nuw nsw i32 %176, %177
  %179 = zext i1 %157 to i32
  %180 = add nuw nsw i32 %178, %179
  br i1 %42, label %.lr.ph206.us.us.us.us.us.us, label %._crit_edge.us.us.us.us.us.us.thread

._crit_edge.us.us.us.us.us.us:                    ; preds = %192, %239, %223
  %181 = add nsw i32 %spec.select.us.us.us.us.us.us, 4
  %182 = icmp slt i32 %181, %28
  br i1 %182, label %.backedge.backedge, label %..preheader_crit_edge.us.us.us.us.us.us

.backedge.backedge:                               ; preds = %._crit_edge.us.us.us.us.us.us, %._crit_edge.us.us.us.us.us.us.thread
  %.0185211.us.us.us.us.us.us.be = phi i32 [ %181, %._crit_edge.us.us.us.us.us.us ], [ %183, %._crit_edge.us.us.us.us.us.us.thread ]
  br label %.backedge, !llvm.loop !27

._crit_edge.us.us.us.us.us.us.thread:             ; preds = %156
  %183 = add nsw i32 %spec.select.us.us.us.us.us.us, 4
  %184 = icmp slt i32 %183, %28
  br i1 %184, label %.backedge.backedge, label %._crit_edge215.us.us.us.us.us.us

.lr.ph206.split.split.us225.us.us.us.us.us:       ; preds = %.lr.ph206.split.split.us225.us.us.us.us.us.preheader, %192
  %indvars.iv337 = phi i64 [ 0, %.lr.ph206.split.split.us225.us.us.us.us.us.preheader ], [ %indvars.iv.next338, %192 ]
  br i1 %150, label %185, label %188

185:                                              ; preds = %.lr.ph206.split.split.us225.us.us.us.us.us
  %gep381 = getelementptr float, ptr %invariant.gep380, i64 %indvars.iv337
  %186 = load float, ptr %gep381, align 4, !tbaa !19
  %187 = fadd float %186, 0.000000e+00
  br label %188

188:                                              ; preds = %185, %.lr.ph206.split.split.us225.us.us.us.us.us
  %.2.us221.us.us.us.us.us = phi float [ %187, %185 ], [ 0.000000e+00, %.lr.ph206.split.split.us225.us.us.us.us.us ]
  br i1 %157, label %189, label %192

189:                                              ; preds = %188
  %gep383 = getelementptr float, ptr %invariant.gep382, i64 %indvars.iv337
  %190 = load float, ptr %gep383, align 4, !tbaa !19
  %191 = fadd float %.2.us221.us.us.us.us.us, %190
  br label %192

192:                                              ; preds = %189, %188
  %.3.us222.us.us.us.us.us = phi float [ %191, %189 ], [ %.2.us221.us.us.us.us.us, %188 ]
  %193 = getelementptr inbounds float, ptr %32, i64 %indvars.iv337
  %194 = load float, ptr %193, align 4, !tbaa !19
  %195 = fadd float %.3.us222.us.us.us.us.us, %194
  store float %195, ptr %193, align 4, !tbaa !19
  %196 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv337
  %197 = load i32, ptr %196, align 4, !tbaa !16
  %198 = add i32 %180, %197
  store i32 %198, ptr %196, align 4, !tbaa !16
  %indvars.iv.next338 = add nuw nsw i64 %indvars.iv337, 1
  %exitcond341.not = icmp eq i64 %indvars.iv.next338, %wide.trip.count340
  br i1 %exitcond341.not, label %._crit_edge.us.us.us.us.us.us, label %.lr.ph206.split.split.us225.us.us.us.us.us, !llvm.loop !28

.lr.ph.us.us.us.us.us.us:                         ; preds = %.lr.ph.us.us.us.us.us.us.preheader476, %.lr.ph.us.us.us.us.us.us
  %indvars.iv332 = phi i64 [ %indvars.iv.next333, %.lr.ph.us.us.us.us.us.us ], [ %indvars.iv332.ph, %.lr.ph.us.us.us.us.us.us.preheader476 ]
  %199 = getelementptr inbounds float, ptr %32, i64 %indvars.iv332
  store float 0.000000e+00, ptr %199, align 4, !tbaa !19
  %200 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv332
  store i32 0, ptr %200, align 4, !tbaa !16
  %indvars.iv.next333 = add nuw nsw i64 %indvars.iv332, 1
  %exitcond336.not = icmp eq i64 %indvars.iv.next333, %wide.trip.count335
  br i1 %exitcond336.not, label %.backedge.preheader, label %.lr.ph.us.us.us.us.us.us, !llvm.loop !29

.backedge.preheader:                              ; preds = %.lr.ph.us.us.us.us.us.us, %middle.block459, %73
  br label %.backedge

.lr.ph206.us.us.us.us.us.us:                      ; preds = %156
  br i1 %136, label %.lr.ph206.split.us.us.us.us.us.us.us.preheader, label %.lr.ph206.split.us224.us.us.us.us.us

.lr.ph206.split.us.us.us.us.us.us.us.preheader:   ; preds = %.lr.ph206.us.us.us.us.us.us
  %201 = sext i32 %161 to i64
  %202 = sext i32 %165 to i64
  %203 = sext i32 %169 to i64
  %204 = sext i32 %173 to i64
  %invariant.gep390 = getelementptr float, ptr %1, i64 %201
  %invariant.gep392 = getelementptr float, ptr %1, i64 %202
  %invariant.gep394 = getelementptr float, ptr %1, i64 %203
  %invariant.gep396 = getelementptr float, ptr %1, i64 %204
  br label %.lr.ph206.split.us.us.us.us.us.us.us

.lr.ph206.split.us224.us.us.us.us.us:             ; preds = %.lr.ph206.us.us.us.us.us.us
  br i1 %143, label %.lr.ph206.split.split.us.us.us.us.us.us.us.preheader, label %.lr.ph206.split.split.us225.us.us.us.us.us.preheader

.lr.ph206.split.split.us225.us.us.us.us.us.preheader: ; preds = %.lr.ph206.split.us224.us.us.us.us.us
  %205 = sext i32 %169 to i64
  %206 = sext i32 %173 to i64
  %invariant.gep380 = getelementptr float, ptr %1, i64 %205
  %invariant.gep382 = getelementptr float, ptr %1, i64 %206
  br label %.lr.ph206.split.split.us225.us.us.us.us.us

.lr.ph206.split.split.us.us.us.us.us.us.us.preheader: ; preds = %.lr.ph206.split.us224.us.us.us.us.us
  %207 = sext i32 %165 to i64
  %208 = sext i32 %169 to i64
  %209 = sext i32 %173 to i64
  %invariant.gep384 = getelementptr float, ptr %1, i64 %207
  %invariant.gep386 = getelementptr float, ptr %1, i64 %208
  %invariant.gep388 = getelementptr float, ptr %1, i64 %209
  br label %.lr.ph206.split.split.us.us.us.us.us.us.us

.lr.ph206.split.us.us.us.us.us.us.us:             ; preds = %.lr.ph206.split.us.us.us.us.us.us.us.preheader, %223
  %indvars.iv347 = phi i64 [ 0, %.lr.ph206.split.us.us.us.us.us.us.us.preheader ], [ %indvars.iv.next348, %223 ]
  %gep391 = getelementptr float, ptr %invariant.gep390, i64 %indvars.iv347
  %210 = load float, ptr %gep391, align 4, !tbaa !19
  %211 = fadd float %210, 0.000000e+00
  br i1 %143, label %212, label %215

212:                                              ; preds = %.lr.ph206.split.us.us.us.us.us.us.us
  %gep393 = getelementptr float, ptr %invariant.gep392, i64 %indvars.iv347
  %213 = load float, ptr %gep393, align 4, !tbaa !19
  %214 = fadd float %211, %213
  br label %215

215:                                              ; preds = %212, %.lr.ph206.split.us.us.us.us.us.us.us
  %.1.us.us.us.us.us.us.us = phi float [ %214, %212 ], [ %211, %.lr.ph206.split.us.us.us.us.us.us.us ]
  br i1 %150, label %216, label %219

216:                                              ; preds = %215
  %gep395 = getelementptr float, ptr %invariant.gep394, i64 %indvars.iv347
  %217 = load float, ptr %gep395, align 4, !tbaa !19
  %218 = fadd float %.1.us.us.us.us.us.us.us, %217
  br label %219

219:                                              ; preds = %216, %215
  %.2.us.us.us.us.us.us.us = phi float [ %218, %216 ], [ %.1.us.us.us.us.us.us.us, %215 ]
  br i1 %157, label %220, label %223

220:                                              ; preds = %219
  %gep397 = getelementptr float, ptr %invariant.gep396, i64 %indvars.iv347
  %221 = load float, ptr %gep397, align 4, !tbaa !19
  %222 = fadd float %.2.us.us.us.us.us.us.us, %221
  br label %223

223:                                              ; preds = %220, %219
  %.3.us.us.us.us.us.us.us = phi float [ %222, %220 ], [ %.2.us.us.us.us.us.us.us, %219 ]
  %224 = getelementptr inbounds float, ptr %32, i64 %indvars.iv347
  %225 = load float, ptr %224, align 4, !tbaa !19
  %226 = fadd float %.3.us.us.us.us.us.us.us, %225
  store float %226, ptr %224, align 4, !tbaa !19
  %227 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv347
  %228 = load i32, ptr %227, align 4, !tbaa !16
  %229 = add i32 %180, %228
  store i32 %229, ptr %227, align 4, !tbaa !16
  %indvars.iv.next348 = add nuw nsw i64 %indvars.iv347, 1
  %exitcond351.not = icmp eq i64 %indvars.iv.next348, %wide.trip.count350
  br i1 %exitcond351.not, label %._crit_edge.us.us.us.us.us.us, label %.lr.ph206.split.us.us.us.us.us.us.us, !llvm.loop !28

.lr.ph206.split.split.us.us.us.us.us.us.us:       ; preds = %.lr.ph206.split.split.us.us.us.us.us.us.us.preheader, %239
  %indvars.iv342 = phi i64 [ 0, %.lr.ph206.split.split.us.us.us.us.us.us.us.preheader ], [ %indvars.iv.next343, %239 ]
  %gep385 = getelementptr float, ptr %invariant.gep384, i64 %indvars.iv342
  %230 = load float, ptr %gep385, align 4, !tbaa !19
  %231 = fadd float %230, 0.000000e+00
  br i1 %150, label %232, label %235

232:                                              ; preds = %.lr.ph206.split.split.us.us.us.us.us.us.us
  %gep387 = getelementptr float, ptr %invariant.gep386, i64 %indvars.iv342
  %233 = load float, ptr %gep387, align 4, !tbaa !19
  %234 = fadd float %231, %233
  br label %235

235:                                              ; preds = %232, %.lr.ph206.split.split.us.us.us.us.us.us.us
  %.2.us209.us.us.us.us.us.us = phi float [ %234, %232 ], [ %231, %.lr.ph206.split.split.us.us.us.us.us.us.us ]
  br i1 %157, label %236, label %239

236:                                              ; preds = %235
  %gep389 = getelementptr float, ptr %invariant.gep388, i64 %indvars.iv342
  %237 = load float, ptr %gep389, align 4, !tbaa !19
  %238 = fadd float %.2.us209.us.us.us.us.us.us, %237
  br label %239

239:                                              ; preds = %236, %235
  %.3.us210.us.us.us.us.us.us = phi float [ %238, %236 ], [ %.2.us209.us.us.us.us.us.us, %235 ]
  %240 = getelementptr inbounds float, ptr %32, i64 %indvars.iv342
  %241 = load float, ptr %240, align 4, !tbaa !19
  %242 = fadd float %.3.us210.us.us.us.us.us.us, %241
  store float %242, ptr %240, align 4, !tbaa !19
  %243 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv342
  %244 = load i32, ptr %243, align 4, !tbaa !16
  %245 = add i32 %180, %244
  store i32 %245, ptr %243, align 4, !tbaa !16
  %indvars.iv.next343 = add nuw nsw i64 %indvars.iv342, 1
  %exitcond346.not = icmp eq i64 %indvars.iv.next343, %wide.trip.count345
  br i1 %exitcond346.not, label %._crit_edge.us.us.us.us.us.us, label %.lr.ph206.split.split.us.us.us.us.us.us.us, !llvm.loop !28

..preheader_crit_edge.us.us.us.us.us.us:          ; preds = %._crit_edge.us.us.us.us.us.us
  br i1 %42, label %.lr.ph214.us.us.us.us.us.us.preheader, label %._crit_edge215.us.us.us.us.us.us

.lr.ph214.us.us.us.us.us.us.preheader:            ; preds = %..preheader_crit_edge.us.us.us.us.us.us
  %invariant.gep398 = getelementptr float, ptr %70, i64 %77
  %diff.check445 = icmp ult i64 %75, 16
  %or.cond470 = select i1 %min.iters.check448, i1 true, i1 %diff.check445
  br i1 %or.cond470, label %.lr.ph214.us.us.us.us.us.us.preheader474, label %vector.body453

.lr.ph214.us.us.us.us.us.us.preheader474:         ; preds = %middle.block446, %.lr.ph214.us.us.us.us.us.us.preheader
  %indvars.iv352.ph = phi i64 [ 0, %.lr.ph214.us.us.us.us.us.us.preheader ], [ %n.vec451, %middle.block446 ]
  br i1 %lcmp.mod484.not, label %.lr.ph214.us.us.us.us.us.us.prol.loopexit, label %.lr.ph214.us.us.us.us.us.us.prol

.lr.ph214.us.us.us.us.us.us.prol:                 ; preds = %.lr.ph214.us.us.us.us.us.us.preheader474
  %246 = getelementptr inbounds float, ptr %32, i64 %indvars.iv352.ph
  %247 = load float, ptr %246, align 4, !tbaa !19
  %248 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv352.ph
  %249 = load i32, ptr %248, align 4, !tbaa !16
  %250 = uitofp i32 %249 to float
  %251 = fdiv float %247, %250
  %gep399.prol = getelementptr float, ptr %invariant.gep398, i64 %indvars.iv352.ph
  store float %251, ptr %gep399.prol, align 4, !tbaa !19
  %indvars.iv.next353.prol = or disjoint i64 %indvars.iv352.ph, 1
  br label %.lr.ph214.us.us.us.us.us.us.prol.loopexit

.lr.ph214.us.us.us.us.us.us.prol.loopexit:        ; preds = %.lr.ph214.us.us.us.us.us.us.prol, %.lr.ph214.us.us.us.us.us.us.preheader474
  %indvars.iv352.unr = phi i64 [ %indvars.iv352.ph, %.lr.ph214.us.us.us.us.us.us.preheader474 ], [ %indvars.iv.next353.prol, %.lr.ph214.us.us.us.us.us.us.prol ]
  %252 = icmp eq i64 %indvars.iv352.ph, %55
  br i1 %252, label %._crit_edge215.us.us.us.us.us.us, label %.lr.ph214.us.us.us.us.us.us

vector.body453:                                   ; preds = %.lr.ph214.us.us.us.us.us.us.preheader, %vector.body453
  %index454 = phi i64 [ %index.next457, %vector.body453 ], [ 0, %.lr.ph214.us.us.us.us.us.us.preheader ]
  %253 = getelementptr inbounds float, ptr %32, i64 %index454
  %wide.load455 = load <4 x float>, ptr %253, align 4, !tbaa !19
  %254 = getelementptr inbounds i32, ptr %35, i64 %index454
  %wide.load456 = load <4 x i32>, ptr %254, align 4, !tbaa !16
  %255 = uitofp <4 x i32> %wide.load456 to <4 x float>
  %256 = fdiv <4 x float> %wide.load455, %255
  %257 = getelementptr float, ptr %invariant.gep398, i64 %index454
  store <4 x float> %256, ptr %257, align 4, !tbaa !19
  %index.next457 = add nuw i64 %index454, 4
  %258 = icmp eq i64 %index.next457, %n.vec451
  br i1 %258, label %middle.block446, label %vector.body453, !llvm.loop !30

middle.block446:                                  ; preds = %vector.body453
  br i1 %cmp.n458, label %._crit_edge215.us.us.us.us.us.us, label %.lr.ph214.us.us.us.us.us.us.preheader474

._crit_edge219.split.us.us.us.us.us.us:           ; preds = %._crit_edge215.us.us.us.us.us.us
  %indvars.iv.next363 = add nuw nsw i64 %indvars.iv362, 1
  %exitcond366.not = icmp eq i64 %indvars.iv.next363, %wide.trip.count365
  br i1 %exitcond366.not, label %._crit_edge.split.us.split.us.us.us.us, label %.lr.ph218.us.us.us.us.us, !llvm.loop !31

._crit_edge.split.us.split.us.us.us.us:           ; preds = %._crit_edge219.split.us.us.us.us.us.us
  %indvars.iv.next368 = add nuw nsw i64 %indvars.iv367, 1
  %exitcond371.not = icmp eq i64 %indvars.iv.next368, %wide.trip.count370
  br i1 %exitcond371.not, label %._crit_edge255, label %.lr.ph.us.us.us, !llvm.loop !32

.lr.ph254.split.us.split.us.split:                ; preds = %.lr.ph254.split.us.split.us
  br i1 %42, label %.lr.ph254.split.us.split.us.split.split.us, label %.lr.ph254.split.us.split.us.split.split

.lr.ph254.split.us.split.us.split.split.us:       ; preds = %.lr.ph254.split.us.split.us.split
  %259 = zext nneg i32 %12 to i64
  %260 = zext nneg i32 %16 to i64
  %261 = zext nneg i32 %14 to i64
  %wide.trip.count330 = zext nneg i32 %10 to i64
  %wide.trip.count325 = zext nneg i32 %14 to i64
  %wide.trip.count320 = zext nneg i32 %16 to i64
  br i1 %40, label %.lr.ph.us.us.us271.us.preheader, label %.lr.ph.us.us.us271.preheader

.lr.ph.us.us.us271.preheader:                     ; preds = %.lr.ph254.split.us.split.us.split.split.us
  %wide.trip.count290 = zext nneg i32 %12 to i64
  %262 = mul nuw nsw i64 %wide.trip.count325, %wide.trip.count320
  %263 = mul i64 %262, %wide.trip.count290
  %264 = shl i64 %263, 2
  %265 = mul nuw nsw i64 %wide.trip.count320, %wide.trip.count290
  %266 = shl nuw i64 %265, 2
  %267 = shl nuw nsw i64 %wide.trip.count290, 2
  %min.iters.check408 = icmp ult i32 %12, 4
  %n.vec411 = and i64 %wide.trip.count290, 2147483644
  %cmp.n417 = icmp eq i64 %n.vec411, %wide.trip.count290
  %xtraiter = and i64 %wide.trip.count290, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %268 = add nsw i64 %wide.trip.count290, -1
  br label %.lr.ph.us.us.us271

.lr.ph.us.us.us271.us.preheader:                  ; preds = %.lr.ph254.split.us.split.us.split.split.us
  %wide.trip.count310 = zext nneg i32 %20 to i64
  %wide.trip.count315 = zext nneg i32 %12 to i64
  %269 = mul nuw nsw i64 %wide.trip.count325, %wide.trip.count320
  %270 = mul i64 %269, %wide.trip.count315
  %271 = shl i64 %270, 2
  %272 = mul nuw nsw i64 %wide.trip.count320, %wide.trip.count315
  %273 = shl nuw i64 %272, 2
  %274 = shl nuw nsw i64 %wide.trip.count315, 2
  %min.iters.check435 = icmp ult i32 %20, 8
  %n.vec438 = and i64 %wide.trip.count310, 2147483640
  %cmp.n443 = icmp eq i64 %n.vec438, %wide.trip.count310
  %min.iters.check422 = icmp ult i32 %12, 4
  %n.vec425 = and i64 %wide.trip.count315, 2147483644
  %cmp.n432 = icmp eq i64 %n.vec425, %wide.trip.count315
  %xtraiter481 = and i64 %259, 1
  %lcmp.mod482.not = icmp eq i64 %xtraiter481, 0
  %275 = add nsw i64 %259, -1
  br label %.lr.ph.us.us.us271.us

.lr.ph.us.us.us271.us:                            ; preds = %.lr.ph.us.us.us271.us.preheader, %._crit_edge.split.us.split.split.us.split.us.us.us.us.us
  %indvars.iv327 = phi i64 [ 0, %.lr.ph.us.us.us271.us.preheader ], [ %indvars.iv.next328, %._crit_edge.split.us.split.split.us.split.us.us.us.us.us ]
  %276 = mul i64 %271, %indvars.iv327
  %277 = sub i64 %276, %34
  %278 = mul nuw nsw i64 %indvars.iv327, %261
  br label %.lr.ph218.us.us249.us.us.us.us.us

.lr.ph218.us.us249.us.us.us.us.us:                ; preds = %._crit_edge219.split.split.us.us.us.split.us.us.us.us.us.us, %.lr.ph.us.us.us271.us
  %indvars.iv322 = phi i64 [ %indvars.iv.next323, %._crit_edge219.split.split.us.us.us.split.us.us.us.us.us.us ], [ 0, %.lr.ph.us.us.us271.us ]
  %279 = mul i64 %273, %indvars.iv322
  %280 = add i64 %277, %279
  %281 = add nuw nsw i64 %indvars.iv322, %278
  %282 = mul nuw nsw i64 %281, %260
  %283 = load ptr, ptr %43, align 8
  %284 = ptrtoint ptr %283 to i64
  %285 = add i64 %280, %284
  br label %.lr.ph.us231.us.us.us.us.us.us.us.us

.lr.ph.us231.us.us.us.us.us.us.us.us:             ; preds = %._crit_edge215.us234.us.us.us.us.us.us.us.us, %.lr.ph218.us.us249.us.us.us.us.us
  %indvars.iv317 = phi i64 [ %indvars.iv.next318, %._crit_edge215.us234.us.us.us.us.us.us.us.us ], [ 0, %.lr.ph218.us.us249.us.us.us.us.us ]
  %286 = mul i64 %274, %indvars.iv317
  %287 = add i64 %285, %286
  %288 = add nuw nsw i64 %indvars.iv317, %282
  br i1 %min.iters.check435, label %scalar.ph434.preheader, label %vector.body440

scalar.ph434.preheader:                           ; preds = %middle.block433, %.lr.ph.us231.us.us.us.us.us.us.us.us
  %indvars.iv307.ph = phi i64 [ 0, %.lr.ph.us231.us.us.us.us.us.us.us.us ], [ %n.vec438, %middle.block433 ]
  br label %scalar.ph434

vector.body440:                                   ; preds = %.lr.ph.us231.us.us.us.us.us.us.us.us, %vector.body440
  %index441 = phi i64 [ %index.next442, %vector.body440 ], [ 0, %.lr.ph.us231.us.us.us.us.us.us.us.us ]
  %289 = getelementptr inbounds float, ptr %32, i64 %index441
  %290 = getelementptr inbounds i8, ptr %289, i64 16
  store <4 x float> zeroinitializer, ptr %289, align 4, !tbaa !19
  store <4 x float> zeroinitializer, ptr %290, align 4, !tbaa !19
  %291 = getelementptr inbounds i32, ptr %35, i64 %index441
  %292 = getelementptr inbounds i8, ptr %291, i64 16
  store <4 x i32> zeroinitializer, ptr %291, align 4, !tbaa !16
  store <4 x i32> zeroinitializer, ptr %292, align 4, !tbaa !16
  %index.next442 = add nuw i64 %index441, 8
  %293 = icmp eq i64 %index.next442, %n.vec438
  br i1 %293, label %middle.block433, label %vector.body440, !llvm.loop !33

middle.block433:                                  ; preds = %vector.body440
  br i1 %cmp.n443, label %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader, label %scalar.ph434.preheader

..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us: ; preds = %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.prol.loopexit, %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us
  %indvars.iv312 = phi i64 [ %indvars.iv.next313.1, %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us ], [ %indvars.iv312.unr, %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.prol.loopexit ]
  %294 = getelementptr inbounds float, ptr %32, i64 %indvars.iv312
  %295 = load float, ptr %294, align 4, !tbaa !19
  %296 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv312
  %297 = load i32, ptr %296, align 4, !tbaa !16
  %298 = uitofp i32 %297 to float
  %299 = fdiv float %295, %298
  %gep379 = getelementptr inbounds float, ptr %invariant.gep378, i64 %indvars.iv312
  store float %299, ptr %gep379, align 4, !tbaa !19
  %indvars.iv.next313 = add nuw nsw i64 %indvars.iv312, 1
  %300 = getelementptr inbounds float, ptr %32, i64 %indvars.iv.next313
  %301 = load float, ptr %300, align 4, !tbaa !19
  %302 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv.next313
  %303 = load i32, ptr %302, align 4, !tbaa !16
  %304 = uitofp i32 %303 to float
  %305 = fdiv float %301, %304
  %gep379.1 = getelementptr inbounds float, ptr %invariant.gep378, i64 %indvars.iv.next313
  store float %305, ptr %gep379.1, align 4, !tbaa !19
  %indvars.iv.next313.1 = add nuw nsw i64 %indvars.iv312, 2
  %exitcond316.not.1 = icmp eq i64 %indvars.iv.next313.1, %wide.trip.count315
  br i1 %exitcond316.not.1, label %._crit_edge215.us234.us.us.us.us.us.us.us.us, label %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us, !llvm.loop !34

scalar.ph434:                                     ; preds = %scalar.ph434.preheader, %scalar.ph434
  %indvars.iv307 = phi i64 [ %indvars.iv.next308, %scalar.ph434 ], [ %indvars.iv307.ph, %scalar.ph434.preheader ]
  %306 = getelementptr inbounds float, ptr %32, i64 %indvars.iv307
  store float 0.000000e+00, ptr %306, align 4, !tbaa !19
  %307 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv307
  store i32 0, ptr %307, align 4, !tbaa !16
  %indvars.iv.next308 = add nuw nsw i64 %indvars.iv307, 1
  %exitcond311.not = icmp eq i64 %indvars.iv.next308, %wide.trip.count310
  br i1 %exitcond311.not, label %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader, label %scalar.ph434, !llvm.loop !35

..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader: ; preds = %scalar.ph434, %middle.block433
  %308 = mul nuw nsw i64 %288, %259
  %invariant.gep378 = getelementptr inbounds float, ptr %283, i64 %308
  %diff.check419 = icmp ult i64 %287, 16
  %or.cond471 = select i1 %min.iters.check422, i1 true, i1 %diff.check419
  br i1 %or.cond471, label %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader477, label %vector.body427

..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader477: ; preds = %middle.block420, %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader
  %indvars.iv312.ph = phi i64 [ 0, %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader ], [ %n.vec425, %middle.block420 ]
  br i1 %lcmp.mod482.not, label %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.prol.loopexit, label %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.prol

..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.prol: ; preds = %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader477
  %309 = getelementptr inbounds float, ptr %32, i64 %indvars.iv312.ph
  %310 = load float, ptr %309, align 4, !tbaa !19
  %311 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv312.ph
  %312 = load i32, ptr %311, align 4, !tbaa !16
  %313 = uitofp i32 %312 to float
  %314 = fdiv float %310, %313
  %gep379.prol = getelementptr inbounds float, ptr %invariant.gep378, i64 %indvars.iv312.ph
  store float %314, ptr %gep379.prol, align 4, !tbaa !19
  %indvars.iv.next313.prol = or disjoint i64 %indvars.iv312.ph, 1
  br label %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.prol.loopexit

..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.prol.loopexit: ; preds = %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.prol, %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader477
  %indvars.iv312.unr = phi i64 [ %indvars.iv312.ph, %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader477 ], [ %indvars.iv.next313.prol, %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.prol ]
  %315 = icmp eq i64 %indvars.iv312.ph, %275
  br i1 %315, label %._crit_edge215.us234.us.us.us.us.us.us.us.us, label %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us

vector.body427:                                   ; preds = %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader, %vector.body427
  %index428 = phi i64 [ %index.next431, %vector.body427 ], [ 0, %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader ]
  %316 = getelementptr inbounds float, ptr %32, i64 %index428
  %wide.load429 = load <4 x float>, ptr %316, align 4, !tbaa !19
  %317 = getelementptr inbounds i32, ptr %35, i64 %index428
  %wide.load430 = load <4 x i32>, ptr %317, align 4, !tbaa !16
  %318 = uitofp <4 x i32> %wide.load430 to <4 x float>
  %319 = fdiv <4 x float> %wide.load429, %318
  %320 = getelementptr inbounds float, ptr %invariant.gep378, i64 %index428
  store <4 x float> %319, ptr %320, align 4, !tbaa !19
  %index.next431 = add nuw i64 %index428, 4
  %321 = icmp eq i64 %index.next431, %n.vec425
  br i1 %321, label %middle.block420, label %vector.body427, !llvm.loop !36

middle.block420:                                  ; preds = %vector.body427
  br i1 %cmp.n432, label %._crit_edge215.us234.us.us.us.us.us.us.us.us, label %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.preheader477

._crit_edge215.us234.us.us.us.us.us.us.us.us:     ; preds = %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us.prol.loopexit, %..preheader202_crit_edge.us232.us.us.us.us.us.us.us.us, %middle.block420
  %indvars.iv.next318 = add nuw nsw i64 %indvars.iv317, 1
  %exitcond321.not = icmp eq i64 %indvars.iv.next318, %wide.trip.count320
  br i1 %exitcond321.not, label %._crit_edge219.split.split.us.us.us.split.us.us.us.us.us.us, label %.lr.ph.us231.us.us.us.us.us.us.us.us, !llvm.loop !25

._crit_edge219.split.split.us.us.us.split.us.us.us.us.us.us: ; preds = %._crit_edge215.us234.us.us.us.us.us.us.us.us
  %indvars.iv.next323 = add nuw nsw i64 %indvars.iv322, 1
  %exitcond326.not = icmp eq i64 %indvars.iv.next323, %wide.trip.count325
  br i1 %exitcond326.not, label %._crit_edge.split.us.split.split.us.split.us.us.us.us.us, label %.lr.ph218.us.us249.us.us.us.us.us, !llvm.loop !31

._crit_edge.split.us.split.split.us.split.us.us.us.us.us: ; preds = %._crit_edge219.split.split.us.us.us.split.us.us.us.us.us.us
  %indvars.iv.next328 = add nuw nsw i64 %indvars.iv327, 1
  %exitcond331.not = icmp eq i64 %indvars.iv.next328, %wide.trip.count330
  br i1 %exitcond331.not, label %._crit_edge255, label %.lr.ph.us.us.us271.us, !llvm.loop !32

.lr.ph.us.us.us271:                               ; preds = %.lr.ph.us.us.us271.preheader, %._crit_edge.split.us.split.split.us.split.us267.us.us
  %indvars.iv302 = phi i64 [ 0, %.lr.ph.us.us.us271.preheader ], [ %indvars.iv.next303, %._crit_edge.split.us.split.split.us.split.us267.us.us ]
  %322 = mul i64 %264, %indvars.iv302
  %323 = sub i64 %322, %34
  %324 = mul nuw nsw i64 %indvars.iv302, %261
  br label %.lr.ph218.us.us249.us265.us.us

.lr.ph218.us.us249.us265.us.us:                   ; preds = %.lr.ph.us.us.us271, %._crit_edge219.split.split.us.us.us.split.us.us.us
  %indvars.iv297 = phi i64 [ 0, %.lr.ph.us.us.us271 ], [ %indvars.iv.next298, %._crit_edge219.split.split.us.us.us.split.us.us.us ]
  %325 = mul i64 %266, %indvars.iv297
  %326 = add i64 %323, %325
  %327 = add nuw nsw i64 %indvars.iv297, %324
  %328 = mul nuw nsw i64 %327, %260
  %329 = load ptr, ptr %43, align 8
  %330 = ptrtoint ptr %329 to i64
  %331 = add i64 %326, %330
  br label %.preheader202.us230.us.us.us.us.us

.preheader202.us230.us.us.us.us.us:               ; preds = %._crit_edge215.us234.us.us.us.us.us, %.lr.ph218.us.us249.us265.us.us
  %indvars.iv292 = phi i64 [ %indvars.iv.next293, %._crit_edge215.us234.us.us.us.us.us ], [ 0, %.lr.ph218.us.us249.us265.us.us ]
  %332 = add nuw nsw i64 %indvars.iv292, %328
  %333 = mul nuw nsw i64 %332, %259
  %invariant.gep = getelementptr inbounds float, ptr %329, i64 %333
  br i1 %min.iters.check408, label %scalar.ph407.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader202.us230.us.us.us.us.us
  %334 = mul i64 %267, %indvars.iv292
  %335 = add i64 %331, %334
  %diff.check = icmp ult i64 %335, 16
  br i1 %diff.check, label %scalar.ph407.preheader, label %vector.body413

vector.body413:                                   ; preds = %vector.memcheck, %vector.body413
  %index414 = phi i64 [ %index.next416, %vector.body413 ], [ 0, %vector.memcheck ]
  %336 = getelementptr inbounds float, ptr %32, i64 %index414
  %wide.load = load <4 x float>, ptr %336, align 4, !tbaa !19
  %337 = getelementptr inbounds i32, ptr %35, i64 %index414
  %wide.load415 = load <4 x i32>, ptr %337, align 4, !tbaa !16
  %338 = uitofp <4 x i32> %wide.load415 to <4 x float>
  %339 = fdiv <4 x float> %wide.load, %338
  %340 = getelementptr inbounds float, ptr %invariant.gep, i64 %index414
  store <4 x float> %339, ptr %340, align 4, !tbaa !19
  %index.next416 = add nuw i64 %index414, 4
  %341 = icmp eq i64 %index.next416, %n.vec411
  br i1 %341, label %middle.block406, label %vector.body413, !llvm.loop !37

middle.block406:                                  ; preds = %vector.body413
  br i1 %cmp.n417, label %._crit_edge215.us234.us.us.us.us.us, label %scalar.ph407.preheader

scalar.ph407.preheader:                           ; preds = %middle.block406, %vector.memcheck, %.preheader202.us230.us.us.us.us.us
  %indvars.iv287.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.preheader202.us230.us.us.us.us.us ], [ %n.vec411, %middle.block406 ]
  br i1 %lcmp.mod.not, label %scalar.ph407.prol.loopexit, label %scalar.ph407.prol

scalar.ph407.prol:                                ; preds = %scalar.ph407.preheader
  %342 = getelementptr inbounds float, ptr %32, i64 %indvars.iv287.ph
  %343 = load float, ptr %342, align 4, !tbaa !19
  %344 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv287.ph
  %345 = load i32, ptr %344, align 4, !tbaa !16
  %346 = uitofp i32 %345 to float
  %347 = fdiv float %343, %346
  %gep.prol = getelementptr inbounds float, ptr %invariant.gep, i64 %indvars.iv287.ph
  store float %347, ptr %gep.prol, align 4, !tbaa !19
  %indvars.iv.next288.prol = or disjoint i64 %indvars.iv287.ph, 1
  br label %scalar.ph407.prol.loopexit

scalar.ph407.prol.loopexit:                       ; preds = %scalar.ph407.prol, %scalar.ph407.preheader
  %indvars.iv287.unr = phi i64 [ %indvars.iv287.ph, %scalar.ph407.preheader ], [ %indvars.iv.next288.prol, %scalar.ph407.prol ]
  %348 = icmp eq i64 %indvars.iv287.ph, %268
  br i1 %348, label %._crit_edge215.us234.us.us.us.us.us, label %scalar.ph407

scalar.ph407:                                     ; preds = %scalar.ph407.prol.loopexit, %scalar.ph407
  %indvars.iv287 = phi i64 [ %indvars.iv.next288.1, %scalar.ph407 ], [ %indvars.iv287.unr, %scalar.ph407.prol.loopexit ]
  %349 = getelementptr inbounds float, ptr %32, i64 %indvars.iv287
  %350 = load float, ptr %349, align 4, !tbaa !19
  %351 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv287
  %352 = load i32, ptr %351, align 4, !tbaa !16
  %353 = uitofp i32 %352 to float
  %354 = fdiv float %350, %353
  %gep = getelementptr inbounds float, ptr %invariant.gep, i64 %indvars.iv287
  store float %354, ptr %gep, align 4, !tbaa !19
  %indvars.iv.next288 = add nuw nsw i64 %indvars.iv287, 1
  %355 = getelementptr inbounds float, ptr %32, i64 %indvars.iv.next288
  %356 = load float, ptr %355, align 4, !tbaa !19
  %357 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv.next288
  %358 = load i32, ptr %357, align 4, !tbaa !16
  %359 = uitofp i32 %358 to float
  %360 = fdiv float %356, %359
  %gep.1 = getelementptr inbounds float, ptr %invariant.gep, i64 %indvars.iv.next288
  store float %360, ptr %gep.1, align 4, !tbaa !19
  %indvars.iv.next288.1 = add nuw nsw i64 %indvars.iv287, 2
  %exitcond291.not.1 = icmp eq i64 %indvars.iv.next288.1, %wide.trip.count290
  br i1 %exitcond291.not.1, label %._crit_edge215.us234.us.us.us.us.us, label %scalar.ph407, !llvm.loop !38

._crit_edge215.us234.us.us.us.us.us:              ; preds = %scalar.ph407.prol.loopexit, %scalar.ph407, %middle.block406
  %indvars.iv.next293 = add nuw nsw i64 %indvars.iv292, 1
  %exitcond296.not = icmp eq i64 %indvars.iv.next293, %wide.trip.count320
  br i1 %exitcond296.not, label %._crit_edge219.split.split.us.us.us.split.us.us.us, label %.preheader202.us230.us.us.us.us.us, !llvm.loop !25

._crit_edge219.split.split.us.us.us.split.us.us.us: ; preds = %._crit_edge215.us234.us.us.us.us.us
  %indvars.iv.next298 = add nuw nsw i64 %indvars.iv297, 1
  %exitcond301.not = icmp eq i64 %indvars.iv.next298, %wide.trip.count325
  br i1 %exitcond301.not, label %._crit_edge.split.us.split.split.us.split.us267.us.us, label %.lr.ph218.us.us249.us265.us.us, !llvm.loop !31

._crit_edge.split.us.split.split.us.split.us267.us.us: ; preds = %._crit_edge219.split.split.us.us.us.split.us.us.us
  %indvars.iv.next303 = add nuw nsw i64 %indvars.iv302, 1
  %exitcond306.not = icmp eq i64 %indvars.iv.next303, %wide.trip.count330
  br i1 %exitcond306.not, label %._crit_edge255, label %.lr.ph.us.us.us271, !llvm.loop !32

.lr.ph254.split.us.split.us.split.split:          ; preds = %.lr.ph254.split.us.split.us.split
  br i1 %40, label %.lr.ph.us.us.us273.preheader, label %._crit_edge255

.lr.ph.us.us.us273.preheader:                     ; preds = %.lr.ph254.split.us.split.us.split.split
  %wide.trip.count = zext nneg i32 %20 to i64
  %min.iters.check = icmp ult i32 %20, 8
  %n.vec = and i64 %wide.trip.count, 2147483640
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br label %.lr.ph.us.us.us273

.lr.ph.us.us.us273:                               ; preds = %.lr.ph.us.us.us273.preheader, %._crit_edge.split.us.split.split.split.us.us.us.us
  %.0181253.us.us.us274 = phi i32 [ %370, %._crit_edge.split.us.split.split.split.us.us.us.us ], [ 0, %.lr.ph.us.us.us273.preheader ]
  br label %.lr.ph218.us.us251.us.us.us

.lr.ph218.us.us251.us.us.us:                      ; preds = %._crit_edge219.split.split.split.us.us.us.us.us.us, %.lr.ph.us.us.us273
  %.0182240.us.us252.us.us.us = phi i32 [ 0, %.lr.ph.us.us.us273 ], [ %369, %._crit_edge219.split.split.split.us.us.us.us.us.us ]
  br label %.lr.ph.us238.us.us.us.us.us

.lr.ph.us238.us.us.us.us.us:                      ; preds = %..preheader202_crit_edge.us239.us.us.us.us.us, %.lr.ph218.us.us251.us.us.us
  %.0183216.us235.us.us.us.us.us = phi i32 [ 0, %.lr.ph218.us.us251.us.us.us ], [ %368, %..preheader202_crit_edge.us239.us.us.us.us.us ]
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.lr.ph.us238.us.us.us.us.us, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph.us238.us.us.us.us.us ]
  %361 = getelementptr inbounds float, ptr %32, i64 %index
  %362 = getelementptr inbounds i8, ptr %361, i64 16
  store <4 x float> zeroinitializer, ptr %361, align 4, !tbaa !19
  store <4 x float> zeroinitializer, ptr %362, align 4, !tbaa !19
  %363 = getelementptr inbounds i32, ptr %35, i64 %index
  %364 = getelementptr inbounds i8, ptr %363, i64 16
  store <4 x i32> zeroinitializer, ptr %363, align 4, !tbaa !16
  store <4 x i32> zeroinitializer, ptr %364, align 4, !tbaa !16
  %index.next = add nuw i64 %index, 8
  %365 = icmp eq i64 %index.next, %n.vec
  br i1 %365, label %middle.block, label %vector.body, !llvm.loop !39

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

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph.us238.us.us.us.us.us
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.us238.us.us.us.us.us ], [ %n.vec, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %366 = getelementptr inbounds float, ptr %32, i64 %indvars.iv
  store float 0.000000e+00, ptr %366, align 4, !tbaa !19
  %367 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv
  store i32 0, ptr %367, align 4, !tbaa !16
  %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 %..preheader202_crit_edge.us239.us.us.us.us.us, label %scalar.ph, !llvm.loop !40

..preheader202_crit_edge.us239.us.us.us.us.us:    ; preds = %scalar.ph, %middle.block
  %368 = add nuw nsw i32 %.0183216.us235.us.us.us.us.us, 1
  %exitcond284.not = icmp eq i32 %368, %16
  br i1 %exitcond284.not, label %._crit_edge219.split.split.split.us.us.us.us.us.us, label %.lr.ph.us238.us.us.us.us.us, !llvm.loop !25

._crit_edge219.split.split.split.us.us.us.us.us.us: ; preds = %..preheader202_crit_edge.us239.us.us.us.us.us
  %369 = add nuw nsw i32 %.0182240.us.us252.us.us.us, 1
  %exitcond285.not = icmp eq i32 %369, %14
  br i1 %exitcond285.not, label %._crit_edge.split.us.split.split.split.us.us.us.us, label %.lr.ph218.us.us251.us.us.us, !llvm.loop !31

._crit_edge.split.us.split.split.split.us.us.us.us: ; preds = %._crit_edge219.split.split.split.us.us.us.us.us.us
  %370 = add nuw nsw i32 %.0181253.us.us.us274, 1
  %exitcond286.not = icmp eq i32 %370, %10
  br i1 %exitcond286.not, label %._crit_edge255, label %.lr.ph.us.us.us273, !llvm.loop !32

._crit_edge255:                                   ; preds = %._crit_edge.split.us.split.split.split.us.us.us.us, %._crit_edge.split.us.split.split.us.split.us267.us.us, %._crit_edge.split.us.split.split.us.split.us.us.us.us.us, %._crit_edge.split.us.split.us.us.us.us, %.lr.ph254.split.us.split.us.split.split, %.lr.ph254, %.preheader203
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %7) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #5
  ret void

371:                                              ; preds = %6
  %372 = landingpad { ptr, i32 }
          cleanup
  br label %375

373:                                              ; preds = %33
  %374 = landingpad { ptr, i32 }
          cleanup
  br label %375

375:                                              ; preds = %373, %371
  %.pn = phi { ptr, i32 } [ %374, %373 ], [ %372, %371 ]
  call void @_ZN5micro9framework13ScratchBufferD1Ev(ptr noundef nonnull align 8 dereferenceable(12) %7) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #5
  resume { ptr, i32 } %.pn
}

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

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

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


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