; LLVM IR from introlab/odas :: src/system (pitch2category)

; 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.pitch2category_obj = type { i32, float, float, float, float, float, float, float, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.tracks_obj = type { i32, ptr, ptr, ptr, ptr }
%struct.pitches_obj = type { i32, ptr }
%struct.categories_obj = type { i32, ptr }

; 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: nounwind uwtable
define dso_local void @pitch2category_process(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #1 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca float, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %11

11:                                               ; preds = %376, %4
  %12 = load i32, ptr %9, align 4, !tbaa !9
  %13 = load ptr, ptr %5, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.pitch2category_obj, ptr %13, i32 0, i32 0
  %15 = load i32, ptr %14, align 8, !tbaa !11
  %16 = icmp ult i32 %12, %15
  br i1 %16, label %17, label %379

17:                                               ; preds = %11
  %18 = load ptr, ptr %7, align 8, !tbaa !5
  %19 = getelementptr inbounds %struct.tracks_obj, ptr %18, i32 0, i32 1
  %20 = load ptr, ptr %19, align 8, !tbaa !14
  %21 = load i32, ptr %9, align 4, !tbaa !9
  %22 = zext i32 %21 to i64
  %23 = getelementptr inbounds i64, ptr %20, i64 %22
  %24 = load i64, ptr %23, align 8, !tbaa !16
  %25 = icmp ne i64 %24, 0
  br i1 %25, label %26, label %338

26:                                               ; preds = %17
  %27 = load ptr, ptr %5, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.pitch2category_obj, ptr %27, i32 0, i32 16
  %29 = load ptr, ptr %28, align 8, !tbaa !18
  %30 = load i32, ptr %9, align 4, !tbaa !9
  %31 = zext i32 %30 to i64
  %32 = getelementptr inbounds i8, ptr %29, i64 %31
  %33 = load i8, ptr %32, align 1, !tbaa !19
  %34 = sext i8 %33 to i32
  %35 = icmp ne i32 %34, 1
  br i1 %35, label %36, label %324

36:                                               ; preds = %26
  %37 = load ptr, ptr %6, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.pitches_obj, ptr %37, i32 0, i32 1
  %39 = load ptr, ptr %38, align 8, !tbaa !20
  %40 = load i32, ptr %9, align 4, !tbaa !9
  %41 = zext i32 %40 to i64
  %42 = getelementptr inbounds float, ptr %39, i64 %41
  %43 = load float, ptr %42, align 4, !tbaa !22
  %44 = load ptr, ptr %5, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.pitch2category_obj, ptr %44, i32 0, i32 8
  %46 = load ptr, ptr %45, align 8, !tbaa !23
  %47 = load i32, ptr %9, align 4, !tbaa !9
  %48 = zext i32 %47 to i64
  %49 = getelementptr inbounds float, ptr %46, i64 %48
  store float %43, ptr %49, align 4, !tbaa !22
  %50 = load ptr, ptr %5, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.pitch2category_obj, ptr %50, i32 0, i32 8
  %52 = load ptr, ptr %51, align 8, !tbaa !23
  %53 = load i32, ptr %9, align 4, !tbaa !9
  %54 = zext i32 %53 to i64
  %55 = getelementptr inbounds float, ptr %52, i64 %54
  %56 = load float, ptr %55, align 4, !tbaa !22
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.pitch2category_obj, ptr %57, i32 0, i32 9
  %59 = load ptr, ptr %58, align 8, !tbaa !24
  %60 = load i32, ptr %9, align 4, !tbaa !9
  %61 = zext i32 %60 to i64
  %62 = getelementptr inbounds float, ptr %59, i64 %61
  %63 = load float, ptr %62, align 4, !tbaa !22
  %64 = fsub float %56, %63
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.pitch2category_obj, ptr %65, i32 0, i32 10
  %67 = load ptr, ptr %66, align 8, !tbaa !25
  %68 = load i32, ptr %9, align 4, !tbaa !9
  %69 = zext i32 %68 to i64
  %70 = getelementptr inbounds float, ptr %67, i64 %69
  store float %64, ptr %70, align 4, !tbaa !22
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.pitch2category_obj, ptr %71, i32 0, i32 10
  %73 = load ptr, ptr %72, align 8, !tbaa !25
  %74 = load i32, ptr %9, align 4, !tbaa !9
  %75 = zext i32 %74 to i64
  %76 = getelementptr inbounds float, ptr %73, i64 %75
  %77 = load float, ptr %76, align 4, !tbaa !22
  %78 = fpext float %77 to double
  %79 = call double @llvm.fabs.f64(double %78)
  %80 = load ptr, ptr %5, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.pitch2category_obj, ptr %80, i32 0, i32 3
  %82 = load float, ptr %81, align 4, !tbaa !26
  %83 = fpext float %82 to double
  %84 = fcmp olt double %79, %83
  br i1 %84, label %85, label %130

85:                                               ; preds = %36
  %86 = load ptr, ptr %5, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.pitch2category_obj, ptr %86, i32 0, i32 11
  %88 = load ptr, ptr %87, align 8, !tbaa !27
  %89 = load i32, ptr %9, align 4, !tbaa !9
  %90 = zext i32 %89 to i64
  %91 = getelementptr inbounds float, ptr %88, i64 %90
  %92 = load float, ptr %91, align 4, !tbaa !22
  %93 = fpext float %92 to double
  %94 = call double @llvm.fabs.f64(double %93)
  %95 = load ptr, ptr %5, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.pitch2category_obj, ptr %95, i32 0, i32 3
  %97 = load float, ptr %96, align 4, !tbaa !26
  %98 = fpext float %97 to double
  %99 = fcmp olt double %94, %98
  br i1 %99, label %100, label %130

100:                                              ; preds = %85
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.pitch2category_obj, ptr %101, i32 0, i32 4
  %103 = load float, ptr %102, align 8, !tbaa !28
  %104 = fsub float 1.000000e+00, %103
  %105 = load ptr, ptr %5, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.pitch2category_obj, ptr %105, i32 0, i32 13
  %107 = load ptr, ptr %106, align 8, !tbaa !29
  %108 = load i32, ptr %9, align 4, !tbaa !9
  %109 = zext i32 %108 to i64
  %110 = getelementptr inbounds float, ptr %107, i64 %109
  %111 = load float, ptr %110, align 4, !tbaa !22
  %112 = load ptr, ptr %5, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.pitch2category_obj, ptr %112, i32 0, i32 4
  %114 = load float, ptr %113, align 8, !tbaa !28
  %115 = load ptr, ptr %5, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.pitch2category_obj, ptr %115, i32 0, i32 10
  %117 = load ptr, ptr %116, align 8, !tbaa !25
  %118 = load i32, ptr %9, align 4, !tbaa !9
  %119 = zext i32 %118 to i64
  %120 = getelementptr inbounds float, ptr %117, i64 %119
  %121 = load float, ptr %120, align 4, !tbaa !22
  %122 = fmul float %114, %121
  %123 = call float @llvm.fmuladd.f32(float %104, float %111, float %122)
  %124 = load ptr, ptr %5, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.pitch2category_obj, ptr %124, i32 0, i32 12
  %126 = load ptr, ptr %125, align 8, !tbaa !30
  %127 = load i32, ptr %9, align 4, !tbaa !9
  %128 = zext i32 %127 to i64
  %129 = getelementptr inbounds float, ptr %126, i64 %128
  store float %123, ptr %129, align 4, !tbaa !22
  br label %182

130:                                              ; preds = %85, %36
  %131 = load ptr, ptr %5, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.pitch2category_obj, ptr %131, i32 0, i32 10
  %133 = load ptr, ptr %132, align 8, !tbaa !25
  %134 = load i32, ptr %9, align 4, !tbaa !9
  %135 = zext i32 %134 to i64
  %136 = getelementptr inbounds float, ptr %133, i64 %135
  %137 = load float, ptr %136, align 4, !tbaa !22
  %138 = fpext float %137 to double
  %139 = call double @llvm.fabs.f64(double %138)
  %140 = load ptr, ptr %5, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.pitch2category_obj, ptr %140, i32 0, i32 3
  %142 = load float, ptr %141, align 4, !tbaa !26
  %143 = fpext float %142 to double
  %144 = fcmp olt double %139, %143
  br i1 %144, label %145, label %174

145:                                              ; preds = %130
  %146 = load ptr, ptr %5, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.pitch2category_obj, ptr %146, i32 0, i32 11
  %148 = load ptr, ptr %147, align 8, !tbaa !27
  %149 = load i32, ptr %9, align 4, !tbaa !9
  %150 = zext i32 %149 to i64
  %151 = getelementptr inbounds float, ptr %148, i64 %150
  %152 = load float, ptr %151, align 4, !tbaa !22
  %153 = fpext float %152 to double
  %154 = call double @llvm.fabs.f64(double %153)
  %155 = load ptr, ptr %5, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.pitch2category_obj, ptr %155, i32 0, i32 3
  %157 = load float, ptr %156, align 4, !tbaa !26
  %158 = fpext float %157 to double
  %159 = fcmp oge double %154, %158
  br i1 %159, label %160, label %174

160:                                              ; preds = %145
  %161 = load ptr, ptr %5, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.pitch2category_obj, ptr %161, i32 0, i32 10
  %163 = load ptr, ptr %162, align 8, !tbaa !25
  %164 = load i32, ptr %9, align 4, !tbaa !9
  %165 = zext i32 %164 to i64
  %166 = getelementptr inbounds float, ptr %163, i64 %165
  %167 = load float, ptr %166, align 4, !tbaa !22
  %168 = load ptr, ptr %5, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.pitch2category_obj, ptr %168, i32 0, i32 12
  %170 = load ptr, ptr %169, align 8, !tbaa !30
  %171 = load i32, ptr %9, align 4, !tbaa !9
  %172 = zext i32 %171 to i64
  %173 = getelementptr inbounds float, ptr %170, i64 %172
  store float %167, ptr %173, align 4, !tbaa !22
  br label %181

174:                                              ; preds = %145, %130
  %175 = load ptr, ptr %5, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.pitch2category_obj, ptr %175, i32 0, i32 12
  %177 = load ptr, ptr %176, align 8, !tbaa !30
  %178 = load i32, ptr %9, align 4, !tbaa !9
  %179 = zext i32 %178 to i64
  %180 = getelementptr inbounds float, ptr %177, i64 %179
  store float 0.000000e+00, ptr %180, align 4, !tbaa !22
  br label %181

181:                                              ; preds = %174, %160
  br label %182

182:                                              ; preds = %181, %100
  %183 = load ptr, ptr %5, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.pitch2category_obj, ptr %183, i32 0, i32 8
  %185 = load ptr, ptr %184, align 8, !tbaa !23
  %186 = load i32, ptr %9, align 4, !tbaa !9
  %187 = zext i32 %186 to i64
  %188 = getelementptr inbounds float, ptr %185, i64 %187
  %189 = load float, ptr %188, align 4, !tbaa !22
  %190 = load ptr, ptr %5, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.pitch2category_obj, ptr %190, i32 0, i32 1
  %192 = load float, ptr %191, align 4, !tbaa !31
  %193 = fcmp oge float %189, %192
  br i1 %193, label %194, label %228

194:                                              ; preds = %182
  %195 = load ptr, ptr %5, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.pitch2category_obj, ptr %195, i32 0, i32 8
  %197 = load ptr, ptr %196, align 8, !tbaa !23
  %198 = load i32, ptr %9, align 4, !tbaa !9
  %199 = zext i32 %198 to i64
  %200 = getelementptr inbounds float, ptr %197, i64 %199
  %201 = load float, ptr %200, align 4, !tbaa !22
  %202 = load ptr, ptr %5, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.pitch2category_obj, ptr %202, i32 0, i32 2
  %204 = load float, ptr %203, align 8, !tbaa !32
  %205 = fcmp ole float %201, %204
  br i1 %205, label %206, label %228

206:                                              ; preds = %194
  %207 = load ptr, ptr %5, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.pitch2category_obj, ptr %207, i32 0, i32 12
  %209 = load ptr, ptr %208, align 8, !tbaa !30
  %210 = load i32, ptr %9, align 4, !tbaa !9
  %211 = zext i32 %210 to i64
  %212 = getelementptr inbounds float, ptr %209, i64 %211
  %213 = load float, ptr %212, align 4, !tbaa !22
  %214 = fpext float %213 to double
  %215 = call double @llvm.fabs.f64(double %214)
  %216 = load ptr, ptr %5, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.pitch2category_obj, ptr %216, i32 0, i32 6
  %218 = load float, ptr %217, align 8, !tbaa !33
  %219 = fpext float %218 to double
  %220 = fcmp ogt double %215, %219
  br i1 %220, label %221, label %228

221:                                              ; preds = %206
  %222 = load ptr, ptr %5, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.pitch2category_obj, ptr %222, i32 0, i32 14
  %224 = load ptr, ptr %223, align 8, !tbaa !34
  %225 = load i32, ptr %9, align 4, !tbaa !9
  %226 = zext i32 %225 to i64
  %227 = getelementptr inbounds float, ptr %224, i64 %226
  store float 1.000000e+00, ptr %227, align 4, !tbaa !22
  br label %235

228:                                              ; preds = %206, %194, %182
  %229 = load ptr, ptr %5, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.pitch2category_obj, ptr %229, i32 0, i32 14
  %231 = load ptr, ptr %230, align 8, !tbaa !34
  %232 = load i32, ptr %9, align 4, !tbaa !9
  %233 = zext i32 %232 to i64
  %234 = getelementptr inbounds float, ptr %231, i64 %233
  store float 0.000000e+00, ptr %234, align 4, !tbaa !22
  br label %235

235:                                              ; preds = %228, %221
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.pitch2category_obj, ptr %236, i32 0, i32 5
  %238 = load float, ptr %237, align 4, !tbaa !35
  %239 = fsub float 1.000000e+00, %238
  %240 = load ptr, ptr %5, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.pitch2category_obj, ptr %240, i32 0, i32 15
  %242 = load ptr, ptr %241, align 8, !tbaa !36
  %243 = load i32, ptr %9, align 4, !tbaa !9
  %244 = zext i32 %243 to i64
  %245 = getelementptr inbounds float, ptr %242, i64 %244
  %246 = load float, ptr %245, align 4, !tbaa !22
  %247 = load ptr, ptr %5, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.pitch2category_obj, ptr %247, i32 0, i32 5
  %249 = load float, ptr %248, align 4, !tbaa !35
  %250 = load ptr, ptr %5, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.pitch2category_obj, ptr %250, i32 0, i32 14
  %252 = load ptr, ptr %251, align 8, !tbaa !34
  %253 = load i32, ptr %9, align 4, !tbaa !9
  %254 = zext i32 %253 to i64
  %255 = getelementptr inbounds float, ptr %252, i64 %254
  %256 = load float, ptr %255, align 4, !tbaa !22
  %257 = fmul float %249, %256
  %258 = call float @llvm.fmuladd.f32(float %239, float %246, float %257)
  %259 = load ptr, ptr %5, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.pitch2category_obj, ptr %259, i32 0, i32 15
  %261 = load ptr, ptr %260, align 8, !tbaa !36
  %262 = load i32, ptr %9, align 4, !tbaa !9
  %263 = zext i32 %262 to i64
  %264 = getelementptr inbounds float, ptr %261, i64 %263
  store float %258, ptr %264, align 4, !tbaa !22
  %265 = load ptr, ptr %5, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.pitch2category_obj, ptr %265, i32 0, i32 15
  %267 = load ptr, ptr %266, align 8, !tbaa !36
  %268 = load i32, ptr %9, align 4, !tbaa !9
  %269 = zext i32 %268 to i64
  %270 = getelementptr inbounds float, ptr %267, i64 %269
  %271 = load float, ptr %270, align 4, !tbaa !22
  %272 = load ptr, ptr %5, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.pitch2category_obj, ptr %272, i32 0, i32 7
  %274 = load float, ptr %273, align 4, !tbaa !37
  %275 = fcmp ogt float %271, %274
  br i1 %275, label %276, label %283

276:                                              ; preds = %235
  %277 = load ptr, ptr %5, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.pitch2category_obj, ptr %277, i32 0, i32 16
  %279 = load ptr, ptr %278, align 8, !tbaa !18
  %280 = load i32, ptr %9, align 4, !tbaa !9
  %281 = zext i32 %280 to i64
  %282 = getelementptr inbounds i8, ptr %279, i64 %281
  store i8 1, ptr %282, align 1, !tbaa !19
  br label %290

283:                                              ; preds = %235
  %284 = load ptr, ptr %5, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.pitch2category_obj, ptr %284, i32 0, i32 16
  %286 = load ptr, ptr %285, align 8, !tbaa !18
  %287 = load i32, ptr %9, align 4, !tbaa !9
  %288 = zext i32 %287 to i64
  %289 = getelementptr inbounds i8, ptr %286, i64 %288
  store i8 0, ptr %289, align 1, !tbaa !19
  br label %290

290:                                              ; preds = %283, %276
  %291 = load ptr, ptr %5, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.pitch2category_obj, ptr %291, i32 0, i32 9
  %293 = load ptr, ptr %292, align 8, !tbaa !24
  %294 = load ptr, ptr %5, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.pitch2category_obj, ptr %294, i32 0, i32 8
  %296 = load ptr, ptr %295, align 8, !tbaa !23
  %297 = load ptr, ptr %5, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.pitch2category_obj, ptr %297, i32 0, i32 0
  %299 = load i32, ptr %298, align 8, !tbaa !11
  %300 = zext i32 %299 to i64
  %301 = mul i64 4, %300
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %293, ptr align 4 %296, i64 %301, i1 false)
  %302 = load ptr, ptr %5, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.pitch2category_obj, ptr %302, i32 0, i32 11
  %304 = load ptr, ptr %303, align 8, !tbaa !27
  %305 = load ptr, ptr %5, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.pitch2category_obj, ptr %305, i32 0, i32 10
  %307 = load ptr, ptr %306, align 8, !tbaa !25
  %308 = load ptr, ptr %5, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.pitch2category_obj, ptr %308, i32 0, i32 0
  %310 = load i32, ptr %309, align 8, !tbaa !11
  %311 = zext i32 %310 to i64
  %312 = mul i64 4, %311
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %304, ptr align 4 %307, i64 %312, i1 false)
  %313 = load ptr, ptr %5, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.pitch2category_obj, ptr %313, i32 0, i32 13
  %315 = load ptr, ptr %314, align 8, !tbaa !29
  %316 = load ptr, ptr %5, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.pitch2category_obj, ptr %316, i32 0, i32 12
  %318 = load ptr, ptr %317, align 8, !tbaa !30
  %319 = load ptr, ptr %5, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.pitch2category_obj, ptr %319, i32 0, i32 0
  %321 = load i32, ptr %320, align 8, !tbaa !11
  %322 = zext i32 %321 to i64
  %323 = mul i64 4, %322
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %315, ptr align 4 %318, i64 %323, i1 false)
  br label %324

