; LLVM IR from huawei-noah/bolt :: common/model_spec/src/model_deserialize.ll (Z20deserialize_operatorPKhP9ModelSpecPj)

; 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.ModelSpec = type { i32, i32, [128 x i8], i32, i32, ptr, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, ptr }
%struct.OperatorSpec = type <{ [128 x i8], i32, i32, ptr, i32, [4 x i8], ptr, ptr, i32, [4 x i8], ptr, %union.ParameterSpec, [4 x i8] }>
%union.ParameterSpec = type { %struct.MultiHeadAttentionParamSpec }
%struct.MultiHeadAttentionParamSpec = type { [6 x %struct.FullyConnectedParamSpec], %struct.PowerParamSpec, [2 x i8], i32, [4 x %struct.ReshapeParamSpec], [2 x %struct.EltwiseParamSpec] }
%struct.FullyConnectedParamSpec = type { i32, i32, [32 x i32] }
%struct.PowerParamSpec = type { float, float, float }
%struct.ReshapeParamSpec = type { [8 x i32], i32, i32, i32 }
%struct.EltwiseParamSpec = type { i32, %struct.EltwiseSumSpec, i32, %union.ActivationSpec }
%struct.EltwiseSumSpec = type { [8 x float], i32 }
%union.ActivationSpec = type { %struct.ClipParamSpec }
%struct.ClipParamSpec = type { float, float }
%struct.QuantSpec = type { i32, ptr }

@.str.1 = external hidden unnamed_addr constant [20 x i8], align 1
@stdout = external global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [18 x i8], align 1

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

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

; Function Attrs: nounwind
declare i64 @syscall(i64 noundef, ...) #1

declare i32 @printf(ptr noundef, ...) #2

declare i32 @fflush(ptr noundef) #2

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_Z9mt_mallocj(i32 noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldIiEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldIcEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldIhEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_Z27get_operator_parameter_sizei12OperatorType(i32 noundef, i32 noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z19model_compatibilityP12OperatorSpeci(ptr noundef, i32 noundef) #5

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z20deserialize_operatorPKhP9ModelSpecPj(ptr noundef %0, ptr noundef %1, ptr noundef %2) #6 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  %19 = load ptr, ptr %4, align 8, !tbaa !5
  %20 = load ptr, ptr %6, align 8, !tbaa !5
  %21 = load i32, ptr %20, align 4, !tbaa !9
  %22 = zext i32 %21 to i64
  %23 = getelementptr inbounds i8, ptr %19, i64 %22
  store ptr %23, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  store ptr %7, ptr %8, align 8, !tbaa !5
  %24 = load ptr, ptr %8, align 8, !tbaa !5
  %25 = load ptr, ptr %6, align 8, !tbaa !5
  %26 = load ptr, ptr %5, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.ModelSpec, ptr %26, i32 0, i32 9
  call void @_Z17deserialize_fieldIiEvPPKhPjPT_i(ptr noundef %24, ptr noundef %25, ptr noundef %27, i32 noundef 1)
  %28 = load ptr, ptr %5, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.ModelSpec, ptr %28, i32 0, i32 9
  %30 = load i32, ptr %29, align 8, !tbaa !11
  %31 = sext i32 %30 to i64
  %32 = mul i64 %31, 1304
  %33 = trunc i64 %32 to i32
  %34 = call noundef ptr @_Z9mt_mallocj(i32 noundef %33)
  %35 = load ptr, ptr %5, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.ModelSpec, ptr %35, i32 0, i32 10
  store ptr %34, ptr %36, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %37 = load ptr, ptr %5, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.ModelSpec, ptr %37, i32 0, i32 10
  %39 = load ptr, ptr %38, align 8, !tbaa !14
  store ptr %39, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %40

40:                                               ; preds = %352, %3
  %41 = load i32, ptr %10, align 4, !tbaa !9
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.ModelSpec, ptr %42, i32 0, i32 9
  %44 = load i32, ptr %43, align 8, !tbaa !11
  %45 = icmp slt i32 %41, %44
  br i1 %45, label %47, label %46

46:                                               ; preds = %40
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  br label %355

47:                                               ; preds = %40
  %48 = load ptr, ptr %8, align 8, !tbaa !5
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = load ptr, ptr %9, align 8, !tbaa !5
  %51 = load i32, ptr %10, align 4, !tbaa !9
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds %struct.OperatorSpec, ptr %50, i64 %52
  %54 = getelementptr inbounds %struct.OperatorSpec, ptr %53, i32 0, i32 0
  %55 = getelementptr inbounds [128 x i8], ptr %54, i64 0, i64 0
  call void @_Z17deserialize_fieldIcEvPPKhPjPT_i(ptr noundef %48, ptr noundef %49, ptr noundef %55, i32 noundef 128)
  %56 = load ptr, ptr %8, align 8, !tbaa !5
  %57 = load ptr, ptr %6, align 8, !tbaa !5
  %58 = load ptr, ptr %9, align 8, !tbaa !5
  %59 = load i32, ptr %10, align 4, !tbaa !9
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds %struct.OperatorSpec, ptr %58, i64 %60
  %62 = getelementptr inbounds %struct.OperatorSpec, ptr %61, i32 0, i32 1
  call void @_Z17deserialize_fieldI12OperatorTypeEvPPKhPjPT_i(ptr noundef %56, ptr noundef %57, ptr noundef %62, i32 noundef 1)
  %63 = load ptr, ptr %8, align 8, !tbaa !5
  %64 = load ptr, ptr %6, align 8, !tbaa !5
  %65 = load ptr, ptr %9, align 8, !tbaa !5
  %66 = load i32, ptr %10, align 4, !tbaa !9
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds %struct.OperatorSpec, ptr %65, i64 %67
  %69 = getelementptr inbounds %struct.OperatorSpec, ptr %68, i32 0, i32 2
  call void @_Z17deserialize_fieldIjEvPPKhPjPT_i(ptr noundef %63, ptr noundef %64, ptr noundef %69, i32 noundef 1)
  %70 = load ptr, ptr %9, align 8, !tbaa !5
  %71 = load i32, ptr %10, align 4, !tbaa !9
  %72 = sext i32 %71 to i64
  %73 = getelementptr inbounds %struct.OperatorSpec, ptr %70, i64 %72
  %74 = getelementptr inbounds %struct.OperatorSpec, ptr %73, i32 0, i32 2
  %75 = load i32, ptr %74, align 4, !tbaa !15
  %76 = zext i32 %75 to i64
  %77 = mul i64 %76, 8
  %78 = trunc i64 %77 to i32
  %79 = call noundef ptr @_Z9mt_mallocj(i32 noundef %78)
  %80 = load ptr, ptr %9, align 8, !tbaa !5
  %81 = load i32, ptr %10, align 4, !tbaa !9
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds %struct.OperatorSpec, ptr %80, i64 %82
  %84 = getelementptr inbounds %struct.OperatorSpec, ptr %83, i32 0, i32 3
  store ptr %79, ptr %84, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %85

85:                                               ; preds = %118, %47
  %86 = load i32, ptr %12, align 4, !tbaa !9
  %87 = load ptr, ptr %9, align 8, !tbaa !5
  %88 = load i32, ptr %10, align 4, !tbaa !9
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds %struct.OperatorSpec, ptr %87, i64 %89
  %91 = getelementptr inbounds %struct.OperatorSpec, ptr %90, i32 0, i32 2
  %92 = load i32, ptr %91, align 4, !tbaa !15
  %93 = icmp ult i32 %86, %92
  br i1 %93, label %95, label %94

94:                                               ; preds = %85
  store i32 5, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  br label %121

95:                                               ; preds = %85
  %96 = call noundef ptr @_Z9mt_mallocj(i32 noundef 128)
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  %98 = load i32, ptr %10, align 4, !tbaa !9
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds %struct.OperatorSpec, ptr %97, i64 %99
  %101 = getelementptr inbounds %struct.OperatorSpec, ptr %100, i32 0, i32 3
  %102 = load ptr, ptr %101, align 8, !tbaa !18
  %103 = load i32, ptr %12, align 4, !tbaa !9
  %104 = zext i32 %103 to i64
  %105 = getelementptr inbounds ptr, ptr %102, i64 %104
  store ptr %96, ptr %105, align 8, !tbaa !5
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  %107 = load ptr, ptr %6, align 8, !tbaa !5
  %108 = load ptr, ptr %9, align 8, !tbaa !5
  %109 = load i32, ptr %10, align 4, !tbaa !9
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds %struct.OperatorSpec, ptr %108, i64 %110
  %112 = getelementptr inbounds %struct.OperatorSpec, ptr %111, i32 0, i32 3
  %113 = load ptr, ptr %112, align 8, !tbaa !18
  %114 = load i32, ptr %12, align 4, !tbaa !9
  %115 = zext i32 %114 to i64
  %116 = getelementptr inbounds ptr, ptr %113, i64 %115
  %117 = load ptr, ptr %116, align 8, !tbaa !5
  call void @_Z17deserialize_fieldIcEvPPKhPjPT_i(ptr noundef %106, ptr noundef %107, ptr noundef %117, i32 noundef 128)
  br label %118

118:                                              ; preds = %95
  %119 = load i32, ptr %12, align 4, !tbaa !9
  %120 = add i32 %119, 1
  store i32 %120, ptr %12, align 4, !tbaa !9
  br label %85, !llvm.loop !19

121:                                              ; preds = %94
  %122 = load ptr, ptr %8, align 8, !tbaa !5
  %123 = load ptr, ptr %6, align 8, !tbaa !5
  %124 = load ptr, ptr %9, align 8, !tbaa !5
  %125 = load i32, ptr %10, align 4, !tbaa !9
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds %struct.OperatorSpec, ptr %124, i64 %126
  %128 = getelementptr inbounds %struct.OperatorSpec, ptr %127, i32 0, i32 4
  call void @_Z17deserialize_fieldIjEvPPKhPjPT_i(ptr noundef %122, ptr noundef %123, ptr noundef %128, i32 noundef 1)
  %129 = load ptr, ptr %9, align 8, !tbaa !5
  %130 = load i32, ptr %10, align 4, !tbaa !9
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds %struct.OperatorSpec, ptr %129, i64 %131
  %133 = getelementptr inbounds %struct.OperatorSpec, ptr %132, i32 0, i32 4
  %134 = load i32, ptr %133, align 8, !tbaa !21
  %135 = zext i32 %134 to i64
  %136 = mul i64 %135, 8
  %137 = trunc i64 %136 to i32
  %138 = call noundef ptr @_Z9mt_mallocj(i32 noundef %137)
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = load i32, ptr %10, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds %struct.OperatorSpec, ptr %139, i64 %141
  %143 = getelementptr inbounds %struct.OperatorSpec, ptr %142, i32 0, i32 6
  store ptr %138, ptr %143, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %144

144:                                              ; preds = %177, %121
  %145 = load i32, ptr %13, align 4, !tbaa !9
  %146 = load ptr, ptr %9, align 8, !tbaa !5
  %147 = load i32, ptr %10, align 4, !tbaa !9
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds %struct.OperatorSpec, ptr %146, i64 %148
  %150 = getelementptr inbounds %struct.OperatorSpec, ptr %149, i32 0, i32 4
  %151 = load i32, ptr %150, align 8, !tbaa !21
  %152 = icmp ult i32 %145, %151
  br i1 %152, label %154, label %153

153:                                              ; preds = %144
  store i32 8, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %180

154:                                              ; preds = %144
  %155 = call noundef ptr @_Z9mt_mallocj(i32 noundef 128)
  %156 = load ptr, ptr %9, align 8, !tbaa !5
  %157 = load i32, ptr %10, align 4, !tbaa !9
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds %struct.OperatorSpec, ptr %156, i64 %158
  %160 = getelementptr inbounds %struct.OperatorSpec, ptr %159, i32 0, i32 6
  %161 = load ptr, ptr %160, align 8, !tbaa !22
  %162 = load i32, ptr %13, align 4, !tbaa !9
  %163 = zext i32 %162 to i64
  %164 = getelementptr inbounds ptr, ptr %161, i64 %163
  store ptr %155, ptr %164, align 8, !tbaa !5
  %165 = load ptr, ptr %8, align 8, !tbaa !5
  %166 = load ptr, ptr %6, align 8, !tbaa !5
  %167 = load ptr, ptr %9, align 8, !tbaa !5
  %168 = load i32, ptr %10, align 4, !tbaa !9
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds %struct.OperatorSpec, ptr %167, i64 %169
  %171 = getelementptr inbounds %struct.OperatorSpec, ptr %170, i32 0, i32 6
  %172 = load ptr, ptr %171, align 8, !tbaa !22
  %173 = load i32, ptr %13, align 4, !tbaa !9
  %174 = zext i32 %173 to i64
  %175 = getelementptr inbounds ptr, ptr %172, i64 %174
  %176 = load ptr, ptr %175, align 8, !tbaa !5
  call void @_Z17deserialize_fieldIcEvPPKhPjPT_i(ptr noundef %165, ptr noundef %166, ptr noundef %176, i32 noundef 128)
  br label %177

177:                                              ; preds = %154
  %178 = load i32, ptr %13, align 4, !tbaa !9
  %179 = add i32 %178, 1
  store i32 %179, ptr %13, align 4, !tbaa !9
  br label %144, !llvm.loop !23

180:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  %181 = load ptr, ptr %9, align 8, !tbaa !5
  %182 = load i32, ptr %10, align 4, !tbaa !9
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds %struct.OperatorSpec, ptr %181, i64 %183
  %185 = getelementptr inbounds %struct.OperatorSpec, ptr %184, i32 0, i32 2
  %186 = load i32, ptr %185, align 4, !tbaa !15
  %187 = load ptr, ptr %9, align 8, !tbaa !5
  %188 = load i32, ptr %10, align 4, !tbaa !9
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds %struct.OperatorSpec, ptr %187, i64 %189
  %191 = getelementptr inbounds %struct.OperatorSpec, ptr %190, i32 0, i32 4
  %192 = load i32, ptr %191, align 8, !tbaa !21
  %193 = add i32 %186, %192
  store i32 %193, ptr %14, align 4, !tbaa !9
  %194 = load i32, ptr %14, align 4, !tbaa !9
  %195 = zext i32 %194 to i64
  %196 = mul i64 %195, 4
  %197 = trunc i64 %196 to i32
  %198 = call noundef ptr @_Z9mt_mallocj(i32 noundef %197)
  %199 = load ptr, ptr %9, align 8, !tbaa !5
  %200 = load i32, ptr %10, align 4, !tbaa !9
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds %struct.OperatorSpec, ptr %199, i64 %201
  %203 = getelementptr inbounds %struct.OperatorSpec, ptr %202, i32 0, i32 7
  store ptr %198, ptr %203, align 8, !tbaa !24
  %204 = load ptr, ptr %8, align 8, !tbaa !5
  %205 = load ptr, ptr %6, align 8, !tbaa !5
  %206 = load ptr, ptr %9, align 8, !tbaa !5
  %207 = load i32, ptr %10, align 4, !tbaa !9
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds %struct.OperatorSpec, ptr %206, i64 %208
  %210 = getelementptr inbounds %struct.OperatorSpec, ptr %209, i32 0, i32 7
  %211 = load ptr, ptr %210, align 8, !tbaa !24
  %212 = load i32, ptr %14, align 4, !tbaa !9
  call void @_Z17deserialize_fieldIiEvPPKhPjPT_i(ptr noundef %204, ptr noundef %205, ptr noundef %211, i32 noundef %212)
  %213 = load ptr, ptr %8, align 8, !tbaa !5
  %214 = load ptr, ptr %6, align 8, !tbaa !5
  %215 = load ptr, ptr %9, align 8, !tbaa !5
  %216 = load i32, ptr %10, align 4, !tbaa !9
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds %struct.OperatorSpec, ptr %215, i64 %217
  %219 = getelementptr inbounds %struct.OperatorSpec, ptr %218, i32 0, i32 8
  call void @_Z17deserialize_fieldIjEvPPKhPjPT_i(ptr noundef %213, ptr noundef %214, ptr noundef %219, i32 noundef 1)
  %220 = load ptr, ptr %9, align 8, !tbaa !5
  %221 = load i32, ptr %10, align 4, !tbaa !9
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds %struct.OperatorSpec, ptr %220, i64 %222
  %224 = getelementptr inbounds %struct.OperatorSpec, ptr %223, i32 0, i32 8
  %225 = load i32, ptr %224, align 8, !tbaa !25
  %226 = zext i32 %225 to i64
  %227 = mul i64 %226, 16
  %228 = trunc i64 %227 to i32
  %229 = call noundef ptr @_Z9mt_mallocj(i32 noundef %228)
  %230 = load ptr, ptr %9, align 8, !tbaa !5
  %231 = load i32, ptr %10, align 4, !tbaa !9
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds %struct.OperatorSpec, ptr %230, i64 %232
  %234 = getelementptr inbounds %struct.OperatorSpec, ptr %233, i32 0, i32 10
  store ptr %229, ptr %234, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %235

235:                                              ; preds = %307, %180
  %236 = load i32, ptr %15, align 4, !tbaa !9
  %237 = load ptr, ptr %9, align 8, !tbaa !5
  %238 = load i32, ptr %10, align 4, !tbaa !9
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds %struct.OperatorSpec, ptr %237, i64 %239
  %241 = getelementptr inbounds %struct.OperatorSpec, ptr %240, i32 0, i32 8
  %242 = load i32, ptr %241, align 8, !tbaa !25
  %243 = icmp ult i32 %236, %242
  br i1 %243, label %245, label %244

244:                                              ; preds = %235
  store i32 11, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  br label %310

245:                                              ; preds = %235
  %246 = load ptr, ptr %8, align 8, !tbaa !5
  %247 = load ptr, ptr %6, align 8, !tbaa !5
  %248 = load ptr, ptr %9, align 8, !tbaa !5
  %249 = load i32, ptr %10, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds %struct.OperatorSpec, ptr %248, i64 %250
  %252 = getelementptr inbounds %struct.OperatorSpec, ptr %251, i32 0, i32 10
  %253 = load ptr, ptr %252, align 8, !tbaa !26
  %254 = load i32, ptr %15, align 4, !tbaa !9
  %255 = zext i32 %254 to i64
  %256 = getelementptr inbounds %struct.QuantSpec, ptr %253, i64 %255
  %257 = getelementptr inbounds %struct.QuantSpec, ptr %256, i32 0, i32 0
  call void @_Z17deserialize_fieldIiEvPPKhPjPT_i(ptr noundef %246, ptr noundef %247, ptr noundef %257, i32 noundef 1)
  %258 = load ptr, ptr %9, align 8, !tbaa !5
  %259 = load i32, ptr %10, align 4, !tbaa !9
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds %struct.OperatorSpec, ptr %258, i64 %260
  %262 = getelementptr inbounds %struct.OperatorSpec, ptr %261, i32 0, i32 10
  %263 = load ptr, ptr %262, align 8, !tbaa !26
  %264 = load i32, ptr %15, align 4, !tbaa !9
  %265 = zext i32 %264 to i64
  %266 = getelementptr inbounds %struct.QuantSpec, ptr %263, i64 %265
  %267 = getelementptr inbounds %struct.QuantSpec, ptr %266, i32 0, i32 0
  %268 = load i32, ptr %267, align 8, !tbaa !27
  %269 = sext i32 %268 to i64
  %270 = mul i64 %269, 4
  %271 = trunc i64 %270 to i32
  %272 = call noundef ptr @_Z9mt_mallocj(i32 noundef %271)
  %273 = load ptr, ptr %9, align 8, !tbaa !5
  %274 = load i32, ptr %10, align 4, !tbaa !9
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds %struct.OperatorSpec, ptr %273, i64 %275
  %277 = getelementptr inbounds %struct.OperatorSpec, ptr %276, i32 0, i32 10
  %278 = load ptr, ptr %277, align 8, !tbaa !26
  %279 = load i32, ptr %15, align 4, !tbaa !9
  %280 = zext i32 %279 to i64
  %281 = getelementptr inbounds %struct.QuantSpec, ptr %278, i64 %280
  %282 = getelementptr inbounds %struct.QuantSpec, ptr %281, i32 0, i32 1
  store ptr %272, ptr %282, align 8, !tbaa !29
  %283 = load ptr, ptr %8, align 8, !tbaa !5
  %284 = load ptr, ptr %6, align 8, !tbaa !5
  %285 = load ptr, ptr %9, align 8, !tbaa !5
  %286 = load i32, ptr %10, align 4, !tbaa !9
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds %struct.OperatorSpec, ptr %285, i64 %287
  %289 = getelementptr inbounds %struct.OperatorSpec, ptr %288, i32 0, i32 10
  %290 = load ptr, ptr %289, align 8, !tbaa !26
  %291 = load i32, ptr %15, align 4, !tbaa !9
  %292 = zext i32 %291 to i64
  %293 = getelementptr inbounds %struct.QuantSpec, ptr %290, i64 %292
  %294 = getelementptr inbounds %struct.QuantSpec, ptr %293, i32 0, i32 1
  %295 = load ptr, ptr %294, align 8, !tbaa !29
  %296 = load ptr, ptr %9, align 8, !tbaa !5
  %297 = load i32, ptr %10, align 4, !tbaa !9
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds %struct.OperatorSpec, ptr %296, i64 %298
  %300 = getelementptr inbounds %struct.OperatorSpec, ptr %299, i32 0, i32 10
  %301 = load ptr, ptr %300, align 8, !tbaa !26
  %302 = load i32, ptr %15, align 4, !tbaa !9
  %303 = zext i32 %302 to i64
  %304 = getelementptr inbounds %struct.QuantSpec, ptr %301, i64 %303
  %305 = getelementptr inbounds %struct.QuantSpec, ptr %304, i32 0, i32 0
  %306 = load i32, ptr %305, align 8, !tbaa !27
  call void @_Z17deserialize_fieldIfEvPPKhPjPT_i(ptr noundef %283, ptr noundef %284, ptr noundef %295, i32 noundef %306)
  br label %307

307:                                              ; preds = %245
  %308 = load i32, ptr %15, align 4, !tbaa !9
  %309 = add i32 %308, 1
  store i32 %309, ptr %15, align 4, !tbaa !9
  br label %235, !llvm.loop !30

310:                                              ; preds = %244
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %311 = load ptr, ptr %5, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.ModelSpec, ptr %311, i32 0, i32 0
  %313 = load i32, ptr %312, align 8, !tbaa !31
  %314 = load ptr, ptr %9, align 8, !tbaa !5
  %315 = load i32, ptr %10, align 4, !tbaa !9
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds %struct.OperatorSpec, ptr %314, i64 %316
  %318 = getelementptr inbounds %struct.OperatorSpec, ptr %317, i32 0, i32 1
  %319 = load i32, ptr %318, align 8, !tbaa !32
  %320 = call noundef i32 @_Z27get_operator_parameter_sizei12OperatorType(i32 noundef %313, i32 noundef %319)
  store i32 %320, ptr %16, align 4, !tbaa !9
  %321 = load ptr, ptr %8, align 8, !tbaa !5
  %322 = load ptr, ptr %6, align 8, !tbaa !5
  %323 = load ptr, ptr %9, align 8, !tbaa !5
  %324 = load i32, ptr %10, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds %struct.OperatorSpec, ptr %323, i64 %325
  %327 = getelementptr inbounds %struct.OperatorSpec, ptr %326, i32 0, i32 11
  %328 = load i32, ptr %16, align 4, !tbaa !9
  call void @_Z17deserialize_fieldIhEvPPKhPjPT_i(ptr noundef %321, ptr noundef %322, ptr noundef %327, i32 noundef %328)
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  %329 = load ptr, ptr %9, align 8, !tbaa !5
  %330 = load i32, ptr %10, align 4, !tbaa !9
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds %struct.OperatorSpec, ptr %329, i64 %331
  %333 = load ptr, ptr %5, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.ModelSpec, ptr %333, i32 0, i32 0
  %335 = load i32, ptr %334, align 8, !tbaa !31
  %336 = call noundef i32 @_Z19model_compatibilityP12OperatorSpeci(ptr noundef %332, i32 noundef %335)
  store i32 %336, ptr %17, align 4, !tbaa !33
  %337 = load i32, ptr %17, align 4, !tbaa !33
  %338 = icmp ne i32 %337, 0
  br i1 %338, label %339, label %351

339:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %340 = call i64 (i64, ...) @syscall(i64 noundef 186) #8
  %341 = trunc i64 %340 to i32
  store i32 %341, ptr %18, align 4, !tbaa !9
  %342 = load i32, ptr %18, align 4, !tbaa !9
  %343 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, i32 noundef %342)
  %344 = load ptr, ptr @stdout, align 8, !tbaa !5
  %345 = call i32 @fflush(ptr noundef %344)
  %346 = load i32, ptr %17, align 4, !tbaa !33
  %347 = call ptr @ee2str(i32 noundef %346)
  %348 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, ptr noundef %347)
  %349 = load ptr, ptr @stdout, align 8, !tbaa !5
  %350 = call i32 @fflush(ptr noundef %349)
  call void @exit(i32 noundef 1) #9
  unreachable

351:                                              ; preds = %310
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  br label %352

352:                                              ; preds = %351
  %353 = load i32, ptr %10, align 4, !tbaa !9
  %354 = add nsw i32 %353, 1
  store i32 %354, ptr %10, align 4, !tbaa !9
  br label %40, !llvm.loop !35

355:                                              ; preds = %46
  store i32 1, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  ret i32 0
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldI12OperatorTypeEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldIjEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldIfEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @ee2str(i32 noundef) #7

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint 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 #5 = { 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 #6 = { 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 #7 = { inlinehint 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 #8 = { nounwind }
attributes #9 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 176}
!12 = !{!"_ZTS9ModelSpec", !10, i64 0, !10, i64 4, !7, i64 8, !13, i64 136, !10, i64 140, !6, i64 144, !6, i64 152, !10, i64 160, !6, i64 168, !10, i64 176, !6, i64 184, !10, i64 192, !6, i64 200, !10, i64 208, !6, i64 216, !6, i64 224}
!13 = !{!"_ZTS8DataType", !7, i64 0}
!14 = !{!12, !6, i64 184}
!15 = !{!16, !10, i64 132}
!16 = !{!"_ZTS12OperatorSpec", !7, i64 0, !17, i64 128, !10, i64 132, !6, i64 136, !10, i64 144, !6, i64 152, !6, i64 160, !10, i64 168, !6, i64 176, !7, i64 184}
!17 = !{!"_ZTS12OperatorType", !7, i64 0}
!18 = !{!16, !6, i64 136}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!16, !10, i64 144}
!22 = !{!16, !6, i64 152}
!23 = distinct !{!23, !20}
!24 = !{!16, !6, i64 160}
!25 = !{!16, !10, i64 168}
!26 = !{!16, !6, i64 176}
!27 = !{!28, !10, i64 0}
!28 = !{!"_ZTS9QuantSpec", !10, i64 0, !6, i64 8}
!29 = !{!28, !6, i64 8}
!30 = distinct !{!30, !20}
!31 = !{!12, !10, i64 0}
!32 = !{!16, !17, i64 128}
!33 = !{!34, !34, i64 0}
!34 = !{!"_ZTS2EE", !7, i64 0}
!35 = distinct !{!35, !20}


; 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.OperatorSpec = type <{ [128 x i8], i32, i32, ptr, i32, [4 x i8], ptr, ptr, i32, [4 x i8], ptr, %union.ParameterSpec, [4 x i8] }>
%union.ParameterSpec = type { %struct.MultiHeadAttentionParamSpec }
%struct.MultiHeadAttentionParamSpec = type { [6 x %struct.FullyConnectedParamSpec], %struct.PowerParamSpec, [2 x i8], i32, [4 x %struct.ReshapeParamSpec], [2 x %struct.EltwiseParamSpec] }
%struct.FullyConnectedParamSpec = type { i32, i32, [32 x i32] }
%struct.PowerParamSpec = type { float, float, float }
%struct.ReshapeParamSpec = type { [8 x i32], i32, i32, i32 }
%struct.EltwiseParamSpec = type { i32, %struct.EltwiseSumSpec, i32, %union.ActivationSpec }
%struct.EltwiseSumSpec = type { [8 x float], i32 }
%union.ActivationSpec = type { %struct.ClipParamSpec }
%struct.ClipParamSpec = type { float, float }
%struct.QuantSpec = type { i32, ptr }

@.str.1 = external hidden unnamed_addr constant [20 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [18 x i8], align 1

; 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: nounwind
declare i64 @syscall(i64 noundef, ...) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_Z9mt_mallocj(i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldIiEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldIcEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldIhEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_Z27get_operator_parameter_sizei12OperatorType(i32 noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z19model_compatibilityP12OperatorSpeci(ptr noundef, i32 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z20deserialize_operatorPKhP9ModelSpecPj(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #6 {
  %4 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  %5 = load i32, ptr %2, align 4, !tbaa !5
  %6 = zext i32 %5 to i64
  %7 = getelementptr inbounds i8, ptr %0, i64 %6
  store ptr %7, ptr %4, align 8, !tbaa !9
  %8 = getelementptr inbounds i8, ptr %1, i64 176
  call void @_Z17deserialize_fieldIiEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef nonnull %8, i32 noundef 1)
  %9 = load i32, ptr %8, align 8, !tbaa !11
  %10 = mul i32 %9, 1304
  %11 = call noundef ptr @_Z9mt_mallocj(i32 noundef %10)
  %12 = getelementptr inbounds i8, ptr %1, i64 184
  store ptr %11, ptr %12, align 8, !tbaa !14
  %13 = load i32, ptr %8, align 8, !tbaa !11
  %14 = icmp sgt i32 %13, 0
  br i1 %14, label %.lr.ph132, label %._crit_edge133

15:                                               ; preds = %._crit_edge129
  %indvars.iv.next148 = add nuw nsw i64 %indvars.iv147, 1
  %16 = load i32, ptr %8, align 8, !tbaa !11
  %17 = sext i32 %16 to i64
  %18 = icmp slt i64 %indvars.iv.next148, %17
  br i1 %18, label %.lr.ph132, label %._crit_edge133, !llvm.loop !15

._crit_edge133:                                   ; preds = %15, %3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  ret i32 0

.lr.ph132:                                        ; preds = %3, %15
  %indvars.iv147 = phi i64 [ %indvars.iv.next148, %15 ], [ 0, %3 ]
  %19 = getelementptr inbounds %struct.OperatorSpec, ptr %11, i64 %indvars.iv147
  call void @_Z17deserialize_fieldIcEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef %19, i32 noundef 128)
  %20 = getelementptr inbounds i8, ptr %19, i64 128
  call void @_Z17deserialize_fieldI12OperatorTypeEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef nonnull %20, i32 noundef 1)
  %21 = getelementptr inbounds i8, ptr %19, i64 132
  call void @_Z17deserialize_fieldIjEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef nonnull %21, i32 noundef 1)
  %22 = load i32, ptr %21, align 4, !tbaa !17
  %23 = shl i32 %22, 3
  %24 = call noundef ptr @_Z9mt_mallocj(i32 noundef %23)
  %25 = getelementptr inbounds i8, ptr %19, i64 136
  store ptr %24, ptr %25, align 8, !tbaa !20
  %26 = load i32, ptr %21, align 4, !tbaa !17
  %.not134 = icmp eq i32 %26, 0
  br i1 %.not134, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %.lr.ph132
  %27 = getelementptr inbounds i8, ptr %19, i64 144
  call void @_Z17deserialize_fieldIjEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef nonnull %27, i32 noundef 1)
  %28 = load i32, ptr %27, align 8, !tbaa !21
  %29 = shl i32 %28, 3
  %30 = call noundef ptr @_Z9mt_mallocj(i32 noundef %29)
  %31 = getelementptr inbounds i8, ptr %19, i64 152
  store ptr %30, ptr %31, align 8, !tbaa !22
  %32 = load i32, ptr %27, align 8, !tbaa !21
  %.not135 = icmp eq i32 %32, 0
  br i1 %.not135, label %._crit_edge125, label %.lr.ph124

.lr.ph:                                           ; preds = %.lr.ph132, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %.lr.ph132 ]
  %33 = call noundef ptr @_Z9mt_mallocj(i32 noundef 128)
  %34 = load ptr, ptr %25, align 8, !tbaa !20
  %35 = getelementptr inbounds ptr, ptr %34, i64 %indvars.iv
  store ptr %33, ptr %35, align 8, !tbaa !9
  %36 = load ptr, ptr %25, align 8, !tbaa !20
  %37 = getelementptr inbounds ptr, ptr %36, i64 %indvars.iv
  %38 = load ptr, ptr %37, align 8, !tbaa !9
  call void @_Z17deserialize_fieldIcEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef %38, i32 noundef 128)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %39 = load i32, ptr %21, align 4, !tbaa !17
  %40 = zext i32 %39 to i64
  %41 = icmp ult i64 %indvars.iv.next, %40
  br i1 %41, label %.lr.ph, label %._crit_edge, !llvm.loop !23

._crit_edge125:                                   ; preds = %.lr.ph124, %._crit_edge
  %.lcssa = phi i32 [ 0, %._crit_edge ], [ %59, %.lr.ph124 ]
  %42 = load i32, ptr %21, align 4, !tbaa !17
  %43 = add i32 %42, %.lcssa
  %44 = shl i32 %43, 2
  %45 = call noundef ptr @_Z9mt_mallocj(i32 noundef %44)
  %46 = getelementptr inbounds i8, ptr %19, i64 160
  store ptr %45, ptr %46, align 8, !tbaa !24
  call void @_Z17deserialize_fieldIiEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef %45, i32 noundef %43)
  %47 = getelementptr inbounds i8, ptr %19, i64 168
  call void @_Z17deserialize_fieldIjEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef nonnull %47, i32 noundef 1)
  %48 = load i32, ptr %47, align 8, !tbaa !25
  %49 = shl i32 %48, 4
  %50 = call noundef ptr @_Z9mt_mallocj(i32 noundef %49)
  %51 = getelementptr inbounds i8, ptr %19, i64 176
  store ptr %50, ptr %51, align 8, !tbaa !26
  %52 = load i32, ptr %47, align 8, !tbaa !25
  %.not136 = icmp eq i32 %52, 0
  br i1 %.not136, label %._crit_edge129, label %.lr.ph128

