; LLVM IR from tanakamasayuki/Arduino_TensorFlowLite_ESP32 :: src/tensorflow/lite/micro/memory_planner (greedy_memory_planner)

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

%"class.tflite::GreedyMemoryPlanner" = type <{ %"class.tflite::MicroMemoryPlanner", i32, i32, ptr, ptr, ptr, ptr, i32, i32, ptr, i8, [7 x i8] }>
%"class.tflite::MicroMemoryPlanner" = type { ptr }
%"struct.tflite::GreedyMemoryPlanner::BufferRequirements" = type { i32, i32, i32, i32 }

@.str.1 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [1 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: mustprogress nounwind uwtable
declare dso_local void @_ZN6tflite19GreedyMemoryPlanner24CalculateOffsetsIfNeededEv(ptr noundef nonnull align 8 dereferenceable(65)) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6tflite19GreedyMemoryPlanner15PrintMemoryPlanEv(ptr noundef nonnull align 8 dereferenceable(65) %0) unnamed_addr #2 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca [81 x i8], align 16
  %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 ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %24 = load ptr, ptr %2, align 8
  call void @_ZN6tflite19GreedyMemoryPlanner24CalculateOffsetsIfNeededEv(ptr noundef nonnull align 8 dereferenceable(65) %24)
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #4
  store i32 0, ptr %3, align 4, !tbaa !9
  br label %25

25:                                               ; preds = %63, %1
  %26 = load i32, ptr %3, align 4, !tbaa !9
  %27 = getelementptr inbounds %"class.tflite::GreedyMemoryPlanner", ptr %24, i32 0, i32 2
  %28 = load i32, ptr %27, align 4, !tbaa !11
  %29 = icmp slt i32 %26, %28
  br i1 %29, label %31, label %30

30:                                               ; preds = %25
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #4
  br label %66

31:                                               ; preds = %25
  %32 = load i32, ptr %3, align 4, !tbaa !9
  %33 = call noundef signext i8 @_ZN6tflite12_GLOBAL__N_119GetOrdinalCharacterEi(i32 noundef %32)
  %34 = sext i8 %33 to i32
  %35 = load i32, ptr %3, align 4, !tbaa !9
  %36 = getelementptr inbounds %"class.tflite::GreedyMemoryPlanner", ptr %24, i32 0, i32 3
  %37 = load ptr, ptr %36, align 8, !tbaa !15
  %38 = load i32, ptr %3, align 4, !tbaa !9
  %39 = sext i32 %38 to i64
  %40 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %37, i64 %39
  %41 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %40, i32 0, i32 0
  %42 = load i32, ptr %41, align 4, !tbaa !16
  %43 = getelementptr inbounds %"class.tflite::GreedyMemoryPlanner", ptr %24, i32 0, i32 9
  %44 = load ptr, ptr %43, align 8, !tbaa !18
  %45 = load i32, ptr %3, align 4, !tbaa !9
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds i32, ptr %44, i64 %46
  %48 = load i32, ptr %47, align 4, !tbaa !9
  %49 = getelementptr inbounds %"class.tflite::GreedyMemoryPlanner", ptr %24, i32 0, i32 3
  %50 = load ptr, ptr %49, align 8, !tbaa !15
  %51 = load i32, ptr %3, align 4, !tbaa !9
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %50, i64 %52
  %54 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %53, i32 0, i32 2
  %55 = load i32, ptr %54, align 4, !tbaa !19
  %56 = getelementptr inbounds %"class.tflite::GreedyMemoryPlanner", ptr %24, i32 0, i32 3
  %57 = load ptr, ptr %56, align 8, !tbaa !15
  %58 = load i32, ptr %3, align 4, !tbaa !9
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %57, i64 %59
  %61 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %60, i32 0, i32 3
  %62 = load i32, ptr %61, align 4, !tbaa !20
  call void (ptr, ...) @_Z11MicroPrintfPKcz(ptr noundef @.str.1, i32 noundef %34, i32 noundef %35, i32 noundef %42, i32 noundef %48, i32 noundef %55, i32 noundef %62)
  br label %63

63:                                               ; preds = %31
  %64 = load i32, ptr %3, align 4, !tbaa !9
  %65 = add nsw i32 %64, 1
  store i32 %65, ptr %3, align 4, !tbaa !9
  br label %25, !llvm.loop !21

66:                                               ; preds = %30
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  store i32 80, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  store i32 80, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  store i32 0, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %67

67:                                               ; preds = %105, %66
  %68 = load i32, ptr %7, align 4, !tbaa !9
  %69 = getelementptr inbounds %"class.tflite::GreedyMemoryPlanner", ptr %24, i32 0, i32 2
  %70 = load i32, ptr %69, align 4, !tbaa !11
  %71 = icmp slt i32 %68, %70
  br i1 %71, label %73, label %72

72:                                               ; preds = %67
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  br label %108

73:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %74 = getelementptr inbounds %"class.tflite::GreedyMemoryPlanner", ptr %24, i32 0, i32 3
  %75 = load ptr, ptr %74, align 8, !tbaa !15
  %76 = load i32, ptr %7, align 4, !tbaa !9
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %75, i64 %77
  store ptr %78, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  %79 = getelementptr inbounds %"class.tflite::GreedyMemoryPlanner", ptr %24, i32 0, i32 9
  %80 = load ptr, ptr %79, align 8, !tbaa !18
  %81 = load i32, ptr %7, align 4, !tbaa !9
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds i32, ptr %80, i64 %82
  %84 = load i32, ptr %83, align 4, !tbaa !9
  store i32 %84, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %85 = load ptr, ptr %8, align 8, !tbaa !5
  %86 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %85, i32 0, i32 3
  %87 = load i32, ptr %86, align 4, !tbaa !20
  store i32 %87, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  %88 = load i32, ptr %9, align 4, !tbaa !9
  %89 = load ptr, ptr %8, align 8, !tbaa !5
  %90 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %89, i32 0, i32 0
  %91 = load i32, ptr %90, align 4, !tbaa !16
  %92 = add nsw i32 %88, %91
  store i32 %92, ptr %11, align 4, !tbaa !9
  %93 = load i32, ptr %11, align 4, !tbaa !9
  %94 = load i32, ptr %5, align 4, !tbaa !9
  %95 = icmp sgt i32 %93, %94
  br i1 %95, label %96, label %98

96:                                               ; preds = %73
  %97 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %97, ptr %5, align 4, !tbaa !9
  br label %98

98:                                               ; preds = %96, %73
  %99 = load i32, ptr %10, align 4, !tbaa !9
  %100 = load i32, ptr %6, align 4, !tbaa !9
  %101 = icmp sgt i32 %99, %100
  br i1 %101, label %102, label %104

102:                                              ; preds = %98
  %103 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %103, ptr %6, align 4, !tbaa !9
  br label %104

104:                                              ; preds = %102, %98
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  br label %105

105:                                              ; preds = %104
  %106 = load i32, ptr %7, align 4, !tbaa !9
  %107 = add nsw i32 %106, 1
  store i32 %107, ptr %7, align 4, !tbaa !9
  br label %67, !llvm.loop !23

108:                                              ; preds = %72
  call void @llvm.lifetime.start.p0(i64 81, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %109

109:                                              ; preds = %224, %108
  %110 = load i32, ptr %13, align 4, !tbaa !9
  %111 = load i32, ptr %6, align 4, !tbaa !9
  %112 = icmp sle i32 %110, %111
  br i1 %112, label %114, label %113

113:                                              ; preds = %109
  store i32 8, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %227

114:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %115

115:                                              ; preds = %123, %114
  %116 = load i32, ptr %15, align 4, !tbaa !9
  %117 = icmp slt i32 %116, 80
  br i1 %117, label %119, label %118

118:                                              ; preds = %115
  store i32 11, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  br label %126

119:                                              ; preds = %115
  %120 = load i32, ptr %15, align 4, !tbaa !9
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds [81 x i8], ptr %12, i64 0, i64 %121
  store i8 46, ptr %122, align 1, !tbaa !24
  br label %123

123:                                              ; preds = %119
  %124 = load i32, ptr %15, align 4, !tbaa !9
  %125 = add nsw i32 %124, 1
  store i32 %125, ptr %15, align 4, !tbaa !9
  br label %115, !llvm.loop !25

126:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %127

127:                                              ; preds = %210, %126
  %128 = load i32, ptr %17, align 4, !tbaa !9
  %129 = getelementptr inbounds %"class.tflite::GreedyMemoryPlanner", ptr %24, i32 0, i32 2
  %130 = load i32, ptr %129, align 4, !tbaa !11
  %131 = icmp slt i32 %128, %130
  br i1 %131, label %133, label %132

132:                                              ; preds = %127
  store i32 14, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %213

133:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  %134 = getelementptr inbounds %"class.tflite::GreedyMemoryPlanner", ptr %24, i32 0, i32 3
  %135 = load ptr, ptr %134, align 8, !tbaa !15
  %136 = load i32, ptr %17, align 4, !tbaa !9
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %135, i64 %137
  store ptr %138, ptr %18, align 8, !tbaa !5
  %139 = load i32, ptr %13, align 4, !tbaa !9
  %140 = load ptr, ptr %18, align 8, !tbaa !5
  %141 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %140, i32 0, i32 2
  %142 = load i32, ptr %141, align 4, !tbaa !19
  %143 = icmp slt i32 %139, %142
  br i1 %143, label %150, label %144

144:                                              ; preds = %133
  %145 = load i32, ptr %13, align 4, !tbaa !9
  %146 = load ptr, ptr %18, align 8, !tbaa !5
  %147 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %146, i32 0, i32 3
  %148 = load i32, ptr %147, align 4, !tbaa !20
  %149 = icmp sgt i32 %145, %148
  br i1 %149, label %150, label %151

150:                                              ; preds = %144, %133
  store i32 16, ptr %14, align 4
  br label %207

151:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %152 = getelementptr inbounds %"class.tflite::GreedyMemoryPlanner", ptr %24, i32 0, i32 9
  %153 = load ptr, ptr %152, align 8, !tbaa !18
  %154 = load i32, ptr %17, align 4, !tbaa !9
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds i32, ptr %153, i64 %155
  %157 = load i32, ptr %156, align 4, !tbaa !9
  store i32 %157, ptr %19, align 4, !tbaa !9
  %158 = load i32, ptr %19, align 4, !tbaa !9
  %159 = icmp eq i32 %158, -1
  br i1 %159, label %160, label %161

160:                                              ; preds = %151
  store i32 16, ptr %14, align 4
  br label %206

161:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %162 = load ptr, ptr %18, align 8, !tbaa !5
  %163 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %162, i32 0, i32 0
  %164 = load i32, ptr %163, align 4, !tbaa !16
  store i32 %164, ptr %20, align 4, !tbaa !9
  %165 = load i32, ptr %20, align 4, !tbaa !9
  %166 = load i32, ptr %16, align 4, !tbaa !9
  %167 = add nsw i32 %166, %165
  store i32 %167, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %168 = load i32, ptr %19, align 4, !tbaa !9
  %169 = mul nsw i32 %168, 80
  %170 = load i32, ptr %5, align 4, !tbaa !9
  %171 = sdiv i32 %169, %170
  store i32 %171, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %172 = load i32, ptr %19, align 4, !tbaa !9
  %173 = load i32, ptr %20, align 4, !tbaa !9
  %174 = add nsw i32 %172, %173
  %175 = mul nsw i32 %174, 80
  %176 = load i32, ptr %5, align 4, !tbaa !9
  %177 = sdiv i32 %175, %176
  store i32 %177, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %178 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %178, ptr %23, align 4, !tbaa !9
  br label %179

179:                                              ; preds = %202, %161
  %180 = load i32, ptr %23, align 4, !tbaa !9
  %181 = load i32, ptr %22, align 4, !tbaa !9
  %182 = icmp slt i32 %180, %181
  br i1 %182, label %184, label %183

183:                                              ; preds = %179
  store i32 17, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %205

184:                                              ; preds = %179
  %185 = load i32, ptr %23, align 4, !tbaa !9
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds [81 x i8], ptr %12, i64 0, i64 %186
  %188 = load i8, ptr %187, align 1, !tbaa !24
  %189 = sext i8 %188 to i32
  %190 = icmp eq i32 %189, 46
  br i1 %190, label %191, label %197

191:                                              ; preds = %184
  %192 = load i32, ptr %17, align 4, !tbaa !9
  %193 = call noundef signext i8 @_ZN6tflite12_GLOBAL__N_119GetOrdinalCharacterEi(i32 noundef %192)
  %194 = load i32, ptr %23, align 4, !tbaa !9
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds [81 x i8], ptr %12, i64 0, i64 %195
  store i8 %193, ptr %196, align 1, !tbaa !24
  br label %201

197:                                              ; preds = %184
  %198 = load i32, ptr %23, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds [81 x i8], ptr %12, i64 0, i64 %199
  store i8 33, ptr %200, align 1, !tbaa !24
  br label %201

201:                                              ; preds = %197, %191
  br label %202

202:                                              ; preds = %201
  %203 = load i32, ptr %23, align 4, !tbaa !9
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr %23, align 4, !tbaa !9
  br label %179, !llvm.loop !26

205:                                              ; preds = %183
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  store i32 0, ptr %14, align 4
  br label %206

206:                                              ; preds = %205, %160
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  br label %207

207:                                              ; preds = %206, %150
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  %208 = load i32, ptr %14, align 4
  switch i32 %208, label %228 [
    i32 0, label %209
    i32 16, label %210
  ]

209:                                              ; preds = %207
  br label %210

210:                                              ; preds = %209, %207
  %211 = load i32, ptr %17, align 4, !tbaa !9
  %212 = add nsw i32 %211, 1
  store i32 %212, ptr %17, align 4, !tbaa !9
  br label %127, !llvm.loop !27

213:                                              ; preds = %132
  %214 = getelementptr inbounds [81 x i8], ptr %12, i64 0, i64 80
  store i8 0, ptr %214, align 16, !tbaa !24
  %215 = load i32, ptr %13, align 4, !tbaa !9
  %216 = icmp slt i32 %215, 10
  %217 = zext i1 %216 to i64
  %218 = select i1 %216, ptr @.str.3, ptr @.str.4
  %219 = load i32, ptr %13, align 4, !tbaa !9
  %220 = getelementptr inbounds [81 x i8], ptr %12, i64 0, i64 0
  %221 = load i32, ptr %16, align 4, !tbaa !9
  %222 = add nsw i32 %221, 1023
  %223 = sdiv i32 %222, 1024
  call void (ptr, ...) @_Z11MicroPrintfPKcz(ptr noundef @.str.2, ptr noundef %218, i32 noundef %219, ptr noundef %220, i32 noundef %223)
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  br label %224

224:                                              ; preds = %213
  %225 = load i32, ptr %13, align 4, !tbaa !9
  %226 = add nsw i32 %225, 1
  store i32 %226, ptr %13, align 4, !tbaa !9
  br label %109, !llvm.loop !28

227:                                              ; preds = %113
  call void @llvm.lifetime.end.p0(i64 81, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  ret void

228:                                              ; preds = %207
  unreachable
}

declare void @_Z11MicroPrintfPKcz(ptr noundef, ...) #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef signext i8 @_ZN6tflite12_GLOBAL__N_119GetOrdinalCharacterEi(i32 noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { "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 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 12}
!12 = !{!"_ZTSN6tflite19GreedyMemoryPlannerE", !13, i64 0, !10, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !10, i64 48, !10, i64 52, !6, i64 56, !14, i64 64}
!13 = !{!"_ZTSN6tflite18MicroMemoryPlannerE"}
!14 = !{!"bool", !7, i64 0}
!15 = !{!12, !6, i64 16}
!16 = !{!17, !10, i64 0}
!17 = !{!"_ZTSN6tflite19GreedyMemoryPlanner18BufferRequirementsE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!18 = !{!12, !6, i64 56}
!19 = !{!17, !10, i64 8}
!20 = !{!17, !10, i64 12}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = !{!7, !7, i64 0}
!25 = distinct !{!25, !22}
!26 = distinct !{!26, !22}
!27 = distinct !{!27, !22}
!28 = distinct !{!28, !22}


; 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.tflite::GreedyMemoryPlanner::BufferRequirements" = type { i32, i32, i32, i32 }

@.str.1 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [1 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: mustprogress nounwind uwtable
declare dso_local void @_ZN6tflite19GreedyMemoryPlanner24CalculateOffsetsIfNeededEv(ptr noundef nonnull align 8 dereferenceable(65)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6tflite19GreedyMemoryPlanner15PrintMemoryPlanEv(ptr noundef nonnull align 8 dereferenceable(65) %0) unnamed_addr #2 align 2 {
  %2 = alloca [81 x i8], align 16
  tail call void @_ZN6tflite19GreedyMemoryPlanner24CalculateOffsetsIfNeededEv(ptr noundef nonnull align 8 dereferenceable(65) %0)
  %3 = getelementptr inbounds i8, ptr %0, i64 12
  %4 = load i32, ptr %3, align 4, !tbaa !5
  %5 = icmp sgt i32 %4, 0
  br i1 %5, label %.lr.ph, label %.preheader68.lr.ph

.lr.ph:                                           ; preds = %1
  %6 = getelementptr inbounds i8, ptr %0, i64 16
  %7 = getelementptr inbounds i8, ptr %0, i64 56
  br label %79

.preheader69:                                     ; preds = %79
  %8 = icmp sgt i32 %93, 0
  br i1 %8, label %.lr.ph75, label %.preheader68.lr.ph

.lr.ph75:                                         ; preds = %.preheader69
  %9 = getelementptr inbounds i8, ptr %0, i64 16
  %10 = load ptr, ptr %9, align 8, !tbaa !13
  %11 = getelementptr inbounds i8, ptr %0, i64 56
  %12 = load ptr, ptr %11, align 8, !tbaa !14
  %wide.trip.count = zext nneg i32 %93 to i64
  %min.iters.check = icmp ult i32 %93, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph75
  %indvars.iv92.ph = phi i64 [ 0, %.lr.ph75 ], [ %n.vec, %middle.block ]
  %.05674.ph = phi i32 [ 80, %.lr.ph75 ], [ %77, %middle.block ]
  %.05773.ph = phi i32 [ 0, %.lr.ph75 ], [ %78, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph75
  %n.vec = and i64 %wide.trip.count, 2147483640
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ <i32 80, i32 80, i32 80, i32 80>, %vector.ph ], [ %72, %vector.body ]
  %vec.phi107 = phi <4 x i32> [ <i32 80, i32 80, i32 80, i32 80>, %vector.ph ], [ %73, %vector.body ]
  %vec.phi108 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %74, %vector.body ]
  %vec.phi109 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %75, %vector.body ]
  %13 = or disjoint i64 %index, 1
  %14 = or disjoint i64 %index, 2
  %15 = or disjoint i64 %index, 3
  %16 = or disjoint i64 %index, 4
  %17 = or disjoint i64 %index, 5
  %18 = or disjoint i64 %index, 6
  %19 = or disjoint i64 %index, 7
  %20 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %10, i64 %index
  %21 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %10, i64 %13
  %22 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %10, i64 %14
  %23 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %10, i64 %15
  %24 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %10, i64 %16
  %25 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %10, i64 %17
  %26 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %10, i64 %18
  %27 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %10, i64 %19
  %28 = getelementptr inbounds i32, ptr %12, i64 %index
  %29 = getelementptr inbounds i8, ptr %28, i64 16
  %wide.load = load <4 x i32>, ptr %28, align 4, !tbaa !15
  %wide.load110 = load <4 x i32>, ptr %29, align 4, !tbaa !15
  %30 = getelementptr inbounds i8, ptr %20, i64 12
  %31 = getelementptr inbounds i8, ptr %21, i64 12
  %32 = getelementptr inbounds i8, ptr %22, i64 12
  %33 = getelementptr inbounds i8, ptr %23, i64 12
  %34 = getelementptr inbounds i8, ptr %24, i64 12
  %35 = getelementptr inbounds i8, ptr %25, i64 12
  %36 = getelementptr inbounds i8, ptr %26, i64 12
  %37 = getelementptr inbounds i8, ptr %27, i64 12
  %38 = load i32, ptr %30, align 4, !tbaa !16
  %39 = load i32, ptr %31, align 4, !tbaa !16
  %40 = load i32, ptr %32, align 4, !tbaa !16
  %41 = load i32, ptr %33, align 4, !tbaa !16
  %42 = insertelement <4 x i32> poison, i32 %38, i64 0
  %43 = insertelement <4 x i32> %42, i32 %39, i64 1
  %44 = insertelement <4 x i32> %43, i32 %40, i64 2
  %45 = insertelement <4 x i32> %44, i32 %41, i64 3
  %46 = load i32, ptr %34, align 4, !tbaa !16
  %47 = load i32, ptr %35, align 4, !tbaa !16
  %48 = load i32, ptr %36, align 4, !tbaa !16
  %49 = load i32, ptr %37, align 4, !tbaa !16
  %50 = insertelement <4 x i32> poison, i32 %46, i64 0
  %51 = insertelement <4 x i32> %50, i32 %47, i64 1
  %52 = insertelement <4 x i32> %51, i32 %48, i64 2
  %53 = insertelement <4 x i32> %52, i32 %49, i64 3
  %54 = load i32, ptr %20, align 4, !tbaa !18
  %55 = load i32, ptr %21, align 4, !tbaa !18
  %56 = load i32, ptr %22, align 4, !tbaa !18
  %57 = load i32, ptr %23, align 4, !tbaa !18
  %58 = insertelement <4 x i32> poison, i32 %54, i64 0
  %59 = insertelement <4 x i32> %58, i32 %55, i64 1
  %60 = insertelement <4 x i32> %59, i32 %56, i64 2
  %61 = insertelement <4 x i32> %60, i32 %57, i64 3
  %62 = load i32, ptr %24, align 4, !tbaa !18
  %63 = load i32, ptr %25, align 4, !tbaa !18
  %64 = load i32, ptr %26, align 4, !tbaa !18
  %65 = load i32, ptr %27, align 4, !tbaa !18
  %66 = insertelement <4 x i32> poison, i32 %62, i64 0
  %67 = insertelement <4 x i32> %66, i32 %63, i64 1
  %68 = insertelement <4 x i32> %67, i32 %64, i64 2
  %69 = insertelement <4 x i32> %68, i32 %65, i64 3
  %70 = add nsw <4 x i32> %61, %wide.load
  %71 = add nsw <4 x i32> %69, %wide.load110
  %72 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %70, <4 x i32> %vec.phi)
  %73 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %71, <4 x i32> %vec.phi107)
  %74 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %45, <4 x i32> %vec.phi108)
  %75 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %53, <4 x i32> %vec.phi109)
  %index.next = add nuw i64 %index, 8
  %76 = icmp eq i64 %index.next, %n.vec
  br i1 %76, label %middle.block, label %vector.body, !llvm.loop !19