324:                                              ; preds = %290, %26
  %325 = load ptr, ptr %5, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.pitch2category_obj, ptr %325, i32 0, i32 16
  %327 = load ptr, ptr %326, align 8, !tbaa !18
  %328 = load i32, ptr %9, align 4, !tbaa !9
  %329 = zext i32 %328 to i64
  %330 = getelementptr inbounds i8, ptr %327, i64 %329
  %331 = load i8, ptr %330, align 1, !tbaa !19
  %332 = load ptr, ptr %8, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.categories_obj, ptr %332, i32 0, i32 1
  %334 = load ptr, ptr %333, align 8, !tbaa !38
  %335 = load i32, ptr %9, align 4, !tbaa !9
  %336 = zext i32 %335 to i64
  %337 = getelementptr inbounds i8, ptr %334, i64 %336
  store i8 %331, ptr %337, align 1, !tbaa !19
  br label %375

338:                                              ; preds = %17
  %339 = load ptr, ptr %5, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.pitch2category_obj, ptr %339, i32 0, i32 8
  %341 = load ptr, ptr %340, align 8, !tbaa !23
  %342 = load i32, ptr %9, align 4, !tbaa !9
  %343 = zext i32 %342 to i64
  %344 = getelementptr inbounds float, ptr %341, i64 %343
  store float 0.000000e+00, ptr %344, align 4, !tbaa !22
  %345 = load ptr, ptr %5, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.pitch2category_obj, ptr %345, i32 0, i32 10
  %347 = load ptr, ptr %346, align 8, !tbaa !25
  %348 = load i32, ptr %9, align 4, !tbaa !9
  %349 = zext i32 %348 to i64
  %350 = getelementptr inbounds float, ptr %347, i64 %349
  store float 0.000000e+00, ptr %350, align 4, !tbaa !22
  %351 = load ptr, ptr %5, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.pitch2category_obj, ptr %351, i32 0, i32 12
  %353 = load ptr, ptr %352, align 8, !tbaa !30
  %354 = load i32, ptr %9, align 4, !tbaa !9
  %355 = zext i32 %354 to i64
  %356 = getelementptr inbounds float, ptr %353, i64 %355
  store float 0.000000e+00, ptr %356, align 4, !tbaa !22
  %357 = load ptr, ptr %5, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.pitch2category_obj, ptr %357, i32 0, i32 14
  %359 = load ptr, ptr %358, align 8, !tbaa !34
  %360 = load i32, ptr %9, align 4, !tbaa !9
  %361 = zext i32 %360 to i64
  %362 = getelementptr inbounds float, ptr %359, i64 %361
  store float 0.000000e+00, ptr %362, align 4, !tbaa !22
  %363 = load ptr, ptr %5, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.pitch2category_obj, ptr %363, i32 0, i32 15
  %365 = load ptr, ptr %364, align 8, !tbaa !36
  %366 = load i32, ptr %9, align 4, !tbaa !9
  %367 = zext i32 %366 to i64
  %368 = getelementptr inbounds float, ptr %365, i64 %367
  store float 0.000000e+00, ptr %368, align 4, !tbaa !22
  %369 = load ptr, ptr %5, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.pitch2category_obj, ptr %369, i32 0, i32 16
  %371 = load ptr, ptr %370, align 8, !tbaa !18
  %372 = load i32, ptr %9, align 4, !tbaa !9
  %373 = zext i32 %372 to i64
  %374 = getelementptr inbounds i8, ptr %371, i64 %373
  store i8 0, ptr %374, align 1, !tbaa !19
  br label %375

