; LLVM IR from marcobambini/gravity :: src/shared (gravity_value)

; 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.gravity_value_t = type { ptr, %union.anon }
%union.anon = type { i64 }
%struct.gravity_function_t = type { ptr, %struct.gravity_gc_s, ptr, ptr, i16, i16, i16, i16, i32, %union.anon.4 }
%struct.gravity_gc_s = type { i8, i8, ptr, ptr, ptr, ptr }
%union.anon.4 = type { %struct.anon.5 }
%struct.anon.5 = type { %struct.gravity_value_r, %struct.gravity_value_r, %struct.gravity_value_r, i32, ptr, ptr, float, i8 }
%struct.gravity_value_r = type { i64, i64, ptr }
%struct.gravity_closure_s = type { ptr, %struct.gravity_gc_s, ptr, ptr, ptr, ptr, i32 }
%struct.gravity_class_s = type { ptr, %struct.gravity_gc_s, ptr, ptr, i8, i8, i8, i8, ptr, ptr, ptr, ptr, i32, ptr }
%struct.gravity_string_t = type { ptr, %struct.gravity_gc_s, ptr, i32, i32, i32 }
%struct.gravity_instance_t = type { ptr, %struct.gravity_gc_s, ptr, ptr, ptr }
%struct.gravity_range_t = type { ptr, %struct.gravity_gc_s, i64, i64 }

@gravity_class_class = external global ptr, align 8
@gravity_class_null = external global ptr, align 8
@gravity_class_object = external global ptr, align 8
@gravity_class_function = external global ptr, align 8
@gravity_class_closure = external global ptr, align 8
@gravity_class_string = external global ptr, align 8
@gravity_class_int = external global ptr, align 8
@gravity_class_float = external global ptr, align 8
@gravity_class_bool = external global ptr, align 8
@gravity_class_fiber = external global ptr, align 8
@.str.52 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [5 x i8], align 1
@gravity_class_instance = external global ptr, align 8
@gravity_class_range = external global ptr, align 8
@gravity_class_list = external global ptr, align 8
@gravity_class_map = external global ptr, align 8
@.str.67 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [4 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 i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @gravity_value_dump(ptr noundef %0, ptr %1, i64 %2, ptr noundef %3, i16 noundef zeroext %4) #3 {
  %6 = alloca %struct.gravity_value_t, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i16, align 2
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca [1024 x i8], align 16
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca %struct.gravity_value_t, align 8
  %18 = alloca ptr, align 8
  %19 = alloca %struct.gravity_value_t, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = getelementptr inbounds { ptr, i64 }, ptr %6, i32 0, i32 0
  store ptr %1, ptr %22, align 8
  %23 = getelementptr inbounds { ptr, i64 }, ptr %6, i32 0, i32 1
  store i64 %2, ptr %23, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  store i16 %4, ptr %9, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  store ptr null, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  store ptr null, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1024, ptr %12) #4
  %24 = load ptr, ptr %8, align 8, !tbaa !5
  %25 = icmp eq ptr %24, null
  br i1 %25, label %26, label %28

26:                                               ; preds = %5
  %27 = getelementptr inbounds [1024 x i8], ptr %12, i64 0, i64 0
  store ptr %27, ptr %8, align 8, !tbaa !5
  br label %28

28:                                               ; preds = %26, %5
  %29 = load i16, ptr %9, align 2, !tbaa !9
  %30 = zext i16 %29 to i32
  %31 = icmp eq i32 %30, 0
  br i1 %31, label %32, label %33

32:                                               ; preds = %28
  store i16 1024, ptr %9, align 2, !tbaa !9
  br label %33

33:                                               ; preds = %32, %28
  %34 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %35 = load ptr, ptr %34, align 8, !tbaa !11
  %36 = icmp eq ptr %35, null
  br i1 %36, label %37, label %44

37:                                               ; preds = %33
  store ptr @.str.71, ptr %10, align 8, !tbaa !5
  %38 = load ptr, ptr %8, align 8, !tbaa !5
  %39 = load i16, ptr %9, align 2, !tbaa !9
  %40 = zext i16 %39 to i64
  %41 = load ptr, ptr %10, align 8, !tbaa !5
  %42 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %38, i64 noundef %40, ptr noundef @.str.72, ptr noundef %41) #4
  %43 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %43, ptr %11, align 8, !tbaa !5
  br label %349

44:                                               ; preds = %33
  %45 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %46 = load ptr, ptr %45, align 8, !tbaa !11
  %47 = load ptr, ptr @gravity_class_bool, align 8, !tbaa !5
  %48 = icmp eq ptr %46, %47
  br i1 %48, label %49, label %62

49:                                               ; preds = %44
  store ptr @.str.54, ptr %10, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %51 = load i64, ptr %50, align 8, !tbaa !13
  %52 = icmp eq i64 %51, 0
  %53 = zext i1 %52 to i64
  %54 = select i1 %52, ptr @.str.73, ptr @.str.74
  store ptr %54, ptr %11, align 8, !tbaa !5
  %55 = load ptr, ptr %8, align 8, !tbaa !5
  %56 = load i16, ptr %9, align 2, !tbaa !9
  %57 = zext i16 %56 to i64
  %58 = load ptr, ptr %10, align 8, !tbaa !5
  %59 = load ptr, ptr %11, align 8, !tbaa !5
  %60 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %55, i64 noundef %57, ptr noundef @.str.75, ptr noundef %58, ptr noundef %59) #4
  %61 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %61, ptr %11, align 8, !tbaa !5
  br label %348