middle.block:                                     ; preds = %vector.body
  %rdx.minmax = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %72, <4 x i32> %73)
  %77 = tail call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax)
  %rdx.minmax111 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %74, <4 x i32> %75)
  %78 = tail call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax111)
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %._crit_edge.loopexit, label %scalar.ph.preheader

79:                                               ; preds = %.lr.ph, %79
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %79 ]
  %80 = trunc nuw nsw i64 %indvars.iv to i32
  %81 = tail call noundef signext i8 @_ZN6tflite12_GLOBAL__N_119GetOrdinalCharacterEi(i32 noundef %80)
  %82 = sext i8 %81 to i32
  %83 = load ptr, ptr %6, align 8, !tbaa !13
  %84 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %83, i64 %indvars.iv
  %85 = load i32, ptr %84, align 4, !tbaa !18
  %86 = load ptr, ptr %7, align 8, !tbaa !14
  %87 = getelementptr inbounds i32, ptr %86, i64 %indvars.iv
  %88 = load i32, ptr %87, align 4, !tbaa !15
  %89 = getelementptr inbounds i8, ptr %84, i64 8
  %90 = load i32, ptr %89, align 4, !tbaa !23
  %91 = getelementptr inbounds i8, ptr %84, i64 12
  %92 = load i32, ptr %91, align 4, !tbaa !16
  tail call void (ptr, ...) @_Z11MicroPrintfPKcz(ptr noundef nonnull @.str.1, i32 noundef %82, i32 noundef %80, i32 noundef %85, i32 noundef %88, i32 noundef %90, i32 noundef %92)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %93 = load i32, ptr %3, align 4, !tbaa !5
  %94 = sext i32 %93 to i64
  %95 = icmp slt i64 %indvars.iv.next, %94
  br i1 %95, label %79, label %.preheader69, !llvm.loop !24