375:                                              ; preds = %338, %324
  br label %376

376:                                              ; preds = %375
  %377 = load i32, ptr %9, align 4, !tbaa !9
  %378 = add i32 %377, 1
  store i32 %378, ptr %9, align 4, !tbaa !9
  br label %11, !llvm.loop !40

379:                                              ; preds = %11
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #2

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"pitch2category_obj", !10, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96}
!13 = !{!"float", !7, i64 0}
!14 = !{!15, !6, i64 8}
!15 = !{!"tracks_obj", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!16 = !{!17, !17, i64 0}
!17 = !{!"long long", !7, i64 0}
!18 = !{!12, !6, i64 96}
!19 = !{!7, !7, i64 0}
!20 = !{!21, !6, i64 8}
!21 = !{!"pitches_obj", !10, i64 0, !6, i64 8}
!22 = !{!13, !13, i64 0}
!23 = !{!12, !6, i64 32}
!24 = !{!12, !6, i64 40}
!25 = !{!12, !6, i64 48}
!26 = !{!12, !13, i64 12}
!27 = !{!12, !6, i64 56}
!28 = !{!12, !13, i64 16}
!29 = !{!12, !6, i64 72}
!30 = !{!12, !6, i64 64}
!31 = !{!12, !13, i64 4}
!32 = !{!12, !13, i64 8}
!33 = !{!12, !13, i64 24}
!34 = !{!12, !6, i64 80}
!35 = !{!12, !13, i64 20}
!36 = !{!12, !6, i64 88}
!37 = !{!12, !13, i64 28}
!38 = !{!39, !6, i64 8}
!39 = !{!"categories_obj", !10, i64 0, !6, i64 8}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.mustprogress"}


; 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: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local void @pitch2category_process(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3) local_unnamed_addr #0 {
  %5 = load i32, ptr %0, align 8, !tbaa !5
  %.not100 = icmp eq i32 %5, 0
  br i1 %.not100, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %4
  %6 = getelementptr inbounds i8, ptr %2, i64 8
  %7 = getelementptr inbounds i8, ptr %0, i64 96
  %8 = getelementptr inbounds i8, ptr %1, i64 8
  %9 = getelementptr inbounds i8, ptr %0, i64 32
  %10 = getelementptr inbounds i8, ptr %0, i64 40
  %11 = getelementptr inbounds i8, ptr %0, i64 48
  %12 = getelementptr inbounds i8, ptr %0, i64 12
  %13 = getelementptr inbounds i8, ptr %0, i64 56
  %14 = getelementptr inbounds i8, ptr %0, i64 64
  %15 = getelementptr inbounds i8, ptr %0, i64 16
  %16 = getelementptr inbounds i8, ptr %0, i64 72
  %17 = getelementptr inbounds i8, ptr %0, i64 4
  %18 = getelementptr inbounds i8, ptr %0, i64 8
  %19 = getelementptr inbounds i8, ptr %0, i64 24
  %20 = getelementptr inbounds i8, ptr %0, i64 80
  %21 = getelementptr inbounds i8, ptr %0, i64 20
  %22 = getelementptr inbounds i8, ptr %0, i64 88
  %23 = getelementptr inbounds i8, ptr %0, i64 28
  %24 = getelementptr inbounds i8, ptr %3, i64 8
  br label %25

25:                                               ; preds = %.lr.ph, %117
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %117 ]
  %26 = load ptr, ptr %6, align 8, !tbaa !12
  %27 = getelementptr inbounds i64, ptr %26, i64 %indvars.iv
  %28 = load i64, ptr %27, align 8, !tbaa !14
  %.not = icmp eq i64 %28, 0
  br i1 %.not, label %106, label %29