62:                                               ; preds = %44
  %63 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %64 = load ptr, ptr %63, align 8, !tbaa !11
  %65 = load ptr, ptr @gravity_class_null, align 8, !tbaa !5
  %66 = icmp eq ptr %64, %65
  br i1 %66, label %67, label %79

67:                                               ; preds = %62
  %68 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %69 = load i64, ptr %68, align 8, !tbaa !13
  %70 = icmp eq i64 %69, 0
  %71 = zext i1 %70 to i64
  %72 = select i1 %70, ptr @.str.55, ptr @.str.76
  store ptr %72, ptr %10, align 8, !tbaa !5
  %73 = load ptr, ptr %8, align 8, !tbaa !5
  %74 = load i16, ptr %9, align 2, !tbaa !9
  %75 = zext i16 %74 to i64
  %76 = load ptr, ptr %10, align 8, !tbaa !5
  %77 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %73, i64 noundef %75, ptr noundef @.str.72, ptr noundef %76) #4
  %78 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %78, ptr %11, align 8, !tbaa !5
  br label %347

79:                                               ; preds = %62
  %80 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %81 = load ptr, ptr %80, align 8, !tbaa !11
  %82 = load ptr, ptr @gravity_class_int, align 8, !tbaa !5
  %83 = icmp eq ptr %81, %82
  br i1 %83, label %84, label %93

84:                                               ; preds = %79
  store ptr @.str.52, ptr %10, align 8, !tbaa !5
  %85 = load ptr, ptr %8, align 8, !tbaa !5
  %86 = load i16, ptr %9, align 2, !tbaa !9
  %87 = zext i16 %86 to i64
  %88 = load ptr, ptr %10, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %90 = load i64, ptr %89, align 8, !tbaa !13
  %91 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %85, i64 noundef %87, ptr noundef @.str.77, ptr noundef %88, i64 noundef %90) #4
  %92 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %92, ptr %11, align 8, !tbaa !5
  br label %346

93:                                               ; preds = %79
  %94 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %95 = load ptr, ptr %94, align 8, !tbaa !11
  %96 = load ptr, ptr @gravity_class_float, align 8, !tbaa !5
  %97 = icmp eq ptr %95, %96
  br i1 %97, label %98, label %107

98:                                               ; preds = %93
  store ptr @.str.53, ptr %10, align 8, !tbaa !5
  %99 = load ptr, ptr %8, align 8, !tbaa !5
  %100 = load i16, ptr %9, align 2, !tbaa !9
  %101 = zext i16 %100 to i64
  %102 = load ptr, ptr %10, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %104 = load double, ptr %103, align 8, !tbaa !13
  %105 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %99, i64 noundef %101, ptr noundef @.str.78, ptr noundef %102, double noundef %104) #4
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %106, ptr %11, align 8, !tbaa !5
  br label %345

107:                                              ; preds = %93
  %108 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %109 = load ptr, ptr %108, align 8, !tbaa !11
  %110 = load ptr, ptr @gravity_class_function, align 8, !tbaa !5
  %111 = icmp eq ptr %109, %110
  br i1 %111, label %112, label %126

112:                                              ; preds = %107
  store ptr @.str.79, ptr %10, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %114 = load ptr, ptr %113, align 8, !tbaa !13
  %115 = getelementptr inbounds %struct.gravity_function_t, ptr %114, i32 0, i32 3
  %116 = load ptr, ptr %115, align 8, !tbaa !14
  store ptr %116, ptr %11, align 8, !tbaa !5
  %117 = load ptr, ptr %8, align 8, !tbaa !5
  %118 = load i16, ptr %9, align 2, !tbaa !9
  %119 = zext i16 %118 to i64
  %120 = load ptr, ptr %10, align 8, !tbaa !5
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %123 = load ptr, ptr %122, align 8, !tbaa !13
  %124 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %117, i64 noundef %119, ptr noundef @.str.80, ptr noundef %120, ptr noundef %121, ptr noundef %123) #4
  %125 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %125, ptr %11, align 8, !tbaa !5
  br label %344

126:                                              ; preds = %107
  %127 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %128 = load ptr, ptr %127, align 8, !tbaa !11
  %129 = load ptr, ptr @gravity_class_closure, align 8, !tbaa !5
  %130 = icmp eq ptr %128, %129
  br i1 %130, label %131, label %156

131:                                              ; preds = %126
  store ptr @.str.81, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  %132 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %133 = load ptr, ptr %132, align 8, !tbaa !13
  %134 = getelementptr inbounds %struct.gravity_closure_s, ptr %133, i32 0, i32 3
  %135 = load ptr, ptr %134, align 8, !tbaa !19
  store ptr %135, ptr %13, align 8, !tbaa !5
  %136 = load ptr, ptr %13, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.gravity_function_t, ptr %136, i32 0, i32 3
  %138 = load ptr, ptr %137, align 8, !tbaa !14
  %139 = icmp ne ptr %138, null
  br i1 %139, label %140, label %144