.lr.ph124:                                        ; preds = %._crit_edge, %.lr.ph124
  %indvars.iv141 = phi i64 [ %indvars.iv.next142, %.lr.ph124 ], [ 0, %._crit_edge ]
  %53 = call noundef ptr @_Z9mt_mallocj(i32 noundef 128)
  %54 = load ptr, ptr %31, align 8, !tbaa !22
  %55 = getelementptr inbounds ptr, ptr %54, i64 %indvars.iv141
  store ptr %53, ptr %55, align 8, !tbaa !9
  %56 = load ptr, ptr %31, align 8, !tbaa !22
  %57 = getelementptr inbounds ptr, ptr %56, i64 %indvars.iv141
  %58 = load ptr, ptr %57, align 8, !tbaa !9
  call void @_Z17deserialize_fieldIcEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef %58, i32 noundef 128)
  %indvars.iv.next142 = add nuw nsw i64 %indvars.iv141, 1
  %59 = load i32, ptr %27, align 8, !tbaa !21
  %60 = zext i32 %59 to i64
  %61 = icmp ult i64 %indvars.iv.next142, %60
  br i1 %61, label %.lr.ph124, label %._crit_edge125, !llvm.loop !27

._crit_edge129:                                   ; preds = %.lr.ph128, %._crit_edge125
  %62 = load i32, ptr %1, align 8, !tbaa !28
  %63 = load i32, ptr %20, align 8, !tbaa !29
  %64 = call noundef i32 @_Z27get_operator_parameter_sizei12OperatorType(i32 noundef %62, i32 noundef %63)
  %65 = getelementptr inbounds i8, ptr %19, i64 184
  call void @_Z17deserialize_fieldIhEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef nonnull %65, i32 noundef %64)
  %66 = load i32, ptr %1, align 8, !tbaa !28
  %67 = call noundef i32 @_Z19model_compatibilityP12OperatorSpeci(ptr noundef nonnull %19, i32 noundef %66)
  %.not = icmp eq i32 %67, 0
  br i1 %.not, label %15, label %82