29:                                               ; preds = %25
  %30 = load ptr, ptr %7, align 8, !tbaa !16
  %31 = getelementptr inbounds i8, ptr %30, i64 %indvars.iv
  %32 = load i8, ptr %31, align 1, !tbaa !17
  %.not98 = icmp eq i8 %32, 1
  br i1 %.not98, label %117, label %33

33:                                               ; preds = %29
  %34 = load ptr, ptr %8, align 8, !tbaa !18
  %35 = getelementptr inbounds float, ptr %34, i64 %indvars.iv
  %36 = load float, ptr %35, align 4, !tbaa !20
  %37 = load ptr, ptr %9, align 8, !tbaa !21
  %38 = getelementptr inbounds float, ptr %37, i64 %indvars.iv
  store float %36, ptr %38, align 4, !tbaa !20
  %39 = load ptr, ptr %10, align 8, !tbaa !22
  %40 = getelementptr inbounds float, ptr %39, i64 %indvars.iv
  %41 = load float, ptr %40, align 4, !tbaa !20
  %42 = fsub float %36, %41
  %43 = load ptr, ptr %11, align 8, !tbaa !23
  %44 = getelementptr inbounds float, ptr %43, i64 %indvars.iv
  store float %42, ptr %44, align 4, !tbaa !20
  %45 = tail call float @llvm.fabs.f32(float %42)
  %46 = load float, ptr %12, align 4, !tbaa !24
  %47 = fcmp olt float %45, %46
  br i1 %47, label %48, label %64