._crit_edge.loopexit:                             ; preds = %scalar.ph, %middle.block
  %spec.select.lcssa = phi i32 [ %77, %middle.block ], [ %spec.select, %scalar.ph ]
  %.158.lcssa = phi i32 [ %78, %middle.block ], [ %.158, %scalar.ph ]
  %96 = add nuw i32 %.158.lcssa, 1
  br label %.preheader68.lr.ph

.preheader68.lr.ph:                               ; preds = %1, %.preheader69, %._crit_edge.loopexit
  %.057.lcssa = phi i32 [ 1, %.preheader69 ], [ %96, %._crit_edge.loopexit ], [ 1, %1 ]
  %.056.lcssa = phi i32 [ 80, %.preheader69 ], [ %spec.select.lcssa, %._crit_edge.loopexit ], [ 80, %1 ]
  call void @llvm.lifetime.start.p0(i64 81, ptr nonnull %2) #6
  %97 = getelementptr inbounds i8, ptr %0, i64 16
  %98 = getelementptr inbounds i8, ptr %0, i64 56
  %99 = getelementptr inbounds i8, ptr %2, i64 80
  br label %.preheader68

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv92 = phi i64 [ %indvars.iv.next93, %scalar.ph ], [ %indvars.iv92.ph, %scalar.ph.preheader ]
  %.05674 = phi i32 [ %spec.select, %scalar.ph ], [ %.05674.ph, %scalar.ph.preheader ]
  %.05773 = phi i32 [ %.158, %scalar.ph ], [ %.05773.ph, %scalar.ph.preheader ]
  %100 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %10, i64 %indvars.iv92
  %101 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv92
  %102 = load i32, ptr %101, align 4, !tbaa !15
  %103 = getelementptr inbounds i8, ptr %100, i64 12
  %104 = load i32, ptr %103, align 4, !tbaa !16
  %105 = load i32, ptr %100, align 4, !tbaa !18
  %106 = add nsw i32 %105, %102
  %spec.select = tail call i32 @llvm.smax.i32(i32 %106, i32 %.05674)
  %.158 = tail call i32 @llvm.smax.i32(i32 %104, i32 %.05773)
  %indvars.iv.next93 = add nuw nsw i64 %indvars.iv92, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next93, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %scalar.ph, !llvm.loop !25