.lr.ph128:                                        ; preds = %._crit_edge125, %.lr.ph128
  %indvars.iv144 = phi i64 [ %indvars.iv.next145, %.lr.ph128 ], [ 0, %._crit_edge125 ]
  %68 = load ptr, ptr %51, align 8, !tbaa !26
  %69 = getelementptr inbounds %struct.QuantSpec, ptr %68, i64 %indvars.iv144
  call void @_Z17deserialize_fieldIiEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef %69, i32 noundef 1)
  %70 = load ptr, ptr %51, align 8, !tbaa !26
  %71 = getelementptr inbounds %struct.QuantSpec, ptr %70, i64 %indvars.iv144
  %72 = load i32, ptr %71, align 8, !tbaa !30
  %73 = shl i32 %72, 2
  %74 = call noundef ptr @_Z9mt_mallocj(i32 noundef %73)
  %75 = load ptr, ptr %51, align 8, !tbaa !26
  %76 = getelementptr inbounds %struct.QuantSpec, ptr %75, i64 %indvars.iv144, i32 1
  store ptr %74, ptr %76, align 8, !tbaa !32
  %77 = getelementptr inbounds %struct.QuantSpec, ptr %75, i64 %indvars.iv144
  %78 = load i32, ptr %77, align 8, !tbaa !30
  call void @_Z17deserialize_fieldIfEvPPKhPjPT_i(ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef %74, i32 noundef %78)
  %indvars.iv.next145 = add nuw nsw i64 %indvars.iv144, 1
  %79 = load i32, ptr %47, align 8, !tbaa !25
  %80 = zext i32 %79 to i64
  %81 = icmp ult i64 %indvars.iv.next145, %80
  br i1 %81, label %.lr.ph128, label %._crit_edge129, !llvm.loop !33