140:                                              ; preds = %131
  %141 = load ptr, ptr %13, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.gravity_function_t, ptr %141, i32 0, i32 3
  %143 = load ptr, ptr %142, align 8, !tbaa !14
  br label %145

144:                                              ; preds = %131
  br label %145

145:                                              ; preds = %144, %140
  %146 = phi ptr [ %143, %140 ], [ @.str.82, %144 ]
  store ptr %146, ptr %11, align 8, !tbaa !5
  %147 = load ptr, ptr %8, align 8, !tbaa !5
  %148 = load i16, ptr %9, align 2, !tbaa !9
  %149 = zext i16 %148 to i64
  %150 = load ptr, ptr %10, align 8, !tbaa !5
  %151 = load ptr, ptr %11, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %153 = load ptr, ptr %152, align 8, !tbaa !13
  %154 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %147, i64 noundef %149, ptr noundef @.str.80, ptr noundef %150, ptr noundef %151, ptr noundef %153) #4
  %155 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %155, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  br label %343

156:                                              ; preds = %126
  %157 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %158 = load ptr, ptr %157, align 8, !tbaa !11
  %159 = load ptr, ptr @gravity_class_class, align 8, !tbaa !5
  %160 = icmp eq ptr %158, %159
  br i1 %160, label %161, label %175

161:                                              ; preds = %156
  store ptr @.str.83, ptr %10, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %163 = load ptr, ptr %162, align 8, !tbaa !13
  %164 = getelementptr inbounds %struct.gravity_class_s, ptr %163, i32 0, i32 3
  %165 = load ptr, ptr %164, align 8, !tbaa !21
  store ptr %165, ptr %11, align 8, !tbaa !5
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  %167 = load i16, ptr %9, align 2, !tbaa !9
  %168 = zext i16 %167 to i64
  %169 = load ptr, ptr %10, align 8, !tbaa !5
  %170 = load ptr, ptr %11, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %172 = load ptr, ptr %171, align 8, !tbaa !13
  %173 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %166, i64 noundef %168, ptr noundef @.str.80, ptr noundef %169, ptr noundef %170, ptr noundef %172) #4
  %174 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %174, ptr %11, align 8, !tbaa !5
  br label %342

175:                                              ; preds = %156
  %176 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %177 = load ptr, ptr %176, align 8, !tbaa !11
  %178 = load ptr, ptr @gravity_class_string, align 8, !tbaa !5
  %179 = icmp eq ptr %177, %178
  br i1 %179, label %180, label %196

180:                                              ; preds = %175
  store ptr @.str.84, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  %181 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %182 = load ptr, ptr %181, align 8, !tbaa !13
  store ptr %182, ptr %14, align 8, !tbaa !5
  %183 = load ptr, ptr %8, align 8, !tbaa !5
  %184 = load i16, ptr %9, align 2, !tbaa !9
  %185 = zext i16 %184 to i64
  %186 = load ptr, ptr %10, align 8, !tbaa !5
  %187 = load ptr, ptr %14, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.gravity_string_t, ptr %187, i32 0, i32 4
  %189 = load i32, ptr %188, align 4, !tbaa !23
  %190 = load ptr, ptr %14, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.gravity_string_t, ptr %190, i32 0, i32 2
  %192 = load ptr, ptr %191, align 8, !tbaa !25
  %193 = load ptr, ptr %14, align 8, !tbaa !5
  %194 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %183, i64 noundef %185, ptr noundef @.str.85, ptr noundef %186, i32 noundef %189, ptr noundef %192, ptr noundef %193) #4
  %195 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %195, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  br label %341

196:                                              ; preds = %175
  %197 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %198 = load ptr, ptr %197, align 8, !tbaa !11
  %199 = load ptr, ptr @gravity_class_instance, align 8, !tbaa !5
  %200 = icmp eq ptr %198, %199
  br i1 %200, label %201, label %218

201:                                              ; preds = %196
  store ptr @.str.86, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %202 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %203 = load ptr, ptr %202, align 8, !tbaa !13
  store ptr %203, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  %204 = load ptr, ptr %15, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.gravity_instance_t, ptr %204, i32 0, i32 2
  %206 = load ptr, ptr %205, align 8, !tbaa !26
  store ptr %206, ptr %16, align 8, !tbaa !5
  %207 = load ptr, ptr %16, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.gravity_class_s, ptr %207, i32 0, i32 3
  %209 = load ptr, ptr %208, align 8, !tbaa !21
  store ptr %209, ptr %11, align 8, !tbaa !5
  %210 = load ptr, ptr %8, align 8, !tbaa !5
  %211 = load i16, ptr %9, align 2, !tbaa !9
  %212 = zext i16 %211 to i64
  %213 = load ptr, ptr %10, align 8, !tbaa !5
  %214 = load ptr, ptr %11, align 8, !tbaa !5
  %215 = load ptr, ptr %15, align 8, !tbaa !5
  %216 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %210, i64 noundef %212, ptr noundef @.str.80, ptr noundef %213, ptr noundef %214, ptr noundef %215) #4
  %217 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %217, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  br label %340

218:                                              ; preds = %196
  %219 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %220 = load ptr, ptr %219, align 8, !tbaa !11
  %221 = load ptr, ptr @gravity_class_list, align 8, !tbaa !5
  %222 = icmp eq ptr %220, %221
  br i1 %222, label %223, label %249

223:                                              ; preds = %218
  store ptr @.str.87, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #4
  %224 = load ptr, ptr %7, align 8, !tbaa !5
  %225 = getelementptr inbounds { ptr, i64 }, ptr %6, i32 0, i32 0
  %226 = load ptr, ptr %225, align 8
  %227 = getelementptr inbounds { ptr, i64 }, ptr %6, i32 0, i32 1
  %228 = load i64, ptr %227, align 8
  %229 = call { ptr, i64 } @convert_value2string(ptr noundef %224, ptr %226, i64 %228)
  %230 = getelementptr inbounds { ptr, i64 }, ptr %17, i32 0, i32 0
  %231 = extractvalue { ptr, i64 } %229, 0
  store ptr %231, ptr %230, align 8
  %232 = getelementptr inbounds { ptr, i64 }, ptr %17, i32 0, i32 1
  %233 = extractvalue { ptr, i64 } %229, 1
  store i64 %233, ptr %232, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  %234 = getelementptr inbounds %struct.gravity_value_t, ptr %17, i32 0, i32 1
  %235 = load ptr, ptr %234, align 8, !tbaa !13
  store ptr %235, ptr %18, align 8, !tbaa !5
  %236 = load ptr, ptr %8, align 8, !tbaa !5
  %237 = load i16, ptr %9, align 2, !tbaa !9
  %238 = zext i16 %237 to i64
  %239 = load ptr, ptr %10, align 8, !tbaa !5
  %240 = load ptr, ptr %18, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.gravity_string_t, ptr %240, i32 0, i32 4
  %242 = load i32, ptr %241, align 4, !tbaa !23
  %243 = load ptr, ptr %18, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.gravity_string_t, ptr %243, i32 0, i32 2
  %245 = load ptr, ptr %244, align 8, !tbaa !25
  %246 = load ptr, ptr %18, align 8, !tbaa !5
  %247 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %236, i64 noundef %238, ptr noundef @.str.85, ptr noundef %239, i32 noundef %242, ptr noundef %245, ptr noundef %246) #4
  %248 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %248, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #4
  br label %339

249:                                              ; preds = %218
  %250 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %251 = load ptr, ptr %250, align 8, !tbaa !11
  %252 = load ptr, ptr @gravity_class_map, align 8, !tbaa !5
  %253 = icmp eq ptr %251, %252
  br i1 %253, label %254, label %280

254:                                              ; preds = %249
  store ptr @.str.88, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #4
  %255 = load ptr, ptr %7, align 8, !tbaa !5
  %256 = getelementptr inbounds { ptr, i64 }, ptr %6, i32 0, i32 0
  %257 = load ptr, ptr %256, align 8
  %258 = getelementptr inbounds { ptr, i64 }, ptr %6, i32 0, i32 1
  %259 = load i64, ptr %258, align 8
  %260 = call { ptr, i64 } @convert_value2string(ptr noundef %255, ptr %257, i64 %259)
  %261 = getelementptr inbounds { ptr, i64 }, ptr %19, i32 0, i32 0
  %262 = extractvalue { ptr, i64 } %260, 0
  store ptr %262, ptr %261, align 8
  %263 = getelementptr inbounds { ptr, i64 }, ptr %19, i32 0, i32 1
  %264 = extractvalue { ptr, i64 } %260, 1
  store i64 %264, ptr %263, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  %265 = getelementptr inbounds %struct.gravity_value_t, ptr %19, i32 0, i32 1
  %266 = load ptr, ptr %265, align 8, !tbaa !13
  store ptr %266, ptr %20, align 8, !tbaa !5
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  %268 = load i16, ptr %9, align 2, !tbaa !9
  %269 = zext i16 %268 to i64
  %270 = load ptr, ptr %10, align 8, !tbaa !5
  %271 = load ptr, ptr %20, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.gravity_string_t, ptr %271, i32 0, i32 4
  %273 = load i32, ptr %272, align 4, !tbaa !23
  %274 = load ptr, ptr %20, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.gravity_string_t, ptr %274, i32 0, i32 2
  %276 = load ptr, ptr %275, align 8, !tbaa !25
  %277 = load ptr, ptr %20, align 8, !tbaa !5
  %278 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %267, i64 noundef %269, ptr noundef @.str.85, ptr noundef %270, i32 noundef %273, ptr noundef %276, ptr noundef %277) #4
  %279 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %279, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #4
  br label %338

280:                                              ; preds = %249
  %281 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %282 = load ptr, ptr %281, align 8, !tbaa !11
  %283 = load ptr, ptr @gravity_class_range, align 8, !tbaa !5
  %284 = icmp eq ptr %282, %283
  br i1 %284, label %285, label %300

285:                                              ; preds = %280
  store ptr @.str.89, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  %286 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %287 = load ptr, ptr %286, align 8, !tbaa !13
  store ptr %287, ptr %21, align 8, !tbaa !5
  %288 = load ptr, ptr %8, align 8, !tbaa !5
  %289 = load i16, ptr %9, align 2, !tbaa !9
  %290 = zext i16 %289 to i64
  %291 = load ptr, ptr %10, align 8, !tbaa !5
  %292 = load ptr, ptr %21, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.gravity_range_t, ptr %292, i32 0, i32 2
  %294 = load i64, ptr %293, align 8, !tbaa !28
  %295 = load ptr, ptr %21, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.gravity_range_t, ptr %295, i32 0, i32 3
  %297 = load i64, ptr %296, align 8, !tbaa !31
  %298 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %288, i64 noundef %290, ptr noundef @.str.90, ptr noundef %291, i64 noundef %294, i64 noundef %297) #4
  %299 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %299, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  br label %337

300:                                              ; preds = %280
  %301 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %302 = load ptr, ptr %301, align 8, !tbaa !11
  %303 = load ptr, ptr @gravity_class_object, align 8, !tbaa !5
  %304 = icmp eq ptr %302, %303
  br i1 %304, label %305, label %313

305:                                              ; preds = %300
  store ptr @.str.91, ptr %10, align 8, !tbaa !5
  store ptr @.str.67, ptr %11, align 8, !tbaa !5
  %306 = load ptr, ptr %8, align 8, !tbaa !5
  %307 = load i16, ptr %9, align 2, !tbaa !9
  %308 = zext i16 %307 to i64
  %309 = load ptr, ptr %10, align 8, !tbaa !5
  %310 = load ptr, ptr %11, align 8, !tbaa !5
  %311 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %306, i64 noundef %308, ptr noundef @.str.75, ptr noundef %309, ptr noundef %310) #4
  %312 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %312, ptr %11, align 8, !tbaa !5
  br label %336

313:                                              ; preds = %300
  %314 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 0
  %315 = load ptr, ptr %314, align 8, !tbaa !11
  %316 = load ptr, ptr @gravity_class_fiber, align 8, !tbaa !5
  %317 = icmp eq ptr %315, %316
  br i1 %317, label %318, label %327

318:                                              ; preds = %313
  store ptr @.str.92, ptr %10, align 8, !tbaa !5
  %319 = load ptr, ptr %8, align 8, !tbaa !5
  %320 = load i16, ptr %9, align 2, !tbaa !9
  %321 = zext i16 %320 to i64
  %322 = load ptr, ptr %10, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.gravity_value_t, ptr %6, i32 0, i32 1
  %324 = load ptr, ptr %323, align 8, !tbaa !13
  %325 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %319, i64 noundef %321, ptr noundef @.str.93, ptr noundef %322, ptr noundef %324) #4
  %326 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %326, ptr %11, align 8, !tbaa !5
  br label %335

327:                                              ; preds = %313
  store ptr @.str.67, ptr %10, align 8, !tbaa !5
  store ptr @.str.67, ptr %11, align 8, !tbaa !5
  %328 = load ptr, ptr %8, align 8, !tbaa !5
  %329 = load i16, ptr %9, align 2, !tbaa !9
  %330 = zext i16 %329 to i64
  %331 = load ptr, ptr %10, align 8, !tbaa !5
  %332 = load ptr, ptr %11, align 8, !tbaa !5
  %333 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %328, i64 noundef %330, ptr noundef @.str.75, ptr noundef %331, ptr noundef %332) #4
  %334 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %334, ptr %11, align 8, !tbaa !5
  br label %335

335:                                              ; preds = %327, %318
  br label %336

336:                                              ; preds = %335, %305
  br label %337

337:                                              ; preds = %336, %285
  br label %338

338:                                              ; preds = %337, %254
  br label %339

339:                                              ; preds = %338, %223
  br label %340

340:                                              ; preds = %339, %201
  br label %341

341:                                              ; preds = %340, %180
  br label %342

342:                                              ; preds = %341, %161
  br label %343

343:                                              ; preds = %342, %145
  br label %344

344:                                              ; preds = %343, %112
  br label %345

345:                                              ; preds = %344, %98
  br label %346

346:                                              ; preds = %345, %84
  br label %347

347:                                              ; preds = %346, %67
  br label %348

348:                                              ; preds = %347, %49
  br label %349

349:                                              ; preds = %348, %37
  %350 = load ptr, ptr %8, align 8, !tbaa !5
  %351 = getelementptr inbounds [1024 x i8], ptr %12, i64 0, i64 0
  %352 = icmp eq ptr %350, %351
  br i1 %352, label %353, label %356

353:                                              ; preds = %349
  %354 = load ptr, ptr %11, align 8, !tbaa !5
  %355 = call i32 (ptr, ...) @printf(ptr noundef @.str.94, ptr noundef %354)
  br label %356

356:                                              ; preds = %353, %349
  call void @llvm.lifetime.end.p0(i64 1024, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  ret void
}

declare { ptr, i64 } @convert_value2string(ptr noundef, ptr, i64) #2

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 = { 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"short", !7, i64 0}
!11 = !{!12, !6, i64 0}
!12 = !{!"", !6, i64 0, !7, i64 8}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !6, i64 56}
!15 = !{!"", !6, i64 0, !16, i64 8, !6, i64 48, !6, i64 56, !10, i64 64, !10, i64 66, !10, i64 68, !10, i64 70, !18, i64 72, !7, i64 80}
!16 = !{!"gravity_gc_s", !17, i64 0, !17, i64 1, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!17 = !{!"_Bool", !7, i64 0}
!18 = !{!"int", !7, i64 0}
!19 = !{!20, !6, i64 56}
!20 = !{!"gravity_closure_s", !6, i64 0, !16, i64 8, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !18, i64 80}
!21 = !{!22, !6, i64 56}
!22 = !{!"gravity_class_s", !6, i64 0, !16, i64 8, !6, i64 48, !6, i64 56, !17, i64 64, !17, i64 65, !17, i64 66, !17, i64 67, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !18, i64 104, !6, i64 112}
!23 = !{!24, !18, i64 60}
!24 = !{!"", !6, i64 0, !16, i64 8, !6, i64 48, !18, i64 56, !18, i64 60, !18, i64 64}
!25 = !{!24, !6, i64 48}
!26 = !{!27, !6, i64 48}
!27 = !{!"", !6, i64 0, !16, i64 8, !6, i64 48, !6, i64 56, !6, i64 64}
!28 = !{!29, !30, i64 48}
!29 = !{!"", !6, i64 0, !16, i64 8, !30, i64 48, !30, i64 56}
!30 = !{!"long", !7, i64 0}
!31 = !{!29, !30, i64 56}


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

@gravity_class_class = external local_unnamed_addr global ptr, align 8
@gravity_class_null = external local_unnamed_addr global ptr, align 8
@gravity_class_object = external local_unnamed_addr global ptr, align 8
@gravity_class_function = external local_unnamed_addr global ptr, align 8
@gravity_class_closure = external local_unnamed_addr global ptr, align 8
@gravity_class_string = external local_unnamed_addr global ptr, align 8
@gravity_class_int = external local_unnamed_addr global ptr, align 8
@gravity_class_float = external local_unnamed_addr global ptr, align 8
@gravity_class_bool = external local_unnamed_addr global ptr, align 8
@gravity_class_fiber = external local_unnamed_addr global ptr, align 8
@.str.52 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [5 x i8], align 1
@gravity_class_instance = external local_unnamed_addr global ptr, align 8
@gravity_class_range = external local_unnamed_addr global ptr, align 8
@gravity_class_list = external local_unnamed_addr global ptr, align 8
@gravity_class_map = external local_unnamed_addr global ptr, align 8
@.str.67 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [4 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: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
define dso_local void @gravity_value_dump(ptr noundef %0, ptr %1, i64 %2, ptr noundef %3, i16 noundef zeroext %4) local_unnamed_addr #2 {
  %6 = alloca [1024 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %6) #4
  %7 = icmp eq ptr %3, null
  %spec.select = select i1 %7, ptr %6, ptr %3
  %8 = icmp eq i16 %4, 0
  %spec.store.select = select i1 %8, i16 1024, i16 %4
  %9 = icmp eq ptr %1, null
  br i1 %9, label %10, label %13

10:                                               ; preds = %5
  %11 = zext i16 %spec.store.select to i64
  %12 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %11, ptr noundef nonnull @.str.72, ptr noundef nonnull @.str.71) #4
  br label %145

13:                                               ; preds = %5
  %14 = load ptr, ptr @gravity_class_bool, align 8, !tbaa !5
  %15 = icmp eq ptr %14, %1
  br i1 %15, label %16, label %21

16:                                               ; preds = %13
  %17 = icmp eq i64 %2, 0
  %18 = select i1 %17, ptr @.str.73, ptr @.str.74
  %19 = zext i16 %spec.store.select to i64
  %20 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %19, ptr noundef nonnull @.str.75, ptr noundef nonnull @.str.54, ptr noundef nonnull %18) #4
  br label %145

21:                                               ; preds = %13
  %22 = load ptr, ptr @gravity_class_null, align 8, !tbaa !5
  %23 = icmp eq ptr %22, %1
  br i1 %23, label %24, label %29

24:                                               ; preds = %21
  %25 = icmp eq i64 %2, 0
  %26 = select i1 %25, ptr @.str.55, ptr @.str.76
  %27 = zext i16 %spec.store.select to i64
  %28 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %27, ptr noundef nonnull @.str.72, ptr noundef nonnull %26) #4
  br label %145

29:                                               ; preds = %21
  %30 = load ptr, ptr @gravity_class_int, align 8, !tbaa !5
  %31 = icmp eq ptr %30, %1
  br i1 %31, label %32, label %35

32:                                               ; preds = %29
  %33 = zext i16 %spec.store.select to i64
  %34 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %33, ptr noundef nonnull @.str.77, ptr noundef nonnull @.str.52, i64 noundef %2) #4
  br label %145

35:                                               ; preds = %29
  %36 = load ptr, ptr @gravity_class_float, align 8, !tbaa !5
  %37 = icmp eq ptr %36, %1
  br i1 %37, label %38, label %42

38:                                               ; preds = %35
  %39 = zext i16 %spec.store.select to i64
  %40 = bitcast i64 %2 to double
  %41 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %39, ptr noundef nonnull @.str.78, ptr noundef nonnull @.str.53, double noundef %40) #4
  br label %145

42:                                               ; preds = %35
  %43 = load ptr, ptr @gravity_class_function, align 8, !tbaa !5
  %44 = icmp eq ptr %43, %1
  br i1 %44, label %45, label %51

45:                                               ; preds = %42
  %46 = inttoptr i64 %2 to ptr
  %47 = getelementptr inbounds i8, ptr %46, i64 56
  %48 = load ptr, ptr %47, align 8, !tbaa !9
  %49 = zext i16 %spec.store.select to i64
  %50 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %49, ptr noundef nonnull @.str.80, ptr noundef nonnull @.str.79, ptr noundef %48, ptr noundef %46) #4
  br label %145

51:                                               ; preds = %42
  %52 = load ptr, ptr @gravity_class_closure, align 8, !tbaa !5
  %53 = icmp eq ptr %52, %1
  br i1 %53, label %54, label %62

54:                                               ; preds = %51
  %55 = inttoptr i64 %2 to ptr
  %56 = getelementptr inbounds i8, ptr %55, i64 56
  %57 = load ptr, ptr %56, align 8, !tbaa !15
  %58 = getelementptr inbounds i8, ptr %57, i64 56
  %59 = load ptr, ptr %58, align 8, !tbaa !9
  %.not = icmp eq ptr %59, null
  %spec.select129 = select i1 %.not, ptr @.str.82, ptr %59
  %60 = zext i16 %spec.store.select to i64
  %61 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %60, ptr noundef nonnull @.str.80, ptr noundef nonnull @.str.81, ptr noundef nonnull %spec.select129, ptr noundef %55) #4
  br label %145

62:                                               ; preds = %51
  %63 = load ptr, ptr @gravity_class_class, align 8, !tbaa !5
  %64 = icmp eq ptr %63, %1
  br i1 %64, label %65, label %71

65:                                               ; preds = %62
  %66 = inttoptr i64 %2 to ptr
  %67 = getelementptr inbounds i8, ptr %66, i64 56
  %68 = load ptr, ptr %67, align 8, !tbaa !17
  %69 = zext i16 %spec.store.select to i64
  %70 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %69, ptr noundef nonnull @.str.80, ptr noundef nonnull @.str.83, ptr noundef %68, ptr noundef %66) #4
  br label %145

71:                                               ; preds = %62
  %72 = load ptr, ptr @gravity_class_string, align 8, !tbaa !5
  %73 = icmp eq ptr %72, %1
  br i1 %73, label %74, label %82

74:                                               ; preds = %71
  %75 = inttoptr i64 %2 to ptr
  %76 = zext i16 %spec.store.select to i64
  %77 = getelementptr inbounds i8, ptr %75, i64 60
  %78 = load i32, ptr %77, align 4, !tbaa !19
  %79 = getelementptr inbounds i8, ptr %75, i64 48
  %80 = load ptr, ptr %79, align 8, !tbaa !21
  %81 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %76, ptr noundef nonnull @.str.85, ptr noundef nonnull @.str.84, i32 noundef %78, ptr noundef %80, ptr noundef %75) #4
  br label %145

82:                                               ; preds = %71
  %83 = load ptr, ptr @gravity_class_instance, align 8, !tbaa !5
  %84 = icmp eq ptr %83, %1
  br i1 %84, label %85, label %93

85:                                               ; preds = %82
  %86 = inttoptr i64 %2 to ptr
  %87 = getelementptr inbounds i8, ptr %86, i64 48
  %88 = load ptr, ptr %87, align 8, !tbaa !22
  %89 = getelementptr inbounds i8, ptr %88, i64 56
  %90 = load ptr, ptr %89, align 8, !tbaa !17
  %91 = zext i16 %spec.store.select to i64
  %92 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %91, ptr noundef nonnull @.str.80, ptr noundef nonnull @.str.86, ptr noundef %90, ptr noundef %86) #4
  br label %145

93:                                               ; preds = %82
  %94 = load ptr, ptr @gravity_class_list, align 8, !tbaa !5
  %95 = icmp eq ptr %94, %1
  br i1 %95, label %96, label %106

96:                                               ; preds = %93
  %97 = tail call { ptr, i64 } @convert_value2string(ptr noundef %0, ptr nonnull %1, i64 %2) #4
  %98 = extractvalue { ptr, i64 } %97, 1
  %99 = inttoptr i64 %98 to ptr
  %100 = zext i16 %spec.store.select to i64
  %101 = getelementptr inbounds i8, ptr %99, i64 60
  %102 = load i32, ptr %101, align 4, !tbaa !19
  %103 = getelementptr inbounds i8, ptr %99, i64 48
  %104 = load ptr, ptr %103, align 8, !tbaa !21
  %105 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %100, ptr noundef nonnull @.str.85, ptr noundef nonnull @.str.87, i32 noundef %102, ptr noundef %104, ptr noundef %99) #4
  br label %145

106:                                              ; preds = %93
  %107 = load ptr, ptr @gravity_class_map, align 8, !tbaa !5
  %108 = icmp eq ptr %107, %1
  br i1 %108, label %109, label %119

109:                                              ; preds = %106
  %110 = tail call { ptr, i64 } @convert_value2string(ptr noundef %0, ptr nonnull %1, i64 %2) #4
  %111 = extractvalue { ptr, i64 } %110, 1
  %112 = inttoptr i64 %111 to ptr
  %113 = zext i16 %spec.store.select to i64
  %114 = getelementptr inbounds i8, ptr %112, i64 60
  %115 = load i32, ptr %114, align 4, !tbaa !19
  %116 = getelementptr inbounds i8, ptr %112, i64 48
  %117 = load ptr, ptr %116, align 8, !tbaa !21
  %118 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %113, ptr noundef nonnull @.str.85, ptr noundef nonnull @.str.88, i32 noundef %115, ptr noundef %117, ptr noundef %112) #4
  br label %145

119:                                              ; preds = %106
  %120 = load ptr, ptr @gravity_class_range, align 8, !tbaa !5
  %121 = icmp eq ptr %120, %1
  br i1 %121, label %122, label %130

122:                                              ; preds = %119
  %123 = inttoptr i64 %2 to ptr
  %124 = zext i16 %spec.store.select to i64
  %125 = getelementptr inbounds i8, ptr %123, i64 48
  %126 = load i64, ptr %125, align 8, !tbaa !24
  %127 = getelementptr inbounds i8, ptr %123, i64 56
  %128 = load i64, ptr %127, align 8, !tbaa !27
  %129 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %124, ptr noundef nonnull @.str.90, ptr noundef nonnull @.str.89, i64 noundef %126, i64 noundef %128) #4
  br label %145

130:                                              ; preds = %119
  %131 = load ptr, ptr @gravity_class_object, align 8, !tbaa !5
  %132 = icmp eq ptr %131, %1
  br i1 %132, label %133, label %136

133:                                              ; preds = %130
  %134 = zext i16 %spec.store.select to i64
  %135 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %134, ptr noundef nonnull @.str.75, ptr noundef nonnull @.str.91, ptr noundef nonnull @.str.67) #4
  br label %145

136:                                              ; preds = %130
  %137 = load ptr, ptr @gravity_class_fiber, align 8, !tbaa !5
  %138 = icmp eq ptr %137, %1
  %139 = zext i16 %spec.store.select to i64
  br i1 %138, label %140, label %143

140:                                              ; preds = %136
  %141 = inttoptr i64 %2 to ptr
  %142 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %139, ptr noundef nonnull @.str.93, ptr noundef nonnull @.str.92, ptr noundef %141) #4
  br label %145

143:                                              ; preds = %136
  %144 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %spec.select, i64 noundef %139, ptr noundef nonnull @.str.75, ptr noundef nonnull @.str.67, ptr noundef nonnull @.str.67) #4
  br label %145

145:                                              ; preds = %16, %32, %45, %65, %85, %109, %133, %143, %140, %122, %96, %74, %54, %38, %24, %10
  %146 = icmp eq ptr %spec.select, %6
  br i1 %146, label %147, label %149

147:                                              ; preds = %145
  %148 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.94, ptr noundef nonnull %spec.select)
  br label %149

149:                                              ; preds = %147, %145
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #4
  ret void
}

declare { ptr, i64 } @convert_value2string(ptr noundef, ptr, i64) local_unnamed_addr #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #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/C++ TBAA"}
!9 = !{!10, !6, i64 56}
!10 = !{!"", !6, i64 0, !11, i64 8, !6, i64 48, !6, i64 56, !13, i64 64, !13, i64 66, !13, i64 68, !13, i64 70, !14, i64 72, !7, i64 80}
!11 = !{!"gravity_gc_s", !12, i64 0, !12, i64 1, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!12 = !{!"_Bool", !7, i64 0}
!13 = !{!"short", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !6, i64 56}
!16 = !{!"gravity_closure_s", !6, i64 0, !11, i64 8, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !14, i64 80}
!17 = !{!18, !6, i64 56}
!18 = !{!"gravity_class_s", !6, i64 0, !11, i64 8, !6, i64 48, !6, i64 56, !12, i64 64, !12, i64 65, !12, i64 66, !12, i64 67, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !14, i64 104, !6, i64 112}
!19 = !{!20, !14, i64 60}
!20 = !{!"", !6, i64 0, !11, i64 8, !6, i64 48, !14, i64 56, !14, i64 60, !14, i64 64}
!21 = !{!20, !6, i64 48}
!22 = !{!23, !6, i64 48}
!23 = !{!"", !6, i64 0, !11, i64 8, !6, i64 48, !6, i64 56, !6, i64 64}
!24 = !{!25, !26, i64 48}
!25 = !{!"", !6, i64 0, !11, i64 8, !26, i64 48, !26, i64 56}
!26 = !{!"long", !7, i64 0}
!27 = !{!25, !26, i64 56}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,SROAPass,SimplifyCFGPass,TailCallElimPass