.preheader68:                                     ; preds = %.preheader68.lr.ph, %._crit_edge85
  %.06088 = phi i32 [ 0, %.preheader68.lr.ph ], [ %113, %._crit_edge85 ]
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(80) %2, i8 46, i64 80, i1 false), !tbaa !26
  %107 = load i32, ptr %3, align 4, !tbaa !5
  %108 = icmp sgt i32 %107, 0
  br i1 %108, label %.lr.ph84, label %._crit_edge85

._crit_edge89:                                    ; preds = %._crit_edge85
  call void @llvm.lifetime.end.p0(i64 81, ptr nonnull %2) #6
  ret void

._crit_edge85:                                    ; preds = %.loopexit, %.preheader68
  %.062.lcssa = phi i32 [ 0, %.preheader68 ], [ %.2, %.loopexit ]
  store i8 0, ptr %99, align 16, !tbaa !26
  %109 = icmp ult i32 %.06088, 10
  %110 = select i1 %109, ptr @.str.3, ptr @.str.4
  %111 = add nsw i32 %.062.lcssa, 1023
  %112 = sdiv i32 %111, 1024
  call void (ptr, ...) @_Z11MicroPrintfPKcz(ptr noundef nonnull @.str.2, ptr noundef nonnull %110, i32 noundef %.06088, ptr noundef nonnull %2, i32 noundef %112)
  %113 = add nuw i32 %.06088, 1
  %exitcond105.not = icmp eq i32 %113, %.057.lcssa
  br i1 %exitcond105.not, label %._crit_edge89, label %.preheader68, !llvm.loop !27

