Skip to content

Instantly share code, notes, and snippets.

@sbogolepov
Last active June 6, 2018 10:01
Show Gist options
  • Save sbogolepov/d51b1f990506820baa588b6c364be4c7 to your computer and use it in GitHub Desktop.
Save sbogolepov/d51b1f990506820baa588b6c364be4c7 to your computer and use it in GitHub Desktop.
Switch lowering outcome
import kotlin.system.measureNanoTime
enum class MyEnum {
ITEM1, ITEM2, ITEM3, ITEM4, ITEM5, ITEM6, ITEM7, ITEM8, ITEM9, ITEM10, ITEM11, ITEM12, ITEM13, ITEM14, ITEM15, ITEM16, ITEM17, ITEM18, ITEM19, ITEM20, ITEM21, ITEM22, ITEM23, ITEM24, ITEM25, ITEM26, ITEM27, ITEM28, ITEM29, ITEM30, ITEM31, ITEM32, ITEM33, ITEM34, ITEM35, ITEM36, ITEM37, ITEM38, ITEM39, ITEM40, ITEM41, ITEM42, ITEM43, ITEM44, ITEM45, ITEM46, ITEM47, ITEM48, ITEM49, ITEM50, ITEM51, ITEM52, ITEM53, ITEM54, ITEM55, ITEM56, ITEM57, ITEM58, ITEM59, ITEM60, ITEM61, ITEM62, ITEM63, ITEM64, ITEM65, ITEM66, ITEM67, ITEM68, ITEM69, ITEM70, ITEM71, ITEM72, ITEM73, ITEM74, ITEM75, ITEM76, ITEM77, ITEM78, ITEM79, ITEM80, ITEM81, ITEM82, ITEM83, ITEM84, ITEM85, ITEM86, ITEM87, ITEM88, ITEM89, ITEM90, ITEM91, ITEM92, ITEM93, ITEM94, ITEM95, ITEM96, ITEM97, ITEM98, ITEM99, ITEM100
}
private fun enumSwitch(x: MyEnum) : Int {
when (x) {
MyEnum.ITEM5 -> return 1
MyEnum.ITEM10 -> return 2
MyEnum.ITEM15 -> return 3
MyEnum.ITEM20 -> return 4
MyEnum.ITEM25 -> return 5
MyEnum.ITEM30 -> return 6
MyEnum.ITEM35 -> return 7
MyEnum.ITEM40 -> return 8
MyEnum.ITEM45 -> return 9
MyEnum.ITEM50 -> return 10
MyEnum.ITEM55 -> return 11
MyEnum.ITEM60 -> return 12
MyEnum.ITEM65 -> return 13
MyEnum.ITEM70 -> return 14
MyEnum.ITEM75 -> return 15
MyEnum.ITEM80 -> return 16
MyEnum.ITEM85 -> return 17
MyEnum.ITEM90 -> return 18
MyEnum.ITEM95 -> return 19
MyEnum.ITEM100 -> return 20
else -> return -1
}
}
class Blackhole {
companion object {
var consumer = 0
fun consume(value: Any) {
consumer += value.hashCode()
}
}
}
lateinit var enumData : Array<MyEnum>
const val BENCHMARK_SIZE = 100_000
fun setupEnums() {
enumData = Array(BENCHMARK_SIZE) {
MyEnum.values()[it % MyEnum.values().size]
}
}
fun testEnumsSwitch() {
val n = enumData.size -1
val data = enumData
for (i in 0..n) {
Blackhole.consume(enumSwitch(data[i]))
}
}
fun main(args: Array<String>) {
setupEnums()
val time = measureNanoTime {
testEnumsSwitch()
}
println(time)
}
define internal i32 @"kfun:enumSwitch#internal"(%struct.ObjHeader*) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !492, metadata !412) #0, !dbg !494
%2 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %0, i64 1, !dbg !495
%3 = bitcast %struct.ObjHeader* %2 to i32*, !dbg !495
%4 = load i32, i32* %3, align 4, !dbg !495
switch i32 %4, label %5 [
i32 4, label %25
i32 9, label %6
i32 14, label %7
i32 19, label %8
i32 24, label %9
i32 29, label %10
i32 34, label %11
i32 39, label %12
i32 44, label %13
i32 49, label %14
i32 54, label %15
i32 59, label %16
i32 64, label %17
i32 69, label %18
i32 74, label %19
i32 79, label %20
i32 84, label %21
i32 89, label %22
i32 94, label %23
i32 99, label %24
]
; <label>:5: ; preds = %1
br label %25
; <label>:6: ; preds = %1
br label %25
; <label>:7: ; preds = %1
br label %25
; <label>:8: ; preds = %1
br label %25
; <label>:9: ; preds = %1
br label %25
; <label>:10: ; preds = %1
br label %25
; <label>:11: ; preds = %1
br label %25
; <label>:12: ; preds = %1
br label %25
; <label>:13: ; preds = %1
br label %25
; <label>:14: ; preds = %1
br label %25
; <label>:15: ; preds = %1
br label %25
; <label>:16: ; preds = %1
br label %25
; <label>:17: ; preds = %1
br label %25
; <label>:18: ; preds = %1
br label %25
; <label>:19: ; preds = %1
br label %25
; <label>:20: ; preds = %1
br label %25
; <label>:21: ; preds = %1
br label %25
; <label>:22: ; preds = %1
br label %25
; <label>:23: ; preds = %1
br label %25
; <label>:24: ; preds = %1
br label %25
; <label>:25: ; preds = %24, %23, %22, %21, %20, %19, %18, %17, %16, %15, %14, %13, %12, %11, %10, %9, %8, %7, %6, %5, %1
%26 = phi i32 [ -1, %5 ], [ 1, %1 ], [ 2, %6 ], [ 3, %7 ], [ 4, %8 ], [ 5, %9 ], [ 6, %10 ], [ 7, %11 ], [ 8, %12 ], [ 9, %13 ], [ 10, %14 ], [ 11, %15 ], [ 12, %16 ], [ 13, %17 ], [ 14, %18 ], [ 15, %19 ], [ 16, %20 ], [ 17, %21 ], [ 18, %22 ], [ 19, %23 ], [ 20, %24 ]
ret i32 %26
}
define internal i32 @"kfun:enumSwitch#internal"(%struct.ObjHeader*) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
%2 = alloca [2 x %struct.ObjHeader*], align 8
%3 = alloca [42 x %struct.ObjHeader*], align 8
%4 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 0
%5 = bitcast [42 x %struct.ObjHeader*]* %3 to i8*
call void @llvm.memset.p0i8.i32(i8* %5, i8 0, i32 336, i32 8, i1 false)
%6 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 1
store %struct.ObjHeader* %0, %struct.ObjHeader** %6, align 8
%7 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 3
%8 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 4
%9 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 5
%10 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 6
%11 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 7
%12 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 8
%13 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 9
%14 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 10
%15 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 11
%16 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 12
%17 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 13
%18 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 14
%19 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 15
%20 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 16
%21 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 17
%22 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 18
%23 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 19
%24 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 20
%25 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 21
%26 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 22
%27 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 23
%28 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 24
%29 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 25
%30 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 26
%31 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 27
%32 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 28
%33 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 29
%34 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 30
%35 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 31
%36 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 32
%37 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 33
%38 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 34
%39 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 35
%40 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 36
%41 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 37
%42 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 38
%43 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 39
%44 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 40
%45 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 41
%46 = getelementptr inbounds [42 x %struct.ObjHeader*], [42 x %struct.ObjHeader*]* %3, i64 0, i64 2
%47 = bitcast [2 x %struct.ObjHeader*]* %2 to i8*
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
%48 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 0
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%49 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%50 = icmp ugt %struct.ObjHeader* %49, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %50, label %95, label %51
; <label>:51: ; preds = %1
%52 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%53 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %52)
to label %95 unwind label %54
; <label>:54: ; preds = %51
%55 = landingpad { i8*, i32 }
cleanup
%56 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%57 = load %struct.ObjHeader*, %struct.ObjHeader** %56, align 8, !tbaa !476
%58 = icmp eq %struct.ObjHeader* %57, null
br i1 %58, label %68, label %59
; <label>:59: ; preds = %54
%60 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %57, i64 0, i32 0
%61 = load %struct.TypeInfo*, %struct.TypeInfo** %60, align 8, !tbaa !477
%62 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %57, i64 0, i32 1
%63 = load %struct.ContainerHeader*, %struct.ContainerHeader** %62, align 8, !tbaa !479
%64 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %61, i64 0, i32 0
%65 = load %struct.TypeInfo*, %struct.TypeInfo** %64, align 8, !tbaa !480
%66 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %65, i64 0, i32 5
%67 = load i32, i32* %66, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %67, %struct.ContainerHeader* %63) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %56, align 8, !tbaa !476
br label %68
; <label>:68: ; preds = %59, %54
%69 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%70 = icmp eq %struct.ObjHeader* %69, null
br i1 %70, label %2461, label %71
; <label>:71: ; preds = %68
%72 = bitcast %struct.ObjHeader* %69 to %struct.ContainerChunk**
%73 = load %struct.ContainerChunk*, %struct.ContainerChunk** %72, align 8, !tbaa !476
%74 = icmp eq %struct.ContainerChunk* %73, null
br i1 %74, label %93, label %75
; <label>:75: ; preds = %71
br label %76
; <label>:76: ; preds = %76, %75
%77 = phi %struct.ContainerChunk* [ %81, %76 ], [ %73, %75 ]
%78 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %77, i64 1
%79 = bitcast %struct.ContainerChunk* %78 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %79) #0
%80 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %77, i64 0, i32 0
%81 = load %struct.ContainerChunk*, %struct.ContainerChunk** %80, align 8, !tbaa !476
%82 = icmp eq %struct.ContainerChunk* %81, null
br i1 %82, label %83, label %76
; <label>:83: ; preds = %76
%84 = load %struct.ContainerChunk*, %struct.ContainerChunk** %72, align 8, !tbaa !482
%85 = icmp eq %struct.ContainerChunk* %84, null
br i1 %85, label %93, label %86
; <label>:86: ; preds = %83
br label %87
; <label>:87: ; preds = %87, %86
%88 = phi %struct.ContainerChunk* [ %91, %87 ], [ %84, %86 ]
%89 = bitcast %struct.ContainerChunk* %88 to i8*
%90 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %88, i64 0, i32 0
%91 = load %struct.ContainerChunk*, %struct.ContainerChunk** %90, align 8, !tbaa !484
call void @free(i8* %89) #0
%92 = icmp eq %struct.ContainerChunk* %91, null
br i1 %92, label %93, label %87
; <label>:93: ; preds = %87, %83, %71
%94 = bitcast %struct.ObjHeader* %69 to i8*
call void @free(i8* %94) #0
br label %2461
; <label>:95: ; preds = %51, %1
%96 = phi %struct.ObjHeader* [ %49, %1 ], [ %53, %51 ]
%97 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %96, i64 1
%98 = bitcast %struct.ObjHeader* %97 to %struct.ObjHeader**
%99 = load %struct.ObjHeader*, %struct.ObjHeader** %98, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %46, %struct.ObjHeader* %99)
%100 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%101 = load %struct.ObjHeader*, %struct.ObjHeader** %100, align 8, !tbaa !476
%102 = icmp eq %struct.ObjHeader* %101, null
br i1 %102, label %112, label %103
; <label>:103: ; preds = %95
%104 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %101, i64 0, i32 0
%105 = load %struct.TypeInfo*, %struct.TypeInfo** %104, align 8, !tbaa !477
%106 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %101, i64 0, i32 1
%107 = load %struct.ContainerHeader*, %struct.ContainerHeader** %106, align 8, !tbaa !479
%108 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %105, i64 0, i32 0
%109 = load %struct.TypeInfo*, %struct.TypeInfo** %108, align 8, !tbaa !480
%110 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %109, i64 0, i32 5
%111 = load i32, i32* %110, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %111, %struct.ContainerHeader* %107) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %100, align 8, !tbaa !476
br label %112
; <label>:112: ; preds = %103, %95
%113 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%114 = icmp eq %struct.ObjHeader* %113, null
br i1 %114, label %139, label %115
; <label>:115: ; preds = %112
%116 = bitcast %struct.ObjHeader* %113 to %struct.ContainerChunk**
%117 = load %struct.ContainerChunk*, %struct.ContainerChunk** %116, align 8, !tbaa !476
%118 = icmp eq %struct.ContainerChunk* %117, null
br i1 %118, label %137, label %119
; <label>:119: ; preds = %115
br label %120
; <label>:120: ; preds = %120, %119
%121 = phi %struct.ContainerChunk* [ %125, %120 ], [ %117, %119 ]
%122 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %121, i64 1
%123 = bitcast %struct.ContainerChunk* %122 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %123) #0
%124 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %121, i64 0, i32 0
%125 = load %struct.ContainerChunk*, %struct.ContainerChunk** %124, align 8, !tbaa !476
%126 = icmp eq %struct.ContainerChunk* %125, null
br i1 %126, label %127, label %120
; <label>:127: ; preds = %120
%128 = load %struct.ContainerChunk*, %struct.ContainerChunk** %116, align 8, !tbaa !482
%129 = icmp eq %struct.ContainerChunk* %128, null
br i1 %129, label %137, label %130
; <label>:130: ; preds = %127
br label %131
; <label>:131: ; preds = %131, %130
%132 = phi %struct.ContainerChunk* [ %135, %131 ], [ %128, %130 ]
%133 = bitcast %struct.ContainerChunk* %132 to i8*
%134 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %132, i64 0, i32 0
%135 = load %struct.ContainerChunk*, %struct.ContainerChunk** %134, align 8, !tbaa !484
call void @free(i8* %133) #0
%136 = icmp eq %struct.ContainerChunk* %135, null
br i1 %136, label %137, label %131
; <label>:137: ; preds = %131, %127, %115
%138 = bitcast %struct.ObjHeader* %113 to i8*
call void @free(i8* %138) #0
br label %139
; <label>:139: ; preds = %137, %112
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%140 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %99, i64 1
%141 = bitcast %struct.ObjHeader* %140 to i32*
%142 = load i32, i32* %141, align 8, !tbaa !492
%143 = icmp ugt i32 %142, 45
br i1 %143, label %147, label %144
; <label>:144: ; preds = %139
%145 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %146 unwind label %2459
; <label>:146: ; preds = %144
unreachable
; <label>:147: ; preds = %139
%148 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %99, i64 1, i32 1
%149 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %148, i64 45
%150 = bitcast %struct.ContainerHeader** %149 to %struct.ObjHeader**
%151 = load %struct.ObjHeader*, %struct.ObjHeader** %150, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %7, %struct.ObjHeader* %151) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
%152 = icmp eq %struct.ObjHeader* %0, null, !dbg !501
br i1 %152, label %153, label %155, !dbg !501
; <label>:153: ; preds = %147
%154 = icmp eq %struct.ObjHeader* %151, null, !dbg !501
br i1 %154, label %2411, label %167
; <label>:155: ; preds = %147
%156 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%157 = load %struct.TypeInfo*, %struct.TypeInfo** %156, align 8, !dbg !501
%158 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %157, i64 0, i32 0, !dbg !501
%159 = load %struct.TypeInfo*, %struct.TypeInfo** %158, align 8, !dbg !501
%160 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %159, i64 1, i32 1, i32 0, i64 8, !dbg !501
%161 = bitcast i8* %160 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%162 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %161, align 8, !dbg !501
%163 = invoke i1 %162(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %151)
to label %166 unwind label %164, !dbg !501
; <label>:164: ; preds = %155
%165 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:166: ; preds = %155
br i1 %163, label %2411, label %167
; <label>:167: ; preds = %166, %153
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%168 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%169 = icmp ugt %struct.ObjHeader* %168, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %169, label %214, label %170
; <label>:170: ; preds = %167
%171 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%172 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %171)
to label %214 unwind label %173
; <label>:173: ; preds = %170
%174 = landingpad { i8*, i32 }
cleanup
%175 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%176 = load %struct.ObjHeader*, %struct.ObjHeader** %175, align 8, !tbaa !476
%177 = icmp eq %struct.ObjHeader* %176, null
br i1 %177, label %187, label %178
; <label>:178: ; preds = %173
%179 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %176, i64 0, i32 0
%180 = load %struct.TypeInfo*, %struct.TypeInfo** %179, align 8, !tbaa !477
%181 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %176, i64 0, i32 1
%182 = load %struct.ContainerHeader*, %struct.ContainerHeader** %181, align 8, !tbaa !479
%183 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %180, i64 0, i32 0
%184 = load %struct.TypeInfo*, %struct.TypeInfo** %183, align 8, !tbaa !480
%185 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %184, i64 0, i32 5
%186 = load i32, i32* %185, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %186, %struct.ContainerHeader* %182) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %175, align 8, !tbaa !476
br label %187
; <label>:187: ; preds = %178, %173
%188 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%189 = icmp eq %struct.ObjHeader* %188, null
br i1 %189, label %2461, label %190
; <label>:190: ; preds = %187
%191 = bitcast %struct.ObjHeader* %188 to %struct.ContainerChunk**
%192 = load %struct.ContainerChunk*, %struct.ContainerChunk** %191, align 8, !tbaa !476
%193 = icmp eq %struct.ContainerChunk* %192, null
br i1 %193, label %212, label %194
; <label>:194: ; preds = %190
br label %195
; <label>:195: ; preds = %195, %194
%196 = phi %struct.ContainerChunk* [ %200, %195 ], [ %192, %194 ]
%197 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %196, i64 1
%198 = bitcast %struct.ContainerChunk* %197 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %198) #0
%199 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %196, i64 0, i32 0
%200 = load %struct.ContainerChunk*, %struct.ContainerChunk** %199, align 8, !tbaa !476
%201 = icmp eq %struct.ContainerChunk* %200, null
br i1 %201, label %202, label %195
; <label>:202: ; preds = %195
%203 = load %struct.ContainerChunk*, %struct.ContainerChunk** %191, align 8, !tbaa !482
%204 = icmp eq %struct.ContainerChunk* %203, null
br i1 %204, label %212, label %205
; <label>:205: ; preds = %202
br label %206
; <label>:206: ; preds = %206, %205
%207 = phi %struct.ContainerChunk* [ %210, %206 ], [ %203, %205 ]
%208 = bitcast %struct.ContainerChunk* %207 to i8*
%209 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %207, i64 0, i32 0
%210 = load %struct.ContainerChunk*, %struct.ContainerChunk** %209, align 8, !tbaa !484
call void @free(i8* %208) #0
%211 = icmp eq %struct.ContainerChunk* %210, null
br i1 %211, label %212, label %206
; <label>:212: ; preds = %206, %202, %190
%213 = bitcast %struct.ObjHeader* %188 to i8*
call void @free(i8* %213) #0
br label %2461
; <label>:214: ; preds = %170, %167
%215 = phi %struct.ObjHeader* [ %168, %167 ], [ %172, %170 ]
%216 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %215, i64 1
%217 = bitcast %struct.ObjHeader* %216 to %struct.ObjHeader**
%218 = load %struct.ObjHeader*, %struct.ObjHeader** %217, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %8, %struct.ObjHeader* %218)
%219 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%220 = load %struct.ObjHeader*, %struct.ObjHeader** %219, align 8, !tbaa !476
%221 = icmp eq %struct.ObjHeader* %220, null
br i1 %221, label %231, label %222
; <label>:222: ; preds = %214
%223 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %220, i64 0, i32 0
%224 = load %struct.TypeInfo*, %struct.TypeInfo** %223, align 8, !tbaa !477
%225 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %220, i64 0, i32 1
%226 = load %struct.ContainerHeader*, %struct.ContainerHeader** %225, align 8, !tbaa !479
%227 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %224, i64 0, i32 0
%228 = load %struct.TypeInfo*, %struct.TypeInfo** %227, align 8, !tbaa !480
%229 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %228, i64 0, i32 5
%230 = load i32, i32* %229, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %230, %struct.ContainerHeader* %226) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %219, align 8, !tbaa !476
br label %231
; <label>:231: ; preds = %222, %214
%232 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%233 = icmp eq %struct.ObjHeader* %232, null
br i1 %233, label %258, label %234
; <label>:234: ; preds = %231
%235 = bitcast %struct.ObjHeader* %232 to %struct.ContainerChunk**
%236 = load %struct.ContainerChunk*, %struct.ContainerChunk** %235, align 8, !tbaa !476
%237 = icmp eq %struct.ContainerChunk* %236, null
br i1 %237, label %256, label %238
; <label>:238: ; preds = %234
br label %239
; <label>:239: ; preds = %239, %238
%240 = phi %struct.ContainerChunk* [ %244, %239 ], [ %236, %238 ]
%241 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %240, i64 1
%242 = bitcast %struct.ContainerChunk* %241 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %242) #0
%243 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %240, i64 0, i32 0
%244 = load %struct.ContainerChunk*, %struct.ContainerChunk** %243, align 8, !tbaa !476
%245 = icmp eq %struct.ContainerChunk* %244, null
br i1 %245, label %246, label %239
; <label>:246: ; preds = %239
%247 = load %struct.ContainerChunk*, %struct.ContainerChunk** %235, align 8, !tbaa !482
%248 = icmp eq %struct.ContainerChunk* %247, null
br i1 %248, label %256, label %249
; <label>:249: ; preds = %246
br label %250
; <label>:250: ; preds = %250, %249
%251 = phi %struct.ContainerChunk* [ %254, %250 ], [ %247, %249 ]
%252 = bitcast %struct.ContainerChunk* %251 to i8*
%253 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %251, i64 0, i32 0
%254 = load %struct.ContainerChunk*, %struct.ContainerChunk** %253, align 8, !tbaa !484
call void @free(i8* %252) #0
%255 = icmp eq %struct.ContainerChunk* %254, null
br i1 %255, label %256, label %250
; <label>:256: ; preds = %250, %246, %234
%257 = bitcast %struct.ObjHeader* %232 to i8*
call void @free(i8* %257) #0
br label %258
; <label>:258: ; preds = %256, %231
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%259 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %218, i64 1
%260 = bitcast %struct.ObjHeader* %259 to i32*
%261 = load i32, i32* %260, align 8, !tbaa !492
%262 = icmp ugt i32 %261, 1
br i1 %262, label %266, label %263
; <label>:263: ; preds = %258
%264 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %265 unwind label %2459
; <label>:265: ; preds = %263
unreachable
; <label>:266: ; preds = %258
%267 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %218, i64 1, i32 1
%268 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %267, i64 1
%269 = bitcast %struct.ContainerHeader** %268 to %struct.ObjHeader**
%270 = load %struct.ObjHeader*, %struct.ObjHeader** %269, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %9, %struct.ObjHeader* %270) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %271, label %273, !dbg !501
; <label>:271: ; preds = %266
%272 = icmp eq %struct.ObjHeader* %270, null, !dbg !501
br i1 %272, label %2411, label %285
; <label>:273: ; preds = %266
%274 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%275 = load %struct.TypeInfo*, %struct.TypeInfo** %274, align 8, !dbg !501
%276 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %275, i64 0, i32 0, !dbg !501
%277 = load %struct.TypeInfo*, %struct.TypeInfo** %276, align 8, !dbg !501
%278 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %277, i64 1, i32 1, i32 0, i64 8, !dbg !501
%279 = bitcast i8* %278 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%280 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %279, align 8, !dbg !501
%281 = invoke i1 %280(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %270)
to label %284 unwind label %282, !dbg !501
; <label>:282: ; preds = %273
%283 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:284: ; preds = %273
br i1 %281, label %2411, label %285
; <label>:285: ; preds = %284, %271
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%286 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%287 = icmp ugt %struct.ObjHeader* %286, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %287, label %332, label %288
; <label>:288: ; preds = %285
%289 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%290 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %289)
to label %332 unwind label %291
; <label>:291: ; preds = %288
%292 = landingpad { i8*, i32 }
cleanup
%293 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%294 = load %struct.ObjHeader*, %struct.ObjHeader** %293, align 8, !tbaa !476
%295 = icmp eq %struct.ObjHeader* %294, null
br i1 %295, label %305, label %296
; <label>:296: ; preds = %291
%297 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %294, i64 0, i32 0
%298 = load %struct.TypeInfo*, %struct.TypeInfo** %297, align 8, !tbaa !477
%299 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %294, i64 0, i32 1
%300 = load %struct.ContainerHeader*, %struct.ContainerHeader** %299, align 8, !tbaa !479
%301 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %298, i64 0, i32 0
%302 = load %struct.TypeInfo*, %struct.TypeInfo** %301, align 8, !tbaa !480
%303 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %302, i64 0, i32 5
%304 = load i32, i32* %303, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %304, %struct.ContainerHeader* %300) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %293, align 8, !tbaa !476
br label %305
; <label>:305: ; preds = %296, %291
%306 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%307 = icmp eq %struct.ObjHeader* %306, null
br i1 %307, label %2461, label %308
; <label>:308: ; preds = %305
%309 = bitcast %struct.ObjHeader* %306 to %struct.ContainerChunk**
%310 = load %struct.ContainerChunk*, %struct.ContainerChunk** %309, align 8, !tbaa !476
%311 = icmp eq %struct.ContainerChunk* %310, null
br i1 %311, label %330, label %312
; <label>:312: ; preds = %308
br label %313
; <label>:313: ; preds = %313, %312
%314 = phi %struct.ContainerChunk* [ %318, %313 ], [ %310, %312 ]
%315 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %314, i64 1
%316 = bitcast %struct.ContainerChunk* %315 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %316) #0
%317 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %314, i64 0, i32 0
%318 = load %struct.ContainerChunk*, %struct.ContainerChunk** %317, align 8, !tbaa !476
%319 = icmp eq %struct.ContainerChunk* %318, null
br i1 %319, label %320, label %313
; <label>:320: ; preds = %313
%321 = load %struct.ContainerChunk*, %struct.ContainerChunk** %309, align 8, !tbaa !482
%322 = icmp eq %struct.ContainerChunk* %321, null
br i1 %322, label %330, label %323
; <label>:323: ; preds = %320
br label %324
; <label>:324: ; preds = %324, %323
%325 = phi %struct.ContainerChunk* [ %328, %324 ], [ %321, %323 ]
%326 = bitcast %struct.ContainerChunk* %325 to i8*
%327 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %325, i64 0, i32 0
%328 = load %struct.ContainerChunk*, %struct.ContainerChunk** %327, align 8, !tbaa !484
call void @free(i8* %326) #0
%329 = icmp eq %struct.ContainerChunk* %328, null
br i1 %329, label %330, label %324
; <label>:330: ; preds = %324, %320, %308
%331 = bitcast %struct.ObjHeader* %306 to i8*
call void @free(i8* %331) #0
br label %2461
; <label>:332: ; preds = %288, %285
%333 = phi %struct.ObjHeader* [ %286, %285 ], [ %290, %288 ]
%334 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %333, i64 1
%335 = bitcast %struct.ObjHeader* %334 to %struct.ObjHeader**
%336 = load %struct.ObjHeader*, %struct.ObjHeader** %335, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %10, %struct.ObjHeader* %336)
%337 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%338 = load %struct.ObjHeader*, %struct.ObjHeader** %337, align 8, !tbaa !476
%339 = icmp eq %struct.ObjHeader* %338, null
br i1 %339, label %349, label %340
; <label>:340: ; preds = %332
%341 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %338, i64 0, i32 0
%342 = load %struct.TypeInfo*, %struct.TypeInfo** %341, align 8, !tbaa !477
%343 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %338, i64 0, i32 1
%344 = load %struct.ContainerHeader*, %struct.ContainerHeader** %343, align 8, !tbaa !479
%345 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %342, i64 0, i32 0
%346 = load %struct.TypeInfo*, %struct.TypeInfo** %345, align 8, !tbaa !480
%347 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %346, i64 0, i32 5
%348 = load i32, i32* %347, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %348, %struct.ContainerHeader* %344) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %337, align 8, !tbaa !476
br label %349
; <label>:349: ; preds = %340, %332
%350 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%351 = icmp eq %struct.ObjHeader* %350, null
br i1 %351, label %376, label %352
; <label>:352: ; preds = %349
%353 = bitcast %struct.ObjHeader* %350 to %struct.ContainerChunk**
%354 = load %struct.ContainerChunk*, %struct.ContainerChunk** %353, align 8, !tbaa !476
%355 = icmp eq %struct.ContainerChunk* %354, null
br i1 %355, label %374, label %356
; <label>:356: ; preds = %352
br label %357
; <label>:357: ; preds = %357, %356
%358 = phi %struct.ContainerChunk* [ %362, %357 ], [ %354, %356 ]
%359 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %358, i64 1
%360 = bitcast %struct.ContainerChunk* %359 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %360) #0
%361 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %358, i64 0, i32 0
%362 = load %struct.ContainerChunk*, %struct.ContainerChunk** %361, align 8, !tbaa !476
%363 = icmp eq %struct.ContainerChunk* %362, null
br i1 %363, label %364, label %357
; <label>:364: ; preds = %357
%365 = load %struct.ContainerChunk*, %struct.ContainerChunk** %353, align 8, !tbaa !482
%366 = icmp eq %struct.ContainerChunk* %365, null
br i1 %366, label %374, label %367
; <label>:367: ; preds = %364
br label %368
; <label>:368: ; preds = %368, %367
%369 = phi %struct.ContainerChunk* [ %372, %368 ], [ %365, %367 ]
%370 = bitcast %struct.ContainerChunk* %369 to i8*
%371 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %369, i64 0, i32 0
%372 = load %struct.ContainerChunk*, %struct.ContainerChunk** %371, align 8, !tbaa !484
call void @free(i8* %370) #0
%373 = icmp eq %struct.ContainerChunk* %372, null
br i1 %373, label %374, label %368
; <label>:374: ; preds = %368, %364, %352
%375 = bitcast %struct.ObjHeader* %350 to i8*
call void @free(i8* %375) #0
br label %376
; <label>:376: ; preds = %374, %349
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%377 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %336, i64 1
%378 = bitcast %struct.ObjHeader* %377 to i32*
%379 = load i32, i32* %378, align 8, !tbaa !492
%380 = icmp ugt i32 %379, 7
br i1 %380, label %384, label %381
; <label>:381: ; preds = %376
%382 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %383 unwind label %2459
; <label>:383: ; preds = %381
unreachable
; <label>:384: ; preds = %376
%385 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %336, i64 1, i32 1
%386 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %385, i64 7
%387 = bitcast %struct.ContainerHeader** %386 to %struct.ObjHeader**
%388 = load %struct.ObjHeader*, %struct.ObjHeader** %387, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %11, %struct.ObjHeader* %388) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %389, label %391, !dbg !501
; <label>:389: ; preds = %384
%390 = icmp eq %struct.ObjHeader* %388, null, !dbg !501
br i1 %390, label %2411, label %403
; <label>:391: ; preds = %384
%392 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%393 = load %struct.TypeInfo*, %struct.TypeInfo** %392, align 8, !dbg !501
%394 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %393, i64 0, i32 0, !dbg !501
%395 = load %struct.TypeInfo*, %struct.TypeInfo** %394, align 8, !dbg !501
%396 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %395, i64 1, i32 1, i32 0, i64 8, !dbg !501
%397 = bitcast i8* %396 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%398 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %397, align 8, !dbg !501
%399 = invoke i1 %398(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %388)
to label %402 unwind label %400, !dbg !501
; <label>:400: ; preds = %391
%401 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:402: ; preds = %391
br i1 %399, label %2411, label %403
; <label>:403: ; preds = %402, %389
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%404 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%405 = icmp ugt %struct.ObjHeader* %404, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %405, label %450, label %406
; <label>:406: ; preds = %403
%407 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%408 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %407)
to label %450 unwind label %409
; <label>:409: ; preds = %406
%410 = landingpad { i8*, i32 }
cleanup
%411 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%412 = load %struct.ObjHeader*, %struct.ObjHeader** %411, align 8, !tbaa !476
%413 = icmp eq %struct.ObjHeader* %412, null
br i1 %413, label %423, label %414
; <label>:414: ; preds = %409
%415 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %412, i64 0, i32 0
%416 = load %struct.TypeInfo*, %struct.TypeInfo** %415, align 8, !tbaa !477
%417 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %412, i64 0, i32 1
%418 = load %struct.ContainerHeader*, %struct.ContainerHeader** %417, align 8, !tbaa !479
%419 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %416, i64 0, i32 0
%420 = load %struct.TypeInfo*, %struct.TypeInfo** %419, align 8, !tbaa !480
%421 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %420, i64 0, i32 5
%422 = load i32, i32* %421, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %422, %struct.ContainerHeader* %418) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %411, align 8, !tbaa !476
br label %423
; <label>:423: ; preds = %414, %409
%424 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%425 = icmp eq %struct.ObjHeader* %424, null
br i1 %425, label %2461, label %426
; <label>:426: ; preds = %423
%427 = bitcast %struct.ObjHeader* %424 to %struct.ContainerChunk**
%428 = load %struct.ContainerChunk*, %struct.ContainerChunk** %427, align 8, !tbaa !476
%429 = icmp eq %struct.ContainerChunk* %428, null
br i1 %429, label %448, label %430
; <label>:430: ; preds = %426
br label %431
; <label>:431: ; preds = %431, %430
%432 = phi %struct.ContainerChunk* [ %436, %431 ], [ %428, %430 ]
%433 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %432, i64 1
%434 = bitcast %struct.ContainerChunk* %433 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %434) #0
%435 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %432, i64 0, i32 0
%436 = load %struct.ContainerChunk*, %struct.ContainerChunk** %435, align 8, !tbaa !476
%437 = icmp eq %struct.ContainerChunk* %436, null
br i1 %437, label %438, label %431
; <label>:438: ; preds = %431
%439 = load %struct.ContainerChunk*, %struct.ContainerChunk** %427, align 8, !tbaa !482
%440 = icmp eq %struct.ContainerChunk* %439, null
br i1 %440, label %448, label %441
; <label>:441: ; preds = %438
br label %442
; <label>:442: ; preds = %442, %441
%443 = phi %struct.ContainerChunk* [ %446, %442 ], [ %439, %441 ]
%444 = bitcast %struct.ContainerChunk* %443 to i8*
%445 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %443, i64 0, i32 0
%446 = load %struct.ContainerChunk*, %struct.ContainerChunk** %445, align 8, !tbaa !484
call void @free(i8* %444) #0
%447 = icmp eq %struct.ContainerChunk* %446, null
br i1 %447, label %448, label %442
; <label>:448: ; preds = %442, %438, %426
%449 = bitcast %struct.ObjHeader* %424 to i8*
call void @free(i8* %449) #0
br label %2461
; <label>:450: ; preds = %406, %403
%451 = phi %struct.ObjHeader* [ %404, %403 ], [ %408, %406 ]
%452 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %451, i64 1
%453 = bitcast %struct.ObjHeader* %452 to %struct.ObjHeader**
%454 = load %struct.ObjHeader*, %struct.ObjHeader** %453, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %12, %struct.ObjHeader* %454)
%455 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%456 = load %struct.ObjHeader*, %struct.ObjHeader** %455, align 8, !tbaa !476
%457 = icmp eq %struct.ObjHeader* %456, null
br i1 %457, label %467, label %458
; <label>:458: ; preds = %450
%459 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %456, i64 0, i32 0
%460 = load %struct.TypeInfo*, %struct.TypeInfo** %459, align 8, !tbaa !477
%461 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %456, i64 0, i32 1
%462 = load %struct.ContainerHeader*, %struct.ContainerHeader** %461, align 8, !tbaa !479
%463 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %460, i64 0, i32 0
%464 = load %struct.TypeInfo*, %struct.TypeInfo** %463, align 8, !tbaa !480
%465 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %464, i64 0, i32 5
%466 = load i32, i32* %465, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %466, %struct.ContainerHeader* %462) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %455, align 8, !tbaa !476
br label %467
; <label>:467: ; preds = %458, %450
%468 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%469 = icmp eq %struct.ObjHeader* %468, null
br i1 %469, label %494, label %470
; <label>:470: ; preds = %467
%471 = bitcast %struct.ObjHeader* %468 to %struct.ContainerChunk**
%472 = load %struct.ContainerChunk*, %struct.ContainerChunk** %471, align 8, !tbaa !476
%473 = icmp eq %struct.ContainerChunk* %472, null
br i1 %473, label %492, label %474
; <label>:474: ; preds = %470
br label %475
; <label>:475: ; preds = %475, %474
%476 = phi %struct.ContainerChunk* [ %480, %475 ], [ %472, %474 ]
%477 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %476, i64 1
%478 = bitcast %struct.ContainerChunk* %477 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %478) #0
%479 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %476, i64 0, i32 0
%480 = load %struct.ContainerChunk*, %struct.ContainerChunk** %479, align 8, !tbaa !476
%481 = icmp eq %struct.ContainerChunk* %480, null
br i1 %481, label %482, label %475
; <label>:482: ; preds = %475
%483 = load %struct.ContainerChunk*, %struct.ContainerChunk** %471, align 8, !tbaa !482
%484 = icmp eq %struct.ContainerChunk* %483, null
br i1 %484, label %492, label %485
; <label>:485: ; preds = %482
br label %486
; <label>:486: ; preds = %486, %485
%487 = phi %struct.ContainerChunk* [ %490, %486 ], [ %483, %485 ]
%488 = bitcast %struct.ContainerChunk* %487 to i8*
%489 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %487, i64 0, i32 0
%490 = load %struct.ContainerChunk*, %struct.ContainerChunk** %489, align 8, !tbaa !484
call void @free(i8* %488) #0
%491 = icmp eq %struct.ContainerChunk* %490, null
br i1 %491, label %492, label %486
; <label>:492: ; preds = %486, %482, %470
%493 = bitcast %struct.ObjHeader* %468 to i8*
call void @free(i8* %493) #0
br label %494
; <label>:494: ; preds = %492, %467
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%495 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %454, i64 1
%496 = bitcast %struct.ObjHeader* %495 to i32*
%497 = load i32, i32* %496, align 8, !tbaa !492
%498 = icmp ugt i32 %497, 13
br i1 %498, label %502, label %499
; <label>:499: ; preds = %494
%500 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %501 unwind label %2459
; <label>:501: ; preds = %499
unreachable
; <label>:502: ; preds = %494
%503 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %454, i64 1, i32 1
%504 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %503, i64 13
%505 = bitcast %struct.ContainerHeader** %504 to %struct.ObjHeader**
%506 = load %struct.ObjHeader*, %struct.ObjHeader** %505, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %13, %struct.ObjHeader* %506) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %507, label %509, !dbg !501
; <label>:507: ; preds = %502
%508 = icmp eq %struct.ObjHeader* %506, null, !dbg !501
br i1 %508, label %2411, label %521
; <label>:509: ; preds = %502
%510 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%511 = load %struct.TypeInfo*, %struct.TypeInfo** %510, align 8, !dbg !501
%512 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %511, i64 0, i32 0, !dbg !501
%513 = load %struct.TypeInfo*, %struct.TypeInfo** %512, align 8, !dbg !501
%514 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %513, i64 1, i32 1, i32 0, i64 8, !dbg !501
%515 = bitcast i8* %514 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%516 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %515, align 8, !dbg !501
%517 = invoke i1 %516(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %506)
to label %520 unwind label %518, !dbg !501
; <label>:518: ; preds = %509
%519 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:520: ; preds = %509
br i1 %517, label %2411, label %521
; <label>:521: ; preds = %520, %507
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%522 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%523 = icmp ugt %struct.ObjHeader* %522, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %523, label %568, label %524
; <label>:524: ; preds = %521
%525 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%526 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %525)
to label %568 unwind label %527
; <label>:527: ; preds = %524
%528 = landingpad { i8*, i32 }
cleanup
%529 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%530 = load %struct.ObjHeader*, %struct.ObjHeader** %529, align 8, !tbaa !476
%531 = icmp eq %struct.ObjHeader* %530, null
br i1 %531, label %541, label %532
; <label>:532: ; preds = %527
%533 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %530, i64 0, i32 0
%534 = load %struct.TypeInfo*, %struct.TypeInfo** %533, align 8, !tbaa !477
%535 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %530, i64 0, i32 1
%536 = load %struct.ContainerHeader*, %struct.ContainerHeader** %535, align 8, !tbaa !479
%537 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %534, i64 0, i32 0
%538 = load %struct.TypeInfo*, %struct.TypeInfo** %537, align 8, !tbaa !480
%539 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %538, i64 0, i32 5
%540 = load i32, i32* %539, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %540, %struct.ContainerHeader* %536) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %529, align 8, !tbaa !476
br label %541
; <label>:541: ; preds = %532, %527
%542 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%543 = icmp eq %struct.ObjHeader* %542, null
br i1 %543, label %2461, label %544
; <label>:544: ; preds = %541
%545 = bitcast %struct.ObjHeader* %542 to %struct.ContainerChunk**
%546 = load %struct.ContainerChunk*, %struct.ContainerChunk** %545, align 8, !tbaa !476
%547 = icmp eq %struct.ContainerChunk* %546, null
br i1 %547, label %566, label %548
; <label>:548: ; preds = %544
br label %549
; <label>:549: ; preds = %549, %548
%550 = phi %struct.ContainerChunk* [ %554, %549 ], [ %546, %548 ]
%551 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %550, i64 1
%552 = bitcast %struct.ContainerChunk* %551 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %552) #0
%553 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %550, i64 0, i32 0
%554 = load %struct.ContainerChunk*, %struct.ContainerChunk** %553, align 8, !tbaa !476
%555 = icmp eq %struct.ContainerChunk* %554, null
br i1 %555, label %556, label %549
; <label>:556: ; preds = %549
%557 = load %struct.ContainerChunk*, %struct.ContainerChunk** %545, align 8, !tbaa !482
%558 = icmp eq %struct.ContainerChunk* %557, null
br i1 %558, label %566, label %559
; <label>:559: ; preds = %556
br label %560
; <label>:560: ; preds = %560, %559
%561 = phi %struct.ContainerChunk* [ %564, %560 ], [ %557, %559 ]
%562 = bitcast %struct.ContainerChunk* %561 to i8*
%563 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %561, i64 0, i32 0
%564 = load %struct.ContainerChunk*, %struct.ContainerChunk** %563, align 8, !tbaa !484
call void @free(i8* %562) #0
%565 = icmp eq %struct.ContainerChunk* %564, null
br i1 %565, label %566, label %560
; <label>:566: ; preds = %560, %556, %544
%567 = bitcast %struct.ObjHeader* %542 to i8*
call void @free(i8* %567) #0
br label %2461
; <label>:568: ; preds = %524, %521
%569 = phi %struct.ObjHeader* [ %522, %521 ], [ %526, %524 ]
%570 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %569, i64 1
%571 = bitcast %struct.ObjHeader* %570 to %struct.ObjHeader**
%572 = load %struct.ObjHeader*, %struct.ObjHeader** %571, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %14, %struct.ObjHeader* %572)
%573 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%574 = load %struct.ObjHeader*, %struct.ObjHeader** %573, align 8, !tbaa !476
%575 = icmp eq %struct.ObjHeader* %574, null
br i1 %575, label %585, label %576
; <label>:576: ; preds = %568
%577 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %574, i64 0, i32 0
%578 = load %struct.TypeInfo*, %struct.TypeInfo** %577, align 8, !tbaa !477
%579 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %574, i64 0, i32 1
%580 = load %struct.ContainerHeader*, %struct.ContainerHeader** %579, align 8, !tbaa !479
%581 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %578, i64 0, i32 0
%582 = load %struct.TypeInfo*, %struct.TypeInfo** %581, align 8, !tbaa !480
%583 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %582, i64 0, i32 5
%584 = load i32, i32* %583, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %584, %struct.ContainerHeader* %580) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %573, align 8, !tbaa !476
br label %585
; <label>:585: ; preds = %576, %568
%586 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%587 = icmp eq %struct.ObjHeader* %586, null
br i1 %587, label %612, label %588
; <label>:588: ; preds = %585
%589 = bitcast %struct.ObjHeader* %586 to %struct.ContainerChunk**
%590 = load %struct.ContainerChunk*, %struct.ContainerChunk** %589, align 8, !tbaa !476
%591 = icmp eq %struct.ContainerChunk* %590, null
br i1 %591, label %610, label %592
; <label>:592: ; preds = %588
br label %593
; <label>:593: ; preds = %593, %592
%594 = phi %struct.ContainerChunk* [ %598, %593 ], [ %590, %592 ]
%595 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %594, i64 1
%596 = bitcast %struct.ContainerChunk* %595 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %596) #0
%597 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %594, i64 0, i32 0
%598 = load %struct.ContainerChunk*, %struct.ContainerChunk** %597, align 8, !tbaa !476
%599 = icmp eq %struct.ContainerChunk* %598, null
br i1 %599, label %600, label %593
; <label>:600: ; preds = %593
%601 = load %struct.ContainerChunk*, %struct.ContainerChunk** %589, align 8, !tbaa !482
%602 = icmp eq %struct.ContainerChunk* %601, null
br i1 %602, label %610, label %603
; <label>:603: ; preds = %600
br label %604
; <label>:604: ; preds = %604, %603
%605 = phi %struct.ContainerChunk* [ %608, %604 ], [ %601, %603 ]
%606 = bitcast %struct.ContainerChunk* %605 to i8*
%607 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %605, i64 0, i32 0
%608 = load %struct.ContainerChunk*, %struct.ContainerChunk** %607, align 8, !tbaa !484
call void @free(i8* %606) #0
%609 = icmp eq %struct.ContainerChunk* %608, null
br i1 %609, label %610, label %604
; <label>:610: ; preds = %604, %600, %588
%611 = bitcast %struct.ObjHeader* %586 to i8*
call void @free(i8* %611) #0
br label %612
; <label>:612: ; preds = %610, %585
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%613 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %572, i64 1
%614 = bitcast %struct.ObjHeader* %613 to i32*
%615 = load i32, i32* %614, align 8, !tbaa !492
%616 = icmp ugt i32 %615, 18
br i1 %616, label %620, label %617
; <label>:617: ; preds = %612
%618 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %619 unwind label %2459
; <label>:619: ; preds = %617
unreachable
; <label>:620: ; preds = %612
%621 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %572, i64 1, i32 1
%622 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %621, i64 18
%623 = bitcast %struct.ContainerHeader** %622 to %struct.ObjHeader**
%624 = load %struct.ObjHeader*, %struct.ObjHeader** %623, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %15, %struct.ObjHeader* %624) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %625, label %627, !dbg !501
; <label>:625: ; preds = %620
%626 = icmp eq %struct.ObjHeader* %624, null, !dbg !501
br i1 %626, label %2411, label %639
; <label>:627: ; preds = %620
%628 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%629 = load %struct.TypeInfo*, %struct.TypeInfo** %628, align 8, !dbg !501
%630 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %629, i64 0, i32 0, !dbg !501
%631 = load %struct.TypeInfo*, %struct.TypeInfo** %630, align 8, !dbg !501
%632 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %631, i64 1, i32 1, i32 0, i64 8, !dbg !501
%633 = bitcast i8* %632 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%634 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %633, align 8, !dbg !501
%635 = invoke i1 %634(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %624)
to label %638 unwind label %636, !dbg !501
; <label>:636: ; preds = %627
%637 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:638: ; preds = %627
br i1 %635, label %2411, label %639
; <label>:639: ; preds = %638, %625
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%640 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%641 = icmp ugt %struct.ObjHeader* %640, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %641, label %686, label %642
; <label>:642: ; preds = %639
%643 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%644 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %643)
to label %686 unwind label %645
; <label>:645: ; preds = %642
%646 = landingpad { i8*, i32 }
cleanup
%647 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%648 = load %struct.ObjHeader*, %struct.ObjHeader** %647, align 8, !tbaa !476
%649 = icmp eq %struct.ObjHeader* %648, null
br i1 %649, label %659, label %650
; <label>:650: ; preds = %645
%651 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %648, i64 0, i32 0
%652 = load %struct.TypeInfo*, %struct.TypeInfo** %651, align 8, !tbaa !477
%653 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %648, i64 0, i32 1
%654 = load %struct.ContainerHeader*, %struct.ContainerHeader** %653, align 8, !tbaa !479
%655 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %652, i64 0, i32 0
%656 = load %struct.TypeInfo*, %struct.TypeInfo** %655, align 8, !tbaa !480
%657 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %656, i64 0, i32 5
%658 = load i32, i32* %657, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %658, %struct.ContainerHeader* %654) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %647, align 8, !tbaa !476
br label %659
; <label>:659: ; preds = %650, %645
%660 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%661 = icmp eq %struct.ObjHeader* %660, null
br i1 %661, label %2461, label %662
; <label>:662: ; preds = %659
%663 = bitcast %struct.ObjHeader* %660 to %struct.ContainerChunk**
%664 = load %struct.ContainerChunk*, %struct.ContainerChunk** %663, align 8, !tbaa !476
%665 = icmp eq %struct.ContainerChunk* %664, null
br i1 %665, label %684, label %666
; <label>:666: ; preds = %662
br label %667
; <label>:667: ; preds = %667, %666
%668 = phi %struct.ContainerChunk* [ %672, %667 ], [ %664, %666 ]
%669 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %668, i64 1
%670 = bitcast %struct.ContainerChunk* %669 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %670) #0
%671 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %668, i64 0, i32 0
%672 = load %struct.ContainerChunk*, %struct.ContainerChunk** %671, align 8, !tbaa !476
%673 = icmp eq %struct.ContainerChunk* %672, null
br i1 %673, label %674, label %667
; <label>:674: ; preds = %667
%675 = load %struct.ContainerChunk*, %struct.ContainerChunk** %663, align 8, !tbaa !482
%676 = icmp eq %struct.ContainerChunk* %675, null
br i1 %676, label %684, label %677
; <label>:677: ; preds = %674
br label %678
; <label>:678: ; preds = %678, %677
%679 = phi %struct.ContainerChunk* [ %682, %678 ], [ %675, %677 ]
%680 = bitcast %struct.ContainerChunk* %679 to i8*
%681 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %679, i64 0, i32 0
%682 = load %struct.ContainerChunk*, %struct.ContainerChunk** %681, align 8, !tbaa !484
call void @free(i8* %680) #0
%683 = icmp eq %struct.ContainerChunk* %682, null
br i1 %683, label %684, label %678
; <label>:684: ; preds = %678, %674, %662
%685 = bitcast %struct.ObjHeader* %660 to i8*
call void @free(i8* %685) #0
br label %2461
; <label>:686: ; preds = %642, %639
%687 = phi %struct.ObjHeader* [ %640, %639 ], [ %644, %642 ]
%688 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %687, i64 1
%689 = bitcast %struct.ObjHeader* %688 to %struct.ObjHeader**
%690 = load %struct.ObjHeader*, %struct.ObjHeader** %689, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %16, %struct.ObjHeader* %690)
%691 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%692 = load %struct.ObjHeader*, %struct.ObjHeader** %691, align 8, !tbaa !476
%693 = icmp eq %struct.ObjHeader* %692, null
br i1 %693, label %703, label %694
; <label>:694: ; preds = %686
%695 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %692, i64 0, i32 0
%696 = load %struct.TypeInfo*, %struct.TypeInfo** %695, align 8, !tbaa !477
%697 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %692, i64 0, i32 1
%698 = load %struct.ContainerHeader*, %struct.ContainerHeader** %697, align 8, !tbaa !479
%699 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %696, i64 0, i32 0
%700 = load %struct.TypeInfo*, %struct.TypeInfo** %699, align 8, !tbaa !480
%701 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %700, i64 0, i32 5
%702 = load i32, i32* %701, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %702, %struct.ContainerHeader* %698) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %691, align 8, !tbaa !476
br label %703
; <label>:703: ; preds = %694, %686
%704 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%705 = icmp eq %struct.ObjHeader* %704, null
br i1 %705, label %730, label %706
; <label>:706: ; preds = %703
%707 = bitcast %struct.ObjHeader* %704 to %struct.ContainerChunk**
%708 = load %struct.ContainerChunk*, %struct.ContainerChunk** %707, align 8, !tbaa !476
%709 = icmp eq %struct.ContainerChunk* %708, null
br i1 %709, label %728, label %710
; <label>:710: ; preds = %706
br label %711
; <label>:711: ; preds = %711, %710
%712 = phi %struct.ContainerChunk* [ %716, %711 ], [ %708, %710 ]
%713 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %712, i64 1
%714 = bitcast %struct.ContainerChunk* %713 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %714) #0
%715 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %712, i64 0, i32 0
%716 = load %struct.ContainerChunk*, %struct.ContainerChunk** %715, align 8, !tbaa !476
%717 = icmp eq %struct.ContainerChunk* %716, null
br i1 %717, label %718, label %711
; <label>:718: ; preds = %711
%719 = load %struct.ContainerChunk*, %struct.ContainerChunk** %707, align 8, !tbaa !482
%720 = icmp eq %struct.ContainerChunk* %719, null
br i1 %720, label %728, label %721
; <label>:721: ; preds = %718
br label %722
; <label>:722: ; preds = %722, %721
%723 = phi %struct.ContainerChunk* [ %726, %722 ], [ %719, %721 ]
%724 = bitcast %struct.ContainerChunk* %723 to i8*
%725 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %723, i64 0, i32 0
%726 = load %struct.ContainerChunk*, %struct.ContainerChunk** %725, align 8, !tbaa !484
call void @free(i8* %724) #0
%727 = icmp eq %struct.ContainerChunk* %726, null
br i1 %727, label %728, label %722
; <label>:728: ; preds = %722, %718, %706
%729 = bitcast %struct.ObjHeader* %704 to i8*
call void @free(i8* %729) #0
br label %730
; <label>:730: ; preds = %728, %703
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%731 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %690, i64 1
%732 = bitcast %struct.ObjHeader* %731 to i32*
%733 = load i32, i32* %732, align 8, !tbaa !492
%734 = icmp ugt i32 %733, 24
br i1 %734, label %738, label %735
; <label>:735: ; preds = %730
%736 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %737 unwind label %2459
; <label>:737: ; preds = %735
unreachable
; <label>:738: ; preds = %730
%739 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %690, i64 1, i32 1
%740 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %739, i64 24
%741 = bitcast %struct.ContainerHeader** %740 to %struct.ObjHeader**
%742 = load %struct.ObjHeader*, %struct.ObjHeader** %741, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %17, %struct.ObjHeader* %742) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %743, label %745, !dbg !501
; <label>:743: ; preds = %738
%744 = icmp eq %struct.ObjHeader* %742, null, !dbg !501
br i1 %744, label %2411, label %757
; <label>:745: ; preds = %738
%746 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%747 = load %struct.TypeInfo*, %struct.TypeInfo** %746, align 8, !dbg !501
%748 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %747, i64 0, i32 0, !dbg !501
%749 = load %struct.TypeInfo*, %struct.TypeInfo** %748, align 8, !dbg !501
%750 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %749, i64 1, i32 1, i32 0, i64 8, !dbg !501
%751 = bitcast i8* %750 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%752 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %751, align 8, !dbg !501
%753 = invoke i1 %752(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %742)
to label %756 unwind label %754, !dbg !501
; <label>:754: ; preds = %745
%755 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:756: ; preds = %745
br i1 %753, label %2411, label %757
; <label>:757: ; preds = %756, %743
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%758 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%759 = icmp ugt %struct.ObjHeader* %758, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %759, label %804, label %760
; <label>:760: ; preds = %757
%761 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%762 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %761)
to label %804 unwind label %763
; <label>:763: ; preds = %760
%764 = landingpad { i8*, i32 }
cleanup
%765 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%766 = load %struct.ObjHeader*, %struct.ObjHeader** %765, align 8, !tbaa !476
%767 = icmp eq %struct.ObjHeader* %766, null
br i1 %767, label %777, label %768
; <label>:768: ; preds = %763
%769 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %766, i64 0, i32 0
%770 = load %struct.TypeInfo*, %struct.TypeInfo** %769, align 8, !tbaa !477
%771 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %766, i64 0, i32 1
%772 = load %struct.ContainerHeader*, %struct.ContainerHeader** %771, align 8, !tbaa !479
%773 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %770, i64 0, i32 0
%774 = load %struct.TypeInfo*, %struct.TypeInfo** %773, align 8, !tbaa !480
%775 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %774, i64 0, i32 5
%776 = load i32, i32* %775, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %776, %struct.ContainerHeader* %772) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %765, align 8, !tbaa !476
br label %777
; <label>:777: ; preds = %768, %763
%778 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%779 = icmp eq %struct.ObjHeader* %778, null
br i1 %779, label %2461, label %780
; <label>:780: ; preds = %777
%781 = bitcast %struct.ObjHeader* %778 to %struct.ContainerChunk**
%782 = load %struct.ContainerChunk*, %struct.ContainerChunk** %781, align 8, !tbaa !476
%783 = icmp eq %struct.ContainerChunk* %782, null
br i1 %783, label %802, label %784
; <label>:784: ; preds = %780
br label %785
; <label>:785: ; preds = %785, %784
%786 = phi %struct.ContainerChunk* [ %790, %785 ], [ %782, %784 ]
%787 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %786, i64 1
%788 = bitcast %struct.ContainerChunk* %787 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %788) #0
%789 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %786, i64 0, i32 0
%790 = load %struct.ContainerChunk*, %struct.ContainerChunk** %789, align 8, !tbaa !476
%791 = icmp eq %struct.ContainerChunk* %790, null
br i1 %791, label %792, label %785
; <label>:792: ; preds = %785
%793 = load %struct.ContainerChunk*, %struct.ContainerChunk** %781, align 8, !tbaa !482
%794 = icmp eq %struct.ContainerChunk* %793, null
br i1 %794, label %802, label %795
; <label>:795: ; preds = %792
br label %796
; <label>:796: ; preds = %796, %795
%797 = phi %struct.ContainerChunk* [ %800, %796 ], [ %793, %795 ]
%798 = bitcast %struct.ContainerChunk* %797 to i8*
%799 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %797, i64 0, i32 0
%800 = load %struct.ContainerChunk*, %struct.ContainerChunk** %799, align 8, !tbaa !484
call void @free(i8* %798) #0
%801 = icmp eq %struct.ContainerChunk* %800, null
br i1 %801, label %802, label %796
; <label>:802: ; preds = %796, %792, %780
%803 = bitcast %struct.ObjHeader* %778 to i8*
call void @free(i8* %803) #0
br label %2461
; <label>:804: ; preds = %760, %757
%805 = phi %struct.ObjHeader* [ %758, %757 ], [ %762, %760 ]
%806 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %805, i64 1
%807 = bitcast %struct.ObjHeader* %806 to %struct.ObjHeader**
%808 = load %struct.ObjHeader*, %struct.ObjHeader** %807, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %18, %struct.ObjHeader* %808)
%809 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%810 = load %struct.ObjHeader*, %struct.ObjHeader** %809, align 8, !tbaa !476
%811 = icmp eq %struct.ObjHeader* %810, null
br i1 %811, label %821, label %812
; <label>:812: ; preds = %804
%813 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %810, i64 0, i32 0
%814 = load %struct.TypeInfo*, %struct.TypeInfo** %813, align 8, !tbaa !477
%815 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %810, i64 0, i32 1
%816 = load %struct.ContainerHeader*, %struct.ContainerHeader** %815, align 8, !tbaa !479
%817 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %814, i64 0, i32 0
%818 = load %struct.TypeInfo*, %struct.TypeInfo** %817, align 8, !tbaa !480
%819 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %818, i64 0, i32 5
%820 = load i32, i32* %819, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %820, %struct.ContainerHeader* %816) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %809, align 8, !tbaa !476
br label %821
; <label>:821: ; preds = %812, %804
%822 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%823 = icmp eq %struct.ObjHeader* %822, null
br i1 %823, label %848, label %824
; <label>:824: ; preds = %821
%825 = bitcast %struct.ObjHeader* %822 to %struct.ContainerChunk**
%826 = load %struct.ContainerChunk*, %struct.ContainerChunk** %825, align 8, !tbaa !476
%827 = icmp eq %struct.ContainerChunk* %826, null
br i1 %827, label %846, label %828
; <label>:828: ; preds = %824
br label %829
; <label>:829: ; preds = %829, %828
%830 = phi %struct.ContainerChunk* [ %834, %829 ], [ %826, %828 ]
%831 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %830, i64 1
%832 = bitcast %struct.ContainerChunk* %831 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %832) #0
%833 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %830, i64 0, i32 0
%834 = load %struct.ContainerChunk*, %struct.ContainerChunk** %833, align 8, !tbaa !476
%835 = icmp eq %struct.ContainerChunk* %834, null
br i1 %835, label %836, label %829
; <label>:836: ; preds = %829
%837 = load %struct.ContainerChunk*, %struct.ContainerChunk** %825, align 8, !tbaa !482
%838 = icmp eq %struct.ContainerChunk* %837, null
br i1 %838, label %846, label %839
; <label>:839: ; preds = %836
br label %840
; <label>:840: ; preds = %840, %839
%841 = phi %struct.ContainerChunk* [ %844, %840 ], [ %837, %839 ]
%842 = bitcast %struct.ContainerChunk* %841 to i8*
%843 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %841, i64 0, i32 0
%844 = load %struct.ContainerChunk*, %struct.ContainerChunk** %843, align 8, !tbaa !484
call void @free(i8* %842) #0
%845 = icmp eq %struct.ContainerChunk* %844, null
br i1 %845, label %846, label %840
; <label>:846: ; preds = %840, %836, %824
%847 = bitcast %struct.ObjHeader* %822 to i8*
call void @free(i8* %847) #0
br label %848
; <label>:848: ; preds = %846, %821
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%849 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %808, i64 1
%850 = bitcast %struct.ObjHeader* %849 to i32*
%851 = load i32, i32* %850, align 8, !tbaa !492
%852 = icmp ugt i32 %851, 29
br i1 %852, label %856, label %853
; <label>:853: ; preds = %848
%854 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %855 unwind label %2459
; <label>:855: ; preds = %853
unreachable
; <label>:856: ; preds = %848
%857 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %808, i64 1, i32 1
%858 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %857, i64 29
%859 = bitcast %struct.ContainerHeader** %858 to %struct.ObjHeader**
%860 = load %struct.ObjHeader*, %struct.ObjHeader** %859, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %19, %struct.ObjHeader* %860) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %861, label %863, !dbg !501
; <label>:861: ; preds = %856
%862 = icmp eq %struct.ObjHeader* %860, null, !dbg !501
br i1 %862, label %2411, label %875
; <label>:863: ; preds = %856
%864 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%865 = load %struct.TypeInfo*, %struct.TypeInfo** %864, align 8, !dbg !501
%866 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %865, i64 0, i32 0, !dbg !501
%867 = load %struct.TypeInfo*, %struct.TypeInfo** %866, align 8, !dbg !501
%868 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %867, i64 1, i32 1, i32 0, i64 8, !dbg !501
%869 = bitcast i8* %868 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%870 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %869, align 8, !dbg !501
%871 = invoke i1 %870(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %860)
to label %874 unwind label %872, !dbg !501
; <label>:872: ; preds = %863
%873 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:874: ; preds = %863
br i1 %871, label %2411, label %875
; <label>:875: ; preds = %874, %861
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%876 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%877 = icmp ugt %struct.ObjHeader* %876, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %877, label %922, label %878
; <label>:878: ; preds = %875
%879 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%880 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %879)
to label %922 unwind label %881
; <label>:881: ; preds = %878
%882 = landingpad { i8*, i32 }
cleanup
%883 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%884 = load %struct.ObjHeader*, %struct.ObjHeader** %883, align 8, !tbaa !476
%885 = icmp eq %struct.ObjHeader* %884, null
br i1 %885, label %895, label %886
; <label>:886: ; preds = %881
%887 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %884, i64 0, i32 0
%888 = load %struct.TypeInfo*, %struct.TypeInfo** %887, align 8, !tbaa !477
%889 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %884, i64 0, i32 1
%890 = load %struct.ContainerHeader*, %struct.ContainerHeader** %889, align 8, !tbaa !479
%891 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %888, i64 0, i32 0
%892 = load %struct.TypeInfo*, %struct.TypeInfo** %891, align 8, !tbaa !480
%893 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %892, i64 0, i32 5
%894 = load i32, i32* %893, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %894, %struct.ContainerHeader* %890) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %883, align 8, !tbaa !476
br label %895
; <label>:895: ; preds = %886, %881
%896 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%897 = icmp eq %struct.ObjHeader* %896, null
br i1 %897, label %2461, label %898
; <label>:898: ; preds = %895
%899 = bitcast %struct.ObjHeader* %896 to %struct.ContainerChunk**
%900 = load %struct.ContainerChunk*, %struct.ContainerChunk** %899, align 8, !tbaa !476
%901 = icmp eq %struct.ContainerChunk* %900, null
br i1 %901, label %920, label %902
; <label>:902: ; preds = %898
br label %903
; <label>:903: ; preds = %903, %902
%904 = phi %struct.ContainerChunk* [ %908, %903 ], [ %900, %902 ]
%905 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %904, i64 1
%906 = bitcast %struct.ContainerChunk* %905 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %906) #0
%907 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %904, i64 0, i32 0
%908 = load %struct.ContainerChunk*, %struct.ContainerChunk** %907, align 8, !tbaa !476
%909 = icmp eq %struct.ContainerChunk* %908, null
br i1 %909, label %910, label %903
; <label>:910: ; preds = %903
%911 = load %struct.ContainerChunk*, %struct.ContainerChunk** %899, align 8, !tbaa !482
%912 = icmp eq %struct.ContainerChunk* %911, null
br i1 %912, label %920, label %913
; <label>:913: ; preds = %910
br label %914
; <label>:914: ; preds = %914, %913
%915 = phi %struct.ContainerChunk* [ %918, %914 ], [ %911, %913 ]
%916 = bitcast %struct.ContainerChunk* %915 to i8*
%917 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %915, i64 0, i32 0
%918 = load %struct.ContainerChunk*, %struct.ContainerChunk** %917, align 8, !tbaa !484
call void @free(i8* %916) #0
%919 = icmp eq %struct.ContainerChunk* %918, null
br i1 %919, label %920, label %914
; <label>:920: ; preds = %914, %910, %898
%921 = bitcast %struct.ObjHeader* %896 to i8*
call void @free(i8* %921) #0
br label %2461
; <label>:922: ; preds = %878, %875
%923 = phi %struct.ObjHeader* [ %876, %875 ], [ %880, %878 ]
%924 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %923, i64 1
%925 = bitcast %struct.ObjHeader* %924 to %struct.ObjHeader**
%926 = load %struct.ObjHeader*, %struct.ObjHeader** %925, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %20, %struct.ObjHeader* %926)
%927 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%928 = load %struct.ObjHeader*, %struct.ObjHeader** %927, align 8, !tbaa !476
%929 = icmp eq %struct.ObjHeader* %928, null
br i1 %929, label %939, label %930
; <label>:930: ; preds = %922
%931 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %928, i64 0, i32 0
%932 = load %struct.TypeInfo*, %struct.TypeInfo** %931, align 8, !tbaa !477
%933 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %928, i64 0, i32 1
%934 = load %struct.ContainerHeader*, %struct.ContainerHeader** %933, align 8, !tbaa !479
%935 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %932, i64 0, i32 0
%936 = load %struct.TypeInfo*, %struct.TypeInfo** %935, align 8, !tbaa !480
%937 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %936, i64 0, i32 5
%938 = load i32, i32* %937, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %938, %struct.ContainerHeader* %934) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %927, align 8, !tbaa !476
br label %939
; <label>:939: ; preds = %930, %922
%940 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%941 = icmp eq %struct.ObjHeader* %940, null
br i1 %941, label %966, label %942
; <label>:942: ; preds = %939
%943 = bitcast %struct.ObjHeader* %940 to %struct.ContainerChunk**
%944 = load %struct.ContainerChunk*, %struct.ContainerChunk** %943, align 8, !tbaa !476
%945 = icmp eq %struct.ContainerChunk* %944, null
br i1 %945, label %964, label %946
; <label>:946: ; preds = %942
br label %947
; <label>:947: ; preds = %947, %946
%948 = phi %struct.ContainerChunk* [ %952, %947 ], [ %944, %946 ]
%949 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %948, i64 1
%950 = bitcast %struct.ContainerChunk* %949 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %950) #0
%951 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %948, i64 0, i32 0
%952 = load %struct.ContainerChunk*, %struct.ContainerChunk** %951, align 8, !tbaa !476
%953 = icmp eq %struct.ContainerChunk* %952, null
br i1 %953, label %954, label %947
; <label>:954: ; preds = %947
%955 = load %struct.ContainerChunk*, %struct.ContainerChunk** %943, align 8, !tbaa !482
%956 = icmp eq %struct.ContainerChunk* %955, null
br i1 %956, label %964, label %957
; <label>:957: ; preds = %954
br label %958
; <label>:958: ; preds = %958, %957
%959 = phi %struct.ContainerChunk* [ %962, %958 ], [ %955, %957 ]
%960 = bitcast %struct.ContainerChunk* %959 to i8*
%961 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %959, i64 0, i32 0
%962 = load %struct.ContainerChunk*, %struct.ContainerChunk** %961, align 8, !tbaa !484
call void @free(i8* %960) #0
%963 = icmp eq %struct.ContainerChunk* %962, null
br i1 %963, label %964, label %958
; <label>:964: ; preds = %958, %954, %942
%965 = bitcast %struct.ObjHeader* %940 to i8*
call void @free(i8* %965) #0
br label %966
; <label>:966: ; preds = %964, %939
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%967 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %926, i64 1
%968 = bitcast %struct.ObjHeader* %967 to i32*
%969 = load i32, i32* %968, align 8, !tbaa !492
%970 = icmp ugt i32 %969, 35
br i1 %970, label %974, label %971
; <label>:971: ; preds = %966
%972 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %973 unwind label %2459
; <label>:973: ; preds = %971
unreachable
; <label>:974: ; preds = %966
%975 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %926, i64 1, i32 1
%976 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %975, i64 35
%977 = bitcast %struct.ContainerHeader** %976 to %struct.ObjHeader**
%978 = load %struct.ObjHeader*, %struct.ObjHeader** %977, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %21, %struct.ObjHeader* %978) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %979, label %981, !dbg !501
; <label>:979: ; preds = %974
%980 = icmp eq %struct.ObjHeader* %978, null, !dbg !501
br i1 %980, label %2411, label %993
; <label>:981: ; preds = %974
%982 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%983 = load %struct.TypeInfo*, %struct.TypeInfo** %982, align 8, !dbg !501
%984 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %983, i64 0, i32 0, !dbg !501
%985 = load %struct.TypeInfo*, %struct.TypeInfo** %984, align 8, !dbg !501
%986 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %985, i64 1, i32 1, i32 0, i64 8, !dbg !501
%987 = bitcast i8* %986 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%988 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %987, align 8, !dbg !501
%989 = invoke i1 %988(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %978)
to label %992 unwind label %990, !dbg !501
; <label>:990: ; preds = %981
%991 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:992: ; preds = %981
br i1 %989, label %2411, label %993
; <label>:993: ; preds = %992, %979
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%994 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%995 = icmp ugt %struct.ObjHeader* %994, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %995, label %1040, label %996
; <label>:996: ; preds = %993
%997 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%998 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %997)
to label %1040 unwind label %999
; <label>:999: ; preds = %996
%1000 = landingpad { i8*, i32 }
cleanup
%1001 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1002 = load %struct.ObjHeader*, %struct.ObjHeader** %1001, align 8, !tbaa !476
%1003 = icmp eq %struct.ObjHeader* %1002, null
br i1 %1003, label %1013, label %1004
; <label>:1004: ; preds = %999
%1005 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1002, i64 0, i32 0
%1006 = load %struct.TypeInfo*, %struct.TypeInfo** %1005, align 8, !tbaa !477
%1007 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1002, i64 0, i32 1
%1008 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1007, align 8, !tbaa !479
%1009 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1006, i64 0, i32 0
%1010 = load %struct.TypeInfo*, %struct.TypeInfo** %1009, align 8, !tbaa !480
%1011 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1010, i64 0, i32 5
%1012 = load i32, i32* %1011, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1012, %struct.ContainerHeader* %1008) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1001, align 8, !tbaa !476
br label %1013
; <label>:1013: ; preds = %1004, %999
%1014 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1015 = icmp eq %struct.ObjHeader* %1014, null
br i1 %1015, label %2461, label %1016
; <label>:1016: ; preds = %1013
%1017 = bitcast %struct.ObjHeader* %1014 to %struct.ContainerChunk**
%1018 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1017, align 8, !tbaa !476
%1019 = icmp eq %struct.ContainerChunk* %1018, null
br i1 %1019, label %1038, label %1020
; <label>:1020: ; preds = %1016
br label %1021
; <label>:1021: ; preds = %1021, %1020
%1022 = phi %struct.ContainerChunk* [ %1026, %1021 ], [ %1018, %1020 ]
%1023 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1022, i64 1
%1024 = bitcast %struct.ContainerChunk* %1023 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1024) #0
%1025 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1022, i64 0, i32 0
%1026 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1025, align 8, !tbaa !476
%1027 = icmp eq %struct.ContainerChunk* %1026, null
br i1 %1027, label %1028, label %1021
; <label>:1028: ; preds = %1021
%1029 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1017, align 8, !tbaa !482
%1030 = icmp eq %struct.ContainerChunk* %1029, null
br i1 %1030, label %1038, label %1031
; <label>:1031: ; preds = %1028
br label %1032
; <label>:1032: ; preds = %1032, %1031
%1033 = phi %struct.ContainerChunk* [ %1036, %1032 ], [ %1029, %1031 ]
%1034 = bitcast %struct.ContainerChunk* %1033 to i8*
%1035 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1033, i64 0, i32 0
%1036 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1035, align 8, !tbaa !484
call void @free(i8* %1034) #0
%1037 = icmp eq %struct.ContainerChunk* %1036, null
br i1 %1037, label %1038, label %1032
; <label>:1038: ; preds = %1032, %1028, %1016
%1039 = bitcast %struct.ObjHeader* %1014 to i8*
call void @free(i8* %1039) #0
br label %2461
; <label>:1040: ; preds = %996, %993
%1041 = phi %struct.ObjHeader* [ %994, %993 ], [ %998, %996 ]
%1042 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1041, i64 1
%1043 = bitcast %struct.ObjHeader* %1042 to %struct.ObjHeader**
%1044 = load %struct.ObjHeader*, %struct.ObjHeader** %1043, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %22, %struct.ObjHeader* %1044)
%1045 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1046 = load %struct.ObjHeader*, %struct.ObjHeader** %1045, align 8, !tbaa !476
%1047 = icmp eq %struct.ObjHeader* %1046, null
br i1 %1047, label %1057, label %1048
; <label>:1048: ; preds = %1040
%1049 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1046, i64 0, i32 0
%1050 = load %struct.TypeInfo*, %struct.TypeInfo** %1049, align 8, !tbaa !477
%1051 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1046, i64 0, i32 1
%1052 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1051, align 8, !tbaa !479
%1053 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1050, i64 0, i32 0
%1054 = load %struct.TypeInfo*, %struct.TypeInfo** %1053, align 8, !tbaa !480
%1055 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1054, i64 0, i32 5
%1056 = load i32, i32* %1055, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1056, %struct.ContainerHeader* %1052) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1045, align 8, !tbaa !476
br label %1057
; <label>:1057: ; preds = %1048, %1040
%1058 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1059 = icmp eq %struct.ObjHeader* %1058, null
br i1 %1059, label %1084, label %1060
; <label>:1060: ; preds = %1057
%1061 = bitcast %struct.ObjHeader* %1058 to %struct.ContainerChunk**
%1062 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1061, align 8, !tbaa !476
%1063 = icmp eq %struct.ContainerChunk* %1062, null
br i1 %1063, label %1082, label %1064
; <label>:1064: ; preds = %1060
br label %1065
; <label>:1065: ; preds = %1065, %1064
%1066 = phi %struct.ContainerChunk* [ %1070, %1065 ], [ %1062, %1064 ]
%1067 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1066, i64 1
%1068 = bitcast %struct.ContainerChunk* %1067 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1068) #0
%1069 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1066, i64 0, i32 0
%1070 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1069, align 8, !tbaa !476
%1071 = icmp eq %struct.ContainerChunk* %1070, null
br i1 %1071, label %1072, label %1065
; <label>:1072: ; preds = %1065
%1073 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1061, align 8, !tbaa !482
%1074 = icmp eq %struct.ContainerChunk* %1073, null
br i1 %1074, label %1082, label %1075
; <label>:1075: ; preds = %1072
br label %1076
; <label>:1076: ; preds = %1076, %1075
%1077 = phi %struct.ContainerChunk* [ %1080, %1076 ], [ %1073, %1075 ]
%1078 = bitcast %struct.ContainerChunk* %1077 to i8*
%1079 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1077, i64 0, i32 0
%1080 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1079, align 8, !tbaa !484
call void @free(i8* %1078) #0
%1081 = icmp eq %struct.ContainerChunk* %1080, null
br i1 %1081, label %1082, label %1076
; <label>:1082: ; preds = %1076, %1072, %1060
%1083 = bitcast %struct.ObjHeader* %1058 to i8*
call void @free(i8* %1083) #0
br label %1084
; <label>:1084: ; preds = %1082, %1057
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%1085 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1044, i64 1
%1086 = bitcast %struct.ObjHeader* %1085 to i32*
%1087 = load i32, i32* %1086, align 8, !tbaa !492
%1088 = icmp ugt i32 %1087, 40
br i1 %1088, label %1092, label %1089
; <label>:1089: ; preds = %1084
%1090 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %1091 unwind label %2459
; <label>:1091: ; preds = %1089
unreachable
; <label>:1092: ; preds = %1084
%1093 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1044, i64 1, i32 1
%1094 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %1093, i64 40
%1095 = bitcast %struct.ContainerHeader** %1094 to %struct.ObjHeader**
%1096 = load %struct.ObjHeader*, %struct.ObjHeader** %1095, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %23, %struct.ObjHeader* %1096) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %1097, label %1099, !dbg !501
; <label>:1097: ; preds = %1092
%1098 = icmp eq %struct.ObjHeader* %1096, null, !dbg !501
br i1 %1098, label %2411, label %1111
; <label>:1099: ; preds = %1092
%1100 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%1101 = load %struct.TypeInfo*, %struct.TypeInfo** %1100, align 8, !dbg !501
%1102 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %1101, i64 0, i32 0, !dbg !501
%1103 = load %struct.TypeInfo*, %struct.TypeInfo** %1102, align 8, !dbg !501
%1104 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1103, i64 1, i32 1, i32 0, i64 8, !dbg !501
%1105 = bitcast i8* %1104 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%1106 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %1105, align 8, !dbg !501
%1107 = invoke i1 %1106(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %1096)
to label %1110 unwind label %1108, !dbg !501
; <label>:1108: ; preds = %1099
%1109 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:1110: ; preds = %1099
br i1 %1107, label %2411, label %1111
; <label>:1111: ; preds = %1110, %1097
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%1112 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%1113 = icmp ugt %struct.ObjHeader* %1112, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %1113, label %1158, label %1114
; <label>:1114: ; preds = %1111
%1115 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1116 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %1115)
to label %1158 unwind label %1117
; <label>:1117: ; preds = %1114
%1118 = landingpad { i8*, i32 }
cleanup
%1119 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1120 = load %struct.ObjHeader*, %struct.ObjHeader** %1119, align 8, !tbaa !476
%1121 = icmp eq %struct.ObjHeader* %1120, null
br i1 %1121, label %1131, label %1122
; <label>:1122: ; preds = %1117
%1123 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1120, i64 0, i32 0
%1124 = load %struct.TypeInfo*, %struct.TypeInfo** %1123, align 8, !tbaa !477
%1125 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1120, i64 0, i32 1
%1126 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1125, align 8, !tbaa !479
%1127 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1124, i64 0, i32 0
%1128 = load %struct.TypeInfo*, %struct.TypeInfo** %1127, align 8, !tbaa !480
%1129 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1128, i64 0, i32 5
%1130 = load i32, i32* %1129, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1130, %struct.ContainerHeader* %1126) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1119, align 8, !tbaa !476
br label %1131
; <label>:1131: ; preds = %1122, %1117
%1132 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1133 = icmp eq %struct.ObjHeader* %1132, null
br i1 %1133, label %2461, label %1134
; <label>:1134: ; preds = %1131
%1135 = bitcast %struct.ObjHeader* %1132 to %struct.ContainerChunk**
%1136 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1135, align 8, !tbaa !476
%1137 = icmp eq %struct.ContainerChunk* %1136, null
br i1 %1137, label %1156, label %1138
; <label>:1138: ; preds = %1134
br label %1139
; <label>:1139: ; preds = %1139, %1138
%1140 = phi %struct.ContainerChunk* [ %1144, %1139 ], [ %1136, %1138 ]
%1141 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1140, i64 1
%1142 = bitcast %struct.ContainerChunk* %1141 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1142) #0
%1143 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1140, i64 0, i32 0
%1144 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1143, align 8, !tbaa !476
%1145 = icmp eq %struct.ContainerChunk* %1144, null
br i1 %1145, label %1146, label %1139
; <label>:1146: ; preds = %1139
%1147 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1135, align 8, !tbaa !482
%1148 = icmp eq %struct.ContainerChunk* %1147, null
br i1 %1148, label %1156, label %1149
; <label>:1149: ; preds = %1146
br label %1150
; <label>:1150: ; preds = %1150, %1149
%1151 = phi %struct.ContainerChunk* [ %1154, %1150 ], [ %1147, %1149 ]
%1152 = bitcast %struct.ContainerChunk* %1151 to i8*
%1153 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1151, i64 0, i32 0
%1154 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1153, align 8, !tbaa !484
call void @free(i8* %1152) #0
%1155 = icmp eq %struct.ContainerChunk* %1154, null
br i1 %1155, label %1156, label %1150
; <label>:1156: ; preds = %1150, %1146, %1134
%1157 = bitcast %struct.ObjHeader* %1132 to i8*
call void @free(i8* %1157) #0
br label %2461
; <label>:1158: ; preds = %1114, %1111
%1159 = phi %struct.ObjHeader* [ %1112, %1111 ], [ %1116, %1114 ]
%1160 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1159, i64 1
%1161 = bitcast %struct.ObjHeader* %1160 to %struct.ObjHeader**
%1162 = load %struct.ObjHeader*, %struct.ObjHeader** %1161, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %24, %struct.ObjHeader* %1162)
%1163 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1164 = load %struct.ObjHeader*, %struct.ObjHeader** %1163, align 8, !tbaa !476
%1165 = icmp eq %struct.ObjHeader* %1164, null
br i1 %1165, label %1175, label %1166
; <label>:1166: ; preds = %1158
%1167 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1164, i64 0, i32 0
%1168 = load %struct.TypeInfo*, %struct.TypeInfo** %1167, align 8, !tbaa !477
%1169 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1164, i64 0, i32 1
%1170 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1169, align 8, !tbaa !479
%1171 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1168, i64 0, i32 0
%1172 = load %struct.TypeInfo*, %struct.TypeInfo** %1171, align 8, !tbaa !480
%1173 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1172, i64 0, i32 5
%1174 = load i32, i32* %1173, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1174, %struct.ContainerHeader* %1170) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1163, align 8, !tbaa !476
br label %1175
; <label>:1175: ; preds = %1166, %1158
%1176 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1177 = icmp eq %struct.ObjHeader* %1176, null
br i1 %1177, label %1202, label %1178
; <label>:1178: ; preds = %1175
%1179 = bitcast %struct.ObjHeader* %1176 to %struct.ContainerChunk**
%1180 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1179, align 8, !tbaa !476
%1181 = icmp eq %struct.ContainerChunk* %1180, null
br i1 %1181, label %1200, label %1182
; <label>:1182: ; preds = %1178
br label %1183
; <label>:1183: ; preds = %1183, %1182
%1184 = phi %struct.ContainerChunk* [ %1188, %1183 ], [ %1180, %1182 ]
%1185 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1184, i64 1
%1186 = bitcast %struct.ContainerChunk* %1185 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1186) #0
%1187 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1184, i64 0, i32 0
%1188 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1187, align 8, !tbaa !476
%1189 = icmp eq %struct.ContainerChunk* %1188, null
br i1 %1189, label %1190, label %1183
; <label>:1190: ; preds = %1183
%1191 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1179, align 8, !tbaa !482
%1192 = icmp eq %struct.ContainerChunk* %1191, null
br i1 %1192, label %1200, label %1193
; <label>:1193: ; preds = %1190
br label %1194
; <label>:1194: ; preds = %1194, %1193
%1195 = phi %struct.ContainerChunk* [ %1198, %1194 ], [ %1191, %1193 ]
%1196 = bitcast %struct.ContainerChunk* %1195 to i8*
%1197 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1195, i64 0, i32 0
%1198 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1197, align 8, !tbaa !484
call void @free(i8* %1196) #0
%1199 = icmp eq %struct.ContainerChunk* %1198, null
br i1 %1199, label %1200, label %1194
; <label>:1200: ; preds = %1194, %1190, %1178
%1201 = bitcast %struct.ObjHeader* %1176 to i8*
call void @free(i8* %1201) #0
br label %1202
; <label>:1202: ; preds = %1200, %1175
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%1203 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1162, i64 1
%1204 = bitcast %struct.ObjHeader* %1203 to i32*
%1205 = load i32, i32* %1204, align 8, !tbaa !492
%1206 = icmp ugt i32 %1205, 46
br i1 %1206, label %1210, label %1207
; <label>:1207: ; preds = %1202
%1208 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %1209 unwind label %2459
; <label>:1209: ; preds = %1207
unreachable
; <label>:1210: ; preds = %1202
%1211 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1162, i64 1, i32 1
%1212 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %1211, i64 46
%1213 = bitcast %struct.ContainerHeader** %1212 to %struct.ObjHeader**
%1214 = load %struct.ObjHeader*, %struct.ObjHeader** %1213, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %25, %struct.ObjHeader* %1214) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %1215, label %1217, !dbg !501
; <label>:1215: ; preds = %1210
%1216 = icmp eq %struct.ObjHeader* %1214, null, !dbg !501
br i1 %1216, label %2411, label %1229
; <label>:1217: ; preds = %1210
%1218 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%1219 = load %struct.TypeInfo*, %struct.TypeInfo** %1218, align 8, !dbg !501
%1220 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %1219, i64 0, i32 0, !dbg !501
%1221 = load %struct.TypeInfo*, %struct.TypeInfo** %1220, align 8, !dbg !501
%1222 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1221, i64 1, i32 1, i32 0, i64 8, !dbg !501
%1223 = bitcast i8* %1222 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%1224 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %1223, align 8, !dbg !501
%1225 = invoke i1 %1224(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %1214)
to label %1228 unwind label %1226, !dbg !501
; <label>:1226: ; preds = %1217
%1227 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:1228: ; preds = %1217
br i1 %1225, label %2411, label %1229
; <label>:1229: ; preds = %1228, %1215
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%1230 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%1231 = icmp ugt %struct.ObjHeader* %1230, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %1231, label %1276, label %1232
; <label>:1232: ; preds = %1229
%1233 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1234 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %1233)
to label %1276 unwind label %1235
; <label>:1235: ; preds = %1232
%1236 = landingpad { i8*, i32 }
cleanup
%1237 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1238 = load %struct.ObjHeader*, %struct.ObjHeader** %1237, align 8, !tbaa !476
%1239 = icmp eq %struct.ObjHeader* %1238, null
br i1 %1239, label %1249, label %1240
; <label>:1240: ; preds = %1235
%1241 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1238, i64 0, i32 0
%1242 = load %struct.TypeInfo*, %struct.TypeInfo** %1241, align 8, !tbaa !477
%1243 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1238, i64 0, i32 1
%1244 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1243, align 8, !tbaa !479
%1245 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1242, i64 0, i32 0
%1246 = load %struct.TypeInfo*, %struct.TypeInfo** %1245, align 8, !tbaa !480
%1247 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1246, i64 0, i32 5
%1248 = load i32, i32* %1247, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1248, %struct.ContainerHeader* %1244) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1237, align 8, !tbaa !476
br label %1249
; <label>:1249: ; preds = %1240, %1235
%1250 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1251 = icmp eq %struct.ObjHeader* %1250, null
br i1 %1251, label %2461, label %1252
; <label>:1252: ; preds = %1249
%1253 = bitcast %struct.ObjHeader* %1250 to %struct.ContainerChunk**
%1254 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1253, align 8, !tbaa !476
%1255 = icmp eq %struct.ContainerChunk* %1254, null
br i1 %1255, label %1274, label %1256
; <label>:1256: ; preds = %1252
br label %1257
; <label>:1257: ; preds = %1257, %1256
%1258 = phi %struct.ContainerChunk* [ %1262, %1257 ], [ %1254, %1256 ]
%1259 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1258, i64 1
%1260 = bitcast %struct.ContainerChunk* %1259 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1260) #0
%1261 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1258, i64 0, i32 0
%1262 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1261, align 8, !tbaa !476
%1263 = icmp eq %struct.ContainerChunk* %1262, null
br i1 %1263, label %1264, label %1257
; <label>:1264: ; preds = %1257
%1265 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1253, align 8, !tbaa !482
%1266 = icmp eq %struct.ContainerChunk* %1265, null
br i1 %1266, label %1274, label %1267
; <label>:1267: ; preds = %1264
br label %1268
; <label>:1268: ; preds = %1268, %1267
%1269 = phi %struct.ContainerChunk* [ %1272, %1268 ], [ %1265, %1267 ]
%1270 = bitcast %struct.ContainerChunk* %1269 to i8*
%1271 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1269, i64 0, i32 0
%1272 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1271, align 8, !tbaa !484
call void @free(i8* %1270) #0
%1273 = icmp eq %struct.ContainerChunk* %1272, null
br i1 %1273, label %1274, label %1268
; <label>:1274: ; preds = %1268, %1264, %1252
%1275 = bitcast %struct.ObjHeader* %1250 to i8*
call void @free(i8* %1275) #0
br label %2461
; <label>:1276: ; preds = %1232, %1229
%1277 = phi %struct.ObjHeader* [ %1230, %1229 ], [ %1234, %1232 ]
%1278 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1277, i64 1
%1279 = bitcast %struct.ObjHeader* %1278 to %struct.ObjHeader**
%1280 = load %struct.ObjHeader*, %struct.ObjHeader** %1279, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %26, %struct.ObjHeader* %1280)
%1281 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1282 = load %struct.ObjHeader*, %struct.ObjHeader** %1281, align 8, !tbaa !476
%1283 = icmp eq %struct.ObjHeader* %1282, null
br i1 %1283, label %1293, label %1284
; <label>:1284: ; preds = %1276
%1285 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1282, i64 0, i32 0
%1286 = load %struct.TypeInfo*, %struct.TypeInfo** %1285, align 8, !tbaa !477
%1287 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1282, i64 0, i32 1
%1288 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1287, align 8, !tbaa !479
%1289 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1286, i64 0, i32 0
%1290 = load %struct.TypeInfo*, %struct.TypeInfo** %1289, align 8, !tbaa !480
%1291 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1290, i64 0, i32 5
%1292 = load i32, i32* %1291, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1292, %struct.ContainerHeader* %1288) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1281, align 8, !tbaa !476
br label %1293
; <label>:1293: ; preds = %1284, %1276
%1294 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1295 = icmp eq %struct.ObjHeader* %1294, null
br i1 %1295, label %1320, label %1296
; <label>:1296: ; preds = %1293
%1297 = bitcast %struct.ObjHeader* %1294 to %struct.ContainerChunk**
%1298 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1297, align 8, !tbaa !476
%1299 = icmp eq %struct.ContainerChunk* %1298, null
br i1 %1299, label %1318, label %1300
; <label>:1300: ; preds = %1296
br label %1301
; <label>:1301: ; preds = %1301, %1300
%1302 = phi %struct.ContainerChunk* [ %1306, %1301 ], [ %1298, %1300 ]
%1303 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1302, i64 1
%1304 = bitcast %struct.ContainerChunk* %1303 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1304) #0
%1305 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1302, i64 0, i32 0
%1306 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1305, align 8, !tbaa !476
%1307 = icmp eq %struct.ContainerChunk* %1306, null
br i1 %1307, label %1308, label %1301
; <label>:1308: ; preds = %1301
%1309 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1297, align 8, !tbaa !482
%1310 = icmp eq %struct.ContainerChunk* %1309, null
br i1 %1310, label %1318, label %1311
; <label>:1311: ; preds = %1308
br label %1312
; <label>:1312: ; preds = %1312, %1311
%1313 = phi %struct.ContainerChunk* [ %1316, %1312 ], [ %1309, %1311 ]
%1314 = bitcast %struct.ContainerChunk* %1313 to i8*
%1315 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1313, i64 0, i32 0
%1316 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1315, align 8, !tbaa !484
call void @free(i8* %1314) #0
%1317 = icmp eq %struct.ContainerChunk* %1316, null
br i1 %1317, label %1318, label %1312
; <label>:1318: ; preds = %1312, %1308, %1296
%1319 = bitcast %struct.ObjHeader* %1294 to i8*
call void @free(i8* %1319) #0
br label %1320
; <label>:1320: ; preds = %1318, %1293
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%1321 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1280, i64 1
%1322 = bitcast %struct.ObjHeader* %1321 to i32*
%1323 = load i32, i32* %1322, align 8, !tbaa !492
%1324 = icmp ugt i32 %1323, 51
br i1 %1324, label %1328, label %1325
; <label>:1325: ; preds = %1320
%1326 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %1327 unwind label %2459
; <label>:1327: ; preds = %1325
unreachable
; <label>:1328: ; preds = %1320
%1329 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1280, i64 1, i32 1
%1330 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %1329, i64 51
%1331 = bitcast %struct.ContainerHeader** %1330 to %struct.ObjHeader**
%1332 = load %struct.ObjHeader*, %struct.ObjHeader** %1331, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %27, %struct.ObjHeader* %1332) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %1333, label %1335, !dbg !501
; <label>:1333: ; preds = %1328
%1334 = icmp eq %struct.ObjHeader* %1332, null, !dbg !501
br i1 %1334, label %2411, label %1347
; <label>:1335: ; preds = %1328
%1336 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%1337 = load %struct.TypeInfo*, %struct.TypeInfo** %1336, align 8, !dbg !501
%1338 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %1337, i64 0, i32 0, !dbg !501
%1339 = load %struct.TypeInfo*, %struct.TypeInfo** %1338, align 8, !dbg !501
%1340 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1339, i64 1, i32 1, i32 0, i64 8, !dbg !501
%1341 = bitcast i8* %1340 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%1342 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %1341, align 8, !dbg !501
%1343 = invoke i1 %1342(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %1332)
to label %1346 unwind label %1344, !dbg !501
; <label>:1344: ; preds = %1335
%1345 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:1346: ; preds = %1335
br i1 %1343, label %2411, label %1347
; <label>:1347: ; preds = %1346, %1333
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%1348 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%1349 = icmp ugt %struct.ObjHeader* %1348, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %1349, label %1394, label %1350
; <label>:1350: ; preds = %1347
%1351 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1352 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %1351)
to label %1394 unwind label %1353
; <label>:1353: ; preds = %1350
%1354 = landingpad { i8*, i32 }
cleanup
%1355 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1356 = load %struct.ObjHeader*, %struct.ObjHeader** %1355, align 8, !tbaa !476
%1357 = icmp eq %struct.ObjHeader* %1356, null
br i1 %1357, label %1367, label %1358
; <label>:1358: ; preds = %1353
%1359 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1356, i64 0, i32 0
%1360 = load %struct.TypeInfo*, %struct.TypeInfo** %1359, align 8, !tbaa !477
%1361 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1356, i64 0, i32 1
%1362 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1361, align 8, !tbaa !479
%1363 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1360, i64 0, i32 0
%1364 = load %struct.TypeInfo*, %struct.TypeInfo** %1363, align 8, !tbaa !480
%1365 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1364, i64 0, i32 5
%1366 = load i32, i32* %1365, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1366, %struct.ContainerHeader* %1362) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1355, align 8, !tbaa !476
br label %1367
; <label>:1367: ; preds = %1358, %1353
%1368 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1369 = icmp eq %struct.ObjHeader* %1368, null
br i1 %1369, label %2461, label %1370
; <label>:1370: ; preds = %1367
%1371 = bitcast %struct.ObjHeader* %1368 to %struct.ContainerChunk**
%1372 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1371, align 8, !tbaa !476
%1373 = icmp eq %struct.ContainerChunk* %1372, null
br i1 %1373, label %1392, label %1374
; <label>:1374: ; preds = %1370
br label %1375
; <label>:1375: ; preds = %1375, %1374
%1376 = phi %struct.ContainerChunk* [ %1380, %1375 ], [ %1372, %1374 ]
%1377 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1376, i64 1
%1378 = bitcast %struct.ContainerChunk* %1377 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1378) #0
%1379 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1376, i64 0, i32 0
%1380 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1379, align 8, !tbaa !476
%1381 = icmp eq %struct.ContainerChunk* %1380, null
br i1 %1381, label %1382, label %1375
; <label>:1382: ; preds = %1375
%1383 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1371, align 8, !tbaa !482
%1384 = icmp eq %struct.ContainerChunk* %1383, null
br i1 %1384, label %1392, label %1385
; <label>:1385: ; preds = %1382
br label %1386
; <label>:1386: ; preds = %1386, %1385
%1387 = phi %struct.ContainerChunk* [ %1390, %1386 ], [ %1383, %1385 ]
%1388 = bitcast %struct.ContainerChunk* %1387 to i8*
%1389 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1387, i64 0, i32 0
%1390 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1389, align 8, !tbaa !484
call void @free(i8* %1388) #0
%1391 = icmp eq %struct.ContainerChunk* %1390, null
br i1 %1391, label %1392, label %1386
; <label>:1392: ; preds = %1386, %1382, %1370
%1393 = bitcast %struct.ObjHeader* %1368 to i8*
call void @free(i8* %1393) #0
br label %2461
; <label>:1394: ; preds = %1350, %1347
%1395 = phi %struct.ObjHeader* [ %1348, %1347 ], [ %1352, %1350 ]
%1396 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1395, i64 1
%1397 = bitcast %struct.ObjHeader* %1396 to %struct.ObjHeader**
%1398 = load %struct.ObjHeader*, %struct.ObjHeader** %1397, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %28, %struct.ObjHeader* %1398)
%1399 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1400 = load %struct.ObjHeader*, %struct.ObjHeader** %1399, align 8, !tbaa !476
%1401 = icmp eq %struct.ObjHeader* %1400, null
br i1 %1401, label %1411, label %1402
; <label>:1402: ; preds = %1394
%1403 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1400, i64 0, i32 0
%1404 = load %struct.TypeInfo*, %struct.TypeInfo** %1403, align 8, !tbaa !477
%1405 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1400, i64 0, i32 1
%1406 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1405, align 8, !tbaa !479
%1407 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1404, i64 0, i32 0
%1408 = load %struct.TypeInfo*, %struct.TypeInfo** %1407, align 8, !tbaa !480
%1409 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1408, i64 0, i32 5
%1410 = load i32, i32* %1409, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1410, %struct.ContainerHeader* %1406) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1399, align 8, !tbaa !476
br label %1411
; <label>:1411: ; preds = %1402, %1394
%1412 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1413 = icmp eq %struct.ObjHeader* %1412, null
br i1 %1413, label %1438, label %1414
; <label>:1414: ; preds = %1411
%1415 = bitcast %struct.ObjHeader* %1412 to %struct.ContainerChunk**
%1416 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1415, align 8, !tbaa !476
%1417 = icmp eq %struct.ContainerChunk* %1416, null
br i1 %1417, label %1436, label %1418
; <label>:1418: ; preds = %1414
br label %1419
; <label>:1419: ; preds = %1419, %1418
%1420 = phi %struct.ContainerChunk* [ %1424, %1419 ], [ %1416, %1418 ]
%1421 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1420, i64 1
%1422 = bitcast %struct.ContainerChunk* %1421 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1422) #0
%1423 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1420, i64 0, i32 0
%1424 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1423, align 8, !tbaa !476
%1425 = icmp eq %struct.ContainerChunk* %1424, null
br i1 %1425, label %1426, label %1419
; <label>:1426: ; preds = %1419
%1427 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1415, align 8, !tbaa !482
%1428 = icmp eq %struct.ContainerChunk* %1427, null
br i1 %1428, label %1436, label %1429
; <label>:1429: ; preds = %1426
br label %1430
; <label>:1430: ; preds = %1430, %1429
%1431 = phi %struct.ContainerChunk* [ %1434, %1430 ], [ %1427, %1429 ]
%1432 = bitcast %struct.ContainerChunk* %1431 to i8*
%1433 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1431, i64 0, i32 0
%1434 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1433, align 8, !tbaa !484
call void @free(i8* %1432) #0
%1435 = icmp eq %struct.ContainerChunk* %1434, null
br i1 %1435, label %1436, label %1430
; <label>:1436: ; preds = %1430, %1426, %1414
%1437 = bitcast %struct.ObjHeader* %1412 to i8*
call void @free(i8* %1437) #0
br label %1438
; <label>:1438: ; preds = %1436, %1411
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%1439 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1398, i64 1
%1440 = bitcast %struct.ObjHeader* %1439 to i32*
%1441 = load i32, i32* %1440, align 8, !tbaa !492
%1442 = icmp ugt i32 %1441, 57
br i1 %1442, label %1446, label %1443
; <label>:1443: ; preds = %1438
%1444 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %1445 unwind label %2459
; <label>:1445: ; preds = %1443
unreachable
; <label>:1446: ; preds = %1438
%1447 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1398, i64 1, i32 1
%1448 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %1447, i64 57
%1449 = bitcast %struct.ContainerHeader** %1448 to %struct.ObjHeader**
%1450 = load %struct.ObjHeader*, %struct.ObjHeader** %1449, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %29, %struct.ObjHeader* %1450) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %1451, label %1453, !dbg !501
; <label>:1451: ; preds = %1446
%1452 = icmp eq %struct.ObjHeader* %1450, null, !dbg !501
br i1 %1452, label %2411, label %1465
; <label>:1453: ; preds = %1446
%1454 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%1455 = load %struct.TypeInfo*, %struct.TypeInfo** %1454, align 8, !dbg !501
%1456 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %1455, i64 0, i32 0, !dbg !501
%1457 = load %struct.TypeInfo*, %struct.TypeInfo** %1456, align 8, !dbg !501
%1458 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1457, i64 1, i32 1, i32 0, i64 8, !dbg !501
%1459 = bitcast i8* %1458 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%1460 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %1459, align 8, !dbg !501
%1461 = invoke i1 %1460(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %1450)
to label %1464 unwind label %1462, !dbg !501
; <label>:1462: ; preds = %1453
%1463 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:1464: ; preds = %1453
br i1 %1461, label %2411, label %1465
; <label>:1465: ; preds = %1464, %1451
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%1466 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%1467 = icmp ugt %struct.ObjHeader* %1466, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %1467, label %1512, label %1468
; <label>:1468: ; preds = %1465
%1469 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1470 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %1469)
to label %1512 unwind label %1471
; <label>:1471: ; preds = %1468
%1472 = landingpad { i8*, i32 }
cleanup
%1473 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1474 = load %struct.ObjHeader*, %struct.ObjHeader** %1473, align 8, !tbaa !476
%1475 = icmp eq %struct.ObjHeader* %1474, null
br i1 %1475, label %1485, label %1476
; <label>:1476: ; preds = %1471
%1477 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1474, i64 0, i32 0
%1478 = load %struct.TypeInfo*, %struct.TypeInfo** %1477, align 8, !tbaa !477
%1479 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1474, i64 0, i32 1
%1480 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1479, align 8, !tbaa !479
%1481 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1478, i64 0, i32 0
%1482 = load %struct.TypeInfo*, %struct.TypeInfo** %1481, align 8, !tbaa !480
%1483 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1482, i64 0, i32 5
%1484 = load i32, i32* %1483, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1484, %struct.ContainerHeader* %1480) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1473, align 8, !tbaa !476
br label %1485
; <label>:1485: ; preds = %1476, %1471
%1486 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1487 = icmp eq %struct.ObjHeader* %1486, null
br i1 %1487, label %2461, label %1488
; <label>:1488: ; preds = %1485
%1489 = bitcast %struct.ObjHeader* %1486 to %struct.ContainerChunk**
%1490 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1489, align 8, !tbaa !476
%1491 = icmp eq %struct.ContainerChunk* %1490, null
br i1 %1491, label %1510, label %1492
; <label>:1492: ; preds = %1488
br label %1493
; <label>:1493: ; preds = %1493, %1492
%1494 = phi %struct.ContainerChunk* [ %1498, %1493 ], [ %1490, %1492 ]
%1495 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1494, i64 1
%1496 = bitcast %struct.ContainerChunk* %1495 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1496) #0
%1497 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1494, i64 0, i32 0
%1498 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1497, align 8, !tbaa !476
%1499 = icmp eq %struct.ContainerChunk* %1498, null
br i1 %1499, label %1500, label %1493
; <label>:1500: ; preds = %1493
%1501 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1489, align 8, !tbaa !482
%1502 = icmp eq %struct.ContainerChunk* %1501, null
br i1 %1502, label %1510, label %1503
; <label>:1503: ; preds = %1500
br label %1504
; <label>:1504: ; preds = %1504, %1503
%1505 = phi %struct.ContainerChunk* [ %1508, %1504 ], [ %1501, %1503 ]
%1506 = bitcast %struct.ContainerChunk* %1505 to i8*
%1507 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1505, i64 0, i32 0
%1508 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1507, align 8, !tbaa !484
call void @free(i8* %1506) #0
%1509 = icmp eq %struct.ContainerChunk* %1508, null
br i1 %1509, label %1510, label %1504
; <label>:1510: ; preds = %1504, %1500, %1488
%1511 = bitcast %struct.ObjHeader* %1486 to i8*
call void @free(i8* %1511) #0
br label %2461
; <label>:1512: ; preds = %1468, %1465
%1513 = phi %struct.ObjHeader* [ %1466, %1465 ], [ %1470, %1468 ]
%1514 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1513, i64 1
%1515 = bitcast %struct.ObjHeader* %1514 to %struct.ObjHeader**
%1516 = load %struct.ObjHeader*, %struct.ObjHeader** %1515, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %30, %struct.ObjHeader* %1516)
%1517 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1518 = load %struct.ObjHeader*, %struct.ObjHeader** %1517, align 8, !tbaa !476
%1519 = icmp eq %struct.ObjHeader* %1518, null
br i1 %1519, label %1529, label %1520
; <label>:1520: ; preds = %1512
%1521 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1518, i64 0, i32 0
%1522 = load %struct.TypeInfo*, %struct.TypeInfo** %1521, align 8, !tbaa !477
%1523 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1518, i64 0, i32 1
%1524 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1523, align 8, !tbaa !479
%1525 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1522, i64 0, i32 0
%1526 = load %struct.TypeInfo*, %struct.TypeInfo** %1525, align 8, !tbaa !480
%1527 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1526, i64 0, i32 5
%1528 = load i32, i32* %1527, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1528, %struct.ContainerHeader* %1524) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1517, align 8, !tbaa !476
br label %1529
; <label>:1529: ; preds = %1520, %1512
%1530 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1531 = icmp eq %struct.ObjHeader* %1530, null
br i1 %1531, label %1556, label %1532
; <label>:1532: ; preds = %1529
%1533 = bitcast %struct.ObjHeader* %1530 to %struct.ContainerChunk**
%1534 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1533, align 8, !tbaa !476
%1535 = icmp eq %struct.ContainerChunk* %1534, null
br i1 %1535, label %1554, label %1536
; <label>:1536: ; preds = %1532
br label %1537
; <label>:1537: ; preds = %1537, %1536
%1538 = phi %struct.ContainerChunk* [ %1542, %1537 ], [ %1534, %1536 ]
%1539 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1538, i64 1
%1540 = bitcast %struct.ContainerChunk* %1539 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1540) #0
%1541 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1538, i64 0, i32 0
%1542 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1541, align 8, !tbaa !476
%1543 = icmp eq %struct.ContainerChunk* %1542, null
br i1 %1543, label %1544, label %1537
; <label>:1544: ; preds = %1537
%1545 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1533, align 8, !tbaa !482
%1546 = icmp eq %struct.ContainerChunk* %1545, null
br i1 %1546, label %1554, label %1547
; <label>:1547: ; preds = %1544
br label %1548
; <label>:1548: ; preds = %1548, %1547
%1549 = phi %struct.ContainerChunk* [ %1552, %1548 ], [ %1545, %1547 ]
%1550 = bitcast %struct.ContainerChunk* %1549 to i8*
%1551 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1549, i64 0, i32 0
%1552 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1551, align 8, !tbaa !484
call void @free(i8* %1550) #0
%1553 = icmp eq %struct.ContainerChunk* %1552, null
br i1 %1553, label %1554, label %1548
; <label>:1554: ; preds = %1548, %1544, %1532
%1555 = bitcast %struct.ObjHeader* %1530 to i8*
call void @free(i8* %1555) #0
br label %1556
; <label>:1556: ; preds = %1554, %1529
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%1557 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1516, i64 1
%1558 = bitcast %struct.ObjHeader* %1557 to i32*
%1559 = load i32, i32* %1558, align 8, !tbaa !492
%1560 = icmp ugt i32 %1559, 62
br i1 %1560, label %1564, label %1561
; <label>:1561: ; preds = %1556
%1562 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %1563 unwind label %2459
; <label>:1563: ; preds = %1561
unreachable
; <label>:1564: ; preds = %1556
%1565 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1516, i64 1, i32 1
%1566 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %1565, i64 62
%1567 = bitcast %struct.ContainerHeader** %1566 to %struct.ObjHeader**
%1568 = load %struct.ObjHeader*, %struct.ObjHeader** %1567, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %31, %struct.ObjHeader* %1568) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %1569, label %1571, !dbg !501
; <label>:1569: ; preds = %1564
%1570 = icmp eq %struct.ObjHeader* %1568, null, !dbg !501
br i1 %1570, label %2411, label %1583
; <label>:1571: ; preds = %1564
%1572 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%1573 = load %struct.TypeInfo*, %struct.TypeInfo** %1572, align 8, !dbg !501
%1574 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %1573, i64 0, i32 0, !dbg !501
%1575 = load %struct.TypeInfo*, %struct.TypeInfo** %1574, align 8, !dbg !501
%1576 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1575, i64 1, i32 1, i32 0, i64 8, !dbg !501
%1577 = bitcast i8* %1576 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%1578 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %1577, align 8, !dbg !501
%1579 = invoke i1 %1578(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %1568)
to label %1582 unwind label %1580, !dbg !501
; <label>:1580: ; preds = %1571
%1581 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:1582: ; preds = %1571
br i1 %1579, label %2411, label %1583
; <label>:1583: ; preds = %1582, %1569
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%1584 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%1585 = icmp ugt %struct.ObjHeader* %1584, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %1585, label %1630, label %1586
; <label>:1586: ; preds = %1583
%1587 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1588 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %1587)
to label %1630 unwind label %1589
; <label>:1589: ; preds = %1586
%1590 = landingpad { i8*, i32 }
cleanup
%1591 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1592 = load %struct.ObjHeader*, %struct.ObjHeader** %1591, align 8, !tbaa !476
%1593 = icmp eq %struct.ObjHeader* %1592, null
br i1 %1593, label %1603, label %1594
; <label>:1594: ; preds = %1589
%1595 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1592, i64 0, i32 0
%1596 = load %struct.TypeInfo*, %struct.TypeInfo** %1595, align 8, !tbaa !477
%1597 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1592, i64 0, i32 1
%1598 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1597, align 8, !tbaa !479
%1599 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1596, i64 0, i32 0
%1600 = load %struct.TypeInfo*, %struct.TypeInfo** %1599, align 8, !tbaa !480
%1601 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1600, i64 0, i32 5
%1602 = load i32, i32* %1601, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1602, %struct.ContainerHeader* %1598) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1591, align 8, !tbaa !476
br label %1603
; <label>:1603: ; preds = %1594, %1589
%1604 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1605 = icmp eq %struct.ObjHeader* %1604, null
br i1 %1605, label %2461, label %1606
; <label>:1606: ; preds = %1603
%1607 = bitcast %struct.ObjHeader* %1604 to %struct.ContainerChunk**
%1608 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1607, align 8, !tbaa !476
%1609 = icmp eq %struct.ContainerChunk* %1608, null
br i1 %1609, label %1628, label %1610
; <label>:1610: ; preds = %1606
br label %1611
; <label>:1611: ; preds = %1611, %1610
%1612 = phi %struct.ContainerChunk* [ %1616, %1611 ], [ %1608, %1610 ]
%1613 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1612, i64 1
%1614 = bitcast %struct.ContainerChunk* %1613 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1614) #0
%1615 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1612, i64 0, i32 0
%1616 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1615, align 8, !tbaa !476
%1617 = icmp eq %struct.ContainerChunk* %1616, null
br i1 %1617, label %1618, label %1611
; <label>:1618: ; preds = %1611
%1619 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1607, align 8, !tbaa !482
%1620 = icmp eq %struct.ContainerChunk* %1619, null
br i1 %1620, label %1628, label %1621
; <label>:1621: ; preds = %1618
br label %1622
; <label>:1622: ; preds = %1622, %1621
%1623 = phi %struct.ContainerChunk* [ %1626, %1622 ], [ %1619, %1621 ]
%1624 = bitcast %struct.ContainerChunk* %1623 to i8*
%1625 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1623, i64 0, i32 0
%1626 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1625, align 8, !tbaa !484
call void @free(i8* %1624) #0
%1627 = icmp eq %struct.ContainerChunk* %1626, null
br i1 %1627, label %1628, label %1622
; <label>:1628: ; preds = %1622, %1618, %1606
%1629 = bitcast %struct.ObjHeader* %1604 to i8*
call void @free(i8* %1629) #0
br label %2461
; <label>:1630: ; preds = %1586, %1583
%1631 = phi %struct.ObjHeader* [ %1584, %1583 ], [ %1588, %1586 ]
%1632 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1631, i64 1
%1633 = bitcast %struct.ObjHeader* %1632 to %struct.ObjHeader**
%1634 = load %struct.ObjHeader*, %struct.ObjHeader** %1633, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %32, %struct.ObjHeader* %1634)
%1635 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1636 = load %struct.ObjHeader*, %struct.ObjHeader** %1635, align 8, !tbaa !476
%1637 = icmp eq %struct.ObjHeader* %1636, null
br i1 %1637, label %1647, label %1638
; <label>:1638: ; preds = %1630
%1639 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1636, i64 0, i32 0
%1640 = load %struct.TypeInfo*, %struct.TypeInfo** %1639, align 8, !tbaa !477
%1641 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1636, i64 0, i32 1
%1642 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1641, align 8, !tbaa !479
%1643 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1640, i64 0, i32 0
%1644 = load %struct.TypeInfo*, %struct.TypeInfo** %1643, align 8, !tbaa !480
%1645 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1644, i64 0, i32 5
%1646 = load i32, i32* %1645, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1646, %struct.ContainerHeader* %1642) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1635, align 8, !tbaa !476
br label %1647
; <label>:1647: ; preds = %1638, %1630
%1648 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1649 = icmp eq %struct.ObjHeader* %1648, null
br i1 %1649, label %1674, label %1650
; <label>:1650: ; preds = %1647
%1651 = bitcast %struct.ObjHeader* %1648 to %struct.ContainerChunk**
%1652 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1651, align 8, !tbaa !476
%1653 = icmp eq %struct.ContainerChunk* %1652, null
br i1 %1653, label %1672, label %1654
; <label>:1654: ; preds = %1650
br label %1655
; <label>:1655: ; preds = %1655, %1654
%1656 = phi %struct.ContainerChunk* [ %1660, %1655 ], [ %1652, %1654 ]
%1657 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1656, i64 1
%1658 = bitcast %struct.ContainerChunk* %1657 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1658) #0
%1659 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1656, i64 0, i32 0
%1660 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1659, align 8, !tbaa !476
%1661 = icmp eq %struct.ContainerChunk* %1660, null
br i1 %1661, label %1662, label %1655
; <label>:1662: ; preds = %1655
%1663 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1651, align 8, !tbaa !482
%1664 = icmp eq %struct.ContainerChunk* %1663, null
br i1 %1664, label %1672, label %1665
; <label>:1665: ; preds = %1662
br label %1666
; <label>:1666: ; preds = %1666, %1665
%1667 = phi %struct.ContainerChunk* [ %1670, %1666 ], [ %1663, %1665 ]
%1668 = bitcast %struct.ContainerChunk* %1667 to i8*
%1669 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1667, i64 0, i32 0
%1670 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1669, align 8, !tbaa !484
call void @free(i8* %1668) #0
%1671 = icmp eq %struct.ContainerChunk* %1670, null
br i1 %1671, label %1672, label %1666
; <label>:1672: ; preds = %1666, %1662, %1650
%1673 = bitcast %struct.ObjHeader* %1648 to i8*
call void @free(i8* %1673) #0
br label %1674
; <label>:1674: ; preds = %1672, %1647
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%1675 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1634, i64 1
%1676 = bitcast %struct.ObjHeader* %1675 to i32*
%1677 = load i32, i32* %1676, align 8, !tbaa !492
%1678 = icmp ugt i32 %1677, 68
br i1 %1678, label %1682, label %1679
; <label>:1679: ; preds = %1674
%1680 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %1681 unwind label %2459
; <label>:1681: ; preds = %1679
unreachable
; <label>:1682: ; preds = %1674
%1683 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1634, i64 1, i32 1
%1684 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %1683, i64 68
%1685 = bitcast %struct.ContainerHeader** %1684 to %struct.ObjHeader**
%1686 = load %struct.ObjHeader*, %struct.ObjHeader** %1685, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %33, %struct.ObjHeader* %1686) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %1687, label %1689, !dbg !501
; <label>:1687: ; preds = %1682
%1688 = icmp eq %struct.ObjHeader* %1686, null, !dbg !501
br i1 %1688, label %2411, label %1701
; <label>:1689: ; preds = %1682
%1690 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%1691 = load %struct.TypeInfo*, %struct.TypeInfo** %1690, align 8, !dbg !501
%1692 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %1691, i64 0, i32 0, !dbg !501
%1693 = load %struct.TypeInfo*, %struct.TypeInfo** %1692, align 8, !dbg !501
%1694 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1693, i64 1, i32 1, i32 0, i64 8, !dbg !501
%1695 = bitcast i8* %1694 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%1696 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %1695, align 8, !dbg !501
%1697 = invoke i1 %1696(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %1686)
to label %1700 unwind label %1698, !dbg !501
; <label>:1698: ; preds = %1689
%1699 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:1700: ; preds = %1689
br i1 %1697, label %2411, label %1701
; <label>:1701: ; preds = %1700, %1687
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%1702 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%1703 = icmp ugt %struct.ObjHeader* %1702, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %1703, label %1748, label %1704
; <label>:1704: ; preds = %1701
%1705 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1706 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %1705)
to label %1748 unwind label %1707
; <label>:1707: ; preds = %1704
%1708 = landingpad { i8*, i32 }
cleanup
%1709 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1710 = load %struct.ObjHeader*, %struct.ObjHeader** %1709, align 8, !tbaa !476
%1711 = icmp eq %struct.ObjHeader* %1710, null
br i1 %1711, label %1721, label %1712
; <label>:1712: ; preds = %1707
%1713 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1710, i64 0, i32 0
%1714 = load %struct.TypeInfo*, %struct.TypeInfo** %1713, align 8, !tbaa !477
%1715 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1710, i64 0, i32 1
%1716 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1715, align 8, !tbaa !479
%1717 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1714, i64 0, i32 0
%1718 = load %struct.TypeInfo*, %struct.TypeInfo** %1717, align 8, !tbaa !480
%1719 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1718, i64 0, i32 5
%1720 = load i32, i32* %1719, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1720, %struct.ContainerHeader* %1716) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1709, align 8, !tbaa !476
br label %1721
; <label>:1721: ; preds = %1712, %1707
%1722 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1723 = icmp eq %struct.ObjHeader* %1722, null
br i1 %1723, label %2461, label %1724
; <label>:1724: ; preds = %1721
%1725 = bitcast %struct.ObjHeader* %1722 to %struct.ContainerChunk**
%1726 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1725, align 8, !tbaa !476
%1727 = icmp eq %struct.ContainerChunk* %1726, null
br i1 %1727, label %1746, label %1728
; <label>:1728: ; preds = %1724
br label %1729
; <label>:1729: ; preds = %1729, %1728
%1730 = phi %struct.ContainerChunk* [ %1734, %1729 ], [ %1726, %1728 ]
%1731 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1730, i64 1
%1732 = bitcast %struct.ContainerChunk* %1731 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1732) #0
%1733 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1730, i64 0, i32 0
%1734 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1733, align 8, !tbaa !476
%1735 = icmp eq %struct.ContainerChunk* %1734, null
br i1 %1735, label %1736, label %1729
; <label>:1736: ; preds = %1729
%1737 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1725, align 8, !tbaa !482
%1738 = icmp eq %struct.ContainerChunk* %1737, null
br i1 %1738, label %1746, label %1739
; <label>:1739: ; preds = %1736
br label %1740
; <label>:1740: ; preds = %1740, %1739
%1741 = phi %struct.ContainerChunk* [ %1744, %1740 ], [ %1737, %1739 ]
%1742 = bitcast %struct.ContainerChunk* %1741 to i8*
%1743 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1741, i64 0, i32 0
%1744 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1743, align 8, !tbaa !484
call void @free(i8* %1742) #0
%1745 = icmp eq %struct.ContainerChunk* %1744, null
br i1 %1745, label %1746, label %1740
; <label>:1746: ; preds = %1740, %1736, %1724
%1747 = bitcast %struct.ObjHeader* %1722 to i8*
call void @free(i8* %1747) #0
br label %2461
; <label>:1748: ; preds = %1704, %1701
%1749 = phi %struct.ObjHeader* [ %1702, %1701 ], [ %1706, %1704 ]
%1750 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1749, i64 1
%1751 = bitcast %struct.ObjHeader* %1750 to %struct.ObjHeader**
%1752 = load %struct.ObjHeader*, %struct.ObjHeader** %1751, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %34, %struct.ObjHeader* %1752)
%1753 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1754 = load %struct.ObjHeader*, %struct.ObjHeader** %1753, align 8, !tbaa !476
%1755 = icmp eq %struct.ObjHeader* %1754, null
br i1 %1755, label %1765, label %1756
; <label>:1756: ; preds = %1748
%1757 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1754, i64 0, i32 0
%1758 = load %struct.TypeInfo*, %struct.TypeInfo** %1757, align 8, !tbaa !477
%1759 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1754, i64 0, i32 1
%1760 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1759, align 8, !tbaa !479
%1761 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1758, i64 0, i32 0
%1762 = load %struct.TypeInfo*, %struct.TypeInfo** %1761, align 8, !tbaa !480
%1763 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1762, i64 0, i32 5
%1764 = load i32, i32* %1763, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1764, %struct.ContainerHeader* %1760) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1753, align 8, !tbaa !476
br label %1765
; <label>:1765: ; preds = %1756, %1748
%1766 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1767 = icmp eq %struct.ObjHeader* %1766, null
br i1 %1767, label %1792, label %1768
; <label>:1768: ; preds = %1765
%1769 = bitcast %struct.ObjHeader* %1766 to %struct.ContainerChunk**
%1770 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1769, align 8, !tbaa !476
%1771 = icmp eq %struct.ContainerChunk* %1770, null
br i1 %1771, label %1790, label %1772
; <label>:1772: ; preds = %1768
br label %1773
; <label>:1773: ; preds = %1773, %1772
%1774 = phi %struct.ContainerChunk* [ %1778, %1773 ], [ %1770, %1772 ]
%1775 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1774, i64 1
%1776 = bitcast %struct.ContainerChunk* %1775 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1776) #0
%1777 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1774, i64 0, i32 0
%1778 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1777, align 8, !tbaa !476
%1779 = icmp eq %struct.ContainerChunk* %1778, null
br i1 %1779, label %1780, label %1773
; <label>:1780: ; preds = %1773
%1781 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1769, align 8, !tbaa !482
%1782 = icmp eq %struct.ContainerChunk* %1781, null
br i1 %1782, label %1790, label %1783
; <label>:1783: ; preds = %1780
br label %1784
; <label>:1784: ; preds = %1784, %1783
%1785 = phi %struct.ContainerChunk* [ %1788, %1784 ], [ %1781, %1783 ]
%1786 = bitcast %struct.ContainerChunk* %1785 to i8*
%1787 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1785, i64 0, i32 0
%1788 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1787, align 8, !tbaa !484
call void @free(i8* %1786) #0
%1789 = icmp eq %struct.ContainerChunk* %1788, null
br i1 %1789, label %1790, label %1784
; <label>:1790: ; preds = %1784, %1780, %1768
%1791 = bitcast %struct.ObjHeader* %1766 to i8*
call void @free(i8* %1791) #0
br label %1792
; <label>:1792: ; preds = %1790, %1765
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%1793 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1752, i64 1
%1794 = bitcast %struct.ObjHeader* %1793 to i32*
%1795 = load i32, i32* %1794, align 8, !tbaa !492
%1796 = icmp ugt i32 %1795, 73
br i1 %1796, label %1800, label %1797
; <label>:1797: ; preds = %1792
%1798 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %1799 unwind label %2459
; <label>:1799: ; preds = %1797
unreachable
; <label>:1800: ; preds = %1792
%1801 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1752, i64 1, i32 1
%1802 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %1801, i64 73
%1803 = bitcast %struct.ContainerHeader** %1802 to %struct.ObjHeader**
%1804 = load %struct.ObjHeader*, %struct.ObjHeader** %1803, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %35, %struct.ObjHeader* %1804) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %1805, label %1807, !dbg !501
; <label>:1805: ; preds = %1800
%1806 = icmp eq %struct.ObjHeader* %1804, null, !dbg !501
br i1 %1806, label %2411, label %1819
; <label>:1807: ; preds = %1800
%1808 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%1809 = load %struct.TypeInfo*, %struct.TypeInfo** %1808, align 8, !dbg !501
%1810 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %1809, i64 0, i32 0, !dbg !501
%1811 = load %struct.TypeInfo*, %struct.TypeInfo** %1810, align 8, !dbg !501
%1812 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1811, i64 1, i32 1, i32 0, i64 8, !dbg !501
%1813 = bitcast i8* %1812 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%1814 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %1813, align 8, !dbg !501
%1815 = invoke i1 %1814(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %1804)
to label %1818 unwind label %1816, !dbg !501
; <label>:1816: ; preds = %1807
%1817 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:1818: ; preds = %1807
br i1 %1815, label %2411, label %1819
; <label>:1819: ; preds = %1818, %1805
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%1820 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%1821 = icmp ugt %struct.ObjHeader* %1820, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %1821, label %1866, label %1822
; <label>:1822: ; preds = %1819
%1823 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1824 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %1823)
to label %1866 unwind label %1825
; <label>:1825: ; preds = %1822
%1826 = landingpad { i8*, i32 }
cleanup
%1827 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1828 = load %struct.ObjHeader*, %struct.ObjHeader** %1827, align 8, !tbaa !476
%1829 = icmp eq %struct.ObjHeader* %1828, null
br i1 %1829, label %1839, label %1830
; <label>:1830: ; preds = %1825
%1831 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1828, i64 0, i32 0
%1832 = load %struct.TypeInfo*, %struct.TypeInfo** %1831, align 8, !tbaa !477
%1833 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1828, i64 0, i32 1
%1834 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1833, align 8, !tbaa !479
%1835 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1832, i64 0, i32 0
%1836 = load %struct.TypeInfo*, %struct.TypeInfo** %1835, align 8, !tbaa !480
%1837 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1836, i64 0, i32 5
%1838 = load i32, i32* %1837, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1838, %struct.ContainerHeader* %1834) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1827, align 8, !tbaa !476
br label %1839
; <label>:1839: ; preds = %1830, %1825
%1840 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1841 = icmp eq %struct.ObjHeader* %1840, null
br i1 %1841, label %2461, label %1842
; <label>:1842: ; preds = %1839
%1843 = bitcast %struct.ObjHeader* %1840 to %struct.ContainerChunk**
%1844 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1843, align 8, !tbaa !476
%1845 = icmp eq %struct.ContainerChunk* %1844, null
br i1 %1845, label %1864, label %1846
; <label>:1846: ; preds = %1842
br label %1847
; <label>:1847: ; preds = %1847, %1846
%1848 = phi %struct.ContainerChunk* [ %1852, %1847 ], [ %1844, %1846 ]
%1849 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1848, i64 1
%1850 = bitcast %struct.ContainerChunk* %1849 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1850) #0
%1851 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1848, i64 0, i32 0
%1852 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1851, align 8, !tbaa !476
%1853 = icmp eq %struct.ContainerChunk* %1852, null
br i1 %1853, label %1854, label %1847
; <label>:1854: ; preds = %1847
%1855 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1843, align 8, !tbaa !482
%1856 = icmp eq %struct.ContainerChunk* %1855, null
br i1 %1856, label %1864, label %1857
; <label>:1857: ; preds = %1854
br label %1858
; <label>:1858: ; preds = %1858, %1857
%1859 = phi %struct.ContainerChunk* [ %1862, %1858 ], [ %1855, %1857 ]
%1860 = bitcast %struct.ContainerChunk* %1859 to i8*
%1861 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1859, i64 0, i32 0
%1862 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1861, align 8, !tbaa !484
call void @free(i8* %1860) #0
%1863 = icmp eq %struct.ContainerChunk* %1862, null
br i1 %1863, label %1864, label %1858
; <label>:1864: ; preds = %1858, %1854, %1842
%1865 = bitcast %struct.ObjHeader* %1840 to i8*
call void @free(i8* %1865) #0
br label %2461
; <label>:1866: ; preds = %1822, %1819
%1867 = phi %struct.ObjHeader* [ %1820, %1819 ], [ %1824, %1822 ]
%1868 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1867, i64 1
%1869 = bitcast %struct.ObjHeader* %1868 to %struct.ObjHeader**
%1870 = load %struct.ObjHeader*, %struct.ObjHeader** %1869, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %36, %struct.ObjHeader* %1870)
%1871 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1872 = load %struct.ObjHeader*, %struct.ObjHeader** %1871, align 8, !tbaa !476
%1873 = icmp eq %struct.ObjHeader* %1872, null
br i1 %1873, label %1883, label %1874
; <label>:1874: ; preds = %1866
%1875 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1872, i64 0, i32 0
%1876 = load %struct.TypeInfo*, %struct.TypeInfo** %1875, align 8, !tbaa !477
%1877 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1872, i64 0, i32 1
%1878 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1877, align 8, !tbaa !479
%1879 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1876, i64 0, i32 0
%1880 = load %struct.TypeInfo*, %struct.TypeInfo** %1879, align 8, !tbaa !480
%1881 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1880, i64 0, i32 5
%1882 = load i32, i32* %1881, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1882, %struct.ContainerHeader* %1878) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1871, align 8, !tbaa !476
br label %1883
; <label>:1883: ; preds = %1874, %1866
%1884 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1885 = icmp eq %struct.ObjHeader* %1884, null
br i1 %1885, label %1910, label %1886
; <label>:1886: ; preds = %1883
%1887 = bitcast %struct.ObjHeader* %1884 to %struct.ContainerChunk**
%1888 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1887, align 8, !tbaa !476
%1889 = icmp eq %struct.ContainerChunk* %1888, null
br i1 %1889, label %1908, label %1890
; <label>:1890: ; preds = %1886
br label %1891
; <label>:1891: ; preds = %1891, %1890
%1892 = phi %struct.ContainerChunk* [ %1896, %1891 ], [ %1888, %1890 ]
%1893 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1892, i64 1
%1894 = bitcast %struct.ContainerChunk* %1893 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1894) #0
%1895 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1892, i64 0, i32 0
%1896 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1895, align 8, !tbaa !476
%1897 = icmp eq %struct.ContainerChunk* %1896, null
br i1 %1897, label %1898, label %1891
; <label>:1898: ; preds = %1891
%1899 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1887, align 8, !tbaa !482
%1900 = icmp eq %struct.ContainerChunk* %1899, null
br i1 %1900, label %1908, label %1901
; <label>:1901: ; preds = %1898
br label %1902
; <label>:1902: ; preds = %1902, %1901
%1903 = phi %struct.ContainerChunk* [ %1906, %1902 ], [ %1899, %1901 ]
%1904 = bitcast %struct.ContainerChunk* %1903 to i8*
%1905 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1903, i64 0, i32 0
%1906 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1905, align 8, !tbaa !484
call void @free(i8* %1904) #0
%1907 = icmp eq %struct.ContainerChunk* %1906, null
br i1 %1907, label %1908, label %1902
; <label>:1908: ; preds = %1902, %1898, %1886
%1909 = bitcast %struct.ObjHeader* %1884 to i8*
call void @free(i8* %1909) #0
br label %1910
; <label>:1910: ; preds = %1908, %1883
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%1911 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1870, i64 1
%1912 = bitcast %struct.ObjHeader* %1911 to i32*
%1913 = load i32, i32* %1912, align 8, !tbaa !492
%1914 = icmp ugt i32 %1913, 79
br i1 %1914, label %1918, label %1915
; <label>:1915: ; preds = %1910
%1916 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %1917 unwind label %2459
; <label>:1917: ; preds = %1915
unreachable
; <label>:1918: ; preds = %1910
%1919 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1870, i64 1, i32 1
%1920 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %1919, i64 79
%1921 = bitcast %struct.ContainerHeader** %1920 to %struct.ObjHeader**
%1922 = load %struct.ObjHeader*, %struct.ObjHeader** %1921, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %37, %struct.ObjHeader* %1922) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %1923, label %1925, !dbg !501
; <label>:1923: ; preds = %1918
%1924 = icmp eq %struct.ObjHeader* %1922, null, !dbg !501
br i1 %1924, label %2411, label %1937
; <label>:1925: ; preds = %1918
%1926 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%1927 = load %struct.TypeInfo*, %struct.TypeInfo** %1926, align 8, !dbg !501
%1928 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %1927, i64 0, i32 0, !dbg !501
%1929 = load %struct.TypeInfo*, %struct.TypeInfo** %1928, align 8, !dbg !501
%1930 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1929, i64 1, i32 1, i32 0, i64 8, !dbg !501
%1931 = bitcast i8* %1930 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%1932 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %1931, align 8, !dbg !501
%1933 = invoke i1 %1932(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %1922)
to label %1936 unwind label %1934, !dbg !501
; <label>:1934: ; preds = %1925
%1935 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:1936: ; preds = %1925
br i1 %1933, label %2411, label %1937
; <label>:1937: ; preds = %1936, %1923
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%1938 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%1939 = icmp ugt %struct.ObjHeader* %1938, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %1939, label %1984, label %1940
; <label>:1940: ; preds = %1937
%1941 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1942 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %1941)
to label %1984 unwind label %1943
; <label>:1943: ; preds = %1940
%1944 = landingpad { i8*, i32 }
cleanup
%1945 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1946 = load %struct.ObjHeader*, %struct.ObjHeader** %1945, align 8, !tbaa !476
%1947 = icmp eq %struct.ObjHeader* %1946, null
br i1 %1947, label %1957, label %1948
; <label>:1948: ; preds = %1943
%1949 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1946, i64 0, i32 0
%1950 = load %struct.TypeInfo*, %struct.TypeInfo** %1949, align 8, !tbaa !477
%1951 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1946, i64 0, i32 1
%1952 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1951, align 8, !tbaa !479
%1953 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1950, i64 0, i32 0
%1954 = load %struct.TypeInfo*, %struct.TypeInfo** %1953, align 8, !tbaa !480
%1955 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1954, i64 0, i32 5
%1956 = load i32, i32* %1955, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %1956, %struct.ContainerHeader* %1952) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1945, align 8, !tbaa !476
br label %1957
; <label>:1957: ; preds = %1948, %1943
%1958 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%1959 = icmp eq %struct.ObjHeader* %1958, null
br i1 %1959, label %2461, label %1960
; <label>:1960: ; preds = %1957
%1961 = bitcast %struct.ObjHeader* %1958 to %struct.ContainerChunk**
%1962 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1961, align 8, !tbaa !476
%1963 = icmp eq %struct.ContainerChunk* %1962, null
br i1 %1963, label %1982, label %1964
; <label>:1964: ; preds = %1960
br label %1965
; <label>:1965: ; preds = %1965, %1964
%1966 = phi %struct.ContainerChunk* [ %1970, %1965 ], [ %1962, %1964 ]
%1967 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1966, i64 1
%1968 = bitcast %struct.ContainerChunk* %1967 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %1968) #0
%1969 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1966, i64 0, i32 0
%1970 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1969, align 8, !tbaa !476
%1971 = icmp eq %struct.ContainerChunk* %1970, null
br i1 %1971, label %1972, label %1965
; <label>:1972: ; preds = %1965
%1973 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1961, align 8, !tbaa !482
%1974 = icmp eq %struct.ContainerChunk* %1973, null
br i1 %1974, label %1982, label %1975
; <label>:1975: ; preds = %1972
br label %1976
; <label>:1976: ; preds = %1976, %1975
%1977 = phi %struct.ContainerChunk* [ %1980, %1976 ], [ %1973, %1975 ]
%1978 = bitcast %struct.ContainerChunk* %1977 to i8*
%1979 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %1977, i64 0, i32 0
%1980 = load %struct.ContainerChunk*, %struct.ContainerChunk** %1979, align 8, !tbaa !484
call void @free(i8* %1978) #0
%1981 = icmp eq %struct.ContainerChunk* %1980, null
br i1 %1981, label %1982, label %1976
; <label>:1982: ; preds = %1976, %1972, %1960
%1983 = bitcast %struct.ObjHeader* %1958 to i8*
call void @free(i8* %1983) #0
br label %2461
; <label>:1984: ; preds = %1940, %1937
%1985 = phi %struct.ObjHeader* [ %1938, %1937 ], [ %1942, %1940 ]
%1986 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1985, i64 1
%1987 = bitcast %struct.ObjHeader* %1986 to %struct.ObjHeader**
%1988 = load %struct.ObjHeader*, %struct.ObjHeader** %1987, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %38, %struct.ObjHeader* %1988)
%1989 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%1990 = load %struct.ObjHeader*, %struct.ObjHeader** %1989, align 8, !tbaa !476
%1991 = icmp eq %struct.ObjHeader* %1990, null
br i1 %1991, label %2001, label %1992
; <label>:1992: ; preds = %1984
%1993 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1990, i64 0, i32 0
%1994 = load %struct.TypeInfo*, %struct.TypeInfo** %1993, align 8, !tbaa !477
%1995 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %1990, i64 0, i32 1
%1996 = load %struct.ContainerHeader*, %struct.ContainerHeader** %1995, align 8, !tbaa !479
%1997 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1994, i64 0, i32 0
%1998 = load %struct.TypeInfo*, %struct.TypeInfo** %1997, align 8, !tbaa !480
%1999 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %1998, i64 0, i32 5
%2000 = load i32, i32* %1999, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %2000, %struct.ContainerHeader* %1996) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %1989, align 8, !tbaa !476
br label %2001
; <label>:2001: ; preds = %1992, %1984
%2002 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%2003 = icmp eq %struct.ObjHeader* %2002, null
br i1 %2003, label %2028, label %2004
; <label>:2004: ; preds = %2001
%2005 = bitcast %struct.ObjHeader* %2002 to %struct.ContainerChunk**
%2006 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2005, align 8, !tbaa !476
%2007 = icmp eq %struct.ContainerChunk* %2006, null
br i1 %2007, label %2026, label %2008
; <label>:2008: ; preds = %2004
br label %2009
; <label>:2009: ; preds = %2009, %2008
%2010 = phi %struct.ContainerChunk* [ %2014, %2009 ], [ %2006, %2008 ]
%2011 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2010, i64 1
%2012 = bitcast %struct.ContainerChunk* %2011 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %2012) #0
%2013 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2010, i64 0, i32 0
%2014 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2013, align 8, !tbaa !476
%2015 = icmp eq %struct.ContainerChunk* %2014, null
br i1 %2015, label %2016, label %2009
; <label>:2016: ; preds = %2009
%2017 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2005, align 8, !tbaa !482
%2018 = icmp eq %struct.ContainerChunk* %2017, null
br i1 %2018, label %2026, label %2019
; <label>:2019: ; preds = %2016
br label %2020
; <label>:2020: ; preds = %2020, %2019
%2021 = phi %struct.ContainerChunk* [ %2024, %2020 ], [ %2017, %2019 ]
%2022 = bitcast %struct.ContainerChunk* %2021 to i8*
%2023 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2021, i64 0, i32 0
%2024 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2023, align 8, !tbaa !484
call void @free(i8* %2022) #0
%2025 = icmp eq %struct.ContainerChunk* %2024, null
br i1 %2025, label %2026, label %2020
; <label>:2026: ; preds = %2020, %2016, %2004
%2027 = bitcast %struct.ObjHeader* %2002 to i8*
call void @free(i8* %2027) #0
br label %2028
; <label>:2028: ; preds = %2026, %2001
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%2029 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1988, i64 1
%2030 = bitcast %struct.ObjHeader* %2029 to i32*
%2031 = load i32, i32* %2030, align 8, !tbaa !492
%2032 = icmp ugt i32 %2031, 84
br i1 %2032, label %2036, label %2033
; <label>:2033: ; preds = %2028
%2034 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %2035 unwind label %2459
; <label>:2035: ; preds = %2033
unreachable
; <label>:2036: ; preds = %2028
%2037 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %1988, i64 1, i32 1
%2038 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %2037, i64 84
%2039 = bitcast %struct.ContainerHeader** %2038 to %struct.ObjHeader**
%2040 = load %struct.ObjHeader*, %struct.ObjHeader** %2039, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %39, %struct.ObjHeader* %2040) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %2041, label %2043, !dbg !501
; <label>:2041: ; preds = %2036
%2042 = icmp eq %struct.ObjHeader* %2040, null, !dbg !501
br i1 %2042, label %2411, label %2055
; <label>:2043: ; preds = %2036
%2044 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%2045 = load %struct.TypeInfo*, %struct.TypeInfo** %2044, align 8, !dbg !501
%2046 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %2045, i64 0, i32 0, !dbg !501
%2047 = load %struct.TypeInfo*, %struct.TypeInfo** %2046, align 8, !dbg !501
%2048 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2047, i64 1, i32 1, i32 0, i64 8, !dbg !501
%2049 = bitcast i8* %2048 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%2050 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %2049, align 8, !dbg !501
%2051 = invoke i1 %2050(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %2040)
to label %2054 unwind label %2052, !dbg !501
; <label>:2052: ; preds = %2043
%2053 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:2054: ; preds = %2043
br i1 %2051, label %2411, label %2055
; <label>:2055: ; preds = %2054, %2041
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%2056 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%2057 = icmp ugt %struct.ObjHeader* %2056, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %2057, label %2102, label %2058
; <label>:2058: ; preds = %2055
%2059 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%2060 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %2059)
to label %2102 unwind label %2061
; <label>:2061: ; preds = %2058
%2062 = landingpad { i8*, i32 }
cleanup
%2063 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%2064 = load %struct.ObjHeader*, %struct.ObjHeader** %2063, align 8, !tbaa !476
%2065 = icmp eq %struct.ObjHeader* %2064, null
br i1 %2065, label %2075, label %2066
; <label>:2066: ; preds = %2061
%2067 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2064, i64 0, i32 0
%2068 = load %struct.TypeInfo*, %struct.TypeInfo** %2067, align 8, !tbaa !477
%2069 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2064, i64 0, i32 1
%2070 = load %struct.ContainerHeader*, %struct.ContainerHeader** %2069, align 8, !tbaa !479
%2071 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2068, i64 0, i32 0
%2072 = load %struct.TypeInfo*, %struct.TypeInfo** %2071, align 8, !tbaa !480
%2073 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2072, i64 0, i32 5
%2074 = load i32, i32* %2073, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %2074, %struct.ContainerHeader* %2070) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %2063, align 8, !tbaa !476
br label %2075
; <label>:2075: ; preds = %2066, %2061
%2076 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%2077 = icmp eq %struct.ObjHeader* %2076, null
br i1 %2077, label %2461, label %2078
; <label>:2078: ; preds = %2075
%2079 = bitcast %struct.ObjHeader* %2076 to %struct.ContainerChunk**
%2080 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2079, align 8, !tbaa !476
%2081 = icmp eq %struct.ContainerChunk* %2080, null
br i1 %2081, label %2100, label %2082
; <label>:2082: ; preds = %2078
br label %2083
; <label>:2083: ; preds = %2083, %2082
%2084 = phi %struct.ContainerChunk* [ %2088, %2083 ], [ %2080, %2082 ]
%2085 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2084, i64 1
%2086 = bitcast %struct.ContainerChunk* %2085 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %2086) #0
%2087 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2084, i64 0, i32 0
%2088 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2087, align 8, !tbaa !476
%2089 = icmp eq %struct.ContainerChunk* %2088, null
br i1 %2089, label %2090, label %2083
; <label>:2090: ; preds = %2083
%2091 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2079, align 8, !tbaa !482
%2092 = icmp eq %struct.ContainerChunk* %2091, null
br i1 %2092, label %2100, label %2093
; <label>:2093: ; preds = %2090
br label %2094
; <label>:2094: ; preds = %2094, %2093
%2095 = phi %struct.ContainerChunk* [ %2098, %2094 ], [ %2091, %2093 ]
%2096 = bitcast %struct.ContainerChunk* %2095 to i8*
%2097 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2095, i64 0, i32 0
%2098 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2097, align 8, !tbaa !484
call void @free(i8* %2096) #0
%2099 = icmp eq %struct.ContainerChunk* %2098, null
br i1 %2099, label %2100, label %2094
; <label>:2100: ; preds = %2094, %2090, %2078
%2101 = bitcast %struct.ObjHeader* %2076 to i8*
call void @free(i8* %2101) #0
br label %2461
; <label>:2102: ; preds = %2058, %2055
%2103 = phi %struct.ObjHeader* [ %2056, %2055 ], [ %2060, %2058 ]
%2104 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2103, i64 1
%2105 = bitcast %struct.ObjHeader* %2104 to %struct.ObjHeader**
%2106 = load %struct.ObjHeader*, %struct.ObjHeader** %2105, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %40, %struct.ObjHeader* %2106)
%2107 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%2108 = load %struct.ObjHeader*, %struct.ObjHeader** %2107, align 8, !tbaa !476
%2109 = icmp eq %struct.ObjHeader* %2108, null
br i1 %2109, label %2119, label %2110
; <label>:2110: ; preds = %2102
%2111 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2108, i64 0, i32 0
%2112 = load %struct.TypeInfo*, %struct.TypeInfo** %2111, align 8, !tbaa !477
%2113 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2108, i64 0, i32 1
%2114 = load %struct.ContainerHeader*, %struct.ContainerHeader** %2113, align 8, !tbaa !479
%2115 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2112, i64 0, i32 0
%2116 = load %struct.TypeInfo*, %struct.TypeInfo** %2115, align 8, !tbaa !480
%2117 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2116, i64 0, i32 5
%2118 = load i32, i32* %2117, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %2118, %struct.ContainerHeader* %2114) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %2107, align 8, !tbaa !476
br label %2119
; <label>:2119: ; preds = %2110, %2102
%2120 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%2121 = icmp eq %struct.ObjHeader* %2120, null
br i1 %2121, label %2146, label %2122
; <label>:2122: ; preds = %2119
%2123 = bitcast %struct.ObjHeader* %2120 to %struct.ContainerChunk**
%2124 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2123, align 8, !tbaa !476
%2125 = icmp eq %struct.ContainerChunk* %2124, null
br i1 %2125, label %2144, label %2126
; <label>:2126: ; preds = %2122
br label %2127
; <label>:2127: ; preds = %2127, %2126
%2128 = phi %struct.ContainerChunk* [ %2132, %2127 ], [ %2124, %2126 ]
%2129 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2128, i64 1
%2130 = bitcast %struct.ContainerChunk* %2129 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %2130) #0
%2131 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2128, i64 0, i32 0
%2132 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2131, align 8, !tbaa !476
%2133 = icmp eq %struct.ContainerChunk* %2132, null
br i1 %2133, label %2134, label %2127
; <label>:2134: ; preds = %2127
%2135 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2123, align 8, !tbaa !482
%2136 = icmp eq %struct.ContainerChunk* %2135, null
br i1 %2136, label %2144, label %2137
; <label>:2137: ; preds = %2134
br label %2138
; <label>:2138: ; preds = %2138, %2137
%2139 = phi %struct.ContainerChunk* [ %2142, %2138 ], [ %2135, %2137 ]
%2140 = bitcast %struct.ContainerChunk* %2139 to i8*
%2141 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2139, i64 0, i32 0
%2142 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2141, align 8, !tbaa !484
call void @free(i8* %2140) #0
%2143 = icmp eq %struct.ContainerChunk* %2142, null
br i1 %2143, label %2144, label %2138
; <label>:2144: ; preds = %2138, %2134, %2122
%2145 = bitcast %struct.ObjHeader* %2120 to i8*
call void @free(i8* %2145) #0
br label %2146
; <label>:2146: ; preds = %2144, %2119
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%2147 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %2106, i64 1
%2148 = bitcast %struct.ObjHeader* %2147 to i32*
%2149 = load i32, i32* %2148, align 8, !tbaa !492
%2150 = icmp ugt i32 %2149, 90
br i1 %2150, label %2154, label %2151
; <label>:2151: ; preds = %2146
%2152 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %2153 unwind label %2459
; <label>:2153: ; preds = %2151
unreachable
; <label>:2154: ; preds = %2146
%2155 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %2106, i64 1, i32 1
%2156 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %2155, i64 90
%2157 = bitcast %struct.ContainerHeader** %2156 to %struct.ObjHeader**
%2158 = load %struct.ObjHeader*, %struct.ObjHeader** %2157, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %41, %struct.ObjHeader* %2158) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %2159, label %2161, !dbg !501
; <label>:2159: ; preds = %2154
%2160 = icmp eq %struct.ObjHeader* %2158, null, !dbg !501
br i1 %2160, label %2411, label %2173
; <label>:2161: ; preds = %2154
%2162 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%2163 = load %struct.TypeInfo*, %struct.TypeInfo** %2162, align 8, !dbg !501
%2164 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %2163, i64 0, i32 0, !dbg !501
%2165 = load %struct.TypeInfo*, %struct.TypeInfo** %2164, align 8, !dbg !501
%2166 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2165, i64 1, i32 1, i32 0, i64 8, !dbg !501
%2167 = bitcast i8* %2166 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%2168 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %2167, align 8, !dbg !501
%2169 = invoke i1 %2168(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %2158)
to label %2172 unwind label %2170, !dbg !501
; <label>:2170: ; preds = %2161
%2171 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:2172: ; preds = %2161
br i1 %2169, label %2411, label %2173
; <label>:2173: ; preds = %2172, %2159
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%2174 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%2175 = icmp ugt %struct.ObjHeader* %2174, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %2175, label %2220, label %2176
; <label>:2176: ; preds = %2173
%2177 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%2178 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %2177)
to label %2220 unwind label %2179
; <label>:2179: ; preds = %2176
%2180 = landingpad { i8*, i32 }
cleanup
%2181 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%2182 = load %struct.ObjHeader*, %struct.ObjHeader** %2181, align 8, !tbaa !476
%2183 = icmp eq %struct.ObjHeader* %2182, null
br i1 %2183, label %2193, label %2184
; <label>:2184: ; preds = %2179
%2185 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2182, i64 0, i32 0
%2186 = load %struct.TypeInfo*, %struct.TypeInfo** %2185, align 8, !tbaa !477
%2187 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2182, i64 0, i32 1
%2188 = load %struct.ContainerHeader*, %struct.ContainerHeader** %2187, align 8, !tbaa !479
%2189 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2186, i64 0, i32 0
%2190 = load %struct.TypeInfo*, %struct.TypeInfo** %2189, align 8, !tbaa !480
%2191 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2190, i64 0, i32 5
%2192 = load i32, i32* %2191, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %2192, %struct.ContainerHeader* %2188) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %2181, align 8, !tbaa !476
br label %2193
; <label>:2193: ; preds = %2184, %2179
%2194 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%2195 = icmp eq %struct.ObjHeader* %2194, null
br i1 %2195, label %2461, label %2196
; <label>:2196: ; preds = %2193
%2197 = bitcast %struct.ObjHeader* %2194 to %struct.ContainerChunk**
%2198 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2197, align 8, !tbaa !476
%2199 = icmp eq %struct.ContainerChunk* %2198, null
br i1 %2199, label %2218, label %2200
; <label>:2200: ; preds = %2196
br label %2201
; <label>:2201: ; preds = %2201, %2200
%2202 = phi %struct.ContainerChunk* [ %2206, %2201 ], [ %2198, %2200 ]
%2203 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2202, i64 1
%2204 = bitcast %struct.ContainerChunk* %2203 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %2204) #0
%2205 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2202, i64 0, i32 0
%2206 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2205, align 8, !tbaa !476
%2207 = icmp eq %struct.ContainerChunk* %2206, null
br i1 %2207, label %2208, label %2201
; <label>:2208: ; preds = %2201
%2209 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2197, align 8, !tbaa !482
%2210 = icmp eq %struct.ContainerChunk* %2209, null
br i1 %2210, label %2218, label %2211
; <label>:2211: ; preds = %2208
br label %2212
; <label>:2212: ; preds = %2212, %2211
%2213 = phi %struct.ContainerChunk* [ %2216, %2212 ], [ %2209, %2211 ]
%2214 = bitcast %struct.ContainerChunk* %2213 to i8*
%2215 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2213, i64 0, i32 0
%2216 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2215, align 8, !tbaa !484
call void @free(i8* %2214) #0
%2217 = icmp eq %struct.ContainerChunk* %2216, null
br i1 %2217, label %2218, label %2212
; <label>:2218: ; preds = %2212, %2208, %2196
%2219 = bitcast %struct.ObjHeader* %2194 to i8*
call void @free(i8* %2219) #0
br label %2461
; <label>:2220: ; preds = %2176, %2173
%2221 = phi %struct.ObjHeader* [ %2174, %2173 ], [ %2178, %2176 ]
%2222 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2221, i64 1
%2223 = bitcast %struct.ObjHeader* %2222 to %struct.ObjHeader**
%2224 = load %struct.ObjHeader*, %struct.ObjHeader** %2223, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %42, %struct.ObjHeader* %2224)
%2225 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%2226 = load %struct.ObjHeader*, %struct.ObjHeader** %2225, align 8, !tbaa !476
%2227 = icmp eq %struct.ObjHeader* %2226, null
br i1 %2227, label %2237, label %2228
; <label>:2228: ; preds = %2220
%2229 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2226, i64 0, i32 0
%2230 = load %struct.TypeInfo*, %struct.TypeInfo** %2229, align 8, !tbaa !477
%2231 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2226, i64 0, i32 1
%2232 = load %struct.ContainerHeader*, %struct.ContainerHeader** %2231, align 8, !tbaa !479
%2233 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2230, i64 0, i32 0
%2234 = load %struct.TypeInfo*, %struct.TypeInfo** %2233, align 8, !tbaa !480
%2235 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2234, i64 0, i32 5
%2236 = load i32, i32* %2235, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %2236, %struct.ContainerHeader* %2232) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %2225, align 8, !tbaa !476
br label %2237
; <label>:2237: ; preds = %2228, %2220
%2238 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%2239 = icmp eq %struct.ObjHeader* %2238, null
br i1 %2239, label %2264, label %2240
; <label>:2240: ; preds = %2237
%2241 = bitcast %struct.ObjHeader* %2238 to %struct.ContainerChunk**
%2242 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2241, align 8, !tbaa !476
%2243 = icmp eq %struct.ContainerChunk* %2242, null
br i1 %2243, label %2262, label %2244
; <label>:2244: ; preds = %2240
br label %2245
; <label>:2245: ; preds = %2245, %2244
%2246 = phi %struct.ContainerChunk* [ %2250, %2245 ], [ %2242, %2244 ]
%2247 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2246, i64 1
%2248 = bitcast %struct.ContainerChunk* %2247 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %2248) #0
%2249 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2246, i64 0, i32 0
%2250 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2249, align 8, !tbaa !476
%2251 = icmp eq %struct.ContainerChunk* %2250, null
br i1 %2251, label %2252, label %2245
; <label>:2252: ; preds = %2245
%2253 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2241, align 8, !tbaa !482
%2254 = icmp eq %struct.ContainerChunk* %2253, null
br i1 %2254, label %2262, label %2255
; <label>:2255: ; preds = %2252
br label %2256
; <label>:2256: ; preds = %2256, %2255
%2257 = phi %struct.ContainerChunk* [ %2260, %2256 ], [ %2253, %2255 ]
%2258 = bitcast %struct.ContainerChunk* %2257 to i8*
%2259 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2257, i64 0, i32 0
%2260 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2259, align 8, !tbaa !484
call void @free(i8* %2258) #0
%2261 = icmp eq %struct.ContainerChunk* %2260, null
br i1 %2261, label %2262, label %2256
; <label>:2262: ; preds = %2256, %2252, %2240
%2263 = bitcast %struct.ObjHeader* %2238 to i8*
call void @free(i8* %2263) #0
br label %2264
; <label>:2264: ; preds = %2262, %2237
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%2265 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %2224, i64 1
%2266 = bitcast %struct.ObjHeader* %2265 to i32*
%2267 = load i32, i32* %2266, align 8, !tbaa !492
%2268 = icmp ugt i32 %2267, 95
br i1 %2268, label %2272, label %2269
; <label>:2269: ; preds = %2264
%2270 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %2271 unwind label %2459
; <label>:2271: ; preds = %2269
unreachable
; <label>:2272: ; preds = %2264
%2273 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %2224, i64 1, i32 1
%2274 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %2273, i64 95
%2275 = bitcast %struct.ContainerHeader** %2274 to %struct.ObjHeader**
%2276 = load %struct.ObjHeader*, %struct.ObjHeader** %2275, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %43, %struct.ObjHeader* %2276) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %2277, label %2279, !dbg !501
; <label>:2277: ; preds = %2272
%2278 = icmp eq %struct.ObjHeader* %2276, null, !dbg !501
br i1 %2278, label %2411, label %2291
; <label>:2279: ; preds = %2272
%2280 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%2281 = load %struct.TypeInfo*, %struct.TypeInfo** %2280, align 8, !dbg !501
%2282 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %2281, i64 0, i32 0, !dbg !501
%2283 = load %struct.TypeInfo*, %struct.TypeInfo** %2282, align 8, !dbg !501
%2284 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2283, i64 1, i32 1, i32 0, i64 8, !dbg !501
%2285 = bitcast i8* %2284 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%2286 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %2285, align 8, !dbg !501
%2287 = invoke i1 %2286(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %2276)
to label %2290 unwind label %2288, !dbg !501
; <label>:2288: ; preds = %2279
%2289 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:2290: ; preds = %2279
br i1 %2287, label %2411, label %2291
; <label>:2291: ; preds = %2290, %2277
call void @llvm.lifetime.start.p0i8(i64 16, i8* %47)
call void @llvm.memset.p0i8.i32(i8* %47, i8 0, i32 16, i32 8, i1 false)
%2292 = load %struct.ObjHeader*, %struct.ObjHeader** @"kobjref:MyEnum.$OBJECT", align 8
%2293 = icmp ugt %struct.ObjHeader* %2292, inttoptr (i64 1 to %struct.ObjHeader*)
br i1 %2293, label %2338, label %2294
; <label>:2294: ; preds = %2291
%2295 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%2296 = invoke fastcc %struct.ObjHeader* @InitSharedInstance(%struct.ObjHeader** nonnull @"kobjref:MyEnum.$OBJECT", %struct.ObjHeader** nonnull @"kshadowobjref:MyEnum.$OBJECT", %struct.TypeInfo* getelementptr inbounds ({ %struct.TypeInfo, [3 x i8*] }, { %struct.TypeInfo, [3 x i8*] }* @"ktypeglobal:MyEnum.$OBJECT#internal", i64 0, i32 0), void (%struct.ObjHeader*)* nonnull @"kfun:MyEnum.$OBJECT.<init>()kotlin.Any", %struct.ObjHeader** %2295)
to label %2338 unwind label %2297
; <label>:2297: ; preds = %2294
%2298 = landingpad { i8*, i32 }
cleanup
%2299 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%2300 = load %struct.ObjHeader*, %struct.ObjHeader** %2299, align 8, !tbaa !476
%2301 = icmp eq %struct.ObjHeader* %2300, null
br i1 %2301, label %2311, label %2302
; <label>:2302: ; preds = %2297
%2303 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2300, i64 0, i32 0
%2304 = load %struct.TypeInfo*, %struct.TypeInfo** %2303, align 8, !tbaa !477
%2305 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2300, i64 0, i32 1
%2306 = load %struct.ContainerHeader*, %struct.ContainerHeader** %2305, align 8, !tbaa !479
%2307 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2304, i64 0, i32 0
%2308 = load %struct.TypeInfo*, %struct.TypeInfo** %2307, align 8, !tbaa !480
%2309 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2308, i64 0, i32 5
%2310 = load i32, i32* %2309, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %2310, %struct.ContainerHeader* %2306) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %2299, align 8, !tbaa !476
br label %2311
; <label>:2311: ; preds = %2302, %2297
%2312 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%2313 = icmp eq %struct.ObjHeader* %2312, null
br i1 %2313, label %2461, label %2314
; <label>:2314: ; preds = %2311
%2315 = bitcast %struct.ObjHeader* %2312 to %struct.ContainerChunk**
%2316 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2315, align 8, !tbaa !476
%2317 = icmp eq %struct.ContainerChunk* %2316, null
br i1 %2317, label %2336, label %2318
; <label>:2318: ; preds = %2314
br label %2319
; <label>:2319: ; preds = %2319, %2318
%2320 = phi %struct.ContainerChunk* [ %2324, %2319 ], [ %2316, %2318 ]
%2321 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2320, i64 1
%2322 = bitcast %struct.ContainerChunk* %2321 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %2322) #0
%2323 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2320, i64 0, i32 0
%2324 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2323, align 8, !tbaa !476
%2325 = icmp eq %struct.ContainerChunk* %2324, null
br i1 %2325, label %2326, label %2319
; <label>:2326: ; preds = %2319
%2327 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2315, align 8, !tbaa !482
%2328 = icmp eq %struct.ContainerChunk* %2327, null
br i1 %2328, label %2336, label %2329
; <label>:2329: ; preds = %2326
br label %2330
; <label>:2330: ; preds = %2330, %2329
%2331 = phi %struct.ContainerChunk* [ %2334, %2330 ], [ %2327, %2329 ]
%2332 = bitcast %struct.ContainerChunk* %2331 to i8*
%2333 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2331, i64 0, i32 0
%2334 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2333, align 8, !tbaa !484
call void @free(i8* %2332) #0
%2335 = icmp eq %struct.ContainerChunk* %2334, null
br i1 %2335, label %2336, label %2330
; <label>:2336: ; preds = %2330, %2326, %2314
%2337 = bitcast %struct.ObjHeader* %2312 to i8*
call void @free(i8* %2337) #0
br label %2461
; <label>:2338: ; preds = %2294, %2291
%2339 = phi %struct.ObjHeader* [ %2292, %2291 ], [ %2296, %2294 ]
%2340 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2339, i64 1
%2341 = bitcast %struct.ObjHeader* %2340 to %struct.ObjHeader**
%2342 = load %struct.ObjHeader*, %struct.ObjHeader** %2341, align 8
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %44, %struct.ObjHeader* %2342)
%2343 = getelementptr inbounds [2 x %struct.ObjHeader*], [2 x %struct.ObjHeader*]* %2, i64 0, i64 1
%2344 = load %struct.ObjHeader*, %struct.ObjHeader** %2343, align 8, !tbaa !476
%2345 = icmp eq %struct.ObjHeader* %2344, null
br i1 %2345, label %2355, label %2346
; <label>:2346: ; preds = %2338
%2347 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2344, i64 0, i32 0
%2348 = load %struct.TypeInfo*, %struct.TypeInfo** %2347, align 8, !tbaa !477
%2349 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2344, i64 0, i32 1
%2350 = load %struct.ContainerHeader*, %struct.ContainerHeader** %2349, align 8, !tbaa !479
%2351 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2348, i64 0, i32 0
%2352 = load %struct.TypeInfo*, %struct.TypeInfo** %2351, align 8, !tbaa !480
%2353 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2352, i64 0, i32 5
%2354 = load i32, i32* %2353, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %2354, %struct.ContainerHeader* %2350) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %2343, align 8, !tbaa !476
br label %2355
; <label>:2355: ; preds = %2346, %2338
%2356 = load %struct.ObjHeader*, %struct.ObjHeader** %48, align 8, !tbaa !476
%2357 = icmp eq %struct.ObjHeader* %2356, null
br i1 %2357, label %2382, label %2358
; <label>:2358: ; preds = %2355
%2359 = bitcast %struct.ObjHeader* %2356 to %struct.ContainerChunk**
%2360 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2359, align 8, !tbaa !476
%2361 = icmp eq %struct.ContainerChunk* %2360, null
br i1 %2361, label %2380, label %2362
; <label>:2362: ; preds = %2358
br label %2363
; <label>:2363: ; preds = %2363, %2362
%2364 = phi %struct.ContainerChunk* [ %2368, %2363 ], [ %2360, %2362 ]
%2365 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2364, i64 1
%2366 = bitcast %struct.ContainerChunk* %2365 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %2366) #0
%2367 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2364, i64 0, i32 0
%2368 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2367, align 8, !tbaa !476
%2369 = icmp eq %struct.ContainerChunk* %2368, null
br i1 %2369, label %2370, label %2363
; <label>:2370: ; preds = %2363
%2371 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2359, align 8, !tbaa !482
%2372 = icmp eq %struct.ContainerChunk* %2371, null
br i1 %2372, label %2380, label %2373
; <label>:2373: ; preds = %2370
br label %2374
; <label>:2374: ; preds = %2374, %2373
%2375 = phi %struct.ContainerChunk* [ %2378, %2374 ], [ %2371, %2373 ]
%2376 = bitcast %struct.ContainerChunk* %2375 to i8*
%2377 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2375, i64 0, i32 0
%2378 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2377, align 8, !tbaa !484
call void @free(i8* %2376) #0
%2379 = icmp eq %struct.ContainerChunk* %2378, null
br i1 %2379, label %2380, label %2374
; <label>:2380: ; preds = %2374, %2370, %2358
%2381 = bitcast %struct.ObjHeader* %2356 to i8*
call void @free(i8* %2381) #0
br label %2382
; <label>:2382: ; preds = %2380, %2355
call void @llvm.lifetime.end.p0i8(i64 16, i8* %47)
%2383 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %2342, i64 1
%2384 = bitcast %struct.ObjHeader* %2383 to i32*
%2385 = load i32, i32* %2384, align 8, !tbaa !492
%2386 = icmp ugt i32 %2385, 2
br i1 %2386, label %2390, label %2387
; <label>:2387: ; preds = %2382
%2388 = invoke fastcc %struct.ObjHeader* @ThrowArrayIndexOutOfBoundsException() #27
to label %2389 unwind label %2459
; <label>:2389: ; preds = %2387
unreachable
; <label>:2390: ; preds = %2382
%2391 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %2342, i64 1, i32 1
%2392 = getelementptr inbounds %struct.ContainerHeader*, %struct.ContainerHeader** %2391, i64 2
%2393 = bitcast %struct.ContainerHeader** %2392 to %struct.ObjHeader**
%2394 = load %struct.ObjHeader*, %struct.ObjHeader** %2393, align 8, !tbaa !476
call fastcc void @UpdateReturnRef(%struct.ObjHeader** %45, %struct.ObjHeader* %2394) #0
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !494, metadata !412), !dbg !498
call void @llvm.dbg.declare(metadata %struct.ObjHeader** undef, metadata !499, metadata !500), !dbg !498
br i1 %152, label %2395, label %2397, !dbg !501
; <label>:2395: ; preds = %2390
%2396 = icmp eq %struct.ObjHeader* %2394, null, !dbg !501
br label %2408, !dbg !501
; <label>:2397: ; preds = %2390
%2398 = getelementptr inbounds %struct.ObjHeader, %struct.ObjHeader* %0, i64 0, i32 0, !dbg !501
%2399 = load %struct.TypeInfo*, %struct.TypeInfo** %2398, align 8, !dbg !501
%2400 = getelementptr inbounds %struct.TypeInfo, %struct.TypeInfo* %2399, i64 0, i32 0, !dbg !501
%2401 = load %struct.TypeInfo*, %struct.TypeInfo** %2400, align 8, !dbg !501
%2402 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2401, i64 1, i32 1, i32 0, i64 8, !dbg !501
%2403 = bitcast i8* %2402 to i1 (%struct.ObjHeader*, %struct.ObjHeader*)**, !dbg !501
%2404 = load i1 (%struct.ObjHeader*, %struct.ObjHeader*)*, i1 (%struct.ObjHeader*, %struct.ObjHeader*)** %2403, align 8, !dbg !501
%2405 = invoke i1 %2404(%struct.ObjHeader* nonnull %0, %struct.ObjHeader* %2394)
to label %2408 unwind label %2406, !dbg !501
; <label>:2406: ; preds = %2397
%2407 = landingpad { i8*, i32 }
cleanup, !dbg !502
br label %2461, !dbg !502
; <label>:2408: ; preds = %2397, %2395
%2409 = phi i1 [ %2396, %2395 ], [ %2405, %2397 ], !dbg !501
%2410 = select i1 %2409, i32 20, i32 -1
br label %2411
; <label>:2411: ; preds = %2408, %2290, %2277, %2172, %2159, %2054, %2041, %1936, %1923, %1818, %1805, %1700, %1687, %1582, %1569, %1464, %1451, %1346, %1333, %1228, %1215, %1110, %1097, %992, %979, %874, %861, %756, %743, %638, %625, %520, %507, %402, %389, %284, %271, %166, %153
%2412 = phi i32 [ 1, %166 ], [ 2, %284 ], [ 3, %402 ], [ 4, %520 ], [ 5, %638 ], [ 6, %756 ], [ 7, %874 ], [ 8, %992 ], [ 9, %1110 ], [ 10, %1228 ], [ 11, %1346 ], [ 12, %1464 ], [ 13, %1582 ], [ 14, %1700 ], [ 15, %1818 ], [ 16, %1936 ], [ 17, %2054 ], [ 18, %2172 ], [ 19, %2290 ], [ %2410, %2408 ], [ 1, %153 ], [ 2, %271 ], [ 3, %389 ], [ 4, %507 ], [ 5, %625 ], [ 6, %743 ], [ 7, %861 ], [ 8, %979 ], [ 9, %1097 ], [ 10, %1215 ], [ 11, %1333 ], [ 12, %1451 ], [ 13, %1569 ], [ 14, %1687 ], [ 15, %1805 ], [ 16, %1923 ], [ 17, %2041 ], [ 18, %2159 ], [ 19, %2277 ]
br label %2413
; <label>:2413: ; preds = %2429, %2411
%2414 = phi i32 [ 40, %2411 ], [ %2417, %2429 ]
%2415 = phi %struct.ObjHeader** [ %6, %2411 ], [ %2416, %2429 ]
%2416 = getelementptr inbounds %struct.ObjHeader*, %struct.ObjHeader** %2415, i64 1
%2417 = add nsw i32 %2414, -1
%2418 = load %struct.ObjHeader*, %struct.ObjHeader** %2416, align 8, !tbaa !476
%2419 = icmp eq %struct.ObjHeader* %2418, null
br i1 %2419, label %2429, label %2420
; <label>:2420: ; preds = %2413
%2421 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2418, i64 0, i32 0
%2422 = load %struct.TypeInfo*, %struct.TypeInfo** %2421, align 8, !tbaa !477
%2423 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2418, i64 0, i32 1
%2424 = load %struct.ContainerHeader*, %struct.ContainerHeader** %2423, align 8, !tbaa !479
%2425 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2422, i64 0, i32 0
%2426 = load %struct.TypeInfo*, %struct.TypeInfo** %2425, align 8, !tbaa !480
%2427 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2426, i64 0, i32 5
%2428 = load i32, i32* %2427, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %2428, %struct.ContainerHeader* %2424) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %2416, align 8, !tbaa !476
br label %2429
; <label>:2429: ; preds = %2420, %2413
%2430 = icmp ugt i32 %2414, 1
br i1 %2430, label %2413, label %2431
; <label>:2431: ; preds = %2429
%2432 = load %struct.ObjHeader*, %struct.ObjHeader** %4, align 8, !tbaa !476
%2433 = icmp eq %struct.ObjHeader* %2432, null
br i1 %2433, label %2458, label %2434
; <label>:2434: ; preds = %2431
%2435 = bitcast %struct.ObjHeader* %2432 to %struct.ContainerChunk**
%2436 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2435, align 8, !tbaa !476
%2437 = icmp eq %struct.ContainerChunk* %2436, null
br i1 %2437, label %2456, label %2438
; <label>:2438: ; preds = %2434
br label %2439
; <label>:2439: ; preds = %2439, %2438
%2440 = phi %struct.ContainerChunk* [ %2444, %2439 ], [ %2436, %2438 ]
%2441 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2440, i64 1
%2442 = bitcast %struct.ContainerChunk* %2441 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %2442) #0
%2443 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2440, i64 0, i32 0
%2444 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2443, align 8, !tbaa !476
%2445 = icmp eq %struct.ContainerChunk* %2444, null
br i1 %2445, label %2446, label %2439
; <label>:2446: ; preds = %2439
%2447 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2435, align 8, !tbaa !482
%2448 = icmp eq %struct.ContainerChunk* %2447, null
br i1 %2448, label %2456, label %2449
; <label>:2449: ; preds = %2446
br label %2450
; <label>:2450: ; preds = %2450, %2449
%2451 = phi %struct.ContainerChunk* [ %2454, %2450 ], [ %2447, %2449 ]
%2452 = bitcast %struct.ContainerChunk* %2451 to i8*
%2453 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2451, i64 0, i32 0
%2454 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2453, align 8, !tbaa !484
call void @free(i8* %2452) #0
%2455 = icmp eq %struct.ContainerChunk* %2454, null
br i1 %2455, label %2456, label %2450
; <label>:2456: ; preds = %2450, %2446, %2434
%2457 = bitcast %struct.ObjHeader* %2432 to i8*
call void @free(i8* %2457) #0
br label %2458
; <label>:2458: ; preds = %2456, %2431
ret i32 %2412
; <label>:2459: ; preds = %2387, %2269, %2151, %2033, %1915, %1797, %1679, %1561, %1443, %1325, %1207, %1089, %971, %853, %735, %617, %499, %381, %263, %144
%2460 = landingpad { i8*, i32 }
cleanup
br label %2461
; <label>:2461: ; preds = %2459, %2406, %2336, %2311, %2288, %2218, %2193, %2170, %2100, %2075, %2052, %1982, %1957, %1934, %1864, %1839, %1816, %1746, %1721, %1698, %1628, %1603, %1580, %1510, %1485, %1462, %1392, %1367, %1344, %1274, %1249, %1226, %1156, %1131, %1108, %1038, %1013, %990, %920, %895, %872, %802, %777, %754, %684, %659, %636, %566, %541, %518, %448, %423, %400, %330, %305, %282, %212, %187, %164, %93, %68
%2462 = phi { i8*, i32 } [ %55, %68 ], [ %55, %93 ], [ %165, %164 ], [ %174, %187 ], [ %174, %212 ], [ %283, %282 ], [ %292, %305 ], [ %292, %330 ], [ %401, %400 ], [ %410, %423 ], [ %410, %448 ], [ %519, %518 ], [ %528, %541 ], [ %528, %566 ], [ %637, %636 ], [ %646, %659 ], [ %646, %684 ], [ %755, %754 ], [ %764, %777 ], [ %764, %802 ], [ %873, %872 ], [ %882, %895 ], [ %882, %920 ], [ %991, %990 ], [ %1000, %1013 ], [ %1000, %1038 ], [ %1109, %1108 ], [ %1118, %1131 ], [ %1118, %1156 ], [ %1227, %1226 ], [ %1236, %1249 ], [ %1236, %1274 ], [ %1345, %1344 ], [ %1354, %1367 ], [ %1354, %1392 ], [ %1463, %1462 ], [ %1472, %1485 ], [ %1472, %1510 ], [ %1581, %1580 ], [ %1590, %1603 ], [ %1590, %1628 ], [ %1699, %1698 ], [ %1708, %1721 ], [ %1708, %1746 ], [ %1817, %1816 ], [ %1826, %1839 ], [ %1826, %1864 ], [ %1935, %1934 ], [ %1944, %1957 ], [ %1944, %1982 ], [ %2053, %2052 ], [ %2062, %2075 ], [ %2062, %2100 ], [ %2171, %2170 ], [ %2180, %2193 ], [ %2180, %2218 ], [ %2289, %2288 ], [ %2298, %2311 ], [ %2298, %2336 ], [ %2460, %2459 ], [ %2407, %2406 ]
br label %2463
; <label>:2463: ; preds = %2479, %2461
%2464 = phi i32 [ 40, %2461 ], [ %2467, %2479 ]
%2465 = phi %struct.ObjHeader** [ %6, %2461 ], [ %2466, %2479 ]
%2466 = getelementptr inbounds %struct.ObjHeader*, %struct.ObjHeader** %2465, i64 1
%2467 = add nsw i32 %2464, -1
%2468 = load %struct.ObjHeader*, %struct.ObjHeader** %2466, align 8, !tbaa !476
%2469 = icmp eq %struct.ObjHeader* %2468, null
br i1 %2469, label %2479, label %2470
; <label>:2470: ; preds = %2463
%2471 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2468, i64 0, i32 0
%2472 = load %struct.TypeInfo*, %struct.TypeInfo** %2471, align 8, !tbaa !477
%2473 = getelementptr %struct.ObjHeader, %struct.ObjHeader* %2468, i64 0, i32 1
%2474 = load %struct.ContainerHeader*, %struct.ContainerHeader** %2473, align 8, !tbaa !479
%2475 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2472, i64 0, i32 0
%2476 = load %struct.TypeInfo*, %struct.TypeInfo** %2475, align 8, !tbaa !480
%2477 = getelementptr %struct.TypeInfo, %struct.TypeInfo* %2476, i64 0, i32 5
%2478 = load i32, i32* %2477, align 8, !tbaa !481
call fastcc void @_Z10ReleaseRefPK9ObjHeader(i32 %2478, %struct.ContainerHeader* %2474) #0
store %struct.ObjHeader* null, %struct.ObjHeader** %2466, align 8, !tbaa !476
br label %2479
; <label>:2479: ; preds = %2470, %2463
%2480 = icmp ugt i32 %2464, 1
br i1 %2480, label %2463, label %2481
; <label>:2481: ; preds = %2479
%2482 = load %struct.ObjHeader*, %struct.ObjHeader** %4, align 8, !tbaa !476
%2483 = icmp eq %struct.ObjHeader* %2482, null
br i1 %2483, label %2508, label %2484
; <label>:2484: ; preds = %2481
%2485 = bitcast %struct.ObjHeader* %2482 to %struct.ContainerChunk**
%2486 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2485, align 8, !tbaa !476
%2487 = icmp eq %struct.ContainerChunk* %2486, null
br i1 %2487, label %2506, label %2488
; <label>:2488: ; preds = %2484
br label %2489
; <label>:2489: ; preds = %2489, %2488
%2490 = phi %struct.ContainerChunk* [ %2494, %2489 ], [ %2486, %2488 ]
%2491 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2490, i64 1
%2492 = bitcast %struct.ContainerChunk* %2491 to %struct.ContainerHeader*
call fastcc void @_Z13FreeContainerP15ContainerHeader(%struct.ContainerHeader* %2492) #0
%2493 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2490, i64 0, i32 0
%2494 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2493, align 8, !tbaa !476
%2495 = icmp eq %struct.ContainerChunk* %2494, null
br i1 %2495, label %2496, label %2489
; <label>:2496: ; preds = %2489
%2497 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2485, align 8, !tbaa !482
%2498 = icmp eq %struct.ContainerChunk* %2497, null
br i1 %2498, label %2506, label %2499
; <label>:2499: ; preds = %2496
br label %2500
; <label>:2500: ; preds = %2500, %2499
%2501 = phi %struct.ContainerChunk* [ %2504, %2500 ], [ %2497, %2499 ]
%2502 = bitcast %struct.ContainerChunk* %2501 to i8*
%2503 = getelementptr inbounds %struct.ContainerChunk, %struct.ContainerChunk* %2501, i64 0, i32 0
%2504 = load %struct.ContainerChunk*, %struct.ContainerChunk** %2503, align 8, !tbaa !484
call void @free(i8* %2502) #0
%2505 = icmp eq %struct.ContainerChunk* %2504, null
br i1 %2505, label %2506, label %2500
; <label>:2506: ; preds = %2500, %2496, %2484
%2507 = bitcast %struct.ObjHeader* %2482 to i8*
call void @free(i8* %2507) #0
br label %2508
; <label>:2508: ; preds = %2506, %2481
resume { i8*, i32 } %2462
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment