; LLVM IR from ermig1979/Simd :: src/Simd (SimdBaseSynetConvolution32fGemm)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.SimdConvolutionParameters = type { i64, i64, i64, i32, i32, i64, i64, i64, i32, i32, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i32 }

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Simd4Base25SynetConvolution32fGemmNT8ImgToRowEPKfRKNS_9ConvParamEPf(ptr noundef %0, ptr noundef nonnull align 8 dereferenceable(180) %1, ptr noundef %2) #2 align 2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i32, align 4
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  %34 = load ptr, ptr %5, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %34, i32 0, i32 11
  %36 = load i64, ptr %35, align 8, !tbaa !9
  %37 = load ptr, ptr %5, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %37, i32 0, i32 10
  %39 = load i64, ptr %38, align 8, !tbaa !15
  %40 = mul i64 %36, %39
  %41 = load ptr, ptr %5, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %41, i32 0, i32 0
  %43 = load i64, ptr %42, align 8, !tbaa !16
  %44 = mul i64 %40, %43
  store i64 %44, ptr %7, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  %45 = load ptr, ptr %5, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %45, i32 0, i32 6
  %47 = load i64, ptr %46, align 8, !tbaa !18
  %48 = load ptr, ptr %5, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %48, i32 0, i32 7
  %50 = load i64, ptr %49, align 8, !tbaa !19
  %51 = mul i64 %47, %50
  store i64 %51, ptr %8, align 8, !tbaa !17
  %52 = load ptr, ptr %5, align 8, !tbaa !5
  %53 = call noundef zeroext i1 @_ZNK4Simd9ConvParam10IsDilationEm(ptr noundef nonnull align 8 dereferenceable(180) %52, i64 noundef 1)
  br i1 %53, label %54, label %220

54:                                               ; preds = %3
  %55 = load ptr, ptr %5, align 8, !tbaa !5
  %56 = call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsStrideEm(ptr noundef nonnull align 8 dereferenceable(180) %55, i64 noundef 1)
  br i1 %56, label %57, label %220

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

60:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  store i64 0, ptr %9, align 8, !tbaa !17
  br label %61

61:                                               ; preds = %87, %60
  %62 = load i64, ptr %9, align 8, !tbaa !17
  %63 = load i64, ptr %8, align 8, !tbaa !17
  %64 = icmp ult i64 %62, %63
  br i1 %64, label %66, label %65

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

66:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  store i64 0, ptr %11, align 8, !tbaa !17
  br label %67

67:                                               ; preds = %83, %66
  %68 = load i64, ptr %11, align 8, !tbaa !17
  %69 = load i64, ptr %7, align 8, !tbaa !17
  %70 = icmp ult i64 %68, %69
  br i1 %70, label %72, label %71

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

72:                                               ; preds = %67
  %73 = load ptr, ptr %4, align 8, !tbaa !5
  %74 = load i64, ptr %11, align 8, !tbaa !17
  %75 = load i64, ptr %8, align 8, !tbaa !17
  %76 = mul i64 %74, %75
  %77 = load i64, ptr %9, align 8, !tbaa !17
  %78 = add i64 %76, %77
  %79 = getelementptr inbounds float, ptr %73, i64 %78
  %80 = load float, ptr %79, align 4, !tbaa !20
  %81 = load ptr, ptr %6, align 8, !tbaa !5
  %82 = getelementptr inbounds float, ptr %81, i32 1
  store ptr %82, ptr %6, align 8, !tbaa !5
  store float %80, ptr %81, align 4, !tbaa !20
  br label %83

83:                                               ; preds = %72
  %84 = load i64, ptr %11, align 8, !tbaa !17
  %85 = add i64 %84, 1
  store i64 %85, ptr %11, align 8, !tbaa !17
  br label %67, !llvm.loop !22

86:                                               ; preds = %71
  br label %87

87:                                               ; preds = %86
  %88 = load i64, ptr %9, align 8, !tbaa !17
  %89 = add i64 %88, 1
  store i64 %89, ptr %9, align 8, !tbaa !17
  br label %61, !llvm.loop !24

90:                                               ; preds = %65
  br label %219

91:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  store i64 0, ptr %12, align 8, !tbaa !17
  br label %92

92:                                               ; preds = %215, %91
  %93 = load i64, ptr %12, align 8, !tbaa !17
  %94 = load ptr, ptr %5, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %94, i32 0, i32 6
  %96 = load i64, ptr %95, align 8, !tbaa !18
  %97 = icmp ult i64 %93, %96
  br i1 %97, label %99, label %98

98:                                               ; preds = %92
  store i32 8, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  br label %218

99:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  %100 = load i64, ptr %12, align 8, !tbaa !17
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %101, i32 0, i32 16
  %103 = load i64, ptr %102, align 8, !tbaa !25
  %104 = sub i64 %100, %103
  store i64 %104, ptr %13, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  store i64 0, ptr %14, align 8, !tbaa !17
  br label %105

105:                                              ; preds = %211, %99
  %106 = load i64, ptr %14, align 8, !tbaa !17
  %107 = load ptr, ptr %5, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %107, i32 0, i32 7
  %109 = load i64, ptr %108, align 8, !tbaa !19
  %110 = icmp ult i64 %106, %109
  br i1 %110, label %112, label %111

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

112:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  %113 = load i64, ptr %14, align 8, !tbaa !17
  %114 = load ptr, ptr %5, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %114, i32 0, i32 17
  %116 = load i64, ptr %115, align 8, !tbaa !26
  %117 = sub i64 %113, %116
  store i64 %117, ptr %15, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  store i64 0, ptr %16, align 8, !tbaa !17
  br label %118

118:                                              ; preds = %207, %112
  %119 = load i64, ptr %16, align 8, !tbaa !17
  %120 = load ptr, ptr %5, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %120, i32 0, i32 0
  %122 = load i64, ptr %121, align 8, !tbaa !16
  %123 = icmp ult i64 %119, %122
  br i1 %123, label %125, label %124

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

125:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  store i64 0, ptr %17, align 8, !tbaa !17
  br label %126

126:                                              ; preds = %203, %125
  %127 = load i64, ptr %17, align 8, !tbaa !17
  %128 = load ptr, ptr %5, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %128, i32 0, i32 10
  %130 = load i64, ptr %129, align 8, !tbaa !15
  %131 = icmp ult i64 %127, %130
  br i1 %131, label %133, label %132

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

133:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  %134 = load i64, ptr %13, align 8, !tbaa !17
  %135 = load i64, ptr %17, align 8, !tbaa !17
  %136 = add i64 %134, %135
  store i64 %136, ptr %18, align 8, !tbaa !17
  %137 = load i64, ptr %18, align 8, !tbaa !17
  %138 = load ptr, ptr %5, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %138, i32 0, i32 1
  %140 = load i64, ptr %139, align 8, !tbaa !27
  %141 = icmp ult i64 %137, %140
  br i1 %141, label %142, label %187

142:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  %143 = load ptr, ptr %4, align 8, !tbaa !5
  %144 = load i64, ptr %16, align 8, !tbaa !17
  %145 = load ptr, ptr %5, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %145, i32 0, i32 1
  %147 = load i64, ptr %146, align 8, !tbaa !27
  %148 = mul i64 %144, %147
  %149 = load i64, ptr %18, align 8, !tbaa !17
  %150 = add i64 %148, %149
  %151 = load ptr, ptr %5, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %151, i32 0, i32 2
  %153 = load i64, ptr %152, align 8, !tbaa !28
  %154 = mul i64 %150, %153
  %155 = getelementptr inbounds float, ptr %143, i64 %154
  store ptr %155, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  store i64 0, ptr %20, align 8, !tbaa !17
  br label %156

156:                                              ; preds = %183, %142
  %157 = load i64, ptr %20, align 8, !tbaa !17
  %158 = load ptr, ptr %5, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %158, i32 0, i32 11
  %160 = load i64, ptr %159, align 8, !tbaa !9
  %161 = icmp ult i64 %157, %160
  br i1 %161, label %163, label %162

162:                                              ; preds = %156
  store i32 20, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  br label %186

163:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  %164 = load i64, ptr %15, align 8, !tbaa !17
  %165 = load i64, ptr %20, align 8, !tbaa !17
  %166 = add i64 %164, %165
  store i64 %166, ptr %21, align 8, !tbaa !17
  %167 = load i64, ptr %21, align 8, !tbaa !17
  %168 = load ptr, ptr %5, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %168, i32 0, i32 2
  %170 = load i64, ptr %169, align 8, !tbaa !28
  %171 = icmp ult i64 %167, %170
  br i1 %171, label %172, label %179

172:                                              ; preds = %163
  %173 = load ptr, ptr %19, align 8, !tbaa !5
  %174 = load i64, ptr %21, align 8, !tbaa !17
  %175 = getelementptr inbounds float, ptr %173, i64 %174
  %176 = load float, ptr %175, align 4, !tbaa !20
  %177 = load ptr, ptr %6, align 8, !tbaa !5
  %178 = getelementptr inbounds float, ptr %177, i32 1
  store ptr %178, ptr %6, align 8, !tbaa !5
  store float %176, ptr %177, align 4, !tbaa !20
  br label %182

179:                                              ; preds = %163
  %180 = load ptr, ptr %6, align 8, !tbaa !5
  %181 = getelementptr inbounds float, ptr %180, i32 1
  store ptr %181, ptr %6, align 8, !tbaa !5
  store float 0.000000e+00, ptr %180, align 4, !tbaa !20
  br label %182

182:                                              ; preds = %179, %172
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  br label %183

183:                                              ; preds = %182
  %184 = load i64, ptr %20, align 8, !tbaa !17
  %185 = add i64 %184, 1
  store i64 %185, ptr %20, align 8, !tbaa !17
  br label %156, !llvm.loop !29

186:                                              ; preds = %162
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  br label %202

187:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  store i64 0, ptr %22, align 8, !tbaa !17
  br label %188

188:                                              ; preds = %198, %187
  %189 = load i64, ptr %22, align 8, !tbaa !17
  %190 = load ptr, ptr %5, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %190, i32 0, i32 11
  %192 = load i64, ptr %191, align 8, !tbaa !9
  %193 = icmp ult i64 %189, %192
  br i1 %193, label %195, label %194

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

195:                                              ; preds = %188
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  %197 = getelementptr inbounds float, ptr %196, i32 1
  store ptr %197, ptr %6, align 8, !tbaa !5
  store float 0.000000e+00, ptr %196, align 4, !tbaa !20
  br label %198

198:                                              ; preds = %195
  %199 = load i64, ptr %22, align 8, !tbaa !17
  %200 = add i64 %199, 1
  store i64 %200, ptr %22, align 8, !tbaa !17
  br label %188, !llvm.loop !30

201:                                              ; preds = %194
  br label %202

202:                                              ; preds = %201, %186
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  br label %203

203:                                              ; preds = %202
  %204 = load i64, ptr %17, align 8, !tbaa !17
  %205 = add i64 %204, 1
  store i64 %205, ptr %17, align 8, !tbaa !17
  br label %126, !llvm.loop !31

206:                                              ; preds = %132
  br label %207

207:                                              ; preds = %206
  %208 = load i64, ptr %16, align 8, !tbaa !17
  %209 = add i64 %208, 1
  store i64 %209, ptr %16, align 8, !tbaa !17
  br label %118, !llvm.loop !32

210:                                              ; preds = %124
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  br label %211

211:                                              ; preds = %210
  %212 = load i64, ptr %14, align 8, !tbaa !17
  %213 = add i64 %212, 1
  store i64 %213, ptr %14, align 8, !tbaa !17
  br label %105, !llvm.loop !33

214:                                              ; preds = %111
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  br label %215

215:                                              ; preds = %214
  %216 = load i64, ptr %12, align 8, !tbaa !17
  %217 = add i64 %216, 1
  store i64 %217, ptr %12, align 8, !tbaa !17
  br label %92, !llvm.loop !34

218:                                              ; preds = %98
  br label %219

219:                                              ; preds = %218, %90
  br label %364

220:                                              ; preds = %54, %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  store i64 0, ptr %23, align 8, !tbaa !17
  br label %221

221:                                              ; preds = %360, %220
  %222 = load i64, ptr %23, align 8, !tbaa !17
  %223 = load ptr, ptr %5, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %223, i32 0, i32 6
  %225 = load i64, ptr %224, align 8, !tbaa !18
  %226 = icmp ult i64 %222, %225
  br i1 %226, label %228, label %227

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

228:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  %229 = load i64, ptr %23, align 8, !tbaa !17
  %230 = load ptr, ptr %5, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %230, i32 0, i32 14
  %232 = load i64, ptr %231, align 8, !tbaa !35
  %233 = mul i64 %229, %232
  %234 = load ptr, ptr %5, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %234, i32 0, i32 16
  %236 = load i64, ptr %235, align 8, !tbaa !25
  %237 = sub i64 %233, %236
  store i64 %237, ptr %24, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  store i64 0, ptr %25, align 8, !tbaa !17
  br label %238

238:                                              ; preds = %356, %228
  %239 = load i64, ptr %25, align 8, !tbaa !17
  %240 = load ptr, ptr %5, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %240, i32 0, i32 7
  %242 = load i64, ptr %241, align 8, !tbaa !19
  %243 = icmp ult i64 %239, %242
  br i1 %243, label %245, label %244

244:                                              ; preds = %238
  store i32 29, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  br label %359

245:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  %246 = load i64, ptr %25, align 8, !tbaa !17
  %247 = load ptr, ptr %5, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %247, i32 0, i32 15
  %249 = load i64, ptr %248, align 8, !tbaa !36
  %250 = mul i64 %246, %249
  %251 = load ptr, ptr %5, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %251, i32 0, i32 17
  %253 = load i64, ptr %252, align 8, !tbaa !26
  %254 = sub i64 %250, %253
  store i64 %254, ptr %26, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  store i64 0, ptr %27, align 8, !tbaa !17
  br label %255

255:                                              ; preds = %352, %245
  %256 = load i64, ptr %27, align 8, !tbaa !17
  %257 = load ptr, ptr %5, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %257, i32 0, i32 0
  %259 = load i64, ptr %258, align 8, !tbaa !16
  %260 = icmp ult i64 %256, %259
  br i1 %260, label %262, label %261

261:                                              ; preds = %255
  store i32 32, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  br label %355

262:                                              ; preds = %255
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  store i64 0, ptr %28, align 8, !tbaa !17
  br label %263

263:                                              ; preds = %348, %262
  %264 = load i64, ptr %28, align 8, !tbaa !17
  %265 = load ptr, ptr %5, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %265, i32 0, i32 10
  %267 = load i64, ptr %266, align 8, !tbaa !15
  %268 = icmp ult i64 %264, %267
  br i1 %268, label %270, label %269

269:                                              ; preds = %263
  store i32 35, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  br label %351

270:                                              ; preds = %263
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  %271 = load i64, ptr %24, align 8, !tbaa !17
  %272 = load i64, ptr %28, align 8, !tbaa !17
  %273 = load ptr, ptr %5, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %273, i32 0, i32 12
  %275 = load i64, ptr %274, align 8, !tbaa !37
  %276 = mul i64 %272, %275
  %277 = add i64 %271, %276
  store i64 %277, ptr %29, align 8, !tbaa !17
  %278 = load i64, ptr %29, align 8, !tbaa !17
  %279 = load ptr, ptr %5, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %279, i32 0, i32 1
  %281 = load i64, ptr %280, align 8, !tbaa !27
  %282 = icmp ult i64 %278, %281
  br i1 %282, label %283, label %332

283:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  %284 = load ptr, ptr %4, align 8, !tbaa !5
  %285 = load i64, ptr %27, align 8, !tbaa !17
  %286 = load ptr, ptr %5, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %286, i32 0, i32 1
  %288 = load i64, ptr %287, align 8, !tbaa !27
  %289 = mul i64 %285, %288
  %290 = load i64, ptr %29, align 8, !tbaa !17
  %291 = add i64 %289, %290
  %292 = load ptr, ptr %5, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %292, i32 0, i32 2
  %294 = load i64, ptr %293, align 8, !tbaa !28
  %295 = mul i64 %291, %294
  %296 = getelementptr inbounds float, ptr %284, i64 %295
  store ptr %296, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  store i64 0, ptr %31, align 8, !tbaa !17
  br label %297

297:                                              ; preds = %328, %283
  %298 = load i64, ptr %31, align 8, !tbaa !17
  %299 = load ptr, ptr %5, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %299, i32 0, i32 11
  %301 = load i64, ptr %300, align 8, !tbaa !9
  %302 = icmp ult i64 %298, %301
  br i1 %302, label %304, label %303

303:                                              ; preds = %297
  store i32 38, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  br label %331

304:                                              ; preds = %297
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  %305 = load i64, ptr %26, align 8, !tbaa !17
  %306 = load i64, ptr %31, align 8, !tbaa !17
  %307 = load ptr, ptr %5, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %307, i32 0, i32 13
  %309 = load i64, ptr %308, align 8, !tbaa !38
  %310 = mul i64 %306, %309
  %311 = add i64 %305, %310
  store i64 %311, ptr %32, align 8, !tbaa !17
  %312 = load i64, ptr %32, align 8, !tbaa !17
  %313 = load ptr, ptr %5, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %313, i32 0, i32 2
  %315 = load i64, ptr %314, align 8, !tbaa !28
  %316 = icmp ult i64 %312, %315
  br i1 %316, label %317, label %324

317:                                              ; preds = %304
  %318 = load ptr, ptr %30, align 8, !tbaa !5
  %319 = load i64, ptr %32, align 8, !tbaa !17
  %320 = getelementptr inbounds float, ptr %318, i64 %319
  %321 = load float, ptr %320, align 4, !tbaa !20
  %322 = load ptr, ptr %6, align 8, !tbaa !5
  %323 = getelementptr inbounds float, ptr %322, i32 1
  store ptr %323, ptr %6, align 8, !tbaa !5
  store float %321, ptr %322, align 4, !tbaa !20
  br label %327

324:                                              ; preds = %304
  %325 = load ptr, ptr %6, align 8, !tbaa !5
  %326 = getelementptr inbounds float, ptr %325, i32 1
  store ptr %326, ptr %6, align 8, !tbaa !5
  store float 0.000000e+00, ptr %325, align 4, !tbaa !20
  br label %327

327:                                              ; preds = %324, %317
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  br label %328

328:                                              ; preds = %327
  %329 = load i64, ptr %31, align 8, !tbaa !17
  %330 = add i64 %329, 1
  store i64 %330, ptr %31, align 8, !tbaa !17
  br label %297, !llvm.loop !39

331:                                              ; preds = %303
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  br label %347

332:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  store i64 0, ptr %33, align 8, !tbaa !17
  br label %333

333:                                              ; preds = %343, %332
  %334 = load i64, ptr %33, align 8, !tbaa !17
  %335 = load ptr, ptr %5, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.SimdConvolutionParameters, ptr %335, i32 0, i32 11
  %337 = load i64, ptr %336, align 8, !tbaa !9
  %338 = icmp ult i64 %334, %337
  br i1 %338, label %340, label %339

339:                                              ; preds = %333
  store i32 41, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  br label %346

340:                                              ; preds = %333
  %341 = load ptr, ptr %6, align 8, !tbaa !5
  %342 = getelementptr inbounds float, ptr %341, i32 1
  store ptr %342, ptr %6, align 8, !tbaa !5
  store float 0.000000e+00, ptr %341, align 4, !tbaa !20
  br label %343

343:                                              ; preds = %340
  %344 = load i64, ptr %33, align 8, !tbaa !17
  %345 = add i64 %344, 1
  store i64 %345, ptr %33, align 8, !tbaa !17
  br label %333, !llvm.loop !40

346:                                              ; preds = %339
  br label %347

347:                                              ; preds = %346, %331
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  br label %348

348:                                              ; preds = %347
  %349 = load i64, ptr %28, align 8, !tbaa !17
  %350 = add i64 %349, 1
  store i64 %350, ptr %28, align 8, !tbaa !17
  br label %263, !llvm.loop !41

351:                                              ; preds = %269
  br label %352

352:                                              ; preds = %351
  %353 = load i64, ptr %27, align 8, !tbaa !17
  %354 = add i64 %353, 1
  store i64 %354, ptr %27, align 8, !tbaa !17
  br label %255, !llvm.loop !42

355:                                              ; preds = %261
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  br label %356

356:                                              ; preds = %355
  %357 = load i64, ptr %25, align 8, !tbaa !17
  %358 = add i64 %357, 1
  store i64 %358, ptr %25, align 8, !tbaa !17
  br label %238, !llvm.loop !43

359:                                              ; preds = %244
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  br label %360

360:                                              ; preds = %359
  %361 = load i64, ptr %23, align 8, !tbaa !17
  %362 = add i64 %361, 1
  store i64 %362, ptr %23, align 8, !tbaa !17
  br label %221, !llvm.loop !44

363:                                              ; preds = %227
  br label %364

364:                                              ; preds = %363, %219
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  ret void
}

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