48:                                               ; preds = %33
  %49 = load ptr, ptr %13, align 8, !tbaa !25
  %50 = getelementptr inbounds float, ptr %49, i64 %indvars.iv
  %51 = load float, ptr %50, align 4, !tbaa !20
  %52 = tail call float @llvm.fabs.f32(float %51)
  %53 = fcmp olt float %52, %46
  br i1 %53, label %54, label %62

54:                                               ; preds = %48
  %55 = load float, ptr %15, align 8, !tbaa !26
  %56 = fsub float 1.000000e+00, %55
  %57 = load ptr, ptr %16, align 8, !tbaa !27
  %58 = getelementptr inbounds float, ptr %57, i64 %indvars.iv
  %59 = load float, ptr %58, align 4, !tbaa !20
  %60 = fmul float %42, %55
  %61 = tail call float @llvm.fmuladd.f32(float %56, float %59, float %60)
  br label %65

62:                                               ; preds = %48
  %63 = fcmp ult float %52, %46
  br i1 %63, label %64, label %65

64:                                               ; preds = %33, %62
  br label %65

65:                                               ; preds = %62, %64, %54
  %.sink = phi float [ 0.000000e+00, %64 ], [ %61, %54 ], [ %42, %62 ]
  %66 = load ptr, ptr %14, align 8, !tbaa !28
  %67 = getelementptr inbounds float, ptr %66, i64 %indvars.iv
  store float %.sink, ptr %67, align 4, !tbaa !20
  %68 = load float, ptr %38, align 4, !tbaa !20
  %69 = load float, ptr %17, align 4, !tbaa !29
  %70 = fcmp ult float %68, %69
  br i1 %70, label %78, label %71