.lr.ph84:                                         ; preds = %.preheader68, %.loopexit
  %114 = phi i32 [ %146, %.loopexit ], [ %107, %.preheader68 ]
  %indvars.iv102 = phi i64 [ %indvars.iv.next103, %.loopexit ], [ 0, %.preheader68 ]
  %.06282 = phi i32 [ %.2, %.loopexit ], [ 0, %.preheader68 ]
  %115 = load ptr, ptr %97, align 8, !tbaa !13
  %116 = getelementptr inbounds %"struct.tflite::GreedyMemoryPlanner::BufferRequirements", ptr %115, i64 %indvars.iv102
  %117 = getelementptr inbounds i8, ptr %116, i64 8
  %118 = load i32, ptr %117, align 4, !tbaa !23
  %119 = icmp slt i32 %.06088, %118
  br i1 %119, label %.loopexit, label %120

120:                                              ; preds = %.lr.ph84
  %121 = getelementptr inbounds i8, ptr %116, i64 12
  %122 = load i32, ptr %121, align 4, !tbaa !16
  %123 = icmp sgt i32 %.06088, %122
  br i1 %123, label %.loopexit, label %124

124:                                              ; preds = %120
  %125 = load ptr, ptr %98, align 8, !tbaa !14
  %126 = getelementptr inbounds i32, ptr %125, i64 %indvars.iv102
  %127 = load i32, ptr %126, align 4, !tbaa !15
  %128 = icmp eq i32 %127, -1
  br i1 %128, label %.loopexit, label %129

129:                                              ; preds = %124
  %130 = load i32, ptr %116, align 4, !tbaa !18
  %131 = add nsw i32 %130, %.06282
  %132 = mul nsw i32 %127, 80
  %133 = sdiv i32 %132, %.056.lcssa
  %134 = add nsw i32 %130, %127
  %135 = mul nsw i32 %134, 80
  %136 = sdiv i32 %135, %.056.lcssa
  %137 = icmp slt i32 %133, %136
  br i1 %137, label %.lr.ph81.preheader, label %.loopexit

.lr.ph81.preheader:                               ; preds = %129
  %138 = sext i32 %133 to i64
  %139 = trunc nuw nsw i64 %indvars.iv102 to i32
  br label %.lr.ph81

.lr.ph81:                                         ; preds = %.lr.ph81.preheader, %145
  %indvars.iv98 = phi i64 [ %138, %.lr.ph81.preheader ], [ %indvars.iv.next99, %145 ]
  %140 = getelementptr inbounds [81 x i8], ptr %2, i64 0, i64 %indvars.iv98
  %141 = load i8, ptr %140, align 1, !tbaa !26
  %142 = icmp eq i8 %141, 46
  br i1 %142, label %143, label %145

143:                                              ; preds = %.lr.ph81
  %144 = call noundef signext i8 @_ZN6tflite12_GLOBAL__N_119GetOrdinalCharacterEi(i32 noundef %139)
  br label %145

145:                                              ; preds = %.lr.ph81, %143
  %storemerge = phi i8 [ %144, %143 ], [ 33, %.lr.ph81 ]
  store i8 %storemerge, ptr %140, align 1, !tbaa !26
  %indvars.iv.next99 = add nsw i64 %indvars.iv98, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next99 to i32
  %exitcond101.not = icmp eq i32 %136, %lftr.wideiv
  br i1 %exitcond101.not, label %.loopexit.loopexit, label %.lr.ph81, !llvm.loop !28

.loopexit.loopexit:                               ; preds = %145
  %.pre = load i32, ptr %3, align 4, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %129, %124, %.lr.ph84, %120
  %146 = phi i32 [ %114, %120 ], [ %114, %.lr.ph84 ], [ %114, %124 ], [ %114, %129 ], [ %.pre, %.loopexit.loopexit ]
  %.2 = phi i32 [ %.06282, %120 ], [ %.06282, %.lr.ph84 ], [ %.06282, %124 ], [ %131, %129 ], [ %131, %.loopexit.loopexit ]
  %indvars.iv.next103 = add nuw nsw i64 %indvars.iv102, 1
  %147 = sext i32 %146 to i64
  %148 = icmp slt i64 %indvars.iv.next103, %147
  br i1 %148, label %.lr.ph84, label %._crit_edge85, !llvm.loop !29
}

declare void @_Z11MicroPrintfPKcz(ptr noundef, ...) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef signext i8 @_ZN6tflite12_GLOBAL__N_119GetOrdinalCharacterEi(i32 noundef) local_unnamed_addr #1

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.smax.v4i32(<4 x i32>) #4

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { 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, !8, i64 12}
!6 = !{!"_ZTSN6tflite19GreedyMemoryPlannerE", !7, i64 0, !8, i64 8, !8, i64 12, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !8, i64 48, !8, i64 52, !11, i64 56, !12, i64 64}
!7 = !{!"_ZTSN6tflite18MicroMemoryPlannerE"}
!8 = !{!"int", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"any pointer", !9, i64 0}
!12 = !{!"bool", !9, i64 0}
!13 = !{!6, !11, i64 16}
!14 = !{!6, !11, i64 56}
!15 = !{!8, !8, i64 0}
!16 = !{!17, !8, i64 12}
!17 = !{!"_ZTSN6tflite19GreedyMemoryPlanner18BufferRequirementsE", !8, i64 0, !8, i64 4, !8, i64 8, !8, i64 12}
!18 = !{!17, !8, i64 0}
!19 = distinct !{!19, !20, !21, !22}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!"llvm.loop.isvectorized", i32 1}
!22 = !{!"llvm.loop.unroll.runtime.disable"}
!23 = !{!17, !8, i64 8}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20, !22, !21}
!26 = !{!9, !9, i64 0}
!27 = distinct !{!27, !20}
!28 = distinct !{!28, !20}
!29 = distinct !{!29, !20}


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