82:                                               ; preds = %._crit_edge129
  %83 = call i64 (i64, ...) @syscall(i64 noundef 186) #8
  %84 = trunc i64 %83 to i32
  %85 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %84)
  %86 = load ptr, ptr @stdout, align 8, !tbaa !9
  %87 = call i32 @fflush(ptr noundef %86)
  %88 = call ptr @ee2str(i32 noundef %67)
  %89 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, ptr noundef %88)
  %90 = load ptr, ptr @stdout, align 8, !tbaa !9
  %91 = call i32 @fflush(ptr noundef %90)
  call void @exit(i32 noundef 1) #9
  unreachable
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldI12OperatorTypeEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldIjEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z17deserialize_fieldIfEvPPKhPjPT_i(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @ee2str(i32 noundef) local_unnamed_addr #7

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !6, i64 176}
!12 = !{!"_ZTS9ModelSpec", !6, i64 0, !6, i64 4, !7, i64 8, !13, i64 136, !6, i64 140, !10, i64 144, !10, i64 152, !6, i64 160, !10, i64 168, !6, i64 176, !10, i64 184, !6, i64 192, !10, i64 200, !6, i64 208, !10, i64 216, !10, i64 224}
!13 = !{!"_ZTS8DataType", !7, i64 0}
!14 = !{!12, !10, i64 184}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!18, !6, i64 132}
!18 = !{!"_ZTS12OperatorSpec", !7, i64 0, !19, i64 128, !6, i64 132, !10, i64 136, !6, i64 144, !10, i64 152, !10, i64 160, !6, i64 168, !10, i64 176, !7, i64 184}
!19 = !{!"_ZTS12OperatorType", !7, i64 0}
!20 = !{!18, !10, i64 136}
!21 = !{!18, !6, i64 144}
!22 = !{!18, !10, i64 152}
!23 = distinct !{!23, !16}
!24 = !{!18, !10, i64 160}
!25 = !{!18, !6, i64 168}
!26 = !{!18, !10, i64 176}
!27 = distinct !{!27, !16}
!28 = !{!12, !6, i64 0}
!29 = !{!18, !19, i64 128}
!30 = !{!31, !6, i64 0}
!31 = !{!"_ZTS9QuantSpec", !6, i64 0, !10, i64 8}
!32 = !{!31, !10, i64 8}
!33 = distinct !{!33, !16}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass