; LLVM IR from SelfishOlex/MiniAudioO3DE :: MiniAudio/Code/Source/Clients (MiniAudioImplementation)

; 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.ma_channel_converter_heap_layout = type { i64, i64, i64, i64, i64 }
%struct.ma_channel_converter = type { i32, i32, i32, i32, i32, ptr, ptr, ptr, %union.anon.27, ptr, i32 }
%union.anon.27 = type { ptr }
%struct.ma_channel_converter_config = type { i32, i32, i32, ptr, ptr, 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: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @ma_channel_map_copy_or_default(ptr noundef, i64 noundef, ptr noundef, i32 noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL30ma_is_spatial_channel_positionh(i8 noundef zeroext) #3

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL36ma_channel_converter_get_heap_layoutPK27ma_channel_converter_configP32ma_channel_converter_heap_layout(ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
define dso_local i32 @ma_channel_converter_init_preallocated(ptr noundef %0, ptr noundef %1, ptr noundef %2) #2 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %struct.ma_channel_converter_heap_layout, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca float, align 4
  %14 = alloca i32, align 4
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca float, align 4
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = 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
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 40, ptr %9) #4
  %21 = load ptr, ptr %7, align 8, !tbaa !5
  %22 = icmp eq ptr %21, null
  br i1 %22, label %23, label %24

23:                                               ; preds = %3
  store i32 -2, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %704

24:                                               ; preds = %3
  %25 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %25, i8 0, i64 72, i1 false)
  %26 = load ptr, ptr %5, align 8, !tbaa !5
  %27 = call noundef i32 @_ZL36ma_channel_converter_get_heap_layoutPK27ma_channel_converter_configP32ma_channel_converter_heap_layout(ptr noundef %26, ptr noundef %9)
  store i32 %27, ptr %8, align 4, !tbaa !9
  %28 = load i32, ptr %8, align 4, !tbaa !9
  %29 = icmp ne i32 %28, 0
  br i1 %29, label %30, label %32

30:                                               ; preds = %24
  %31 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %31, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %704

32:                                               ; preds = %24
  %33 = load ptr, ptr %6, align 8, !tbaa !5
  %34 = load ptr, ptr %7, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.ma_channel_converter, ptr %34, i32 0, i32 9
  store ptr %33, ptr %35, align 8, !tbaa !11
  %36 = load ptr, ptr %7, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.ma_channel_converter, ptr %36, i32 0, i32 9
  %38 = load ptr, ptr %37, align 8, !tbaa !11
  %39 = getelementptr inbounds %struct.ma_channel_converter_heap_layout, ptr %9, i32 0, i32 0
  %40 = load i64, ptr %39, align 8, !tbaa !17
  call void @llvm.memset.p0.i64(ptr align 1 %38, i8 0, i64 %40, i1 false)
  %41 = load ptr, ptr %5, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %41, i32 0, i32 0
  %43 = load i32, ptr %42, align 8, !tbaa !20
  %44 = load ptr, ptr %7, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.ma_channel_converter, ptr %44, i32 0, i32 0
  store i32 %43, ptr %45, align 8, !tbaa !22
  %46 = load ptr, ptr %5, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %46, i32 0, i32 1
  %48 = load i32, ptr %47, align 4, !tbaa !23
  %49 = load ptr, ptr %7, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.ma_channel_converter, ptr %49, i32 0, i32 1
  store i32 %48, ptr %50, align 4, !tbaa !24
  %51 = load ptr, ptr %5, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %51, i32 0, i32 2
  %53 = load i32, ptr %52, align 8, !tbaa !25
  %54 = load ptr, ptr %7, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.ma_channel_converter, ptr %54, i32 0, i32 2
  store i32 %53, ptr %55, align 8, !tbaa !26
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %56, i32 0, i32 5
  %58 = load i32, ptr %57, align 8, !tbaa !27
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.ma_channel_converter, ptr %59, i32 0, i32 3
  store i32 %58, ptr %60, align 4, !tbaa !28
  %61 = load ptr, ptr %5, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %61, i32 0, i32 3
  %63 = load ptr, ptr %62, align 8, !tbaa !29
  %64 = icmp ne ptr %63, null
  br i1 %64, label %65, label %85

65:                                               ; preds = %32
  %66 = load ptr, ptr %6, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.ma_channel_converter_heap_layout, ptr %9, i32 0, i32 1
  %68 = load i64, ptr %67, align 8, !tbaa !30
  %69 = getelementptr inbounds i8, ptr %66, i64 %68
  %70 = load ptr, ptr %7, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.ma_channel_converter, ptr %70, i32 0, i32 5
  store ptr %69, ptr %71, align 8, !tbaa !31
  %72 = load ptr, ptr %7, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.ma_channel_converter, ptr %72, i32 0, i32 5
  %74 = load ptr, ptr %73, align 8, !tbaa !31
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %75, i32 0, i32 1
  %77 = load i32, ptr %76, align 4, !tbaa !23
  %78 = zext i32 %77 to i64
  %79 = load ptr, ptr %5, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %79, i32 0, i32 3
  %81 = load ptr, ptr %80, align 8, !tbaa !29
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %82, i32 0, i32 1
  %84 = load i32, ptr %83, align 4, !tbaa !23
  call void @ma_channel_map_copy_or_default(ptr noundef %74, i64 noundef %78, ptr noundef %81, i32 noundef %84)
  br label %88

85:                                               ; preds = %32
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.ma_channel_converter, ptr %86, i32 0, i32 5
  store ptr null, ptr %87, align 8, !tbaa !31
  br label %88

88:                                               ; preds = %85, %65
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %89, i32 0, i32 4
  %91 = load ptr, ptr %90, align 8, !tbaa !32
  %92 = icmp ne ptr %91, null
  br i1 %92, label %93, label %113

93:                                               ; preds = %88
  %94 = load ptr, ptr %6, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.ma_channel_converter_heap_layout, ptr %9, i32 0, i32 2
  %96 = load i64, ptr %95, align 8, !tbaa !33
  %97 = getelementptr inbounds i8, ptr %94, i64 %96
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.ma_channel_converter, ptr %98, i32 0, i32 6
  store ptr %97, ptr %99, align 8, !tbaa !34
  %100 = load ptr, ptr %7, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.ma_channel_converter, ptr %100, i32 0, i32 6
  %102 = load ptr, ptr %101, align 8, !tbaa !34
  %103 = load ptr, ptr %5, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %103, i32 0, i32 2
  %105 = load i32, ptr %104, align 8, !tbaa !25
  %106 = zext i32 %105 to i64
  %107 = load ptr, ptr %5, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %107, i32 0, i32 4
  %109 = load ptr, ptr %108, align 8, !tbaa !32
  %110 = load ptr, ptr %5, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %110, i32 0, i32 2
  %112 = load i32, ptr %111, align 8, !tbaa !25
  call void @ma_channel_map_copy_or_default(ptr noundef %102, i64 noundef %106, ptr noundef %109, i32 noundef %112)
  br label %116

113:                                              ; preds = %88
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.ma_channel_converter, ptr %114, i32 0, i32 6
  store ptr null, ptr %115, align 8, !tbaa !34
  br label %116

116:                                              ; preds = %113, %93
  %117 = load ptr, ptr %5, align 8, !tbaa !5
  %118 = call noundef i32 @_ZL47ma_channel_converter_config_get_conversion_pathPK27ma_channel_converter_config(ptr noundef %117)
  %119 = load ptr, ptr %7, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.ma_channel_converter, ptr %119, i32 0, i32 4
  store i32 %118, ptr %120, align 8, !tbaa !35
  %121 = load ptr, ptr %7, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.ma_channel_converter, ptr %121, i32 0, i32 4
  %123 = load i32, ptr %122, align 8, !tbaa !35
  %124 = icmp eq i32 %123, 4
  br i1 %124, label %125, label %148

125:                                              ; preds = %116
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.ma_channel_converter_heap_layout, ptr %9, i32 0, i32 3
  %128 = load i64, ptr %127, align 8, !tbaa !36
  %129 = getelementptr inbounds i8, ptr %126, i64 %128
  %130 = load ptr, ptr %7, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.ma_channel_converter, ptr %130, i32 0, i32 7
  store ptr %129, ptr %131, align 8, !tbaa !37
  %132 = load ptr, ptr %7, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.ma_channel_converter, ptr %132, i32 0, i32 5
  %134 = load ptr, ptr %133, align 8, !tbaa !31
  %135 = load ptr, ptr %7, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.ma_channel_converter, ptr %135, i32 0, i32 1
  %137 = load i32, ptr %136, align 4, !tbaa !24
  %138 = load ptr, ptr %7, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.ma_channel_converter, ptr %138, i32 0, i32 6
  %140 = load ptr, ptr %139, align 8, !tbaa !34
  %141 = load ptr, ptr %7, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.ma_channel_converter, ptr %141, i32 0, i32 2
  %143 = load i32, ptr %142, align 8, !tbaa !26
  %144 = load ptr, ptr %7, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.ma_channel_converter, ptr %144, i32 0, i32 7
  %146 = load ptr, ptr %145, align 8, !tbaa !37
  %147 = call noundef i32 @_ZL34ma_channel_map_build_shuffle_tablePKhjS0_jPh(ptr noundef %134, i32 noundef %137, ptr noundef %140, i32 noundef %143, ptr noundef %146)
  br label %148

148:                                              ; preds = %125, %116
  %149 = load ptr, ptr %7, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.ma_channel_converter, ptr %149, i32 0, i32 4
  %151 = load i32, ptr %150, align 8, !tbaa !35
  %152 = icmp eq i32 %151, 5
  br i1 %152, label %153, label %703

153:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  %154 = load ptr, ptr %7, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.ma_channel_converter, ptr %154, i32 0, i32 0
  %156 = load i32, ptr %155, align 8, !tbaa !22
  %157 = icmp eq i32 %156, 5
  br i1 %157, label %158, label %201

158:                                              ; preds = %153
  %159 = load ptr, ptr %6, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.ma_channel_converter_heap_layout, ptr %9, i32 0, i32 4
  %161 = load i64, ptr %160, align 8, !tbaa !38
  %162 = getelementptr inbounds i8, ptr %159, i64 %161
  %163 = load ptr, ptr %7, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.ma_channel_converter, ptr %163, i32 0, i32 8
  store ptr %162, ptr %164, align 8, !tbaa !39
  store i32 0, ptr %11, align 4, !tbaa !40
  br label %165

165:                                              ; preds = %197, %158
  %166 = load i32, ptr %11, align 4, !tbaa !40
  %167 = load ptr, ptr %7, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.ma_channel_converter, ptr %167, i32 0, i32 1
  %169 = load i32, ptr %168, align 4, !tbaa !24
  %170 = icmp ult i32 %166, %169
  br i1 %170, label %171, label %200

171:                                              ; preds = %165
  %172 = load ptr, ptr %6, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.ma_channel_converter_heap_layout, ptr %9, i32 0, i32 4
  %174 = load i64, ptr %173, align 8, !tbaa !38
  %175 = load ptr, ptr %7, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.ma_channel_converter, ptr %175, i32 0, i32 1
  %177 = load i32, ptr %176, align 4, !tbaa !24
  %178 = zext i32 %177 to i64
  %179 = mul i64 8, %178
  %180 = load ptr, ptr %7, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.ma_channel_converter, ptr %180, i32 0, i32 2
  %182 = load i32, ptr %181, align 8, !tbaa !26
  %183 = zext i32 %182 to i64
  %184 = mul i64 4, %183
  %185 = load i32, ptr %11, align 4, !tbaa !40
  %186 = zext i32 %185 to i64
  %187 = mul i64 %184, %186
  %188 = add i64 %179, %187
  %189 = add i64 %174, %188
  %190 = getelementptr inbounds i8, ptr %172, i64 %189
  %191 = load ptr, ptr %7, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.ma_channel_converter, ptr %191, i32 0, i32 8
  %193 = load ptr, ptr %192, align 8, !tbaa !39
  %194 = load i32, ptr %11, align 4, !tbaa !40
  %195 = zext i32 %194 to i64
  %196 = getelementptr inbounds ptr, ptr %193, i64 %195
  store ptr %190, ptr %196, align 8, !tbaa !5
  br label %197

197:                                              ; preds = %171
  %198 = load i32, ptr %11, align 4, !tbaa !40
  %199 = add i32 %198, 1
  store i32 %199, ptr %11, align 4, !tbaa !40
  br label %165, !llvm.loop !41

200:                                              ; preds = %165
  br label %244

201:                                              ; preds = %153
  %202 = load ptr, ptr %6, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.ma_channel_converter_heap_layout, ptr %9, i32 0, i32 4
  %204 = load i64, ptr %203, align 8, !tbaa !38
  %205 = getelementptr inbounds i8, ptr %202, i64 %204
  %206 = load ptr, ptr %7, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.ma_channel_converter, ptr %206, i32 0, i32 8
  store ptr %205, ptr %207, align 8, !tbaa !39
  store i32 0, ptr %11, align 4, !tbaa !40
  br label %208

208:                                              ; preds = %240, %201
  %209 = load i32, ptr %11, align 4, !tbaa !40
  %210 = load ptr, ptr %7, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.ma_channel_converter, ptr %210, i32 0, i32 1
  %212 = load i32, ptr %211, align 4, !tbaa !24
  %213 = icmp ult i32 %209, %212
  br i1 %213, label %214, label %243

214:                                              ; preds = %208
  %215 = load ptr, ptr %6, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.ma_channel_converter_heap_layout, ptr %9, i32 0, i32 4
  %217 = load i64, ptr %216, align 8, !tbaa !38
  %218 = load ptr, ptr %7, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.ma_channel_converter, ptr %218, i32 0, i32 1
  %220 = load i32, ptr %219, align 4, !tbaa !24
  %221 = zext i32 %220 to i64
  %222 = mul i64 8, %221
  %223 = load ptr, ptr %7, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.ma_channel_converter, ptr %223, i32 0, i32 2
  %225 = load i32, ptr %224, align 8, !tbaa !26
  %226 = zext i32 %225 to i64
  %227 = mul i64 4, %226
  %228 = load i32, ptr %11, align 4, !tbaa !40
  %229 = zext i32 %228 to i64
  %230 = mul i64 %227, %229
  %231 = add i64 %222, %230
  %232 = add i64 %217, %231
  %233 = getelementptr inbounds i8, ptr %215, i64 %232
  %234 = load ptr, ptr %7, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.ma_channel_converter, ptr %234, i32 0, i32 8
  %236 = load ptr, ptr %235, align 8, !tbaa !39
  %237 = load i32, ptr %11, align 4, !tbaa !40
  %238 = zext i32 %237 to i64
  %239 = getelementptr inbounds ptr, ptr %236, i64 %238
  store ptr %233, ptr %239, align 8, !tbaa !5
  br label %240

240:                                              ; preds = %214
  %241 = load i32, ptr %11, align 4, !tbaa !40
  %242 = add i32 %241, 1
  store i32 %242, ptr %11, align 4, !tbaa !40
  br label %208, !llvm.loop !43

243:                                              ; preds = %208
  br label %244

244:                                              ; preds = %243, %200
  store i32 0, ptr %11, align 4, !tbaa !40
  br label %245

245:                                              ; preds = %290, %244
  %246 = load i32, ptr %11, align 4, !tbaa !40
  %247 = load ptr, ptr %7, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.ma_channel_converter, ptr %247, i32 0, i32 1
  %249 = load i32, ptr %248, align 4, !tbaa !24
  %250 = icmp ult i32 %246, %249
  br i1 %250, label %251, label %293

251:                                              ; preds = %245
  store i32 0, ptr %12, align 4, !tbaa !40
  br label %252

252:                                              ; preds = %286, %251
  %253 = load i32, ptr %12, align 4, !tbaa !40
  %254 = load ptr, ptr %7, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.ma_channel_converter, ptr %254, i32 0, i32 2
  %256 = load i32, ptr %255, align 8, !tbaa !26
  %257 = icmp ult i32 %253, %256
  br i1 %257, label %258, label %289

258:                                              ; preds = %252
  %259 = load ptr, ptr %7, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.ma_channel_converter, ptr %259, i32 0, i32 0
  %261 = load i32, ptr %260, align 8, !tbaa !22
  %262 = icmp eq i32 %261, 5
  br i1 %262, label %263, label %274

263:                                              ; preds = %258
  %264 = load ptr, ptr %7, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.ma_channel_converter, ptr %264, i32 0, i32 8
  %266 = load ptr, ptr %265, align 8, !tbaa !39
  %267 = load i32, ptr %11, align 4, !tbaa !40
  %268 = zext i32 %267 to i64
  %269 = getelementptr inbounds ptr, ptr %266, i64 %268
  %270 = load ptr, ptr %269, align 8, !tbaa !5
  %271 = load i32, ptr %12, align 4, !tbaa !40
  %272 = zext i32 %271 to i64
  %273 = getelementptr inbounds float, ptr %270, i64 %272
  store float 0.000000e+00, ptr %273, align 4, !tbaa !44
  br label %285

274:                                              ; preds = %258
  %275 = load ptr, ptr %7, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.ma_channel_converter, ptr %275, i32 0, i32 8
  %277 = load ptr, ptr %276, align 8, !tbaa !39
  %278 = load i32, ptr %11, align 4, !tbaa !40
  %279 = zext i32 %278 to i64
  %280 = getelementptr inbounds ptr, ptr %277, i64 %279
  %281 = load ptr, ptr %280, align 8, !tbaa !5
  %282 = load i32, ptr %12, align 4, !tbaa !40
  %283 = zext i32 %282 to i64
  %284 = getelementptr inbounds i32, ptr %281, i64 %283
  store i32 0, ptr %284, align 4, !tbaa !40
  br label %285

285:                                              ; preds = %274, %263
  br label %286

286:                                              ; preds = %285
  %287 = load i32, ptr %12, align 4, !tbaa !40
  %288 = add i32 %287, 1
  store i32 %288, ptr %12, align 4, !tbaa !40
  br label %252, !llvm.loop !46

289:                                              ; preds = %252
  br label %290

290:                                              ; preds = %289
  %291 = load i32, ptr %11, align 4, !tbaa !40
  %292 = add i32 %291, 1
  store i32 %292, ptr %11, align 4, !tbaa !40
  br label %245, !llvm.loop !47

293:                                              ; preds = %245
  %294 = load ptr, ptr %7, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.ma_channel_converter, ptr %294, i32 0, i32 3
  %296 = load i32, ptr %295, align 4, !tbaa !28
  switch i32 %296, label %450 [
    i32 2, label %297
    i32 1, label %367
    i32 0, label %449
  ]

297:                                              ; preds = %293
  %298 = load ptr, ptr %5, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %298, i32 0, i32 6
  %300 = load ptr, ptr %299, align 8, !tbaa !48
  %301 = icmp eq ptr %300, null
  br i1 %301, label %302, label %303

302:                                              ; preds = %297
  store i32 -2, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %700

303:                                              ; preds = %297
  store i32 0, ptr %11, align 4, !tbaa !40
  br label %304

304:                                              ; preds = %363, %303
  %305 = load i32, ptr %11, align 4, !tbaa !40
  %306 = load ptr, ptr %7, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.ma_channel_converter, ptr %306, i32 0, i32 1
  %308 = load i32, ptr %307, align 4, !tbaa !24
  %309 = icmp ult i32 %305, %308
  br i1 %309, label %310, label %366

310:                                              ; preds = %304
  store i32 0, ptr %12, align 4, !tbaa !40
  br label %311

311:                                              ; preds = %359, %310
  %312 = load i32, ptr %12, align 4, !tbaa !40
  %313 = load ptr, ptr %7, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.ma_channel_converter, ptr %313, i32 0, i32 2
  %315 = load i32, ptr %314, align 8, !tbaa !26
  %316 = icmp ult i32 %312, %315
  br i1 %316, label %317, label %362

317:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.ma_channel_converter_config, ptr %318, i32 0, i32 6
  %320 = load ptr, ptr %319, align 8, !tbaa !48
  %321 = load i32, ptr %11, align 4, !tbaa !40
  %322 = zext i32 %321 to i64
  %323 = getelementptr inbounds ptr, ptr %320, i64 %322
  %324 = load ptr, ptr %323, align 8, !tbaa !5
  %325 = load i32, ptr %12, align 4, !tbaa !40
  %326 = zext i32 %325 to i64
  %327 = getelementptr inbounds float, ptr %324, i64 %326
  %328 = load float, ptr %327, align 4, !tbaa !44
  store float %328, ptr %13, align 4, !tbaa !44
  %329 = load ptr, ptr %7, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.ma_channel_converter, ptr %329, i32 0, i32 0
  %331 = load i32, ptr %330, align 8, !tbaa !22
  %332 = icmp eq i32 %331, 5
  br i1 %332, label %333, label %345

333:                                              ; preds = %317
  %334 = load float, ptr %13, align 4, !tbaa !44
  %335 = load ptr, ptr %7, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.ma_channel_converter, ptr %335, i32 0, i32 8
  %337 = load ptr, ptr %336, align 8, !tbaa !39
  %338 = load i32, ptr %11, align 4, !tbaa !40
  %339 = zext i32 %338 to i64
  %340 = getelementptr inbounds ptr, ptr %337, i64 %339
  %341 = load ptr, ptr %340, align 8, !tbaa !5
  %342 = load i32, ptr %12, align 4, !tbaa !40
  %343 = zext i32 %342 to i64
  %344 = getelementptr inbounds float, ptr %341, i64 %343
  store float %334, ptr %344, align 4, !tbaa !44
  br label %358

345:                                              ; preds = %317
  %346 = load float, ptr %13, align 4, !tbaa !44
  %347 = call noundef i32 @_ZL35ma_channel_converter_float_to_fixedf(float noundef %346)
  %348 = load ptr, ptr %7, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.ma_channel_converter, ptr %348, i32 0, i32 8
  %350 = load ptr, ptr %349, align 8, !tbaa !39
  %351 = load i32, ptr %11, align 4, !tbaa !40
  %352 = zext i32 %351 to i64
  %353 = getelementptr inbounds ptr, ptr %350, i64 %352
  %354 = load ptr, ptr %353, align 8, !tbaa !5
  %355 = load i32, ptr %12, align 4, !tbaa !40
  %356 = zext i32 %355 to i64
  %357 = getelementptr inbounds i32, ptr %354, i64 %356
  store i32 %347, ptr %357, align 4, !tbaa !40
  br label %358

358:                                              ; preds = %345, %333
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %359

359:                                              ; preds = %358
  %360 = load i32, ptr %12, align 4, !tbaa !40
  %361 = add i32 %360, 1
  store i32 %361, ptr %12, align 4, !tbaa !40
  br label %311, !llvm.loop !49

362:                                              ; preds = %311
  br label %363

363:                                              ; preds = %362
  %364 = load i32, ptr %11, align 4, !tbaa !40
  %365 = add i32 %364, 1
  store i32 %365, ptr %11, align 4, !tbaa !40
  br label %304, !llvm.loop !50

366:                                              ; preds = %304
  br label %699

367:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 0, ptr %14, align 4, !tbaa !40
  br label %368

368:                                              ; preds = %445, %367
  %369 = load i32, ptr %14, align 4, !tbaa !40
  %370 = load ptr, ptr %7, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.ma_channel_converter, ptr %370, i32 0, i32 1
  %372 = load i32, ptr %371, align 4, !tbaa !24
  %373 = load ptr, ptr %7, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.ma_channel_converter, ptr %373, i32 0, i32 2
  %375 = load i32, ptr %374, align 8, !tbaa !26
  %376 = icmp ult i32 %372, %375
  br i1 %376, label %377, label %381

377:                                              ; preds = %368
  %378 = load ptr, ptr %7, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.ma_channel_converter, ptr %378, i32 0, i32 1
  %380 = load i32, ptr %379, align 4, !tbaa !24
  br label %385

381:                                              ; preds = %368
  %382 = load ptr, ptr %7, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.ma_channel_converter, ptr %382, i32 0, i32 2
  %384 = load i32, ptr %383, align 8, !tbaa !26
  br label %385

385:                                              ; preds = %381, %377
  %386 = phi i32 [ %380, %377 ], [ %384, %381 ]
  %387 = icmp ult i32 %369, %386
  br i1 %387, label %388, label %448

388:                                              ; preds = %385
  %389 = load ptr, ptr %7, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.ma_channel_converter, ptr %389, i32 0, i32 0
  %391 = load i32, ptr %390, align 8, !tbaa !22
  %392 = icmp eq i32 %391, 5
  br i1 %392, label %393, label %418

393:                                              ; preds = %388
  %394 = load ptr, ptr %7, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.ma_channel_converter, ptr %394, i32 0, i32 8
  %396 = load ptr, ptr %395, align 8, !tbaa !39
  %397 = load i32, ptr %14, align 4, !tbaa !40
  %398 = zext i32 %397 to i64
  %399 = getelementptr inbounds ptr, ptr %396, i64 %398
  %400 = load ptr, ptr %399, align 8, !tbaa !5
  %401 = load i32, ptr %14, align 4, !tbaa !40
  %402 = zext i32 %401 to i64
  %403 = getelementptr inbounds float, ptr %400, i64 %402
  %404 = load float, ptr %403, align 4, !tbaa !44
  %405 = fcmp oeq float %404, 0.000000e+00
  br i1 %405, label %406, label %417

406:                                              ; preds = %393
  %407 = load ptr, ptr %7, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.ma_channel_converter, ptr %407, i32 0, i32 8
  %409 = load ptr, ptr %408, align 8, !tbaa !39
  %410 = load i32, ptr %14, align 4, !tbaa !40
  %411 = zext i32 %410 to i64
  %412 = getelementptr inbounds ptr, ptr %409, i64 %411
  %413 = load ptr, ptr %412, align 8, !tbaa !5
  %414 = load i32, ptr %14, align 4, !tbaa !40
  %415 = zext i32 %414 to i64
  %416 = getelementptr inbounds float, ptr %413, i64 %415
  store float 1.000000e+00, ptr %416, align 4, !tbaa !44
  br label %417

417:                                              ; preds = %406, %393
  br label %444

418:                                              ; preds = %388
  %419 = load ptr, ptr %7, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.ma_channel_converter, ptr %419, i32 0, i32 8
  %421 = load ptr, ptr %420, align 8, !tbaa !39
  %422 = load i32, ptr %14, align 4, !tbaa !40
  %423 = zext i32 %422 to i64
  %424 = getelementptr inbounds ptr, ptr %421, i64 %423
  %425 = load ptr, ptr %424, align 8, !tbaa !5
  %426 = load i32, ptr %14, align 4, !tbaa !40
  %427 = zext i32 %426 to i64
  %428 = getelementptr inbounds i32, ptr %425, i64 %427
  %429 = load i32, ptr %428, align 4, !tbaa !40
  %430 = icmp eq i32 %429, 0
  br i1 %430, label %431, label %443

431:                                              ; preds = %418
  %432 = call noundef i32 @_ZL35ma_channel_converter_float_to_fixedf(float noundef 1.000000e+00)
  %433 = load ptr, ptr %7, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.ma_channel_converter, ptr %433, i32 0, i32 8
  %435 = load ptr, ptr %434, align 8, !tbaa !39
  %436 = load i32, ptr %14, align 4, !tbaa !40
  %437 = zext i32 %436 to i64
  %438 = getelementptr inbounds ptr, ptr %435, i64 %437
  %439 = load ptr, ptr %438, align 8, !tbaa !5
  %440 = load i32, ptr %14, align 4, !tbaa !40
  %441 = zext i32 %440 to i64
  %442 = getelementptr inbounds i32, ptr %439, i64 %441
  store i32 %432, ptr %442, align 4, !tbaa !40
  br label %443

443:                                              ; preds = %431, %418
  br label %444

444:                                              ; preds = %443, %417
  br label %445

445:                                              ; preds = %444
  %446 = load i32, ptr %14, align 4, !tbaa !40
  %447 = add i32 %446, 1
  store i32 %447, ptr %14, align 4, !tbaa !40
  br label %368, !llvm.loop !51

448:                                              ; preds = %385
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br label %699

449:                                              ; preds = %293
  br label %450

450:                                              ; preds = %449, %293
  store i32 0, ptr %11, align 4, !tbaa !40
  br label %451

451:                                              ; preds = %571, %450
  %452 = load i32, ptr %11, align 4, !tbaa !40
  %453 = load ptr, ptr %7, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.ma_channel_converter, ptr %453, i32 0, i32 1
  %455 = load i32, ptr %454, align 4, !tbaa !24
  %456 = icmp ult i32 %452, %455
  br i1 %456, label %457, label %574

457:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #4
  %458 = load ptr, ptr %7, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.ma_channel_converter, ptr %458, i32 0, i32 5
  %460 = load ptr, ptr %459, align 8, !tbaa !31
  %461 = load i32, ptr %11, align 4, !tbaa !40
  %462 = zext i32 %461 to i64
  %463 = getelementptr inbounds i8, ptr %460, i64 %462
  %464 = load i8, ptr %463, align 1, !tbaa !39
  store i8 %464, ptr %15, align 1, !tbaa !39
  %465 = load i8, ptr %15, align 1, !tbaa !39
  %466 = call noundef i32 @_ZL30ma_is_spatial_channel_positionh(i8 noundef zeroext %465)
  %467 = icmp ne i32 %466, 0
  br i1 %467, label %468, label %570

468:                                              ; preds = %457
  %469 = load ptr, ptr %7, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.ma_channel_converter, ptr %469, i32 0, i32 2
  %471 = load i32, ptr %470, align 8, !tbaa !26
  %472 = load ptr, ptr %7, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.ma_channel_converter, ptr %472, i32 0, i32 6
  %474 = load ptr, ptr %473, align 8, !tbaa !34
  %475 = load i8, ptr %15, align 1, !tbaa !39
  %476 = call i32 @ma_channel_map_contains_channel_position(i32 noundef %471, ptr noundef %474, i8 noundef zeroext %475)
  %477 = icmp ne i32 %476, 0
  br i1 %477, label %569, label %478

478:                                              ; preds = %468
  store i32 0, ptr %12, align 4, !tbaa !40
  br label %479

479:                                              ; preds = %565, %478
  %480 = load i32, ptr %12, align 4, !tbaa !40
  %481 = load ptr, ptr %7, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.ma_channel_converter, ptr %481, i32 0, i32 2
  %483 = load i32, ptr %482, align 8, !tbaa !26
  %484 = icmp ult i32 %480, %483
  br i1 %484, label %485, label %568

485:                                              ; preds = %479
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #4
  %486 = load ptr, ptr %7, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.ma_channel_converter, ptr %486, i32 0, i32 6
  %488 = load ptr, ptr %487, align 8, !tbaa !34
  %489 = load i32, ptr %12, align 4, !tbaa !40
  %490 = zext i32 %489 to i64
  %491 = getelementptr inbounds i8, ptr %488, i64 %490
  %492 = load i8, ptr %491, align 1, !tbaa !39
  store i8 %492, ptr %16, align 1, !tbaa !39
  %493 = load i8, ptr %16, align 1, !tbaa !39
  %494 = call noundef i32 @_ZL30ma_is_spatial_channel_positionh(i8 noundef zeroext %493)
  %495 = icmp ne i32 %494, 0
  br i1 %495, label %496, label %564

496:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  store float 0.000000e+00, ptr %17, align 4, !tbaa !44
  %497 = load ptr, ptr %7, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.ma_channel_converter, ptr %497, i32 0, i32 3
  %499 = load i32, ptr %498, align 4, !tbaa !28
  %500 = icmp eq i32 %499, 0
  br i1 %500, label %501, label %505

501:                                              ; preds = %496
  %502 = load i8, ptr %15, align 1, !tbaa !39
  %503 = load i8, ptr %16, align 1, !tbaa !39
  %504 = call noundef float @_ZL48ma_calculate_channel_position_rectangular_weighthh(i8 noundef zeroext %502, i8 noundef zeroext %503)
  store float %504, ptr %17, align 4, !tbaa !44
  br label %505

505:                                              ; preds = %501, %496
  %506 = load ptr, ptr %7, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.ma_channel_converter, ptr %506, i32 0, i32 0
  %508 = load i32, ptr %507, align 8, !tbaa !22
  %509 = icmp eq i32 %508, 5
  br i1 %509, label %510, label %536

510:                                              ; preds = %505
  %511 = load ptr, ptr %7, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.ma_channel_converter, ptr %511, i32 0, i32 8
  %513 = load ptr, ptr %512, align 8, !tbaa !39
  %514 = load i32, ptr %11, align 4, !tbaa !40
  %515 = zext i32 %514 to i64
  %516 = getelementptr inbounds ptr, ptr %513, i64 %515
  %517 = load ptr, ptr %516, align 8, !tbaa !5
  %518 = load i32, ptr %12, align 4, !tbaa !40
  %519 = zext i32 %518 to i64
  %520 = getelementptr inbounds float, ptr %517, i64 %519
  %521 = load float, ptr %520, align 4, !tbaa !44
  %522 = fcmp oeq float %521, 0.000000e+00
  br i1 %522, label %523, label %535

523:                                              ; preds = %510
  %524 = load float, ptr %17, align 4, !tbaa !44
  %525 = load ptr, ptr %7, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.ma_channel_converter, ptr %525, i32 0, i32 8
  %527 = load ptr, ptr %526, align 8, !tbaa !39
  %528 = load i32, ptr %11, align 4, !tbaa !40
  %529 = zext i32 %528 to i64
  %530 = getelementptr inbounds ptr, ptr %527, i64 %529
  %531 = load ptr, ptr %530, align 8, !tbaa !5
  %532 = load i32, ptr %12, align 4, !tbaa !40
  %533 = zext i32 %532 to i64
  %534 = getelementptr inbounds float, ptr %531, i64 %533
  store float %524, ptr %534, align 4, !tbaa !44
  br label %535

535:                                              ; preds = %523, %510
  br label %563

536:                                              ; preds = %505
  %537 = load ptr, ptr %7, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.ma_channel_converter, ptr %537, i32 0, i32 8
  %539 = load ptr, ptr %538, align 8, !tbaa !39
  %540 = load i32, ptr %11, align 4, !tbaa !40
  %541 = zext i32 %540 to i64
  %542 = getelementptr inbounds ptr, ptr %539, i64 %541
  %543 = load ptr, ptr %542, align 8, !tbaa !5
  %544 = load i32, ptr %12, align 4, !tbaa !40
  %545 = zext i32 %544 to i64
  %546 = getelementptr inbounds i32, ptr %543, i64 %545
  %547 = load i32, ptr %546, align 4, !tbaa !40
  %548 = icmp eq i32 %547, 0
  br i1 %548, label %549, label %562

549:                                              ; preds = %536
  %550 = load float, ptr %17, align 4, !tbaa !44
  %551 = call noundef i32 @_ZL35ma_channel_converter_float_to_fixedf(float noundef %550)
  %552 = load ptr, ptr %7, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.ma_channel_converter, ptr %552, i32 0, i32 8
  %554 = load ptr, ptr %553, align 8, !tbaa !39
  %555 = load i32, ptr %11, align 4, !tbaa !40
  %556 = zext i32 %555 to i64
  %557 = getelementptr inbounds ptr, ptr %554, i64 %556
  %558 = load ptr, ptr %557, align 8, !tbaa !5
  %559 = load i32, ptr %12, align 4, !tbaa !40
  %560 = zext i32 %559 to i64
  %561 = getelementptr inbounds i32, ptr %558, i64 %560
  store i32 %551, ptr %561, align 4, !tbaa !40
  br label %562

562:                                              ; preds = %549, %536
  br label %563

563:                                              ; preds = %562, %535
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %564

564:                                              ; preds = %563, %485
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #4
  br label %565

565:                                              ; preds = %564
  %566 = load i32, ptr %12, align 4, !tbaa !40
  %567 = add i32 %566, 1
  store i32 %567, ptr %12, align 4, !tbaa !40
  br label %479, !llvm.loop !52

568:                                              ; preds = %479
  br label %569

569:                                              ; preds = %568, %468
  br label %570

570:                                              ; preds = %569, %457
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #4
  br label %571

571:                                              ; preds = %570
  %572 = load i32, ptr %11, align 4, !tbaa !40
  %573 = add i32 %572, 1
  store i32 %573, ptr %11, align 4, !tbaa !40
  br label %451, !llvm.loop !53

574:                                              ; preds = %451
  store i32 0, ptr %12, align 4, !tbaa !40
  br label %575

575:                                              ; preds = %695, %574
  %576 = load i32, ptr %12, align 4, !tbaa !40
  %577 = load ptr, ptr %7, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.ma_channel_converter, ptr %577, i32 0, i32 2
  %579 = load i32, ptr %578, align 8, !tbaa !26
  %580 = icmp ult i32 %576, %579
  br i1 %580, label %581, label %698

581:                                              ; preds = %575
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #4
  %582 = load ptr, ptr %7, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.ma_channel_converter, ptr %582, i32 0, i32 6
  %584 = load ptr, ptr %583, align 8, !tbaa !34
  %585 = load i32, ptr %12, align 4, !tbaa !40
  %586 = zext i32 %585 to i64
  %587 = getelementptr inbounds i8, ptr %584, i64 %586
  %588 = load i8, ptr %587, align 1, !tbaa !39
  store i8 %588, ptr %18, align 1, !tbaa !39
  %589 = load i8, ptr %18, align 1, !tbaa !39
  %590 = call noundef i32 @_ZL30ma_is_spatial_channel_positionh(i8 noundef zeroext %589)
  %591 = icmp ne i32 %590, 0
  br i1 %591, label %592, label %694

592:                                              ; preds = %581
  %593 = load ptr, ptr %7, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.ma_channel_converter, ptr %593, i32 0, i32 1
  %595 = load i32, ptr %594, align 4, !tbaa !24
  %596 = load ptr, ptr %7, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.ma_channel_converter, ptr %596, i32 0, i32 5
  %598 = load ptr, ptr %597, align 8, !tbaa !31
  %599 = load i8, ptr %18, align 1, !tbaa !39
  %600 = call i32 @ma_channel_map_contains_channel_position(i32 noundef %595, ptr noundef %598, i8 noundef zeroext %599)
  %601 = icmp ne i32 %600, 0
  br i1 %601, label %693, label %602

602:                                              ; preds = %592
  store i32 0, ptr %11, align 4, !tbaa !40
  br label %603

603:                                              ; preds = %689, %602
  %604 = load i32, ptr %11, align 4, !tbaa !40
  %605 = load ptr, ptr %7, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.ma_channel_converter, ptr %605, i32 0, i32 1
  %607 = load i32, ptr %606, align 4, !tbaa !24
  %608 = icmp ult i32 %604, %607
  br i1 %608, label %609, label %692

609:                                              ; preds = %603
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #4
  %610 = load ptr, ptr %7, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.ma_channel_converter, ptr %610, i32 0, i32 5
  %612 = load ptr, ptr %611, align 8, !tbaa !31
  %613 = load i32, ptr %11, align 4, !tbaa !40
  %614 = zext i32 %613 to i64
  %615 = getelementptr inbounds i8, ptr %612, i64 %614
  %616 = load i8, ptr %615, align 1, !tbaa !39
  store i8 %616, ptr %19, align 1, !tbaa !39
  %617 = load i8, ptr %19, align 1, !tbaa !39
  %618 = call noundef i32 @_ZL30ma_is_spatial_channel_positionh(i8 noundef zeroext %617)
  %619 = icmp ne i32 %618, 0
  br i1 %619, label %620, label %688

620:                                              ; preds = %609
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store float 0.000000e+00, ptr %20, align 4, !tbaa !44
  %621 = load ptr, ptr %7, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.ma_channel_converter, ptr %621, i32 0, i32 3
  %623 = load i32, ptr %622, align 4, !tbaa !28
  %624 = icmp eq i32 %623, 0
  br i1 %624, label %625, label %629

625:                                              ; preds = %620
  %626 = load i8, ptr %19, align 1, !tbaa !39
  %627 = load i8, ptr %18, align 1, !tbaa !39
  %628 = call noundef float @_ZL48ma_calculate_channel_position_rectangular_weighthh(i8 noundef zeroext %626, i8 noundef zeroext %627)
  store float %628, ptr %20, align 4, !tbaa !44
  br label %629

629:                                              ; preds = %625, %620
  %630 = load ptr, ptr %7, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.ma_channel_converter, ptr %630, i32 0, i32 0
  %632 = load i32, ptr %631, align 8, !tbaa !22
  %633 = icmp eq i32 %632, 5
  br i1 %633, label %634, label %660

634:                                              ; preds = %629
  %635 = load ptr, ptr %7, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.ma_channel_converter, ptr %635, i32 0, i32 8
  %637 = load ptr, ptr %636, align 8, !tbaa !39
  %638 = load i32, ptr %11, align 4, !tbaa !40
  %639 = zext i32 %638 to i64
  %640 = getelementptr inbounds ptr, ptr %637, i64 %639
  %641 = load ptr, ptr %640, align 8, !tbaa !5
  %642 = load i32, ptr %12, align 4, !tbaa !40
  %643 = zext i32 %642 to i64
  %644 = getelementptr inbounds float, ptr %641, i64 %643
  %645 = load float, ptr %644, align 4, !tbaa !44
  %646 = fcmp oeq float %645, 0.000000e+00
  br i1 %646, label %647, label %659

647:                                              ; preds = %634
  %648 = load float, ptr %20, align 4, !tbaa !44
  %649 = load ptr, ptr %7, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.ma_channel_converter, ptr %649, i32 0, i32 8
  %651 = load ptr, ptr %650, align 8, !tbaa !39
  %652 = load i32, ptr %11, align 4, !tbaa !40
  %653 = zext i32 %652 to i64
  %654 = getelementptr inbounds ptr, ptr %651, i64 %653
  %655 = load ptr, ptr %654, align 8, !tbaa !5
  %656 = load i32, ptr %12, align 4, !tbaa !40
  %657 = zext i32 %656 to i64
  %658 = getelementptr inbounds float, ptr %655, i64 %657
  store float %648, ptr %658, align 4, !tbaa !44
  br label %659

659:                                              ; preds = %647, %634
  br label %687

660:                                              ; preds = %629
  %661 = load ptr, ptr %7, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.ma_channel_converter, ptr %661, i32 0, i32 8
  %663 = load ptr, ptr %662, align 8, !tbaa !39
  %664 = load i32, ptr %11, align 4, !tbaa !40
  %665 = zext i32 %664 to i64
  %666 = getelementptr inbounds ptr, ptr %663, i64 %665
  %667 = load ptr, ptr %666, align 8, !tbaa !5
  %668 = load i32, ptr %12, align 4, !tbaa !40
  %669 = zext i32 %668 to i64
  %670 = getelementptr inbounds i32, ptr %667, i64 %669
  %671 = load i32, ptr %670, align 4, !tbaa !40
  %672 = icmp eq i32 %671, 0
  br i1 %672, label %673, label %686

673:                                              ; preds = %660
  %674 = load float, ptr %20, align 4, !tbaa !44
  %675 = call noundef i32 @_ZL35ma_channel_converter_float_to_fixedf(float noundef %674)
  %676 = load ptr, ptr %7, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.ma_channel_converter, ptr %676, i32 0, i32 8
  %678 = load ptr, ptr %677, align 8, !tbaa !39
  %679 = load i32, ptr %11, align 4, !tbaa !40
  %680 = zext i32 %679 to i64
  %681 = getelementptr inbounds ptr, ptr %678, i64 %680
  %682 = load ptr, ptr %681, align 8, !tbaa !5
  %683 = load i32, ptr %12, align 4, !tbaa !40
  %684 = zext i32 %683 to i64
  %685 = getelementptr inbounds i32, ptr %682, i64 %684
  store i32 %675, ptr %685, align 4, !tbaa !40
  br label %686

686:                                              ; preds = %673, %660
  br label %687

687:                                              ; preds = %686, %659
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br label %688

688:                                              ; preds = %687, %609
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #4
  br label %689

689:                                              ; preds = %688
  %690 = load i32, ptr %11, align 4, !tbaa !40
  %691 = add i32 %690, 1
  store i32 %691, ptr %11, align 4, !tbaa !40
  br label %603, !llvm.loop !54

692:                                              ; preds = %603
  br label %693

693:                                              ; preds = %692, %592
  br label %694

694:                                              ; preds = %693, %581
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #4
  br label %695

695:                                              ; preds = %694
  %696 = load i32, ptr %12, align 4, !tbaa !40
  %697 = add i32 %696, 1
  store i32 %697, ptr %12, align 4, !tbaa !40
  br label %575, !llvm.loop !55

698:                                              ; preds = %575
  br label %699

699:                                              ; preds = %698, %448, %366
  store i32 0, ptr %10, align 4
  br label %700

700:                                              ; preds = %699, %302
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  %701 = load i32, ptr %10, align 4
  switch i32 %701, label %704 [
    i32 0, label %702
  ]

702:                                              ; preds = %700
  br label %703

703:                                              ; preds = %702, %148
  store i32 0, ptr %4, align 4
  store i32 1, ptr %10, align 4
  br label %704

704:                                              ; preds = %703, %700, %30, %23
  call void @llvm.lifetime.end.p0(i64 40, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  %705 = load i32, ptr %4, align 4
  ret i32 %705
}

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL47ma_channel_converter_config_get_conversion_pathPK27ma_channel_converter_config(ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL34ma_channel_map_build_shuffle_tablePKhjS0_jPh(ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL35ma_channel_converter_float_to_fixedf(float noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local i32 @ma_channel_map_contains_channel_position(i32 noundef, ptr noundef, i8 noundef zeroext) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef float @_ZL48ma_calculate_channel_position_rectangular_weighthh(i8 noundef zeroext, i8 noundef zeroext) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = { 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 #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"_ZTS9ma_result", !7, i64 0}
!11 = !{!12, !6, i64 56}
!12 = !{!"_ZTS20ma_channel_converter", !13, i64 0, !14, i64 4, !14, i64 8, !15, i64 12, !16, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !7, i64 48, !6, i64 56, !14, i64 64}
!13 = !{!"_ZTS9ma_format", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!"_ZTS19ma_channel_mix_mode", !7, i64 0}
!16 = !{!"_ZTS26ma_channel_conversion_path", !7, i64 0}
!17 = !{!18, !19, i64 0}
!18 = !{!"_ZTS32ma_channel_converter_heap_layout", !19, i64 0, !19, i64 8, !19, i64 16, !19, i64 24, !19, i64 32}
!19 = !{!"long", !7, i64 0}
!20 = !{!21, !13, i64 0}
!21 = !{!"_ZTS27ma_channel_converter_config", !13, i64 0, !14, i64 4, !14, i64 8, !6, i64 16, !6, i64 24, !15, i64 32, !6, i64 40}
!22 = !{!12, !13, i64 0}
!23 = !{!21, !14, i64 4}
!24 = !{!12, !14, i64 4}
!25 = !{!21, !14, i64 8}
!26 = !{!12, !14, i64 8}
!27 = !{!21, !15, i64 32}
!28 = !{!12, !15, i64 12}
!29 = !{!21, !6, i64 16}
!30 = !{!18, !19, i64 8}
!31 = !{!12, !6, i64 24}
!32 = !{!21, !6, i64 24}
!33 = !{!18, !19, i64 16}
!34 = !{!12, !6, i64 32}
!35 = !{!12, !16, i64 16}
!36 = !{!18, !19, i64 24}
!37 = !{!12, !6, i64 40}
!38 = !{!18, !19, i64 32}
!39 = !{!7, !7, i64 0}
!40 = !{!14, !14, i64 0}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = distinct !{!43, !42}
!44 = !{!45, !45, i64 0}
!45 = !{!"float", !7, i64 0}
!46 = distinct !{!46, !42}
!47 = distinct !{!47, !42}
!48 = !{!21, !6, i64 40}
!49 = distinct !{!49, !42}
!50 = distinct !{!50, !42}
!51 = distinct !{!51, !42}
!52 = distinct !{!52, !42}
!53 = distinct !{!53, !42}
!54 = distinct !{!54, !42}
!55 = distinct !{!55, !42}


; 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"

%struct.ma_channel_converter_heap_layout = type { i64, i64, i64, i64, i64 }

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @ma_channel_map_copy_or_default(ptr noundef, i64 noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL30ma_is_spatial_channel_positionh(i8 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL36ma_channel_converter_get_heap_layoutPK27ma_channel_converter_configP32ma_channel_converter_heap_layout(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @ma_channel_converter_init_preallocated(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #2 {
  %4 = alloca %struct.ma_channel_converter_heap_layout, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #5
  %5 = icmp eq ptr %2, null
  br i1 %5, label %.critedge, label %6

6:                                                ; preds = %3
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(72) %2, i8 0, i64 72, i1 false)
  %7 = call noundef i32 @_ZL36ma_channel_converter_get_heap_layoutPK27ma_channel_converter_configP32ma_channel_converter_heap_layout(ptr noundef %0, ptr noundef nonnull %4)
  %.not = icmp eq i32 %7, 0
  br i1 %.not, label %8, label %.critedge

8:                                                ; preds = %6
  %9 = getelementptr inbounds i8, ptr %2, i64 56
  store ptr %1, ptr %9, align 8, !tbaa !5
  %10 = load i64, ptr %4, align 8, !tbaa !14
  call void @llvm.memset.p0.i64(ptr align 1 %1, i8 0, i64 %10, i1 false)
  %11 = load i32, ptr %0, align 8, !tbaa !17
  store i32 %11, ptr %2, align 8, !tbaa !19
  %12 = getelementptr inbounds i8, ptr %0, i64 4
  %13 = getelementptr inbounds i8, ptr %2, i64 4
  %14 = getelementptr inbounds i8, ptr %0, i64 8
  %15 = getelementptr inbounds i8, ptr %2, i64 8
  %16 = load <2 x i32>, ptr %12, align 4, !tbaa !20
  store <2 x i32> %16, ptr %13, align 4, !tbaa !20
  %17 = getelementptr inbounds i8, ptr %0, i64 32
  %18 = load i32, ptr %17, align 8, !tbaa !21
  %19 = getelementptr inbounds i8, ptr %2, i64 12
  store i32 %18, ptr %19, align 4, !tbaa !22
  %20 = getelementptr inbounds i8, ptr %0, i64 16
  %21 = load ptr, ptr %20, align 8, !tbaa !23
  %.not201 = icmp eq ptr %21, null
  br i1 %.not201, label %29, label %22

22:                                               ; preds = %8
  %23 = getelementptr inbounds i8, ptr %4, i64 8
  %24 = load i64, ptr %23, align 8, !tbaa !24
  %25 = getelementptr inbounds i8, ptr %1, i64 %24
  %26 = getelementptr inbounds i8, ptr %2, i64 24
  store ptr %25, ptr %26, align 8, !tbaa !25
  %27 = extractelement <2 x i32> %16, i64 0
  %28 = zext i32 %27 to i64
  call void @ma_channel_map_copy_or_default(ptr noundef %25, i64 noundef %28, ptr noundef nonnull %21, i32 noundef %27)
  br label %31

29:                                               ; preds = %8
  %30 = getelementptr inbounds i8, ptr %2, i64 24
  store ptr null, ptr %30, align 8, !tbaa !25
  br label %31

31:                                               ; preds = %29, %22
  %32 = getelementptr inbounds i8, ptr %0, i64 24
  %33 = load ptr, ptr %32, align 8, !tbaa !26
  %.not202 = icmp eq ptr %33, null
  br i1 %.not202, label %41, label %34

34:                                               ; preds = %31
  %35 = getelementptr inbounds i8, ptr %4, i64 16
  %36 = load i64, ptr %35, align 8, !tbaa !27
  %37 = getelementptr inbounds i8, ptr %1, i64 %36
  %38 = getelementptr inbounds i8, ptr %2, i64 32
  store ptr %37, ptr %38, align 8, !tbaa !28
  %39 = load i32, ptr %14, align 8, !tbaa !29
  %40 = zext i32 %39 to i64
  call void @ma_channel_map_copy_or_default(ptr noundef %37, i64 noundef %40, ptr noundef nonnull %33, i32 noundef %39)
  br label %43

41:                                               ; preds = %31
  %42 = getelementptr inbounds i8, ptr %2, i64 32
  store ptr null, ptr %42, align 8, !tbaa !28
  br label %43

43:                                               ; preds = %41, %34
  %44 = call noundef i32 @_ZL47ma_channel_converter_config_get_conversion_pathPK27ma_channel_converter_config(ptr noundef nonnull %0)
  %45 = getelementptr inbounds i8, ptr %2, i64 16
  store i32 %44, ptr %45, align 8, !tbaa !30
  %46 = icmp eq i32 %44, 4
  br i1 %46, label %47, label %59

47:                                               ; preds = %43
  %48 = getelementptr inbounds i8, ptr %4, i64 24
  %49 = load i64, ptr %48, align 8, !tbaa !31
  %50 = getelementptr inbounds i8, ptr %1, i64 %49
  %51 = getelementptr inbounds i8, ptr %2, i64 40
  store ptr %50, ptr %51, align 8, !tbaa !32
  %52 = getelementptr inbounds i8, ptr %2, i64 24
  %53 = load ptr, ptr %52, align 8, !tbaa !25
  %54 = load i32, ptr %13, align 4, !tbaa !33
  %55 = getelementptr inbounds i8, ptr %2, i64 32
  %56 = load ptr, ptr %55, align 8, !tbaa !28
  %57 = load i32, ptr %15, align 8, !tbaa !34
  %58 = call noundef i32 @_ZL34ma_channel_map_build_shuffle_tablePKhjS0_jPh(ptr noundef %53, i32 noundef %54, ptr noundef %56, i32 noundef %57, ptr noundef %50)
  %.pr = load i32, ptr %45, align 8, !tbaa !30
  br label %59

59:                                               ; preds = %47, %43
  %60 = phi i32 [ %.pr, %47 ], [ %44, %43 ]
  %61 = icmp eq i32 %60, 5
  br i1 %61, label %62, label %.critedge

62:                                               ; preds = %59
  %63 = load i32, ptr %2, align 8, !tbaa !19
  %64 = icmp eq i32 %63, 5
  %65 = getelementptr inbounds i8, ptr %4, i64 32
  %66 = load i64, ptr %65, align 8, !tbaa !35
  %67 = getelementptr i8, ptr %1, i64 %66
  %68 = getelementptr inbounds i8, ptr %2, i64 48
  store ptr %67, ptr %68, align 8, !tbaa !36
  %69 = load i32, ptr %13, align 4, !tbaa !33
  %.not246 = icmp eq i32 %69, 0
  br i1 %64, label %70, label %90

70:                                               ; preds = %62
  br i1 %.not246, label %._crit_edge229, label %.lr.ph223

.lr.ph223:                                        ; preds = %70
  %71 = zext i32 %69 to i64
  %72 = shl nuw nsw i64 %71, 3
  %73 = load i32, ptr %15, align 8, !tbaa !34
  %74 = zext i32 %73 to i64
  %factor.op.mul224 = shl nuw nsw i64 %74, 2
  %75 = getelementptr i8, ptr %67, i64 %72
  %xtraiter333 = and i64 %71, 3
  %76 = icmp ult i32 %69, 4
  br i1 %76, label %.loopexit219.loopexit.unr-lcssa, label %.lr.ph223.new

.lr.ph223.new:                                    ; preds = %.lr.ph223
  %unroll_iter336 = and i64 %71, 4294967292
  br label %77

77:                                               ; preds = %77, %.lr.ph223.new
  %indvars.iv266 = phi i64 [ 0, %.lr.ph223.new ], [ %indvars.iv.next267.3, %77 ]
  %niter337 = phi i64 [ 0, %.lr.ph223.new ], [ %niter337.next.3, %77 ]
  %.reass225 = mul i64 %factor.op.mul224, %indvars.iv266
  %78 = getelementptr i8, ptr %75, i64 %.reass225
  %79 = load ptr, ptr %68, align 8, !tbaa !36
  %80 = getelementptr inbounds ptr, ptr %79, i64 %indvars.iv266
  store ptr %78, ptr %80, align 8, !tbaa !37
  %indvars.iv.next267 = or disjoint i64 %indvars.iv266, 1
  %.reass225.1 = mul i64 %factor.op.mul224, %indvars.iv.next267
  %81 = getelementptr i8, ptr %75, i64 %.reass225.1
  %82 = load ptr, ptr %68, align 8, !tbaa !36
  %83 = getelementptr inbounds ptr, ptr %82, i64 %indvars.iv.next267
  store ptr %81, ptr %83, align 8, !tbaa !37
  %indvars.iv.next267.1 = or disjoint i64 %indvars.iv266, 2
  %.reass225.2 = mul i64 %factor.op.mul224, %indvars.iv.next267.1
  %84 = getelementptr i8, ptr %75, i64 %.reass225.2
  %85 = load ptr, ptr %68, align 8, !tbaa !36
  %86 = getelementptr inbounds ptr, ptr %85, i64 %indvars.iv.next267.1
  store ptr %84, ptr %86, align 8, !tbaa !37
  %indvars.iv.next267.2 = or disjoint i64 %indvars.iv266, 3
  %.reass225.3 = mul i64 %factor.op.mul224, %indvars.iv.next267.2
  %87 = getelementptr i8, ptr %75, i64 %.reass225.3
  %88 = load ptr, ptr %68, align 8, !tbaa !36
  %89 = getelementptr inbounds ptr, ptr %88, i64 %indvars.iv.next267.2
  store ptr %87, ptr %89, align 8, !tbaa !37
  %indvars.iv.next267.3 = add nuw nsw i64 %indvars.iv266, 4
  %niter337.next.3 = add i64 %niter337, 4
  %niter337.ncmp.3 = icmp eq i64 %niter337.next.3, %unroll_iter336
  br i1 %niter337.ncmp.3, label %.loopexit219.loopexit.unr-lcssa, label %77, !llvm.loop !38

90:                                               ; preds = %62
  br i1 %.not246, label %._crit_edge229, label %.lr.ph

.lr.ph:                                           ; preds = %90
  %91 = zext i32 %69 to i64
  %92 = shl nuw nsw i64 %91, 3
  %93 = load i32, ptr %15, align 8, !tbaa !34
  %94 = zext i32 %93 to i64
  %factor.op.mul = shl nuw nsw i64 %94, 2
  %95 = getelementptr i8, ptr %67, i64 %92
  %xtraiter = and i64 %91, 3
  %96 = icmp ult i32 %69, 4
  br i1 %96, label %.loopexit219.loopexit331.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %91, 4294967292
  br label %97

97:                                               ; preds = %97, %.lr.ph.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.new ], [ %indvars.iv.next.3, %97 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %97 ]
  %.reass = mul i64 %factor.op.mul, %indvars.iv
  %98 = getelementptr i8, ptr %95, i64 %.reass
  %99 = load ptr, ptr %68, align 8, !tbaa !36
  %100 = getelementptr inbounds ptr, ptr %99, i64 %indvars.iv
  store ptr %98, ptr %100, align 8, !tbaa !37
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %.reass.1 = mul i64 %factor.op.mul, %indvars.iv.next
  %101 = getelementptr i8, ptr %95, i64 %.reass.1
  %102 = load ptr, ptr %68, align 8, !tbaa !36
  %103 = getelementptr inbounds ptr, ptr %102, i64 %indvars.iv.next
  store ptr %101, ptr %103, align 8, !tbaa !37
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %.reass.2 = mul i64 %factor.op.mul, %indvars.iv.next.1
  %104 = getelementptr i8, ptr %95, i64 %.reass.2
  %105 = load ptr, ptr %68, align 8, !tbaa !36
  %106 = getelementptr inbounds ptr, ptr %105, i64 %indvars.iv.next.1
  store ptr %104, ptr %106, align 8, !tbaa !37
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %.reass.3 = mul i64 %factor.op.mul, %indvars.iv.next.2
  %107 = getelementptr i8, ptr %95, i64 %.reass.3
  %108 = load ptr, ptr %68, align 8, !tbaa !36
  %109 = getelementptr inbounds ptr, ptr %108, i64 %indvars.iv.next.2
  store ptr %107, ptr %109, align 8, !tbaa !37
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.loopexit219.loopexit331.unr-lcssa, label %97, !llvm.loop !40

.loopexit219.loopexit.unr-lcssa:                  ; preds = %77, %.lr.ph223
  %indvars.iv266.unr = phi i64 [ 0, %.lr.ph223 ], [ %indvars.iv.next267.3, %77 ]
  %lcmp.mod335.not = icmp eq i64 %xtraiter333, 0
  br i1 %lcmp.mod335.not, label %.loopexit219, label %.epil.preheader332

.epil.preheader332:                               ; preds = %.loopexit219.loopexit.unr-lcssa, %.epil.preheader332
  %indvars.iv266.epil = phi i64 [ %indvars.iv.next267.epil, %.epil.preheader332 ], [ %indvars.iv266.unr, %.loopexit219.loopexit.unr-lcssa ]
  %epil.iter334 = phi i64 [ %epil.iter334.next, %.epil.preheader332 ], [ 0, %.loopexit219.loopexit.unr-lcssa ]
  %.reass225.epil = mul i64 %factor.op.mul224, %indvars.iv266.epil
  %110 = getelementptr i8, ptr %75, i64 %.reass225.epil
  %111 = load ptr, ptr %68, align 8, !tbaa !36
  %112 = getelementptr inbounds ptr, ptr %111, i64 %indvars.iv266.epil
  store ptr %110, ptr %112, align 8, !tbaa !37
  %indvars.iv.next267.epil = add nuw nsw i64 %indvars.iv266.epil, 1
  %epil.iter334.next = add i64 %epil.iter334, 1
  %epil.iter334.cmp.not = icmp eq i64 %epil.iter334.next, %xtraiter333
  br i1 %epil.iter334.cmp.not, label %.loopexit219, label %.epil.preheader332, !llvm.loop !41

.loopexit219.loopexit331.unr-lcssa:               ; preds = %97, %.lr.ph
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.3, %97 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit219, label %.epil.preheader

.epil.preheader:                                  ; preds = %.loopexit219.loopexit331.unr-lcssa, %.epil.preheader
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.epil.preheader ], [ %indvars.iv.unr, %.loopexit219.loopexit331.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.loopexit219.loopexit331.unr-lcssa ]
  %.reass.epil = mul i64 %factor.op.mul, %indvars.iv.epil
  %113 = getelementptr i8, ptr %95, i64 %.reass.epil
  %114 = load ptr, ptr %68, align 8, !tbaa !36
  %115 = getelementptr inbounds ptr, ptr %114, i64 %indvars.iv.epil
  store ptr %113, ptr %115, align 8, !tbaa !37
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.loopexit219, label %.epil.preheader, !llvm.loop !43

.loopexit219:                                     ; preds = %.loopexit219.loopexit331.unr-lcssa, %.epil.preheader, %.loopexit219.loopexit.unr-lcssa, %.epil.preheader332
  %.not247 = icmp eq i32 %69, 0
  br i1 %.not247, label %._crit_edge229, label %.preheader218.lr.ph

.preheader218.lr.ph:                              ; preds = %.loopexit219
  %116 = getelementptr inbounds i8, ptr %2, i64 48
  %117 = load i32, ptr %15, align 8, !tbaa !34
  %.not248 = icmp eq i32 %117, 0
  br i1 %.not248, label %._crit_edge229, label %.preheader218

.preheader218:                                    ; preds = %.preheader218.lr.ph, %._crit_edge
  %118 = phi i32 [ %150, %._crit_edge ], [ %69, %.preheader218.lr.ph ]
  %119 = phi i32 [ %151, %._crit_edge ], [ %117, %.preheader218.lr.ph ]
  %120 = phi i32 [ %152, %._crit_edge ], [ 1, %.preheader218.lr.ph ]
  %indvars.iv279 = phi i64 [ %indvars.iv.next280, %._crit_edge ], [ 0, %.preheader218.lr.ph ]
  %.not249 = icmp eq i32 %120, 0
  br i1 %.not249, label %._crit_edge, label %.lr.ph227

.lr.ph227:                                        ; preds = %.preheader218
  br i1 %64, label %.lr.ph227.split.us, label %.lr.ph227.split

.lr.ph227.split.us:                               ; preds = %.lr.ph227
  %umax = call i32 @llvm.umax.i32(i32 %119, i32 1)
  %wide.trip.count277 = zext i32 %umax to i64
  %xtraiter339 = and i64 %wide.trip.count277, 3
  %121 = icmp ult i32 %119, 4
  br i1 %121, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph227.split.us.new

.lr.ph227.split.us.new:                           ; preds = %.lr.ph227.split.us
  %unroll_iter342 = and i64 %wide.trip.count277, 4294967292
  br label %122

122:                                              ; preds = %122, %.lr.ph227.split.us.new
  %indvars.iv274 = phi i64 [ 0, %.lr.ph227.split.us.new ], [ %indvars.iv.next275.3, %122 ]
  %niter343 = phi i64 [ 0, %.lr.ph227.split.us.new ], [ %niter343.next.3, %122 ]
  %123 = load ptr, ptr %116, align 8, !tbaa !36
  %124 = getelementptr inbounds ptr, ptr %123, i64 %indvars.iv279
  %125 = load ptr, ptr %124, align 8, !tbaa !37
  %126 = getelementptr inbounds float, ptr %125, i64 %indvars.iv274
  store float 0.000000e+00, ptr %126, align 4, !tbaa !44
  %indvars.iv.next275 = or disjoint i64 %indvars.iv274, 1
  %127 = load ptr, ptr %116, align 8, !tbaa !36
  %128 = getelementptr inbounds ptr, ptr %127, i64 %indvars.iv279
  %129 = load ptr, ptr %128, align 8, !tbaa !37
  %130 = getelementptr inbounds float, ptr %129, i64 %indvars.iv.next275
  store float 0.000000e+00, ptr %130, align 4, !tbaa !44
  %indvars.iv.next275.1 = or disjoint i64 %indvars.iv274, 2
  %131 = load ptr, ptr %116, align 8, !tbaa !36
  %132 = getelementptr inbounds ptr, ptr %131, i64 %indvars.iv279
  %133 = load ptr, ptr %132, align 8, !tbaa !37
  %134 = getelementptr inbounds float, ptr %133, i64 %indvars.iv.next275.1
  store float 0.000000e+00, ptr %134, align 4, !tbaa !44
  %indvars.iv.next275.2 = or disjoint i64 %indvars.iv274, 3
  %135 = load ptr, ptr %116, align 8, !tbaa !36
  %136 = getelementptr inbounds ptr, ptr %135, i64 %indvars.iv279
  %137 = load ptr, ptr %136, align 8, !tbaa !37
  %138 = getelementptr inbounds float, ptr %137, i64 %indvars.iv.next275.2
  store float 0.000000e+00, ptr %138, align 4, !tbaa !44
  %indvars.iv.next275.3 = add nuw nsw i64 %indvars.iv274, 4
  %niter343.next.3 = add i64 %niter343, 4
  %niter343.ncmp.3 = icmp eq i64 %niter343.next.3, %unroll_iter342
  br i1 %niter343.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %122, !llvm.loop !46

.lr.ph227.split:                                  ; preds = %.lr.ph227, %.lr.ph227.split
  %indvars.iv271 = phi i64 [ %indvars.iv.next272, %.lr.ph227.split ], [ 0, %.lr.ph227 ]
  %139 = load ptr, ptr %116, align 8, !tbaa !36
  %140 = getelementptr inbounds ptr, ptr %139, i64 %indvars.iv279
  %141 = load ptr, ptr %140, align 8, !tbaa !37
  %142 = getelementptr inbounds i32, ptr %141, i64 %indvars.iv271
  store i32 0, ptr %142, align 4, !tbaa !20
  %indvars.iv.next272 = add nuw nsw i64 %indvars.iv271, 1
  %143 = load i32, ptr %15, align 8, !tbaa !34
  %144 = zext i32 %143 to i64
  %145 = icmp ult i64 %indvars.iv.next272, %144
  br i1 %145, label %.lr.ph227.split, label %._crit_edge.loopexit262, !llvm.loop !46

._crit_edge.loopexit262:                          ; preds = %.lr.ph227.split
  %.pre = load i32, ptr %13, align 4, !tbaa !33
  br label %._crit_edge

._crit_edge.loopexit.unr-lcssa:                   ; preds = %122, %.lr.ph227.split.us
  %indvars.iv274.unr = phi i64 [ 0, %.lr.ph227.split.us ], [ %indvars.iv.next275.3, %122 ]
  %lcmp.mod341.not = icmp eq i64 %xtraiter339, 0
  br i1 %lcmp.mod341.not, label %._crit_edge, label %.epil.preheader338

.epil.preheader338:                               ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader338
  %indvars.iv274.epil = phi i64 [ %indvars.iv.next275.epil, %.epil.preheader338 ], [ %indvars.iv274.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter340 = phi i64 [ %epil.iter340.next, %.epil.preheader338 ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %146 = load ptr, ptr %116, align 8, !tbaa !36
  %147 = getelementptr inbounds ptr, ptr %146, i64 %indvars.iv279
  %148 = load ptr, ptr %147, align 8, !tbaa !37
  %149 = getelementptr inbounds float, ptr %148, i64 %indvars.iv274.epil
  store float 0.000000e+00, ptr %149, align 4, !tbaa !44
  %indvars.iv.next275.epil = add nuw nsw i64 %indvars.iv274.epil, 1
  %epil.iter340.next = add i64 %epil.iter340, 1
  %epil.iter340.cmp.not = icmp eq i64 %epil.iter340.next, %xtraiter339
  br i1 %epil.iter340.cmp.not, label %._crit_edge, label %.epil.preheader338, !llvm.loop !47

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader338, %._crit_edge.loopexit262, %.preheader218
  %150 = phi i32 [ %.pre, %._crit_edge.loopexit262 ], [ %118, %.preheader218 ], [ %118, %.epil.preheader338 ], [ %118, %._crit_edge.loopexit.unr-lcssa ]
  %151 = phi i32 [ %143, %._crit_edge.loopexit262 ], [ %119, %.preheader218 ], [ %119, %.epil.preheader338 ], [ %119, %._crit_edge.loopexit.unr-lcssa ]
  %152 = phi i32 [ %143, %._crit_edge.loopexit262 ], [ 0, %.preheader218 ], [ %119, %.epil.preheader338 ], [ %119, %._crit_edge.loopexit.unr-lcssa ]
  %indvars.iv.next280 = add nuw nsw i64 %indvars.iv279, 1
  %153 = zext i32 %150 to i64
  %154 = icmp ult i64 %indvars.iv.next280, %153
  br i1 %154, label %.preheader218, label %._crit_edge229, !llvm.loop !48

._crit_edge229:                                   ; preds = %._crit_edge, %70, %90, %.preheader218.lr.ph, %.loopexit219
  %155 = phi i32 [ 0, %.loopexit219 ], [ %69, %.preheader218.lr.ph ], [ 0, %90 ], [ 0, %70 ], [ %150, %._crit_edge ]
  %156 = load i32, ptr %19, align 4, !tbaa !22
  switch i32 %156, label %.preheader212 [
    i32 2, label %162
    i32 1, label %.preheader216
  ]

.preheader216:                                    ; preds = %._crit_edge229
  %157 = load i32, ptr %15, align 8, !tbaa !34
  %.230 = call i32 @llvm.umin.i32(i32 %155, i32 %157)
  %.not250 = icmp eq i32 %.230, 0
  br i1 %.not250, label %.critedge, label %.lr.ph232

.lr.ph232:                                        ; preds = %.preheader216
  %158 = getelementptr inbounds i8, ptr %2, i64 48
  br label %240

.preheader212:                                    ; preds = %._crit_edge229
  %.not254 = icmp eq i32 %155, 0
  br i1 %.not254, label %.preheader209, label %.lr.ph240

.lr.ph240:                                        ; preds = %.preheader212
  %159 = getelementptr inbounds i8, ptr %2, i64 24
  %160 = getelementptr inbounds i8, ptr %2, i64 32
  %161 = getelementptr inbounds i8, ptr %2, i64 48
  br label %272

162:                                              ; preds = %._crit_edge229
  %163 = getelementptr inbounds i8, ptr %0, i64 40
  %164 = load ptr, ptr %163, align 8, !tbaa !50
  %165 = icmp eq ptr %164, null
  br i1 %165, label %.critedge, label %.preheader214

.preheader214:                                    ; preds = %162
  %.not251 = icmp eq i32 %155, 0
  br i1 %.not251, label %.critedge, label %.preheader213.lr.ph

.preheader213.lr.ph:                              ; preds = %.preheader214
  %166 = getelementptr inbounds i8, ptr %2, i64 48
  %167 = load i32, ptr %15, align 8, !tbaa !34
  %.not252 = icmp eq i32 %167, 0
  br i1 %.not252, label %.critedge, label %.preheader213

.preheader213:                                    ; preds = %.preheader213.lr.ph, %._crit_edge235
  %168 = phi i32 [ %234, %._crit_edge235 ], [ %155, %.preheader213.lr.ph ]
  %169 = phi i32 [ %235, %._crit_edge235 ], [ %167, %.preheader213.lr.ph ]
  %170 = phi i32 [ %236, %._crit_edge235 ], [ %167, %.preheader213.lr.ph ]
  %171 = phi i32 [ %237, %._crit_edge235 ], [ 1, %.preheader213.lr.ph ]
  %indvars.iv294 = phi i64 [ %indvars.iv.next295, %._crit_edge235 ], [ 0, %.preheader213.lr.ph ]
  %.not253 = icmp eq i32 %171, 0
  br i1 %.not253, label %._crit_edge235, label %.lr.ph234

.lr.ph234:                                        ; preds = %.preheader213
  %172 = load i32, ptr %2, align 8, !tbaa !19
  %173 = icmp eq i32 %172, 5
  br i1 %173, label %.lr.ph234.split.us, label %.lr.ph234.split

.lr.ph234.split.us:                               ; preds = %.lr.ph234
  %174 = load ptr, ptr %163, align 8, !tbaa !50
  %175 = getelementptr inbounds ptr, ptr %174, i64 %indvars.iv294
  %176 = load ptr, ptr %175, align 8, !tbaa !37
  %umax291 = call i32 @llvm.umax.i32(i32 %169, i32 1)
  %wide.trip.count292 = zext i32 %umax291 to i64
  %xtraiter345 = and i64 %wide.trip.count292, 3
  %177 = icmp ult i32 %169, 4
  br i1 %177, label %._crit_edge235.loopexit.unr-lcssa, label %.lr.ph234.split.us.new

.lr.ph234.split.us.new:                           ; preds = %.lr.ph234.split.us
  %unroll_iter348 = and i64 %wide.trip.count292, 4294967292
  br label %178

178:                                              ; preds = %178, %.lr.ph234.split.us.new
  %indvars.iv288 = phi i64 [ 0, %.lr.ph234.split.us.new ], [ %indvars.iv.next289.3, %178 ]
  %niter349 = phi i64 [ 0, %.lr.ph234.split.us.new ], [ %niter349.next.3, %178 ]
  %179 = getelementptr inbounds float, ptr %176, i64 %indvars.iv288
  %180 = load float, ptr %179, align 4, !tbaa !44
  %181 = load ptr, ptr %166, align 8, !tbaa !36
  %182 = getelementptr inbounds ptr, ptr %181, i64 %indvars.iv294
  %183 = load ptr, ptr %182, align 8, !tbaa !37
  %184 = getelementptr inbounds float, ptr %183, i64 %indvars.iv288
  store float %180, ptr %184, align 4, !tbaa !44
  %indvars.iv.next289 = or disjoint i64 %indvars.iv288, 1
  %185 = getelementptr inbounds float, ptr %176, i64 %indvars.iv.next289
  %186 = load float, ptr %185, align 4, !tbaa !44
  %187 = load ptr, ptr %166, align 8, !tbaa !36
  %188 = getelementptr inbounds ptr, ptr %187, i64 %indvars.iv294
  %189 = load ptr, ptr %188, align 8, !tbaa !37
  %190 = getelementptr inbounds float, ptr %189, i64 %indvars.iv.next289
  store float %186, ptr %190, align 4, !tbaa !44
  %indvars.iv.next289.1 = or disjoint i64 %indvars.iv288, 2
  %191 = getelementptr inbounds float, ptr %176, i64 %indvars.iv.next289.1
  %192 = load float, ptr %191, align 4, !tbaa !44
  %193 = load ptr, ptr %166, align 8, !tbaa !36
  %194 = getelementptr inbounds ptr, ptr %193, i64 %indvars.iv294
  %195 = load ptr, ptr %194, align 8, !tbaa !37
  %196 = getelementptr inbounds float, ptr %195, i64 %indvars.iv.next289.1
  store float %192, ptr %196, align 4, !tbaa !44
  %indvars.iv.next289.2 = or disjoint i64 %indvars.iv288, 3
  %197 = getelementptr inbounds float, ptr %176, i64 %indvars.iv.next289.2
  %198 = load float, ptr %197, align 4, !tbaa !44
  %199 = load ptr, ptr %166, align 8, !tbaa !36
  %200 = getelementptr inbounds ptr, ptr %199, i64 %indvars.iv294
  %201 = load ptr, ptr %200, align 8, !tbaa !37
  %202 = getelementptr inbounds float, ptr %201, i64 %indvars.iv.next289.2
  store float %198, ptr %202, align 4, !tbaa !44
  %indvars.iv.next289.3 = add nuw nsw i64 %indvars.iv288, 4
  %niter349.next.3 = add i64 %niter349, 4
  %niter349.ncmp.3 = icmp eq i64 %niter349.next.3, %unroll_iter348
  br i1 %niter349.ncmp.3, label %._crit_edge235.loopexit.unr-lcssa, label %178, !llvm.loop !51

.lr.ph234.split:                                  ; preds = %.lr.ph234, %223
  %203 = phi i32 [ %224, %223 ], [ %169, %.lr.ph234 ]
  %204 = phi i32 [ %225, %223 ], [ %170, %.lr.ph234 ]
  %indvars.iv285 = phi i64 [ %indvars.iv.next286, %223 ], [ 0, %.lr.ph234 ]
  %205 = load ptr, ptr %163, align 8, !tbaa !50
  %206 = getelementptr inbounds ptr, ptr %205, i64 %indvars.iv294
  %207 = load ptr, ptr %206, align 8, !tbaa !37
  %208 = getelementptr inbounds float, ptr %207, i64 %indvars.iv285
  %209 = load float, ptr %208, align 4, !tbaa !44
  %210 = load i32, ptr %2, align 8, !tbaa !19
  %211 = icmp eq i32 %210, 5
  br i1 %211, label %212, label %217

212:                                              ; preds = %.lr.ph234.split
  %213 = load ptr, ptr %166, align 8, !tbaa !36
  %214 = getelementptr inbounds ptr, ptr %213, i64 %indvars.iv294
  %215 = load ptr, ptr %214, align 8, !tbaa !37
  %216 = getelementptr inbounds float, ptr %215, i64 %indvars.iv285
  store float %209, ptr %216, align 4, !tbaa !44
  br label %223

217:                                              ; preds = %.lr.ph234.split
  %218 = call noundef i32 @_ZL35ma_channel_converter_float_to_fixedf(float noundef %209)
  %219 = load ptr, ptr %166, align 8, !tbaa !36
  %220 = getelementptr inbounds ptr, ptr %219, i64 %indvars.iv294
  %221 = load ptr, ptr %220, align 8, !tbaa !37
  %222 = getelementptr inbounds i32, ptr %221, i64 %indvars.iv285
  store i32 %218, ptr %222, align 4, !tbaa !20
  %.pre311 = load i32, ptr %15, align 8, !tbaa !34
  br label %223

223:                                              ; preds = %217, %212
  %224 = phi i32 [ %.pre311, %217 ], [ %203, %212 ]
  %225 = phi i32 [ %.pre311, %217 ], [ %204, %212 ]
  %indvars.iv.next286 = add nuw nsw i64 %indvars.iv285, 1
  %226 = zext i32 %225 to i64
  %227 = icmp ult i64 %indvars.iv.next286, %226
  br i1 %227, label %.lr.ph234.split, label %._crit_edge235.loopexit259, !llvm.loop !52

._crit_edge235.loopexit259:                       ; preds = %223
  %.pre312 = load i32, ptr %13, align 4, !tbaa !33
  br label %._crit_edge235

._crit_edge235.loopexit.unr-lcssa:                ; preds = %178, %.lr.ph234.split.us
  %indvars.iv288.unr = phi i64 [ 0, %.lr.ph234.split.us ], [ %indvars.iv.next289.3, %178 ]
  %lcmp.mod347.not = icmp eq i64 %xtraiter345, 0
  br i1 %lcmp.mod347.not, label %._crit_edge235, label %.epil.preheader344

.epil.preheader344:                               ; preds = %._crit_edge235.loopexit.unr-lcssa, %.epil.preheader344
  %indvars.iv288.epil = phi i64 [ %indvars.iv.next289.epil, %.epil.preheader344 ], [ %indvars.iv288.unr, %._crit_edge235.loopexit.unr-lcssa ]
  %epil.iter346 = phi i64 [ %epil.iter346.next, %.epil.preheader344 ], [ 0, %._crit_edge235.loopexit.unr-lcssa ]
  %228 = getelementptr inbounds float, ptr %176, i64 %indvars.iv288.epil
  %229 = load float, ptr %228, align 4, !tbaa !44
  %230 = load ptr, ptr %166, align 8, !tbaa !36
  %231 = getelementptr inbounds ptr, ptr %230, i64 %indvars.iv294
  %232 = load ptr, ptr %231, align 8, !tbaa !37
  %233 = getelementptr inbounds float, ptr %232, i64 %indvars.iv288.epil
  store float %229, ptr %233, align 4, !tbaa !44
  %indvars.iv.next289.epil = add nuw nsw i64 %indvars.iv288.epil, 1
  %epil.iter346.next = add i64 %epil.iter346, 1
  %epil.iter346.cmp.not = icmp eq i64 %epil.iter346.next, %xtraiter345
  br i1 %epil.iter346.cmp.not, label %._crit_edge235, label %.epil.preheader344, !llvm.loop !53

._crit_edge235:                                   ; preds = %._crit_edge235.loopexit.unr-lcssa, %.epil.preheader344, %._crit_edge235.loopexit259, %.preheader213
  %234 = phi i32 [ %.pre312, %._crit_edge235.loopexit259 ], [ %168, %.preheader213 ], [ %168, %.epil.preheader344 ], [ %168, %._crit_edge235.loopexit.unr-lcssa ]
  %235 = phi i32 [ %224, %._crit_edge235.loopexit259 ], [ %169, %.preheader213 ], [ %169, %.epil.preheader344 ], [ %169, %._crit_edge235.loopexit.unr-lcssa ]
  %236 = phi i32 [ %225, %._crit_edge235.loopexit259 ], [ %170, %.preheader213 ], [ %169, %.epil.preheader344 ], [ %169, %._crit_edge235.loopexit.unr-lcssa ]
  %237 = phi i32 [ %225, %._crit_edge235.loopexit259 ], [ 0, %.preheader213 ], [ %169, %.epil.preheader344 ], [ %169, %._crit_edge235.loopexit.unr-lcssa ]
  %indvars.iv.next295 = add nuw nsw i64 %indvars.iv294, 1
  %238 = zext i32 %234 to i64
  %239 = icmp ult i64 %indvars.iv.next295, %238
  br i1 %239, label %.preheader213, label %.critedge, !llvm.loop !54

240:                                              ; preds = %.lr.ph232, %263
  %241 = phi i32 [ %157, %.lr.ph232 ], [ %264, %263 ]
  %242 = phi i32 [ %155, %.lr.ph232 ], [ %265, %263 ]
  %indvars.iv282 = phi i64 [ 0, %.lr.ph232 ], [ %indvars.iv.next283, %263 ]
  %243 = load i32, ptr %2, align 8, !tbaa !19
  %244 = icmp eq i32 %243, 5
  %245 = load ptr, ptr %158, align 8, !tbaa !36
  %246 = getelementptr inbounds ptr, ptr %245, i64 %indvars.iv282
  %247 = load ptr, ptr %246, align 8, !tbaa !37
  br i1 %244, label %248, label %253

248:                                              ; preds = %240
  %249 = getelementptr inbounds float, ptr %247, i64 %indvars.iv282
  %250 = load float, ptr %249, align 4, !tbaa !44
  %251 = fcmp oeq float %250, 0.000000e+00
  br i1 %251, label %252, label %263

252:                                              ; preds = %248
  store float 1.000000e+00, ptr %249, align 4, !tbaa !44
  br label %263

253:                                              ; preds = %240
  %254 = getelementptr inbounds i32, ptr %247, i64 %indvars.iv282
  %255 = load i32, ptr %254, align 4, !tbaa !20
  %256 = icmp eq i32 %255, 0
  br i1 %256, label %257, label %263

257:                                              ; preds = %253
  %258 = call noundef i32 @_ZL35ma_channel_converter_float_to_fixedf(float noundef 1.000000e+00)
  %259 = load ptr, ptr %158, align 8, !tbaa !36
  %260 = getelementptr inbounds ptr, ptr %259, i64 %indvars.iv282
  %261 = load ptr, ptr %260, align 8, !tbaa !37
  %262 = getelementptr inbounds i32, ptr %261, i64 %indvars.iv282
  store i32 %258, ptr %262, align 4, !tbaa !20
  %.pre309 = load i32, ptr %13, align 4, !tbaa !33
  %.pre310 = load i32, ptr %15, align 8, !tbaa !34
  br label %263

263:                                              ; preds = %252, %248, %257, %253
  %264 = phi i32 [ %241, %252 ], [ %241, %248 ], [ %.pre310, %257 ], [ %241, %253 ]
  %265 = phi i32 [ %242, %252 ], [ %242, %248 ], [ %.pre309, %257 ], [ %242, %253 ]
  %indvars.iv.next283 = add nuw nsw i64 %indvars.iv282, 1
  %. = call i32 @llvm.umin.i32(i32 %265, i32 %264)
  %266 = zext i32 %. to i64
  %267 = icmp ult i64 %indvars.iv.next283, %266
  br i1 %267, label %240, label %.critedge, !llvm.loop !55

.preheader209:                                    ; preds = %.loopexit211, %.preheader212
  %268 = load i32, ptr %15, align 8, !tbaa !34
  %.not256 = icmp eq i32 %268, 0
  br i1 %.not256, label %.critedge, label %.lr.ph244

.lr.ph244:                                        ; preds = %.preheader209
  %269 = getelementptr inbounds i8, ptr %2, i64 32
  %270 = getelementptr inbounds i8, ptr %2, i64 24
  %271 = getelementptr inbounds i8, ptr %2, i64 48
  br label %319

272:                                              ; preds = %.lr.ph240, %.loopexit211
  %indvars.iv300 = phi i64 [ 0, %.lr.ph240 ], [ %indvars.iv.next301, %.loopexit211 ]
  %273 = load ptr, ptr %159, align 8, !tbaa !25
  %274 = getelementptr inbounds i8, ptr %273, i64 %indvars.iv300
  %275 = load i8, ptr %274, align 1, !tbaa !36
  %276 = call noundef i32 @_ZL30ma_is_spatial_channel_positionh(i8 noundef zeroext %275)
  %.not206 = icmp eq i32 %276, 0
  br i1 %.not206, label %.loopexit211, label %277

277:                                              ; preds = %272
  %278 = load i32, ptr %15, align 8, !tbaa !34
  %279 = load ptr, ptr %160, align 8, !tbaa !28
  %280 = call i32 @ma_channel_map_contains_channel_position(i32 noundef %278, ptr noundef %279, i8 noundef zeroext %275)
  %.not207 = icmp eq i32 %280, 0
  br i1 %.not207, label %.preheader210, label %.loopexit211

.preheader210:                                    ; preds = %277
  %281 = load i32, ptr %15, align 8, !tbaa !34
  %.not255 = icmp eq i32 %281, 0
  br i1 %.not255, label %.loopexit211, label %.lr.ph238

.lr.ph238:                                        ; preds = %.preheader210, %312
  %indvars.iv297 = phi i64 [ %indvars.iv.next298, %312 ], [ 0, %.preheader210 ]
  %282 = load ptr, ptr %160, align 8, !tbaa !28
  %283 = getelementptr inbounds i8, ptr %282, i64 %indvars.iv297
  %284 = load i8, ptr %283, align 1, !tbaa !36
  %285 = call noundef i32 @_ZL30ma_is_spatial_channel_positionh(i8 noundef zeroext %284)
  %.not208 = icmp eq i32 %285, 0
  br i1 %.not208, label %312, label %286

286:                                              ; preds = %.lr.ph238
  %287 = load i32, ptr %19, align 4, !tbaa !22
  %288 = icmp eq i32 %287, 0
  br i1 %288, label %289, label %291

289:                                              ; preds = %286
  %290 = call noundef float @_ZL48ma_calculate_channel_position_rectangular_weighthh(i8 noundef zeroext %275, i8 noundef zeroext %284)
  br label %291

291:                                              ; preds = %289, %286
  %.0187 = phi float [ %290, %289 ], [ 0.000000e+00, %286 ]
  %292 = load i32, ptr %2, align 8, !tbaa !19
  %293 = icmp eq i32 %292, 5
  %294 = load ptr, ptr %161, align 8, !tbaa !36
  %295 = getelementptr inbounds ptr, ptr %294, i64 %indvars.iv300
  %296 = load ptr, ptr %295, align 8, !tbaa !37
  br i1 %293, label %297, label %302

297:                                              ; preds = %291
  %298 = getelementptr inbounds float, ptr %296, i64 %indvars.iv297
  %299 = load float, ptr %298, align 4, !tbaa !44
  %300 = fcmp oeq float %299, 0.000000e+00
  br i1 %300, label %301, label %312

301:                                              ; preds = %297
  store float %.0187, ptr %298, align 4, !tbaa !44
  br label %312

302:                                              ; preds = %291
  %303 = getelementptr inbounds i32, ptr %296, i64 %indvars.iv297
  %304 = load i32, ptr %303, align 4, !tbaa !20
  %305 = icmp eq i32 %304, 0
  br i1 %305, label %306, label %312

306:                                              ; preds = %302
  %307 = call noundef i32 @_ZL35ma_channel_converter_float_to_fixedf(float noundef %.0187)
  %308 = load ptr, ptr %161, align 8, !tbaa !36
  %309 = getelementptr inbounds ptr, ptr %308, i64 %indvars.iv300
  %310 = load ptr, ptr %309, align 8, !tbaa !37
  %311 = getelementptr inbounds i32, ptr %310, i64 %indvars.iv297
  store i32 %307, ptr %311, align 4, !tbaa !20
  br label %312

312:                                              ; preds = %301, %297, %306, %302, %.lr.ph238
  %indvars.iv.next298 = add nuw nsw i64 %indvars.iv297, 1
  %313 = load i32, ptr %15, align 8, !tbaa !34
  %314 = zext i32 %313 to i64
  %315 = icmp ult i64 %indvars.iv.next298, %314
  br i1 %315, label %.lr.ph238, label %.loopexit211, !llvm.loop !56

.loopexit211:                                     ; preds = %312, %.preheader210, %277, %272
  %indvars.iv.next301 = add nuw nsw i64 %indvars.iv300, 1
  %316 = load i32, ptr %13, align 4, !tbaa !33
  %317 = zext i32 %316 to i64
  %318 = icmp ult i64 %indvars.iv.next301, %317
  br i1 %318, label %272, label %.preheader209, !llvm.loop !57

319:                                              ; preds = %.lr.ph244, %.loopexit
  %indvars.iv306 = phi i64 [ 0, %.lr.ph244 ], [ %indvars.iv.next307, %.loopexit ]
  %320 = load ptr, ptr %269, align 8, !tbaa !28
  %321 = getelementptr inbounds i8, ptr %320, i64 %indvars.iv306
  %322 = load i8, ptr %321, align 1, !tbaa !36
  %323 = call noundef i32 @_ZL30ma_is_spatial_channel_positionh(i8 noundef zeroext %322)
  %.not203 = icmp eq i32 %323, 0
  br i1 %.not203, label %.loopexit, label %324

324:                                              ; preds = %319
  %325 = load i32, ptr %13, align 4, !tbaa !33
  %326 = load ptr, ptr %270, align 8, !tbaa !25
  %327 = call i32 @ma_channel_map_contains_channel_position(i32 noundef %325, ptr noundef %326, i8 noundef zeroext %322)
  %.not204 = icmp eq i32 %327, 0
  br i1 %.not204, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %324
  %328 = load i32, ptr %13, align 4, !tbaa !33
  %.not257 = icmp eq i32 %328, 0
  br i1 %.not257, label %.loopexit, label %.lr.ph242

.lr.ph242:                                        ; preds = %.preheader, %359
  %indvars.iv303 = phi i64 [ %indvars.iv.next304, %359 ], [ 0, %.preheader ]
  %329 = load ptr, ptr %270, align 8, !tbaa !25
  %330 = getelementptr inbounds i8, ptr %329, i64 %indvars.iv303
  %331 = load i8, ptr %330, align 1, !tbaa !36
  %332 = call noundef i32 @_ZL30ma_is_spatial_channel_positionh(i8 noundef zeroext %331)
  %.not205 = icmp eq i32 %332, 0
  br i1 %.not205, label %359, label %333

333:                                              ; preds = %.lr.ph242
  %334 = load i32, ptr %19, align 4, !tbaa !22
  %335 = icmp eq i32 %334, 0
  br i1 %335, label %336, label %338

336:                                              ; preds = %333
  %337 = call noundef float @_ZL48ma_calculate_channel_position_rectangular_weighthh(i8 noundef zeroext %331, i8 noundef zeroext %322)
  br label %338

338:                                              ; preds = %336, %333
  %.0 = phi float [ %337, %336 ], [ 0.000000e+00, %333 ]
  %339 = load i32, ptr %2, align 8, !tbaa !19
  %340 = icmp eq i32 %339, 5
  %341 = load ptr, ptr %271, align 8, !tbaa !36
  %342 = getelementptr inbounds ptr, ptr %341, i64 %indvars.iv303
  %343 = load ptr, ptr %342, align 8, !tbaa !37
  br i1 %340, label %344, label %349

344:                                              ; preds = %338
  %345 = getelementptr inbounds float, ptr %343, i64 %indvars.iv306
  %346 = load float, ptr %345, align 4, !tbaa !44
  %347 = fcmp oeq float %346, 0.000000e+00
  br i1 %347, label %348, label %359

348:                                              ; preds = %344
  store float %.0, ptr %345, align 4, !tbaa !44
  br label %359

349:                                              ; preds = %338
  %350 = getelementptr inbounds i32, ptr %343, i64 %indvars.iv306
  %351 = load i32, ptr %350, align 4, !tbaa !20
  %352 = icmp eq i32 %351, 0
  br i1 %352, label %353, label %359

353:                                              ; preds = %349
  %354 = call noundef i32 @_ZL35ma_channel_converter_float_to_fixedf(float noundef %.0)
  %355 = load ptr, ptr %271, align 8, !tbaa !36
  %356 = getelementptr inbounds ptr, ptr %355, i64 %indvars.iv303
  %357 = load ptr, ptr %356, align 8, !tbaa !37
  %358 = getelementptr inbounds i32, ptr %357, i64 %indvars.iv306
  store i32 %354, ptr %358, align 4, !tbaa !20
  br label %359

359:                                              ; preds = %348, %344, %353, %349, %.lr.ph242
  %indvars.iv.next304 = add nuw nsw i64 %indvars.iv303, 1
  %360 = load i32, ptr %13, align 4, !tbaa !33
  %361 = zext i32 %360 to i64
  %362 = icmp ult i64 %indvars.iv.next304, %361
  br i1 %362, label %.lr.ph242, label %.loopexit, !llvm.loop !58

.loopexit:                                        ; preds = %359, %.preheader, %324, %319
  %indvars.iv.next307 = add nuw nsw i64 %indvars.iv306, 1
  %363 = load i32, ptr %15, align 8, !tbaa !34
  %364 = zext i32 %363 to i64
  %365 = icmp ult i64 %indvars.iv.next307, %364
  br i1 %365, label %319, label %.critedge, !llvm.loop !59

.critedge:                                        ; preds = %263, %._crit_edge235, %.loopexit, %.preheader213.lr.ph, %.preheader216, %.preheader214, %.preheader209, %162, %59, %6, %3
  %.1 = phi i32 [ -2, %3 ], [ %7, %6 ], [ 0, %59 ], [ -2, %162 ], [ 0, %.preheader209 ], [ 0, %.preheader214 ], [ 0, %.preheader216 ], [ 0, %.preheader213.lr.ph ], [ 0, %.loopexit ], [ 0, %._crit_edge235 ], [ 0, %263 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #5
  ret i32 %.1
}

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL47ma_channel_converter_config_get_conversion_pathPK27ma_channel_converter_config(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL34ma_channel_map_build_shuffle_tablePKhjS0_jPh(ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL35ma_channel_converter_float_to_fixedf(float noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local i32 @ma_channel_map_contains_channel_position(i32 noundef, ptr noundef, i8 noundef zeroext) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef float @_ZL48ma_calculate_channel_position_rectangular_weighthh(i8 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #3

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
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 = { 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !13, i64 56}
!6 = !{!"_ZTS20ma_channel_converter", !7, i64 0, !10, i64 4, !10, i64 8, !11, i64 12, !12, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !8, i64 48, !13, i64 56, !10, i64 64}
!7 = !{!"_ZTS9ma_format", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"_ZTS19ma_channel_mix_mode", !8, i64 0}
!12 = !{!"_ZTS26ma_channel_conversion_path", !8, i64 0}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!15, !16, i64 0}
!15 = !{!"_ZTS32ma_channel_converter_heap_layout", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32}
!16 = !{!"long", !8, i64 0}
!17 = !{!18, !7, i64 0}
!18 = !{!"_ZTS27ma_channel_converter_config", !7, i64 0, !10, i64 4, !10, i64 8, !13, i64 16, !13, i64 24, !11, i64 32, !13, i64 40}
!19 = !{!6, !7, i64 0}
!20 = !{!10, !10, i64 0}
!21 = !{!18, !11, i64 32}
!22 = !{!6, !11, i64 12}
!23 = !{!18, !13, i64 16}
!24 = !{!15, !16, i64 8}
!25 = !{!6, !13, i64 24}
!26 = !{!18, !13, i64 24}
!27 = !{!15, !16, i64 16}
!28 = !{!6, !13, i64 32}
!29 = !{!18, !10, i64 8}
!30 = !{!6, !12, i64 16}
!31 = !{!15, !16, i64 24}
!32 = !{!6, !13, i64 40}
!33 = !{!6, !10, i64 4}
!34 = !{!6, !10, i64 8}
!35 = !{!15, !16, i64 32}
!36 = !{!8, !8, i64 0}
!37 = !{!13, !13, i64 0}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = distinct !{!40, !39}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.unroll.disable"}
!43 = distinct !{!43, !42}
!44 = !{!45, !45, i64 0}
!45 = !{!"float", !8, i64 0}
!46 = distinct !{!46, !39}
!47 = distinct !{!47, !42}
!48 = distinct !{!48, !39, !49}
!49 = !{!"llvm.loop.unswitch.partial.disable"}
!50 = !{!18, !13, i64 40}
!51 = distinct !{!51, !39}
!52 = distinct !{!52, !39, !49}
!53 = distinct !{!53, !42}
!54 = distinct !{!54, !39, !49}
!55 = distinct !{!55, !39}
!56 = distinct !{!56, !39}
!57 = distinct !{!57, !39}
!58 = distinct !{!58, !39}
!59 = distinct !{!59, !39}


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