71:                                               ; preds = %65
  %72 = load float, ptr %18, align 8, !tbaa !30
  %73 = fcmp ugt float %68, %72
  br i1 %73, label %78, label %74

74:                                               ; preds = %71
  %75 = tail call float @llvm.fabs.f32(float %.sink)
  %76 = load float, ptr %19, align 8, !tbaa !31
  %77 = fcmp ogt float %75, %76
  br i1 %77, label %79, label %78

78:                                               ; preds = %74, %71, %65
  br label %79

79:                                               ; preds = %74, %78
  %.sink105 = phi float [ 0.000000e+00, %78 ], [ 1.000000e+00, %74 ]
  %80 = load ptr, ptr %20, align 8, !tbaa !32
  %81 = getelementptr inbounds float, ptr %80, i64 %indvars.iv
  store float %.sink105, ptr %81, align 4, !tbaa !20
  %82 = load float, ptr %21, align 4, !tbaa !33
  %83 = fsub float 1.000000e+00, %82
  %84 = load ptr, ptr %22, align 8, !tbaa !34
  %85 = getelementptr inbounds float, ptr %84, i64 %indvars.iv
  %86 = load float, ptr %85, align 4, !tbaa !20
  %87 = fmul float %82, %.sink105
  %88 = tail call float @llvm.fmuladd.f32(float %83, float %86, float %87)
  store float %88, ptr %85, align 4, !tbaa !20
  %89 = load float, ptr %23, align 4, !tbaa !35
  %90 = fcmp ogt float %88, %89
  %. = zext i1 %90 to i8
  store i8 %., ptr %31, align 1, !tbaa !17
  %91 = load ptr, ptr %10, align 8, !tbaa !22
  %92 = load ptr, ptr %9, align 8, !tbaa !21
  %93 = load i32, ptr %0, align 8, !tbaa !5
  %94 = zext i32 %93 to i64
  %95 = shl nuw nsw i64 %94, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %91, ptr align 4 %92, i64 %95, i1 false)
  %96 = load ptr, ptr %13, align 8, !tbaa !25
  %97 = load ptr, ptr %11, align 8, !tbaa !23
  %98 = load i32, ptr %0, align 8, !tbaa !5
  %99 = zext i32 %98 to i64
  %100 = shl nuw nsw i64 %99, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %96, ptr align 4 %97, i64 %100, i1 false)
  %101 = load ptr, ptr %16, align 8, !tbaa !27
  %102 = load ptr, ptr %14, align 8, !tbaa !28
  %103 = load i32, ptr %0, align 8, !tbaa !5
  %104 = zext i32 %103 to i64
  %105 = shl nuw nsw i64 %104, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %101, ptr align 4 %102, i64 %105, i1 false)
  %.pre = load ptr, ptr %7, align 8, !tbaa !16
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.pre, i64 %indvars.iv
  %.pre102 = load i8, ptr %.phi.trans.insert, align 1, !tbaa !17
  br label %117

106:                                              ; preds = %25
  %107 = load ptr, ptr %9, align 8, !tbaa !21
  %108 = getelementptr inbounds float, ptr %107, i64 %indvars.iv
  store float 0.000000e+00, ptr %108, align 4, !tbaa !20
  %109 = load ptr, ptr %11, align 8, !tbaa !23
  %110 = getelementptr inbounds float, ptr %109, i64 %indvars.iv
  store float 0.000000e+00, ptr %110, align 4, !tbaa !20
  %111 = load ptr, ptr %14, align 8, !tbaa !28
  %112 = getelementptr inbounds float, ptr %111, i64 %indvars.iv
  store float 0.000000e+00, ptr %112, align 4, !tbaa !20
  %113 = load ptr, ptr %20, align 8, !tbaa !32
  %114 = getelementptr inbounds float, ptr %113, i64 %indvars.iv
  store float 0.000000e+00, ptr %114, align 4, !tbaa !20
  %115 = load ptr, ptr %22, align 8, !tbaa !34
  %116 = getelementptr inbounds float, ptr %115, i64 %indvars.iv
  store float 0.000000e+00, ptr %116, align 4, !tbaa !20
  br label %117

117:                                              ; preds = %29, %79, %106
  %.sink111 = phi ptr [ %7, %106 ], [ %24, %79 ], [ %24, %29 ]
  %.sink108 = phi i8 [ 0, %106 ], [ %.pre102, %79 ], [ 1, %29 ]
  %118 = load ptr, ptr %.sink111, align 8, !tbaa !36
  %119 = getelementptr inbounds i8, ptr %118, i64 %indvars.iv
  store i8 %.sink108, ptr %119, align 1, !tbaa !17
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %120 = load i32, ptr %0, align 8, !tbaa !5
  %121 = zext i32 %120 to i64
  %122 = icmp ult i64 %indvars.iv.next, %121
  br i1 %122, label %25, label %._crit_edge, !llvm.loop !37