!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, !11, i64 72}
!10 = !{!"_ZTS25SimdConvolutionParameters", !11, i64 0, !11, i64 8, !11, i64 16, !12, i64 24, !13, i64 28, !11, i64 32, !11, i64 40, !11, i64 48, !12, i64 56, !13, i64 60, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !14, i64 152}
!11 = !{!"long", !7, i64 0}
!12 = !{!"_ZTS18SimdTensorDataType", !7, i64 0}
!13 = !{!"_ZTS20SimdTensorFormatType", !7, i64 0}
!14 = !{!"_ZTS29SimdConvolutionActivationType", !7, i64 0}
!15 = !{!10, !11, i64 64}
!16 = !{!10, !11, i64 0}
!17 = !{!11, !11, i64 0}
!18 = !{!10, !11, i64 40}
!19 = !{!10, !11, i64 48}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = !{!10, !11, i64 112}
!26 = !{!10, !11, i64 120}
!27 = !{!10, !11, i64 8}
!28 = !{!10, !11, i64 16}
!29 = distinct !{!29, !23}
!30 = distinct !{!30, !23}
!31 = distinct !{!31, !23}
!32 = distinct !{!32, !23}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !23}
!35 = !{!10, !11, i64 96}
!36 = !{!10, !11, i64 104}
!37 = !{!10, !11, i64 80}
!38 = !{!10, !11, i64 88}
!39 = distinct !{!39, !23}
!40 = distinct !{!40, !23}
!41 = distinct !{!41, !23}
!42 = distinct !{!42, !23}
!43 = distinct !{!43, !23}
!44 = distinct !{!44, !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"

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

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

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN4Simd4Base25SynetConvolution32fGemmNT8ImgToRowEPKfRKNS_9ConvParamEPf(ptr nocapture noundef readonly %0, ptr noundef nonnull align 8 dereferenceable(180) %1, ptr nocapture noundef writeonly %2) local_unnamed_addr #1 align 2 {
  %4 = getelementptr inbounds i8, ptr %1, i64 72
  %5 = load i64, ptr %4, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %1, i64 64
  %7 = load i64, ptr %6, align 8, !tbaa !13
  %8 = mul i64 %7, %5
  %9 = load i64, ptr %1, align 8, !tbaa !14
  %10 = mul i64 %8, %9
  %11 = getelementptr inbounds i8, ptr %1, i64 40
  %12 = load i64, ptr %11, align 8, !tbaa !15
  %13 = getelementptr inbounds i8, ptr %1, i64 48
  %14 = load i64, ptr %13, align 8, !tbaa !16
  %15 = mul i64 %14, %12
  %16 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam10IsDilationEm(ptr noundef nonnull align 8 dereferenceable(180) %1, i64 noundef 1)
  br i1 %16, label %17, label %90

17:                                               ; preds = %3
  %18 = tail call noundef zeroext i1 @_ZNK4Simd9ConvParam8IsStrideEm(ptr noundef nonnull align 8 dereferenceable(180) %1, i64 noundef 1)
  br i1 %18, label %19, label %90

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

.preheader129:                                    ; preds = %19
  %21 = load i64, ptr %11, align 8, !tbaa !15
  %.not266 = icmp eq i64 %21, 0
  br i1 %.not266, label %.loopexit, label %.lr.ph238

.lr.ph238:                                        ; preds = %.preheader129
  %22 = getelementptr inbounds i8, ptr %1, i64 112
  %23 = load i64, ptr %22, align 8, !tbaa !17
  %24 = load i64, ptr %13, align 8, !tbaa !16
  %.not267 = icmp eq i64 %24, 0
  %25 = getelementptr inbounds i8, ptr %1, i64 120
  %26 = load i64, ptr %25, align 8
  %27 = load i64, ptr %1, align 8
  %28 = getelementptr inbounds i8, ptr %1, i64 8
  %29 = getelementptr inbounds i8, ptr %1, i64 16
  %.not268 = icmp eq i64 %27, 0
  %or.cond = select i1 %.not267, i1 true, i1 %.not268
  br i1 %or.cond, label %.loopexit, label %.lr.ph.us240.us

.lr.ph.us240.us:                                  ; preds = %.lr.ph238, %._crit_edge.split.us.us.us247
  %.2237.us.us = phi ptr [ %.us-phi235.us.us, %._crit_edge.split.us.us.us247 ], [ %2, %.lr.ph238 ]
  %.0109236.us.us = phi i64 [ %32, %._crit_edge.split.us.us.us247 ], [ 0, %.lr.ph238 ]
  %30 = sub i64 %.0109236.us.us, %23
  %31 = load i64, ptr %6, align 8
  %.not269 = icmp eq i64 %31, 0
  br i1 %.not269, label %._crit_edge.split.us.us.us247, label %.preheader128.lr.ph.us.us.us.us

._crit_edge.split.us.us.us247:                    ; preds = %._crit_edge218.split.us.us.us.us.us, %.lr.ph.us240.us
  %.us-phi235.us.us = phi ptr [ %.2237.us.us, %.lr.ph.us240.us ], [ %.us-phi.us.us.us.us.us251, %._crit_edge218.split.us.us.us.us.us ]
  %32 = add nuw i64 %.0109236.us.us, 1
  %exitcond308.not = icmp eq i64 %32, %21
  br i1 %exitcond308.not, label %.loopexit, label %.lr.ph.us240.us, !llvm.loop !18

.preheader128.lr.ph.us.us.us.us:                  ; preds = %.lr.ph.us240.us, %._crit_edge218.split.us.us.us.us.us
  %.3228.us.us.us.us = phi ptr [ %.us-phi.us.us.us.us.us251, %._crit_edge218.split.us.us.us.us.us ], [ %.2237.us.us, %.lr.ph.us240.us ]
  %.0112227.us.us.us.us = phi i64 [ %66, %._crit_edge218.split.us.us.us.us.us ], [ 0, %.lr.ph.us240.us ]
  %33 = sub i64 %.0112227.us.us.us.us, %26
  %34 = load i64, ptr %28, align 8
  br label %.preheader128.us.us.us.us.us

.preheader128.us.us.us.us.us:                     ; preds = %._crit_edge.us.us.us.us.us250, %.preheader128.lr.ph.us.us.us.us
  %.4217.us.us.us.us.us = phi ptr [ %.3228.us.us.us.us, %.preheader128.lr.ph.us.us.us.us ], [ %.us-phi.us.us.us.us.us251, %._crit_edge.us.us.us.us.us250 ]
  %.0114216.us.us.us.us.us = phi i64 [ 0, %.preheader128.lr.ph.us.us.us.us ], [ %40, %._crit_edge.us.us.us.us.us250 ]
  %35 = load i64, ptr %4, align 8
  %.fr270 = freeze i64 %35
  %.not272 = icmp eq i64 %.fr270, 0
  %36 = mul i64 %34, %.0114216.us.us.us.us.us
  %37 = load i64, ptr %29, align 8
  br i1 %.not272, label %._crit_edge.us.us.us.us.us250, label %.lr.ph198.split.us.us.us.us.us.us.preheader

.lr.ph198.split.us.us.us.us.us.us.preheader:      ; preds = %.preheader128.us.us.us.us.us
  %38 = shl nuw i64 %.fr270, 2
  %xtraiter322 = and i64 %.fr270, 1
  %39 = icmp eq i64 %.fr270, 1
  %unroll_iter325 = and i64 %.fr270, -2
  %lcmp.mod323.not = icmp eq i64 %xtraiter322, 0
  br label %.lr.ph198.split.us.us.us.us.us.us

._crit_edge.us.us.us.us.us250:                    ; preds = %.loopexit127.us.us.us.us.us.us, %.preheader128.us.us.us.us.us
  %.us-phi.us.us.us.us.us251 = phi ptr [ %.4217.us.us.us.us.us, %.preheader128.us.us.us.us.us ], [ %.9.us.us.us.us.us.us, %.loopexit127.us.us.us.us.us.us ]
  %40 = add nuw i64 %.0114216.us.us.us.us.us, 1
  %exitcond306.not = icmp eq i64 %40, %27
  br i1 %exitcond306.not, label %._crit_edge218.split.us.us.us.us.us, label %.preheader128.us.us.us.us.us, !llvm.loop !20

.lr.ph198.split.us.us.us.us.us.us:                ; preds = %.lr.ph198.split.us.us.us.us.us.us.preheader, %.loopexit127.us.us.us.us.us.us
  %.5197.us.us.us.us.us.us = phi ptr [ %.9.us.us.us.us.us.us, %.loopexit127.us.us.us.us.us.us ], [ %.4217.us.us.us.us.us, %.lr.ph198.split.us.us.us.us.us.us.preheader ]
  %.0115196.us.us.us.us.us.us = phi i64 [ %51, %.loopexit127.us.us.us.us.us.us ], [ 0, %.lr.ph198.split.us.us.us.us.us.us.preheader ]
  %41 = add i64 %.0115196.us.us.us.us.us.us, %30
  %42 = icmp ult i64 %41, %34
  br i1 %42, label %.lr.ph194.us.us.us.us.us.us, label %.lr.ph.us200.us.us.us.us.us.preheader

.lr.ph194.us.us.us.us.us.us:                      ; preds = %.lr.ph198.split.us.us.us.us.us.us
  %43 = add i64 %36, %41
  %44 = mul i64 %37, %43
  %45 = getelementptr inbounds float, ptr %0, i64 %44
  br i1 %39, label %.loopexit127.us.us.us.us.us.us.loopexit.unr-lcssa, label %.lr.ph194.us.us.us.us.us.us.new

.loopexit127.us.us.us.us.us.us.loopexit.unr-lcssa: ; preds = %64, %.lr.ph194.us.us.us.us.us.us
  %.7.us.us.us.us.us.us.lcssa.ph = phi ptr [ poison, %.lr.ph194.us.us.us.us.us.us ], [ %.7.us.us.us.us.us.us.1, %64 ]
  %.6193.us.us.us.us.us.us.unr = phi ptr [ %.5197.us.us.us.us.us.us, %.lr.ph194.us.us.us.us.us.us ], [ %.7.us.us.us.us.us.us.1, %64 ]
  %.0113192.us.us.us.us.us.us.unr = phi i64 [ 0, %.lr.ph194.us.us.us.us.us.us ], [ %65, %64 ]
  br i1 %lcmp.mod323.not, label %.loopexit127.us.us.us.us.us.us, label %.epil.preheader321

.epil.preheader321:                               ; preds = %.loopexit127.us.us.us.us.us.us.loopexit.unr-lcssa
  %46 = add i64 %.0113192.us.us.us.us.us.us.unr, %33
  %47 = icmp ult i64 %46, %37
  br i1 %47, label %48, label %.loopexit127.us.us.us.us.us.us.loopexit.epilog-lcssa

48:                                               ; preds = %.epil.preheader321
  %49 = getelementptr inbounds float, ptr %45, i64 %46
  %50 = load float, ptr %49, align 4, !tbaa !21
  br label %.loopexit127.us.us.us.us.us.us.loopexit.epilog-lcssa

.loopexit127.us.us.us.us.us.us.loopexit.epilog-lcssa: ; preds = %48, %.epil.preheader321
  %storemerge123.us.us.us.us.us.us.epil = phi float [ %50, %48 ], [ 0.000000e+00, %.epil.preheader321 ]
  %.7.us.us.us.us.us.us.epil = getelementptr inbounds i8, ptr %.6193.us.us.us.us.us.us.unr, i64 4
  store float %storemerge123.us.us.us.us.us.us.epil, ptr %.6193.us.us.us.us.us.us.unr, align 4, !tbaa !21
  br label %.loopexit127.us.us.us.us.us.us

.loopexit127.us.us.us.us.us.us:                   ; preds = %.loopexit127.us.us.us.us.us.us.loopexit.epilog-lcssa, %.loopexit127.us.us.us.us.us.us.loopexit.unr-lcssa, %.lr.ph.us200.us.us.us.us.us.preheader
  %.9.us.us.us.us.us.us = phi ptr [ %scevgep301, %.lr.ph.us200.us.us.us.us.us.preheader ], [ %.7.us.us.us.us.us.us.lcssa.ph, %.loopexit127.us.us.us.us.us.us.loopexit.unr-lcssa ], [ %.7.us.us.us.us.us.us.epil, %.loopexit127.us.us.us.us.us.us.loopexit.epilog-lcssa ]
  %51 = add nuw i64 %.0115196.us.us.us.us.us.us, 1
  %exitcond303.not = icmp eq i64 %51, %31
  br i1 %exitcond303.not, label %._crit_edge.us.us.us.us.us250, label %.lr.ph198.split.us.us.us.us.us.us, !llvm.loop !23

.lr.ph194.us.us.us.us.us.us.new:                  ; preds = %.lr.ph194.us.us.us.us.us.us, %64
  %.6193.us.us.us.us.us.us = phi ptr [ %.7.us.us.us.us.us.us.1, %64 ], [ %.5197.us.us.us.us.us.us, %.lr.ph194.us.us.us.us.us.us ]
  %.0113192.us.us.us.us.us.us = phi i64 [ %65, %64 ], [ 0, %.lr.ph194.us.us.us.us.us.us ]
  %niter326 = phi i64 [ %niter326.next.1, %64 ], [ 0, %.lr.ph194.us.us.us.us.us.us ]
  %52 = add i64 %.0113192.us.us.us.us.us.us, %33
  %53 = icmp ult i64 %52, %37
  br i1 %53, label %54, label %57

54:                                               ; preds = %.lr.ph194.us.us.us.us.us.us.new
  %55 = getelementptr inbounds float, ptr %45, i64 %52
  %56 = load float, ptr %55, align 4, !tbaa !21
  br label %57

57:                                               ; preds = %54, %.lr.ph194.us.us.us.us.us.us.new
  %storemerge123.us.us.us.us.us.us = phi float [ %56, %54 ], [ 0.000000e+00, %.lr.ph194.us.us.us.us.us.us.new ]
  %.7.us.us.us.us.us.us = getelementptr inbounds i8, ptr %.6193.us.us.us.us.us.us, i64 4
  store float %storemerge123.us.us.us.us.us.us, ptr %.6193.us.us.us.us.us.us, align 4, !tbaa !21
  %58 = or disjoint i64 %.0113192.us.us.us.us.us.us, 1
  %59 = add i64 %58, %33
  %60 = icmp ult i64 %59, %37
  br i1 %60, label %61, label %64

61:                                               ; preds = %57
  %62 = getelementptr inbounds float, ptr %45, i64 %59
  %63 = load float, ptr %62, align 4, !tbaa !21
  br label %64

64:                                               ; preds = %61, %57
  %storemerge123.us.us.us.us.us.us.1 = phi float [ %63, %61 ], [ 0.000000e+00, %57 ]
  %.7.us.us.us.us.us.us.1 = getelementptr inbounds i8, ptr %.6193.us.us.us.us.us.us, i64 8
  store float %storemerge123.us.us.us.us.us.us.1, ptr %.7.us.us.us.us.us.us, align 4, !tbaa !21
  %65 = add nuw i64 %.0113192.us.us.us.us.us.us, 2
  %niter326.next.1 = add i64 %niter326, 2
  %niter326.ncmp.1 = icmp eq i64 %niter326.next.1, %unroll_iter325
  br i1 %niter326.ncmp.1, label %.loopexit127.us.us.us.us.us.us.loopexit.unr-lcssa, label %.lr.ph194.us.us.us.us.us.us.new, !llvm.loop !24

.lr.ph.us200.us.us.us.us.us.preheader:            ; preds = %.lr.ph198.split.us.us.us.us.us.us
  tail call void @llvm.memset.p0.i64(ptr align 4 %.5197.us.us.us.us.us.us, i8 0, i64 %38, i1 false), !tbaa !21
  %scevgep301 = getelementptr i8, ptr %.5197.us.us.us.us.us.us, i64 %38
  br label %.loopexit127.us.us.us.us.us.us

._crit_edge218.split.us.us.us.us.us:              ; preds = %._crit_edge.us.us.us.us.us250
  %66 = add nuw i64 %.0112227.us.us.us.us, 1
  %exitcond307.not = icmp eq i64 %66, %24
  br i1 %exitcond307.not, label %._crit_edge.split.us.us.us247, label %.preheader128.lr.ph.us.us.us.us, !llvm.loop !25

.preheader124:                                    ; preds = %19
  %.not273 = icmp eq i64 %15, 0
  %.not274 = icmp eq i64 %10, 0
  %or.cond313 = select i1 %.not273, i1 true, i1 %.not274
  br i1 %or.cond313, label %.loopexit, label %.preheader.us.preheader

.preheader.us.preheader:                          ; preds = %.preheader124
  %67 = add i64 %10, -1
  %xtraiter328 = and i64 %10, 3
  %68 = icmp ult i64 %67, 3
  %unroll_iter331 = and i64 %10, -4
  %lcmp.mod329.not = icmp eq i64 %xtraiter328, 0
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge.us
  %.0102258.us = phi ptr [ %.lcssa, %._crit_edge.us ], [ %2, %.preheader.us.preheader ]
  %.0104257.us = phi i64 [ %89, %._crit_edge.us ], [ 0, %.preheader.us.preheader ]
  %invariant.gep.us = getelementptr float, ptr %0, i64 %.0104257.us
  br i1 %68, label %._crit_edge.us.unr-lcssa, label %.preheader.us.new

.preheader.us.new:                                ; preds = %.preheader.us, %.preheader.us.new
  %.1256.us = phi ptr [ %83, %.preheader.us.new ], [ %.0102258.us, %.preheader.us ]
  %.0107255.us = phi i64 [ %84, %.preheader.us.new ], [ 0, %.preheader.us ]
  %niter332 = phi i64 [ %niter332.next.3, %.preheader.us.new ], [ 0, %.preheader.us ]
  %69 = mul i64 %.0107255.us, %15
  %gep.us = getelementptr float, ptr %invariant.gep.us, i64 %69
  %70 = load float, ptr %gep.us, align 4, !tbaa !21
  %71 = getelementptr inbounds i8, ptr %.1256.us, i64 4
  store float %70, ptr %.1256.us, align 4, !tbaa !21
  %72 = or disjoint i64 %.0107255.us, 1
  %73 = mul i64 %72, %15
  %gep.us.1 = getelementptr float, ptr %invariant.gep.us, i64 %73
  %74 = load float, ptr %gep.us.1, align 4, !tbaa !21
  %75 = getelementptr inbounds i8, ptr %.1256.us, i64 8
  store float %74, ptr %71, align 4, !tbaa !21
  %76 = or disjoint i64 %.0107255.us, 2
  %77 = mul i64 %76, %15
  %gep.us.2 = getelementptr float, ptr %invariant.gep.us, i64 %77
  %78 = load float, ptr %gep.us.2, align 4, !tbaa !21
  %79 = getelementptr inbounds i8, ptr %.1256.us, i64 12
  store float %78, ptr %75, align 4, !tbaa !21
  %80 = or disjoint i64 %.0107255.us, 3
  %81 = mul i64 %80, %15
  %gep.us.3 = getelementptr float, ptr %invariant.gep.us, i64 %81
  %82 = load float, ptr %gep.us.3, align 4, !tbaa !21
  %83 = getelementptr inbounds i8, ptr %.1256.us, i64 16
  store float %82, ptr %79, align 4, !tbaa !21
  %84 = add nuw i64 %.0107255.us, 4
  %niter332.next.3 = add i64 %niter332, 4
  %niter332.ncmp.3 = icmp eq i64 %niter332.next.3, %unroll_iter331
  br i1 %niter332.ncmp.3, label %._crit_edge.us.unr-lcssa, label %.preheader.us.new, !llvm.loop !26

._crit_edge.us.unr-lcssa:                         ; preds = %.preheader.us.new, %.preheader.us
  %.lcssa.ph = phi ptr [ poison, %.preheader.us ], [ %83, %.preheader.us.new ]
  %.1256.us.unr = phi ptr [ %.0102258.us, %.preheader.us ], [ %83, %.preheader.us.new ]
  %.0107255.us.unr = phi i64 [ 0, %.preheader.us ], [ %84, %.preheader.us.new ]
  br i1 %lcmp.mod329.not, label %._crit_edge.us, label %.epil.preheader327

.epil.preheader327:                               ; preds = %._crit_edge.us.unr-lcssa, %.epil.preheader327
  %.1256.us.epil = phi ptr [ %87, %.epil.preheader327 ], [ %.1256.us.unr, %._crit_edge.us.unr-lcssa ]
  %.0107255.us.epil = phi i64 [ %88, %.epil.preheader327 ], [ %.0107255.us.unr, %._crit_edge.us.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader327 ], [ 0, %._crit_edge.us.unr-lcssa ]
  %85 = mul i64 %.0107255.us.epil, %15
  %gep.us.epil = getelementptr float, ptr %invariant.gep.us, i64 %85
  %86 = load float, ptr %gep.us.epil, align 4, !tbaa !21
  %87 = getelementptr inbounds i8, ptr %.1256.us.epil, i64 4
  store float %86, ptr %.1256.us.epil, align 4, !tbaa !21
  %88 = add nuw i64 %.0107255.us.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter328
  br i1 %epil.iter.cmp.not, label %._crit_edge.us, label %.epil.preheader327, !llvm.loop !27

._crit_edge.us:                                   ; preds = %.epil.preheader327, %._crit_edge.us.unr-lcssa
  %.lcssa = phi ptr [ %.lcssa.ph, %._crit_edge.us.unr-lcssa ], [ %87, %.epil.preheader327 ]
  %89 = add nuw i64 %.0104257.us, 1
  %exitcond310.not = icmp eq i64 %89, %15
  br i1 %exitcond310.not, label %.loopexit, label %.preheader.us, !llvm.loop !29

90:                                               ; preds = %17, %3
  %91 = load i64, ptr %11, align 8, !tbaa !15
  %.not = icmp eq i64 %91, 0
  br i1 %.not, label %.loopexit, label %.lr.ph182

.lr.ph182:                                        ; preds = %90
  %92 = getelementptr inbounds i8, ptr %1, i64 96
  %93 = load i64, ptr %92, align 8, !tbaa !30
  %94 = getelementptr inbounds i8, ptr %1, i64 112
  %95 = load i64, ptr %94, align 8, !tbaa !17
  %96 = load i64, ptr %13, align 8, !tbaa !16
  %.not260 = icmp eq i64 %96, 0
  %97 = getelementptr inbounds i8, ptr %1, i64 104
  %98 = load i64, ptr %97, align 8
  %99 = getelementptr inbounds i8, ptr %1, i64 120
  %100 = load i64, ptr %99, align 8
  %101 = load i64, ptr %1, align 8
  %102 = getelementptr inbounds i8, ptr %1, i64 80
  %103 = getelementptr inbounds i8, ptr %1, i64 8
  %104 = getelementptr inbounds i8, ptr %1, i64 16
  %105 = getelementptr inbounds i8, ptr %1, i64 88
  %.not261 = icmp eq i64 %101, 0
  %or.cond314 = select i1 %.not260, i1 true, i1 %.not261
  %106 = load i64, ptr %6, align 8
  %.not262 = icmp eq i64 %106, 0
  %or.cond315 = select i1 %or.cond314, i1 true, i1 %.not262
  br i1 %or.cond315, label %.loopexit, label %.lr.ph.us.us

.lr.ph.us.usthread-pre-split:                     ; preds = %._crit_edge.split.us.us.us
  %.pr = load i64, ptr %6, align 8
  br label %.lr.ph.us.us

.lr.ph.us.us:                                     ; preds = %.lr.ph182, %.lr.ph.us.usthread-pre-split
  %107 = phi i64 [ %.pr, %.lr.ph.us.usthread-pre-split ], [ %106, %.lr.ph182 ]
  %.10180.us.us = phi ptr [ %.us-phi178.us.us, %.lr.ph.us.usthread-pre-split ], [ %2, %.lr.ph182 ]
  %.0110179.us.us = phi i64 [ %110, %.lr.ph.us.usthread-pre-split ], [ 0, %.lr.ph182 ]
  %108 = mul i64 %93, %.0110179.us.us
  %109 = sub i64 %108, %95
  %.not263 = icmp eq i64 %107, 0
  br i1 %.not263, label %._crit_edge.split.us.us.us, label %.preheader134.lr.ph.us.us.us.us

._crit_edge.split.us.us.us:                       ; preds = %._crit_edge163.split.us.us.us.us.us, %.lr.ph.us.us
  %.us-phi178.us.us = phi ptr [ %.10180.us.us, %.lr.ph.us.us ], [ %.us-phi.us.us.us.us.us, %._crit_edge163.split.us.us.us.us.us ]
  %110 = add nuw i64 %.0110179.us.us, 1
  %exitcond300.not = icmp eq i64 %110, %91
  br i1 %exitcond300.not, label %.loopexit, label %.lr.ph.us.usthread-pre-split, !llvm.loop !31

.preheader134.lr.ph.us.us.us.us:                  ; preds = %.lr.ph.us.us, %._crit_edge163.split.us.us.us.us.us
  %.11173.us.us.us.us = phi ptr [ %.us-phi.us.us.us.us.us, %._crit_edge163.split.us.us.us.us.us ], [ %.10180.us.us, %.lr.ph.us.us ]
  %.0108172.us.us.us.us = phi i64 [ %151, %._crit_edge163.split.us.us.us.us.us ], [ 0, %.lr.ph.us.us ]
  %111 = mul i64 %98, %.0108172.us.us.us.us
  %112 = sub i64 %111, %100
  %113 = load i64, ptr %102, align 8
  %114 = load i64, ptr %103, align 8
  br label %.preheader134.us.us.us.us.us

.preheader134.us.us.us.us.us:                     ; preds = %._crit_edge.us.us.us.us.us, %.preheader134.lr.ph.us.us.us.us
  %.12162.us.us.us.us.us = phi ptr [ %.11173.us.us.us.us, %.preheader134.lr.ph.us.us.us.us ], [ %.us-phi.us.us.us.us.us, %._crit_edge.us.us.us.us.us ]
  %.0106161.us.us.us.us.us = phi i64 [ 0, %.preheader134.lr.ph.us.us.us.us ], [ %121, %._crit_edge.us.us.us.us.us ]
  %115 = load i64, ptr %4, align 8
  %.fr = freeze i64 %115
  %.not265 = icmp eq i64 %.fr, 0
  %116 = mul i64 %114, %.0106161.us.us.us.us.us
  %117 = load i64, ptr %104, align 8
  %118 = load i64, ptr %105, align 8
  br i1 %.not265, label %._crit_edge.us.us.us.us.us, label %.lr.ph144.split.us.us.us.us.us.us.preheader

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

._crit_edge.us.us.us.us.us:                       ; preds = %.loopexit133.us.us.us.us.us.us, %.preheader134.us.us.us.us.us
  %.us-phi.us.us.us.us.us = phi ptr [ %.12162.us.us.us.us.us, %.preheader134.us.us.us.us.us ], [ %.17.us.us.us.us.us.us, %.loopexit133.us.us.us.us.us.us ]
  %121 = add nuw i64 %.0106161.us.us.us.us.us, 1
  %exitcond298.not = icmp eq i64 %121, %101
  br i1 %exitcond298.not, label %._crit_edge163.split.us.us.us.us.us, label %.preheader134.us.us.us.us.us, !llvm.loop !33

.lr.ph144.split.us.us.us.us.us.us:                ; preds = %.lr.ph144.split.us.us.us.us.us.us.preheader, %.loopexit133.us.us.us.us.us.us
  %.13143.us.us.us.us.us.us = phi ptr [ %.17.us.us.us.us.us.us, %.loopexit133.us.us.us.us.us.us ], [ %.12162.us.us.us.us.us, %.lr.ph144.split.us.us.us.us.us.us.preheader ]
  %.0105142.us.us.us.us.us.us = phi i64 [ %134, %.loopexit133.us.us.us.us.us.us ], [ 0, %.lr.ph144.split.us.us.us.us.us.us.preheader ]
  %122 = mul i64 %113, %.0105142.us.us.us.us.us.us
  %123 = add i64 %122, %109
  %124 = icmp ult i64 %123, %114
  br i1 %124, label %.lr.ph140.us.us.us.us.us.us, label %.lr.ph.us.us.us.us.us.us.preheader

.lr.ph140.us.us.us.us.us.us:                      ; preds = %.lr.ph144.split.us.us.us.us.us.us
  %125 = add i64 %116, %123
  %126 = mul i64 %117, %125
  %127 = getelementptr inbounds float, ptr %0, i64 %126
  br i1 %120, label %.loopexit133.us.us.us.us.us.us.loopexit.unr-lcssa, label %.lr.ph140.us.us.us.us.us.us.new

.loopexit133.us.us.us.us.us.us.loopexit.unr-lcssa: ; preds = %149, %.lr.ph140.us.us.us.us.us.us
  %.15.us.us.us.us.us.us.lcssa.ph = phi ptr [ poison, %.lr.ph140.us.us.us.us.us.us ], [ %.15.us.us.us.us.us.us.1, %149 ]
  %.14139.us.us.us.us.us.us.unr = phi ptr [ %.13143.us.us.us.us.us.us, %.lr.ph140.us.us.us.us.us.us ], [ %.15.us.us.us.us.us.us.1, %149 ]
  %.0103138.us.us.us.us.us.us.unr = phi i64 [ 0, %.lr.ph140.us.us.us.us.us.us ], [ %150, %149 ]
  br i1 %lcmp.mod.not, label %.loopexit133.us.us.us.us.us.us, label %.epil.preheader

.epil.preheader:                                  ; preds = %.loopexit133.us.us.us.us.us.us.loopexit.unr-lcssa
  %128 = mul i64 %118, %.0103138.us.us.us.us.us.us.unr
  %129 = add i64 %128, %112
  %130 = icmp ult i64 %129, %117
  br i1 %130, label %131, label %.loopexit133.us.us.us.us.us.us.loopexit.epilog-lcssa

131:                                              ; preds = %.epil.preheader
  %132 = getelementptr inbounds float, ptr %127, i64 %129
  %133 = load float, ptr %132, align 4, !tbaa !21
  br label %.loopexit133.us.us.us.us.us.us.loopexit.epilog-lcssa

.loopexit133.us.us.us.us.us.us.loopexit.epilog-lcssa: ; preds = %131, %.epil.preheader
  %storemerge.us.us.us.us.us.us.epil = phi float [ %133, %131 ], [ 0.000000e+00, %.epil.preheader ]
  %.15.us.us.us.us.us.us.epil = getelementptr inbounds i8, ptr %.14139.us.us.us.us.us.us.unr, i64 4
  store float %storemerge.us.us.us.us.us.us.epil, ptr %.14139.us.us.us.us.us.us.unr, align 4, !tbaa !21
  br label %.loopexit133.us.us.us.us.us.us

.loopexit133.us.us.us.us.us.us:                   ; preds = %.loopexit133.us.us.us.us.us.us.loopexit.epilog-lcssa, %.loopexit133.us.us.us.us.us.us.loopexit.unr-lcssa, %.lr.ph.us.us.us.us.us.us.preheader
  %.17.us.us.us.us.us.us = phi ptr [ %scevgep, %.lr.ph.us.us.us.us.us.us.preheader ], [ %.15.us.us.us.us.us.us.lcssa.ph, %.loopexit133.us.us.us.us.us.us.loopexit.unr-lcssa ], [ %.15.us.us.us.us.us.us.epil, %.loopexit133.us.us.us.us.us.us.loopexit.epilog-lcssa ]
  %134 = add nuw i64 %.0105142.us.us.us.us.us.us, 1
  %exitcond295.not = icmp eq i64 %134, %107
  br i1 %exitcond295.not, label %._crit_edge.us.us.us.us.us, label %.lr.ph144.split.us.us.us.us.us.us, !llvm.loop !34

.lr.ph140.us.us.us.us.us.us.new:                  ; preds = %.lr.ph140.us.us.us.us.us.us, %149
  %.14139.us.us.us.us.us.us = phi ptr [ %.15.us.us.us.us.us.us.1, %149 ], [ %.13143.us.us.us.us.us.us, %.lr.ph140.us.us.us.us.us.us ]
  %.0103138.us.us.us.us.us.us = phi i64 [ %150, %149 ], [ 0, %.lr.ph140.us.us.us.us.us.us ]
  %niter = phi i64 [ %niter.next.1, %149 ], [ 0, %.lr.ph140.us.us.us.us.us.us ]
  %135 = mul i64 %118, %.0103138.us.us.us.us.us.us
  %136 = add i64 %135, %112
  %137 = icmp ult i64 %136, %117
  br i1 %137, label %138, label %141

138:                                              ; preds = %.lr.ph140.us.us.us.us.us.us.new
  %139 = getelementptr inbounds float, ptr %127, i64 %136
  %140 = load float, ptr %139, align 4, !tbaa !21
  br label %141

141:                                              ; preds = %138, %.lr.ph140.us.us.us.us.us.us.new
  %storemerge.us.us.us.us.us.us = phi float [ %140, %138 ], [ 0.000000e+00, %.lr.ph140.us.us.us.us.us.us.new ]
  %.15.us.us.us.us.us.us = getelementptr inbounds i8, ptr %.14139.us.us.us.us.us.us, i64 4
  store float %storemerge.us.us.us.us.us.us, ptr %.14139.us.us.us.us.us.us, align 4, !tbaa !21
  %142 = or disjoint i64 %.0103138.us.us.us.us.us.us, 1
  %143 = mul i64 %118, %142
  %144 = add i64 %143, %112
  %145 = icmp ult i64 %144, %117
  br i1 %145, label %146, label %149

146:                                              ; preds = %141
  %147 = getelementptr inbounds float, ptr %127, i64 %144
  %148 = load float, ptr %147, align 4, !tbaa !21
  br label %149

149:                                              ; preds = %146, %141
  %storemerge.us.us.us.us.us.us.1 = phi float [ %148, %146 ], [ 0.000000e+00, %141 ]
  %.15.us.us.us.us.us.us.1 = getelementptr inbounds i8, ptr %.14139.us.us.us.us.us.us, i64 8
  store float %storemerge.us.us.us.us.us.us.1, ptr %.15.us.us.us.us.us.us, align 4, !tbaa !21
  %150 = add nuw i64 %.0103138.us.us.us.us.us.us, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit133.us.us.us.us.us.us.loopexit.unr-lcssa, label %.lr.ph140.us.us.us.us.us.us.new, !llvm.loop !35

.lr.ph.us.us.us.us.us.us.preheader:               ; preds = %.lr.ph144.split.us.us.us.us.us.us
  tail call void @llvm.memset.p0.i64(ptr align 4 %.13143.us.us.us.us.us.us, i8 0, i64 %119, i1 false), !tbaa !21
  %scevgep = getelementptr i8, ptr %.13143.us.us.us.us.us.us, i64 %119
  br label %.loopexit133.us.us.us.us.us.us

._crit_edge163.split.us.us.us.us.us:              ; preds = %._crit_edge.us.us.us.us.us
  %151 = add nuw i64 %.0108172.us.us.us.us, 1
  %exitcond299.not = icmp eq i64 %151, %96
  br i1 %exitcond299.not, label %._crit_edge.split.us.us.us, label %.preheader134.lr.ph.us.us.us.us, !llvm.loop !36

.loopexit:                                        ; preds = %._crit_edge.split.us.us.us, %._crit_edge.split.us.us.us247, %._crit_edge.us, %.lr.ph182, %.lr.ph238, %90, %.preheader129, %.preheader124
  ret void
}

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

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

!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, !7, i64 72}
!6 = !{!"_ZTS25SimdConvolutionParameters", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !11, i64 28, !7, i64 32, !7, i64 40, !7, i64 48, !10, i64 56, !11, i64 60, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !12, i64 152}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTS18SimdTensorDataType", !8, i64 0}
!11 = !{!"_ZTS20SimdTensorFormatType", !8, i64 0}
!12 = !{!"_ZTS29SimdConvolutionActivationType", !8, i64 0}
!13 = !{!6, !7, i64 64}
!14 = !{!6, !7, i64 0}
!15 = !{!6, !7, i64 40}
!16 = !{!6, !7, i64 48}
!17 = !{!6, !7, i64 112}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = !{!22, !22, i64 0}
!22 = !{!"float", !8, i64 0}
!23 = distinct !{!23, !19}
!24 = distinct !{!24, !19}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !19}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.unroll.disable"}
!29 = distinct !{!29, !19}
!30 = !{!6, !7, i64 96}
!31 = distinct !{!31, !19, !32}
!32 = !{!"llvm.loop.unswitch.partial.disable"}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !19}
!35 = distinct !{!35, !19}
!36 = distinct !{!36, !19}


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