._crit_edge:                                      ; preds = %117, %4
  ret void
}

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

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

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

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

!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 0}
!6 = !{!"pitch2category_obj", !7, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!13, !11, i64 8}
!13 = !{!"tracks_obj", !7, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32}
!14 = !{!15, !15, i64 0}
!15 = !{!"long long", !8, i64 0}
!16 = !{!6, !11, i64 96}
!17 = !{!8, !8, i64 0}
!18 = !{!19, !11, i64 8}
!19 = !{!"pitches_obj", !7, i64 0, !11, i64 8}
!20 = !{!10, !10, i64 0}
!21 = !{!6, !11, i64 32}
!22 = !{!6, !11, i64 40}
!23 = !{!6, !11, i64 48}
!24 = !{!6, !10, i64 12}
!25 = !{!6, !11, i64 56}
!26 = !{!6, !10, i64 16}
!27 = !{!6, !11, i64 72}
!28 = !{!6, !11, i64 64}
!29 = !{!6, !10, i64 4}
!30 = !{!6, !10, i64 8}
!31 = !{!6, !10, i64 24}
!32 = !{!6, !11, i64 80}
!33 = !{!6, !10, i64 20}
!34 = !{!6, !11, i64 88}
!35 = !{!6, !10, i64 28}
!36 = !{!11, !11, i64 0}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass