; LLVM IR from nickmqb/muon :: bootstrap/mu.ll_TypeCheckerFirstPass (buildTags__)

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

%struct.string__ = type { ptr, i32 }
%struct.tag_____IAllocator__ = type { ptr, ptr, ptr, ptr }
%struct.tag_____CommonTags__ = type { %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, %struct.tag_____Tag__, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.tag_____Tag__ = type { ptr, ptr }
%struct.Node__ = type { i32, ptr }
%struct.tag_____Namespace__ = type { %struct.string__, ptr, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32 }
%struct.tag_____Map__string__Node____ = type { %struct.tag_____Array__MapEntry__string__Node______, i32, i32, i32 }
%struct.tag_____Array__MapEntry__string__Node______ = type { ptr, i32 }
%struct.tag_____List__Ptr__Namespace______ = type { ptr, i32, i32 }
%struct.tag_____TypeCheckerContext__ = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, i32, i8 }
%struct.tag_____Compilation__ = type { ptr, ptr, i32, ptr, ptr, ptr, i32 }

@mu_____string158 = external dso_local global %struct.string__, align 8
@mu_____string148 = external dso_local global %struct.string__, align 8
@mu_____string157 = external dso_local global %struct.string__, align 8
@mu_____string137 = external dso_local global %struct.string__, align 8
@mu_____string150 = external dso_local global %struct.string__, align 8
@mu_____string129 = external dso_local global %struct.string__, align 8
@mu_____string149 = external dso_local global %struct.string__, align 8
@mu_____string151 = external dso_local global %struct.string__, align 8
@mu_____string145 = external dso_local global %struct.string__, align 8
@mu_____string147 = external dso_local global %struct.string__, align 8
@mu_____string144 = external dso_local global %struct.string__, align 8
@mu_____string142 = external dso_local global %struct.string__, align 8
@mu_____string155 = external dso_local global %struct.string__, align 8
@mu_____string136 = external dso_local global %struct.string__, align 8
@mu_____string140 = external dso_local global %struct.string__, align 8
@mu_____string132 = external dso_local global %struct.string__, align 8
@mu_____string146 = external dso_local global %struct.string__, align 8
@mu_____string130 = external dso_local global %struct.string__, align 8
@mu_____string133 = external dso_local global %struct.string__, align 8
@mu_____string128 = external dso_local global %struct.string__, align 8
@mu_____string139 = external dso_local global %struct.string__, align 8
@mu_____string156 = external dso_local global %struct.string__, align 8
@mu_____string134 = external dso_local global %struct.string__, align 8
@mu_____string154 = external dso_local global %struct.string__, align 8
@mu_____string159 = external dso_local global %struct.string__, align 8
@mu_____string141 = external dso_local global %struct.string__, align 8
@mu_____string143 = external dso_local global %struct.string__, align 8
@mu_____string135 = external dso_local global %struct.string__, align 8
@mu_____string153 = external dso_local global %struct.string__, align 8
@mu_____string138 = external dso_local global %struct.string__, align 8
@mu_____string131 = external dso_local global %struct.string__, align 8
@top_____currentAllocator__ = external dso_local thread_local global %struct.tag_____IAllocator__, align 8

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #1

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

; Function Attrs: nounwind uwtable
define dso_local void @TypeCheckerFirstPass__buildTags__(ptr noundef %0) #4 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca %struct.tag_____CommonTags__, align 8
  %5 = alloca ptr, align 8
  %6 = alloca %struct.tag_____Tag__, align 8
  %7 = alloca %struct.tag_____Tag__, align 8
  %8 = alloca %struct.tag_____Tag__, align 8
  %9 = alloca %struct.tag_____Tag__, align 8
  %10 = alloca %struct.tag_____Tag__, align 8
  %11 = alloca %struct.tag_____Tag__, align 8
  %12 = alloca %struct.tag_____Tag__, align 8
  %13 = alloca %struct.tag_____Tag__, align 8
  %14 = alloca %struct.tag_____Tag__, align 8
  %15 = alloca %struct.tag_____Tag__, align 8
  %16 = alloca %struct.tag_____Tag__, align 8
  %17 = alloca %struct.tag_____Tag__, align 8
  %18 = alloca %struct.tag_____Tag__, align 8
  %19 = alloca %struct.tag_____Tag__, align 8
  %20 = alloca %struct.tag_____Tag__, align 8
  %21 = alloca %struct.tag_____Tag__, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i8, align 1
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca %struct.Node__, align 8
  %27 = alloca i8, align 1
  %28 = alloca %struct.Node__, align 8
  %29 = alloca %struct.tag_____Tag__, align 8
  %30 = alloca %struct.tag_____Tag__, align 8
  %31 = alloca %struct.tag_____Tag__, align 8
  %32 = alloca %struct.tag_____Tag__, align 8
  %33 = alloca i8, align 1
  %34 = alloca %struct.tag_____Tag__, align 8
  %35 = alloca i8, align 1
  %36 = alloca ptr, align 8
  %37 = alloca i8, align 1
  %38 = alloca i8, align 1
  %39 = alloca ptr, align 8
  %40 = alloca i8, align 1
  %41 = alloca i8, align 1
  %42 = alloca ptr, align 8
  %43 = alloca i8, align 1
  %44 = alloca i8, align 1
  %45 = alloca ptr, align 8
  %46 = alloca i8, align 1
  %47 = alloca i8, align 1
  %48 = alloca ptr, align 8
  %49 = alloca i8, align 1
  %50 = alloca i8, align 1
  %51 = alloca ptr, align 8
  %52 = alloca i8, align 1
  %53 = alloca i8, align 1
  %54 = alloca ptr, align 8
  %55 = alloca i8, align 1
  %56 = alloca i8, align 1
  %57 = alloca ptr, align 8
  %58 = alloca i8, align 1
  %59 = alloca i8, align 1
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  %60 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %61 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %60, i32 0, i32 1
  %62 = load ptr, ptr %61, align 8, !tbaa !9
  %63 = call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %64 = getelementptr inbounds %struct.tag_____IAllocator__, ptr %63, i32 0, i32 0
  %65 = load ptr, ptr %64, align 8, !tbaa !11
  %66 = call ptr %62(ptr noundef %65, i64 noundef 384)
  store ptr %66, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 384, ptr %4) #5
  call void @llvm.memset.p0.i64(ptr align 8 %4, i8 0, i64 384, i1 false)
  %67 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %67, ptr align 8 %4, i64 384, i1 false), !tbaa.struct !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  %68 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %68, ptr %5, align 8, !tbaa !5
  %69 = load ptr, ptr %5, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %69, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #5
  %71 = load ptr, ptr %2, align 8, !tbaa !5
  %72 = load ptr, ptr @mu_____string128, align 8
  %73 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string128, i32 0, i32 1), align 8
  %74 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %71, ptr %72, i32 %73)
  %75 = getelementptr inbounds { ptr, ptr }, ptr %6, i32 0, i32 0
  %76 = extractvalue { ptr, ptr } %74, 0
  store ptr %76, ptr %75, align 8
  %77 = getelementptr inbounds { ptr, ptr }, ptr %6, i32 0, i32 1
  %78 = extractvalue { ptr, ptr } %74, 1
  store ptr %78, ptr %77, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %70, ptr align 8 %6, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #5
  %79 = load ptr, ptr %5, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %79, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #5
  %81 = load ptr, ptr %2, align 8, !tbaa !5
  %82 = load ptr, ptr @mu_____string129, align 8
  %83 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string129, i32 0, i32 1), align 8
  %84 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %81, ptr %82, i32 %83)
  %85 = getelementptr inbounds { ptr, ptr }, ptr %7, i32 0, i32 0
  %86 = extractvalue { ptr, ptr } %84, 0
  store ptr %86, ptr %85, align 8
  %87 = getelementptr inbounds { ptr, ptr }, ptr %7, i32 0, i32 1
  %88 = extractvalue { ptr, ptr } %84, 1
  store ptr %88, ptr %87, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %80, ptr align 8 %7, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #5
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %89, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #5
  %91 = load ptr, ptr %2, align 8, !tbaa !5
  %92 = load ptr, ptr @mu_____string130, align 8
  %93 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string130, i32 0, i32 1), align 8
  %94 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %91, ptr %92, i32 %93)
  %95 = getelementptr inbounds { ptr, ptr }, ptr %8, i32 0, i32 0
  %96 = extractvalue { ptr, ptr } %94, 0
  store ptr %96, ptr %95, align 8
  %97 = getelementptr inbounds { ptr, ptr }, ptr %8, i32 0, i32 1
  %98 = extractvalue { ptr, ptr } %94, 1
  store ptr %98, ptr %97, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %90, ptr align 8 %8, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #5
  %99 = load ptr, ptr %5, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %99, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #5
  %101 = load ptr, ptr %2, align 8, !tbaa !5
  %102 = load ptr, ptr @mu_____string131, align 8
  %103 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string131, i32 0, i32 1), align 8
  %104 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %101, ptr %102, i32 %103)
  %105 = getelementptr inbounds { ptr, ptr }, ptr %9, i32 0, i32 0
  %106 = extractvalue { ptr, ptr } %104, 0
  store ptr %106, ptr %105, align 8
  %107 = getelementptr inbounds { ptr, ptr }, ptr %9, i32 0, i32 1
  %108 = extractvalue { ptr, ptr } %104, 1
  store ptr %108, ptr %107, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %100, ptr align 8 %9, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #5
  %109 = load ptr, ptr %5, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %109, i32 0, i32 4
  call void @llvm.lifetime.start.p0(i64 16, ptr %10) #5
  %111 = load ptr, ptr %2, align 8, !tbaa !5
  %112 = load ptr, ptr @mu_____string132, align 8
  %113 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string132, i32 0, i32 1), align 8
  %114 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %111, ptr %112, i32 %113)
  %115 = getelementptr inbounds { ptr, ptr }, ptr %10, i32 0, i32 0
  %116 = extractvalue { ptr, ptr } %114, 0
  store ptr %116, ptr %115, align 8
  %117 = getelementptr inbounds { ptr, ptr }, ptr %10, i32 0, i32 1
  %118 = extractvalue { ptr, ptr } %114, 1
  store ptr %118, ptr %117, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %110, ptr align 8 %10, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #5
  %119 = load ptr, ptr %5, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %119, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #5
  %121 = load ptr, ptr %2, align 8, !tbaa !5
  %122 = load ptr, ptr @mu_____string133, align 8
  %123 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string133, i32 0, i32 1), align 8
  %124 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %121, ptr %122, i32 %123)
  %125 = getelementptr inbounds { ptr, ptr }, ptr %11, i32 0, i32 0
  %126 = extractvalue { ptr, ptr } %124, 0
  store ptr %126, ptr %125, align 8
  %127 = getelementptr inbounds { ptr, ptr }, ptr %11, i32 0, i32 1
  %128 = extractvalue { ptr, ptr } %124, 1
  store ptr %128, ptr %127, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %120, ptr align 8 %11, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #5
  %129 = load ptr, ptr %5, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %129, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #5
  %131 = load ptr, ptr %2, align 8, !tbaa !5
  %132 = load ptr, ptr @mu_____string134, align 8
  %133 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string134, i32 0, i32 1), align 8
  %134 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %131, ptr %132, i32 %133)
  %135 = getelementptr inbounds { ptr, ptr }, ptr %12, i32 0, i32 0
  %136 = extractvalue { ptr, ptr } %134, 0
  store ptr %136, ptr %135, align 8
  %137 = getelementptr inbounds { ptr, ptr }, ptr %12, i32 0, i32 1
  %138 = extractvalue { ptr, ptr } %134, 1
  store ptr %138, ptr %137, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %130, ptr align 8 %12, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #5
  %139 = load ptr, ptr %5, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %139, i32 0, i32 7
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #5
  %141 = load ptr, ptr %2, align 8, !tbaa !5
  %142 = load ptr, ptr @mu_____string135, align 8
  %143 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string135, i32 0, i32 1), align 8
  %144 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %141, ptr %142, i32 %143)
  %145 = getelementptr inbounds { ptr, ptr }, ptr %13, i32 0, i32 0
  %146 = extractvalue { ptr, ptr } %144, 0
  store ptr %146, ptr %145, align 8
  %147 = getelementptr inbounds { ptr, ptr }, ptr %13, i32 0, i32 1
  %148 = extractvalue { ptr, ptr } %144, 1
  store ptr %148, ptr %147, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %140, ptr align 8 %13, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #5
  %149 = load ptr, ptr %5, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %149, i32 0, i32 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #5
  %151 = load ptr, ptr %2, align 8, !tbaa !5
  %152 = load ptr, ptr @mu_____string136, align 8
  %153 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string136, i32 0, i32 1), align 8
  %154 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %151, ptr %152, i32 %153)
  %155 = getelementptr inbounds { ptr, ptr }, ptr %14, i32 0, i32 0
  %156 = extractvalue { ptr, ptr } %154, 0
  store ptr %156, ptr %155, align 8
  %157 = getelementptr inbounds { ptr, ptr }, ptr %14, i32 0, i32 1
  %158 = extractvalue { ptr, ptr } %154, 1
  store ptr %158, ptr %157, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %150, ptr align 8 %14, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #5
  %159 = load ptr, ptr %5, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %159, i32 0, i32 9
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #5
  %161 = load ptr, ptr %2, align 8, !tbaa !5
  %162 = load ptr, ptr @mu_____string137, align 8
  %163 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string137, i32 0, i32 1), align 8
  %164 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %161, ptr %162, i32 %163)
  %165 = getelementptr inbounds { ptr, ptr }, ptr %15, i32 0, i32 0
  %166 = extractvalue { ptr, ptr } %164, 0
  store ptr %166, ptr %165, align 8
  %167 = getelementptr inbounds { ptr, ptr }, ptr %15, i32 0, i32 1
  %168 = extractvalue { ptr, ptr } %164, 1
  store ptr %168, ptr %167, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %160, ptr align 8 %15, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #5
  %169 = load ptr, ptr %5, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %169, i32 0, i32 10
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #5
  %171 = load ptr, ptr %2, align 8, !tbaa !5
  %172 = load ptr, ptr @mu_____string138, align 8
  %173 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string138, i32 0, i32 1), align 8
  %174 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %171, ptr %172, i32 %173)
  %175 = getelementptr inbounds { ptr, ptr }, ptr %16, i32 0, i32 0
  %176 = extractvalue { ptr, ptr } %174, 0
  store ptr %176, ptr %175, align 8
  %177 = getelementptr inbounds { ptr, ptr }, ptr %16, i32 0, i32 1
  %178 = extractvalue { ptr, ptr } %174, 1
  store ptr %178, ptr %177, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %170, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #5
  %179 = load ptr, ptr %5, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %179, i32 0, i32 11
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #5
  %181 = load ptr, ptr %2, align 8, !tbaa !5
  %182 = load ptr, ptr @mu_____string139, align 8
  %183 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string139, i32 0, i32 1), align 8
  %184 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %181, ptr %182, i32 %183)
  %185 = getelementptr inbounds { ptr, ptr }, ptr %17, i32 0, i32 0
  %186 = extractvalue { ptr, ptr } %184, 0
  store ptr %186, ptr %185, align 8
  %187 = getelementptr inbounds { ptr, ptr }, ptr %17, i32 0, i32 1
  %188 = extractvalue { ptr, ptr } %184, 1
  store ptr %188, ptr %187, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %180, ptr align 8 %17, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #5
  %189 = load ptr, ptr %5, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %189, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #5
  %191 = load ptr, ptr %2, align 8, !tbaa !5
  %192 = load ptr, ptr @mu_____string140, align 8
  %193 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string140, i32 0, i32 1), align 8
  %194 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %191, ptr %192, i32 %193)
  %195 = getelementptr inbounds { ptr, ptr }, ptr %18, i32 0, i32 0
  %196 = extractvalue { ptr, ptr } %194, 0
  store ptr %196, ptr %195, align 8
  %197 = getelementptr inbounds { ptr, ptr }, ptr %18, i32 0, i32 1
  %198 = extractvalue { ptr, ptr } %194, 1
  store ptr %198, ptr %197, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %190, ptr align 8 %18, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #5
  %199 = load ptr, ptr %5, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %199, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #5
  %201 = load ptr, ptr %2, align 8, !tbaa !5
  %202 = load ptr, ptr @mu_____string141, align 8
  %203 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string141, i32 0, i32 1), align 8
  %204 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %201, ptr %202, i32 %203)
  %205 = getelementptr inbounds { ptr, ptr }, ptr %19, i32 0, i32 0
  %206 = extractvalue { ptr, ptr } %204, 0
  store ptr %206, ptr %205, align 8
  %207 = getelementptr inbounds { ptr, ptr }, ptr %19, i32 0, i32 1
  %208 = extractvalue { ptr, ptr } %204, 1
  store ptr %208, ptr %207, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %200, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #5
  %209 = load ptr, ptr %5, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %209, i32 0, i32 14
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #5
  %211 = load ptr, ptr %2, align 8, !tbaa !5
  %212 = load ptr, ptr @mu_____string142, align 8
  %213 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string142, i32 0, i32 1), align 8
  %214 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %211, ptr %212, i32 %213)
  %215 = getelementptr inbounds { ptr, ptr }, ptr %20, i32 0, i32 0
  %216 = extractvalue { ptr, ptr } %214, 0
  store ptr %216, ptr %215, align 8
  %217 = getelementptr inbounds { ptr, ptr }, ptr %20, i32 0, i32 1
  %218 = extractvalue { ptr, ptr } %214, 1
  store ptr %218, ptr %217, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %210, ptr align 8 %20, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  %219 = load ptr, ptr %5, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %219, i32 0, i32 15
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #5
  %221 = load ptr, ptr %2, align 8, !tbaa !5
  %222 = load ptr, ptr @mu_____string143, align 8
  %223 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string143, i32 0, i32 1), align 8
  %224 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %221, ptr %222, i32 %223)
  %225 = getelementptr inbounds { ptr, ptr }, ptr %21, i32 0, i32 0
  %226 = extractvalue { ptr, ptr } %224, 0
  store ptr %226, ptr %225, align 8
  %227 = getelementptr inbounds { ptr, ptr }, ptr %21, i32 0, i32 1
  %228 = extractvalue { ptr, ptr } %224, 1
  store ptr %228, ptr %227, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %220, ptr align 8 %21, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %229 = load ptr, ptr %2, align 8, !tbaa !5
  %230 = load ptr, ptr @mu_____string144, align 8
  %231 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string144, i32 0, i32 1), align 8
  %232 = call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %229, ptr %230, i32 %231)
  store ptr %232, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #5
  %233 = load ptr, ptr %22, align 8, !tbaa !5
  %234 = icmp ne ptr %233, null
  %235 = zext i1 %234 to i32
  %236 = trunc i32 %235 to i8
  store i8 %236, ptr %23, align 1, !tbaa !14
  %237 = load i8, ptr %23, align 1, !tbaa !14
  %238 = icmp ne i8 %237, 0
  br i1 %238, label %239, label %247

239:                                              ; preds = %1
  %240 = load ptr, ptr %22, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.tag_____Namespace__, ptr %240, i32 0, i32 3
  %242 = load i32, ptr %241, align 4, !tbaa !15
  %243 = and i32 %242, 256
  %244 = icmp ne i32 %243, 0
  %245 = zext i1 %244 to i32
  %246 = trunc i32 %245 to i8
  store i8 %246, ptr %23, align 1, !tbaa !14
  br label %247

247:                                              ; preds = %239, %1
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #5
  %248 = load i8, ptr %23, align 1, !tbaa !14
  store i8 %248, ptr %24, align 1, !tbaa !14
  %249 = load i8, ptr %24, align 1, !tbaa !14
  %250 = icmp ne i8 %249, 0
  br i1 %250, label %251, label %258

251:                                              ; preds = %247
  %252 = load ptr, ptr %22, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.tag_____Namespace__, ptr %252, i32 0, i32 9
  %254 = load ptr, ptr %253, align 8, !tbaa !19
  %255 = icmp eq ptr %254, null
  %256 = zext i1 %255 to i32
  %257 = trunc i32 %256 to i8
  store i8 %257, ptr %24, align 1, !tbaa !14
  br label %258

258:                                              ; preds = %251, %247
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #5
  %259 = load i8, ptr %24, align 1, !tbaa !14
  store i8 %259, ptr %25, align 1, !tbaa !14
  %260 = load i8, ptr %25, align 1, !tbaa !14
  %261 = icmp ne i8 %260, 0
  br i1 %261, label %262, label %278

262:                                              ; preds = %258
  %263 = load ptr, ptr %22, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.tag_____Namespace__, ptr %263, i32 0, i32 4
  %265 = load ptr, ptr %264, align 8, !tbaa !20
  %266 = load ptr, ptr @mu_____string145, align 8
  %267 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string145, i32 0, i32 1), align 8
  %268 = call { i32, ptr } @Map__getOrDefault__string__Node____(ptr noundef %265, ptr %266, i32 %267)
  %269 = getelementptr inbounds { i32, ptr }, ptr %26, i32 0, i32 0
  %270 = extractvalue { i32, ptr } %268, 0
  store i32 %270, ptr %269, align 8
  %271 = getelementptr inbounds { i32, ptr }, ptr %26, i32 0, i32 1
  %272 = extractvalue { i32, ptr } %268, 1
  store ptr %272, ptr %271, align 8
  %273 = getelementptr inbounds %struct.Node__, ptr %26, i32 0, i32 1
  %274 = load ptr, ptr %273, align 8, !tbaa !21
  %275 = icmp ne ptr %274, null
  %276 = zext i1 %275 to i32
  %277 = trunc i32 %276 to i8
  store i8 %277, ptr %25, align 1, !tbaa !14
  br label %278

278:                                              ; preds = %262, %258
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #5
  %279 = load i8, ptr %25, align 1, !tbaa !14
  store i8 %279, ptr %27, align 1, !tbaa !14
  %280 = load i8, ptr %27, align 1, !tbaa !14
  %281 = icmp ne i8 %280, 0
  br i1 %281, label %282, label %298

282:                                              ; preds = %278
  %283 = load ptr, ptr %22, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.tag_____Namespace__, ptr %283, i32 0, i32 4
  %285 = load ptr, ptr %284, align 8, !tbaa !20
  %286 = load ptr, ptr @mu_____string146, align 8
  %287 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string146, i32 0, i32 1), align 8
  %288 = call { i32, ptr } @Map__getOrDefault__string__Node____(ptr noundef %285, ptr %286, i32 %287)
  %289 = getelementptr inbounds { i32, ptr }, ptr %28, i32 0, i32 0
  %290 = extractvalue { i32, ptr } %288, 0
  store i32 %290, ptr %289, align 8
  %291 = getelementptr inbounds { i32, ptr }, ptr %28, i32 0, i32 1
  %292 = extractvalue { i32, ptr } %288, 1
  store ptr %292, ptr %291, align 8
  %293 = getelementptr inbounds %struct.Node__, ptr %28, i32 0, i32 1
  %294 = load ptr, ptr %293, align 8, !tbaa !21
  %295 = icmp ne ptr %294, null
  %296 = zext i1 %295 to i32
  %297 = trunc i32 %296 to i8
  store i8 %297, ptr %27, align 1, !tbaa !14
  br label %298

298:                                              ; preds = %282, %278
  %299 = load i8, ptr %27, align 1, !tbaa !14
  %300 = icmp ne i8 %299, 0
  br i1 %300, label %301, label %306

301:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #5
  call void @llvm.memset.p0.i64(ptr align 8 %29, i8 0, i64 16, i1 false)
  %302 = load ptr, ptr %22, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.tag_____Tag__, ptr %29, i32 0, i32 0
  store ptr %302, ptr %303, align 8, !tbaa !23
  %304 = load ptr, ptr %5, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %304, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %305, ptr align 8 %29, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #5
  br label %311

306:                                              ; preds = %298
  %307 = load ptr, ptr %2, align 8, !tbaa !5
  %308 = load ptr, ptr %22, align 8, !tbaa !5
  %309 = load ptr, ptr @mu_____string144, align 8
  %310 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string144, i32 0, i32 1), align 8
  call void @TypeCheckerFirstPass__badCoreType__(ptr noundef %307, ptr %309, i32 %310, ptr noundef %308)
  br label %311

311:                                              ; preds = %306, %301
  %312 = load ptr, ptr %5, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %312, i32 0, i32 18
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #5
  %314 = load ptr, ptr %2, align 8, !tbaa !5
  %315 = load ptr, ptr @mu_____string147, align 8
  %316 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string147, i32 0, i32 1), align 8
  %317 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %314, ptr %315, i32 %316)
  %318 = getelementptr inbounds { ptr, ptr }, ptr %30, i32 0, i32 0
  %319 = extractvalue { ptr, ptr } %317, 0
  store ptr %319, ptr %318, align 8
  %320 = getelementptr inbounds { ptr, ptr }, ptr %30, i32 0, i32 1
  %321 = extractvalue { ptr, ptr } %317, 1
  store ptr %321, ptr %320, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %313, ptr align 8 %30, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #5
  %322 = load ptr, ptr %5, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %322, i32 0, i32 17
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #5
  %324 = load ptr, ptr %2, align 8, !tbaa !5
  %325 = load ptr, ptr @mu_____string148, align 8
  %326 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string148, i32 0, i32 1), align 8
  %327 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %324, ptr %325, i32 %326)
  %328 = getelementptr inbounds { ptr, ptr }, ptr %31, i32 0, i32 0
  %329 = extractvalue { ptr, ptr } %327, 0
  store ptr %329, ptr %328, align 8
  %330 = getelementptr inbounds { ptr, ptr }, ptr %31, i32 0, i32 1
  %331 = extractvalue { ptr, ptr } %327, 1
  store ptr %331, ptr %330, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %323, ptr align 8 %31, i64 16, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #5
  %332 = load ptr, ptr %2, align 8, !tbaa !5
  %333 = load ptr, ptr @mu_____string149, align 8
  %334 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string149, i32 0, i32 1), align 8
  %335 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %332, ptr %333, i32 %334)
  %336 = getelementptr inbounds { ptr, ptr }, ptr %32, i32 0, i32 0
  %337 = extractvalue { ptr, ptr } %335, 0
  store ptr %337, ptr %336, align 8
  %338 = getelementptr inbounds { ptr, ptr }, ptr %32, i32 0, i32 1
  %339 = extractvalue { ptr, ptr } %335, 1
  store ptr %339, ptr %338, align 8
  %340 = getelementptr inbounds %struct.tag_____Tag__, ptr %32, i32 0, i32 0
  %341 = load ptr, ptr %340, align 8, !tbaa !23
  %342 = load ptr, ptr %5, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %342, i32 0, i32 19
  store ptr %341, ptr %343, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #5
  %344 = load ptr, ptr %5, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %344, i32 0, i32 19
  %346 = load ptr, ptr %345, align 8, !tbaa !25
  %347 = icmp ne ptr %346, null
  %348 = zext i1 %347 to i32
  %349 = trunc i32 %348 to i8
  store i8 %349, ptr %33, align 1, !tbaa !14
  %350 = load i8, ptr %33, align 1, !tbaa !14
  %351 = icmp ne i8 %350, 0
  br i1 %351, label %352, label %363

352:                                              ; preds = %311
  %353 = load ptr, ptr %5, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %353, i32 0, i32 19
  %355 = load ptr, ptr %354, align 8, !tbaa !25
  %356 = getelementptr inbounds %struct.tag_____Namespace__, ptr %355, i32 0, i32 4
  %357 = load ptr, ptr %356, align 8, !tbaa !20
  %358 = getelementptr inbounds %struct.tag_____Map__string__Node____, ptr %357, i32 0, i32 1
  %359 = load i32, ptr %358, align 8, !tbaa !27
  %360 = icmp sgt i32 %359, 0
  %361 = zext i1 %360 to i32
  %362 = trunc i32 %361 to i8
  store i8 %362, ptr %33, align 1, !tbaa !14
  br label %363

363:                                              ; preds = %352, %311
  %364 = load i8, ptr %33, align 1, !tbaa !14
  %365 = icmp ne i8 %364, 0
  br i1 %365, label %366, label %373

366:                                              ; preds = %363
  %367 = load ptr, ptr %2, align 8, !tbaa !5
  %368 = load ptr, ptr %5, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %368, i32 0, i32 19
  %370 = load ptr, ptr %369, align 8, !tbaa !25
  %371 = load ptr, ptr @mu_____string149, align 8
  %372 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string149, i32 0, i32 1), align 8
  call void @TypeCheckerFirstPass__badCoreType__(ptr noundef %367, ptr %371, i32 %372, ptr noundef %370)
  br label %373

373:                                              ; preds = %366, %363
  %374 = load ptr, ptr %2, align 8, !tbaa !5
  %375 = load ptr, ptr @mu_____string150, align 8
  %376 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string150, i32 0, i32 1), align 8
  %377 = call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %374, ptr %375, i32 %376)
  %378 = getelementptr inbounds { ptr, ptr }, ptr %34, i32 0, i32 0
  %379 = extractvalue { ptr, ptr } %377, 0
  store ptr %379, ptr %378, align 8
  %380 = getelementptr inbounds { ptr, ptr }, ptr %34, i32 0, i32 1
  %381 = extractvalue { ptr, ptr } %377, 1
  store ptr %381, ptr %380, align 8
  %382 = getelementptr inbounds %struct.tag_____Tag__, ptr %34, i32 0, i32 0
  %383 = load ptr, ptr %382, align 8, !tbaa !23
  %384 = load ptr, ptr %5, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %384, i32 0, i32 20
  store ptr %383, ptr %385, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #5
  %386 = load ptr, ptr %5, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %386, i32 0, i32 20
  %388 = load ptr, ptr %387, align 8, !tbaa !30
  %389 = icmp ne ptr %388, null
  %390 = zext i1 %389 to i32
  %391 = trunc i32 %390 to i8
  store i8 %391, ptr %35, align 1, !tbaa !14
  %392 = load i8, ptr %35, align 1, !tbaa !14
  %393 = icmp ne i8 %392, 0
  br i1 %393, label %394, label %405

394:                                              ; preds = %373
  %395 = load ptr, ptr %5, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %395, i32 0, i32 20
  %397 = load ptr, ptr %396, align 8, !tbaa !30
  %398 = getelementptr inbounds %struct.tag_____Namespace__, ptr %397, i32 0, i32 4
  %399 = load ptr, ptr %398, align 8, !tbaa !20
  %400 = getelementptr inbounds %struct.tag_____Map__string__Node____, ptr %399, i32 0, i32 1
  %401 = load i32, ptr %400, align 8, !tbaa !27
  %402 = icmp sgt i32 %401, 0
  %403 = zext i1 %402 to i32
  %404 = trunc i32 %403 to i8
  store i8 %404, ptr %35, align 1, !tbaa !14
  br label %405

405:                                              ; preds = %394, %373
  %406 = load i8, ptr %35, align 1, !tbaa !14
  %407 = icmp ne i8 %406, 0
  br i1 %407, label %408, label %415

408:                                              ; preds = %405
  %409 = load ptr, ptr %2, align 8, !tbaa !5
  %410 = load ptr, ptr %5, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %410, i32 0, i32 20
  %412 = load ptr, ptr %411, align 8, !tbaa !30
  %413 = load ptr, ptr @mu_____string150, align 8
  %414 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string150, i32 0, i32 1), align 8
  call void @TypeCheckerFirstPass__badCoreType__(ptr noundef %409, ptr %413, i32 %414, ptr noundef %412)
  br label %415

415:                                              ; preds = %408, %405
  %416 = load ptr, ptr %2, align 8, !tbaa !5
  %417 = load ptr, ptr @mu_____string151, align 8
  %418 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string151, i32 0, i32 1), align 8
  %419 = call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %416, ptr %417, i32 %418)
  %420 = load ptr, ptr %5, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %420, i32 0, i32 21
  store ptr %419, ptr %421, align 8, !tbaa !31
  %422 = load ptr, ptr %5, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %422, i32 0, i32 21
  %424 = load ptr, ptr %423, align 8, !tbaa !31
  %425 = icmp ne ptr %424, null
  br i1 %425, label %426, label %467

426:                                              ; preds = %415
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %427 = load ptr, ptr %5, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %427, i32 0, i32 21
  %429 = load ptr, ptr %428, align 8, !tbaa !31
  store ptr %429, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #5
  %430 = load ptr, ptr %36, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.tag_____Namespace__, ptr %430, i32 0, i32 9
  %432 = load ptr, ptr %431, align 8, !tbaa !19
  %433 = icmp ne ptr %432, null
  %434 = zext i1 %433 to i32
  %435 = trunc i32 %434 to i8
  store i8 %435, ptr %37, align 1, !tbaa !14
  %436 = load i8, ptr %37, align 1, !tbaa !14
  %437 = icmp ne i8 %436, 0
  br i1 %437, label %438, label %447

438:                                              ; preds = %426
  %439 = load ptr, ptr %36, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.tag_____Namespace__, ptr %439, i32 0, i32 9
  %441 = load ptr, ptr %440, align 8, !tbaa !19
  %442 = getelementptr inbounds %struct.tag_____List__Ptr__Namespace______, ptr %441, i32 0, i32 1
  %443 = load i32, ptr %442, align 8, !tbaa !32
  %444 = icmp eq i32 %443, 1
  %445 = zext i1 %444 to i32
  %446 = trunc i32 %445 to i8
  store i8 %446, ptr %37, align 1, !tbaa !14
  br label %447

447:                                              ; preds = %438, %426
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #5
  %448 = load i8, ptr %37, align 1, !tbaa !14
  store i8 %448, ptr %38, align 1, !tbaa !14
  %449 = load i8, ptr %38, align 1, !tbaa !14
  %450 = icmp ne i8 %449, 0
  br i1 %450, label %451, label %459

451:                                              ; preds = %447
  %452 = load ptr, ptr %36, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.tag_____Namespace__, ptr %452, i32 0, i32 3
  %454 = load i32, ptr %453, align 4, !tbaa !15
  %455 = and i32 %454, 512
  %456 = icmp ne i32 %455, 0
  %457 = zext i1 %456 to i32
  %458 = trunc i32 %457 to i8
  store i8 %458, ptr %38, align 1, !tbaa !14
  br label %459

459:                                              ; preds = %451, %447
  %460 = load i8, ptr %38, align 1, !tbaa !14
  %461 = icmp ne i8 %460, 0
  br i1 %461, label %462, label %463

462:                                              ; preds = %459
  br label %466

463:                                              ; preds = %459
  %464 = load ptr, ptr %2, align 8, !tbaa !5
  %465 = load ptr, ptr %36, align 8, !tbaa !5
  call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %464, ptr noundef %465)
  br label %466

466:                                              ; preds = %463, %462
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  br label %467

467:                                              ; preds = %466, %415
  %468 = load ptr, ptr %2, align 8, !tbaa !5
  %469 = load ptr, ptr @mu_____string153, align 8
  %470 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string153, i32 0, i32 1), align 8
  %471 = call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %468, ptr %469, i32 %470)
  %472 = load ptr, ptr %5, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %472, i32 0, i32 22
  store ptr %471, ptr %473, align 8, !tbaa !34
  %474 = load ptr, ptr %5, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %474, i32 0, i32 22
  %476 = load ptr, ptr %475, align 8, !tbaa !34
  %477 = icmp ne ptr %476, null
  br i1 %477, label %478, label %519

478:                                              ; preds = %467
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  %479 = load ptr, ptr %5, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %479, i32 0, i32 22
  %481 = load ptr, ptr %480, align 8, !tbaa !34
  store ptr %481, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #5
  %482 = load ptr, ptr %39, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.tag_____Namespace__, ptr %482, i32 0, i32 9
  %484 = load ptr, ptr %483, align 8, !tbaa !19
  %485 = icmp ne ptr %484, null
  %486 = zext i1 %485 to i32
  %487 = trunc i32 %486 to i8
  store i8 %487, ptr %40, align 1, !tbaa !14
  %488 = load i8, ptr %40, align 1, !tbaa !14
  %489 = icmp ne i8 %488, 0
  br i1 %489, label %490, label %499

490:                                              ; preds = %478
  %491 = load ptr, ptr %39, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.tag_____Namespace__, ptr %491, i32 0, i32 9
  %493 = load ptr, ptr %492, align 8, !tbaa !19
  %494 = getelementptr inbounds %struct.tag_____List__Ptr__Namespace______, ptr %493, i32 0, i32 1
  %495 = load i32, ptr %494, align 8, !tbaa !32
  %496 = icmp eq i32 %495, 1
  %497 = zext i1 %496 to i32
  %498 = trunc i32 %497 to i8
  store i8 %498, ptr %40, align 1, !tbaa !14
  br label %499

499:                                              ; preds = %490, %478
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #5
  %500 = load i8, ptr %40, align 1, !tbaa !14
  store i8 %500, ptr %41, align 1, !tbaa !14
  %501 = load i8, ptr %41, align 1, !tbaa !14
  %502 = icmp ne i8 %501, 0
  br i1 %502, label %503, label %511

503:                                              ; preds = %499
  %504 = load ptr, ptr %39, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.tag_____Namespace__, ptr %504, i32 0, i32 3
  %506 = load i32, ptr %505, align 4, !tbaa !15
  %507 = and i32 %506, 512
  %508 = icmp ne i32 %507, 0
  %509 = zext i1 %508 to i32
  %510 = trunc i32 %509 to i8
  store i8 %510, ptr %41, align 1, !tbaa !14
  br label %511

511:                                              ; preds = %503, %499
  %512 = load i8, ptr %41, align 1, !tbaa !14
  %513 = icmp ne i8 %512, 0
  br i1 %513, label %514, label %515

514:                                              ; preds = %511
  br label %518

515:                                              ; preds = %511
  %516 = load ptr, ptr %2, align 8, !tbaa !5
  %517 = load ptr, ptr %39, align 8, !tbaa !5
  call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %516, ptr noundef %517)
  br label %518

518:                                              ; preds = %515, %514
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  br label %519

519:                                              ; preds = %518, %467
  %520 = load ptr, ptr %2, align 8, !tbaa !5
  %521 = load ptr, ptr @mu_____string154, align 8
  %522 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string154, i32 0, i32 1), align 8
  %523 = call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %520, ptr %521, i32 %522)
  %524 = load ptr, ptr %5, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %524, i32 0, i32 23
  store ptr %523, ptr %525, align 8, !tbaa !35
  %526 = load ptr, ptr %5, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %526, i32 0, i32 23
  %528 = load ptr, ptr %527, align 8, !tbaa !35
  %529 = icmp ne ptr %528, null
  br i1 %529, label %530, label %571

530:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %531 = load ptr, ptr %5, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %531, i32 0, i32 23
  %533 = load ptr, ptr %532, align 8, !tbaa !35
  store ptr %533, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #5
  %534 = load ptr, ptr %42, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.tag_____Namespace__, ptr %534, i32 0, i32 9
  %536 = load ptr, ptr %535, align 8, !tbaa !19
  %537 = icmp ne ptr %536, null
  %538 = zext i1 %537 to i32
  %539 = trunc i32 %538 to i8
  store i8 %539, ptr %43, align 1, !tbaa !14
  %540 = load i8, ptr %43, align 1, !tbaa !14
  %541 = icmp ne i8 %540, 0
  br i1 %541, label %542, label %551

542:                                              ; preds = %530
  %543 = load ptr, ptr %42, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.tag_____Namespace__, ptr %543, i32 0, i32 9
  %545 = load ptr, ptr %544, align 8, !tbaa !19
  %546 = getelementptr inbounds %struct.tag_____List__Ptr__Namespace______, ptr %545, i32 0, i32 1
  %547 = load i32, ptr %546, align 8, !tbaa !32
  %548 = icmp eq i32 %547, 1
  %549 = zext i1 %548 to i32
  %550 = trunc i32 %549 to i8
  store i8 %550, ptr %43, align 1, !tbaa !14
  br label %551

551:                                              ; preds = %542, %530
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #5
  %552 = load i8, ptr %43, align 1, !tbaa !14
  store i8 %552, ptr %44, align 1, !tbaa !14
  %553 = load i8, ptr %44, align 1, !tbaa !14
  %554 = icmp ne i8 %553, 0
  br i1 %554, label %555, label %563

555:                                              ; preds = %551
  %556 = load ptr, ptr %42, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.tag_____Namespace__, ptr %556, i32 0, i32 3
  %558 = load i32, ptr %557, align 4, !tbaa !15
  %559 = and i32 %558, 512
  %560 = icmp ne i32 %559, 0
  %561 = zext i1 %560 to i32
  %562 = trunc i32 %561 to i8
  store i8 %562, ptr %44, align 1, !tbaa !14
  br label %563

563:                                              ; preds = %555, %551
  %564 = load i8, ptr %44, align 1, !tbaa !14
  %565 = icmp ne i8 %564, 0
  br i1 %565, label %566, label %567

566:                                              ; preds = %563
  br label %570

567:                                              ; preds = %563
  %568 = load ptr, ptr %2, align 8, !tbaa !5
  %569 = load ptr, ptr %42, align 8, !tbaa !5
  call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %568, ptr noundef %569)
  br label %570

570:                                              ; preds = %567, %566
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  br label %571

571:                                              ; preds = %570, %519
  %572 = load ptr, ptr %2, align 8, !tbaa !5
  %573 = load ptr, ptr @mu_____string155, align 8
  %574 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string155, i32 0, i32 1), align 8
  %575 = call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %572, ptr %573, i32 %574)
  %576 = load ptr, ptr %5, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %576, i32 0, i32 24
  store ptr %575, ptr %577, align 8, !tbaa !36
  %578 = load ptr, ptr %5, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %578, i32 0, i32 24
  %580 = load ptr, ptr %579, align 8, !tbaa !36
  %581 = icmp ne ptr %580, null
  br i1 %581, label %582, label %623

582:                                              ; preds = %571
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %583 = load ptr, ptr %5, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %583, i32 0, i32 24
  %585 = load ptr, ptr %584, align 8, !tbaa !36
  store ptr %585, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #5
  %586 = load ptr, ptr %45, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.tag_____Namespace__, ptr %586, i32 0, i32 9
  %588 = load ptr, ptr %587, align 8, !tbaa !19
  %589 = icmp ne ptr %588, null
  %590 = zext i1 %589 to i32
  %591 = trunc i32 %590 to i8
  store i8 %591, ptr %46, align 1, !tbaa !14
  %592 = load i8, ptr %46, align 1, !tbaa !14
  %593 = icmp ne i8 %592, 0
  br i1 %593, label %594, label %603

594:                                              ; preds = %582
  %595 = load ptr, ptr %45, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.tag_____Namespace__, ptr %595, i32 0, i32 9
  %597 = load ptr, ptr %596, align 8, !tbaa !19
  %598 = getelementptr inbounds %struct.tag_____List__Ptr__Namespace______, ptr %597, i32 0, i32 1
  %599 = load i32, ptr %598, align 8, !tbaa !32
  %600 = icmp eq i32 %599, 1
  %601 = zext i1 %600 to i32
  %602 = trunc i32 %601 to i8
  store i8 %602, ptr %46, align 1, !tbaa !14
  br label %603

603:                                              ; preds = %594, %582
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #5
  %604 = load i8, ptr %46, align 1, !tbaa !14
  store i8 %604, ptr %47, align 1, !tbaa !14
  %605 = load i8, ptr %47, align 1, !tbaa !14
  %606 = icmp ne i8 %605, 0
  br i1 %606, label %607, label %615

607:                                              ; preds = %603
  %608 = load ptr, ptr %45, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.tag_____Namespace__, ptr %608, i32 0, i32 3
  %610 = load i32, ptr %609, align 4, !tbaa !15
  %611 = and i32 %610, 512
  %612 = icmp eq i32 %611, 0
  %613 = zext i1 %612 to i32
  %614 = trunc i32 %613 to i8
  store i8 %614, ptr %47, align 1, !tbaa !14
  br label %615

615:                                              ; preds = %607, %603
  %616 = load i8, ptr %47, align 1, !tbaa !14
  %617 = icmp ne i8 %616, 0
  br i1 %617, label %618, label %619

618:                                              ; preds = %615
  br label %622

619:                                              ; preds = %615
  %620 = load ptr, ptr %2, align 8, !tbaa !5
  %621 = load ptr, ptr %45, align 8, !tbaa !5
  call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %620, ptr noundef %621)
  br label %622

622:                                              ; preds = %619, %618
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  br label %623

623:                                              ; preds = %622, %571
  %624 = load ptr, ptr %2, align 8, !tbaa !5
  %625 = load ptr, ptr @mu_____string156, align 8
  %626 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string156, i32 0, i32 1), align 8
  %627 = call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %624, ptr %625, i32 %626)
  %628 = load ptr, ptr %5, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %628, i32 0, i32 25
  store ptr %627, ptr %629, align 8, !tbaa !37
  %630 = load ptr, ptr %5, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %630, i32 0, i32 25
  %632 = load ptr, ptr %631, align 8, !tbaa !37
  %633 = icmp ne ptr %632, null
  br i1 %633, label %634, label %675

634:                                              ; preds = %623
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  %635 = load ptr, ptr %5, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %635, i32 0, i32 25
  %637 = load ptr, ptr %636, align 8, !tbaa !37
  store ptr %637, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #5
  %638 = load ptr, ptr %48, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.tag_____Namespace__, ptr %638, i32 0, i32 9
  %640 = load ptr, ptr %639, align 8, !tbaa !19
  %641 = icmp ne ptr %640, null
  %642 = zext i1 %641 to i32
  %643 = trunc i32 %642 to i8
  store i8 %643, ptr %49, align 1, !tbaa !14
  %644 = load i8, ptr %49, align 1, !tbaa !14
  %645 = icmp ne i8 %644, 0
  br i1 %645, label %646, label %655

646:                                              ; preds = %634
  %647 = load ptr, ptr %48, align 8, !tbaa !5
  %648 = getelementptr inbounds %struct.tag_____Namespace__, ptr %647, i32 0, i32 9
  %649 = load ptr, ptr %648, align 8, !tbaa !19
  %650 = getelementptr inbounds %struct.tag_____List__Ptr__Namespace______, ptr %649, i32 0, i32 1
  %651 = load i32, ptr %650, align 8, !tbaa !32
  %652 = icmp eq i32 %651, 1
  %653 = zext i1 %652 to i32
  %654 = trunc i32 %653 to i8
  store i8 %654, ptr %49, align 1, !tbaa !14
  br label %655

655:                                              ; preds = %646, %634
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #5
  %656 = load i8, ptr %49, align 1, !tbaa !14
  store i8 %656, ptr %50, align 1, !tbaa !14
  %657 = load i8, ptr %50, align 1, !tbaa !14
  %658 = icmp ne i8 %657, 0
  br i1 %658, label %659, label %667

659:                                              ; preds = %655
  %660 = load ptr, ptr %48, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.tag_____Namespace__, ptr %660, i32 0, i32 3
  %662 = load i32, ptr %661, align 4, !tbaa !15
  %663 = and i32 %662, 512
  %664 = icmp ne i32 %663, 0
  %665 = zext i1 %664 to i32
  %666 = trunc i32 %665 to i8
  store i8 %666, ptr %50, align 1, !tbaa !14
  br label %667

667:                                              ; preds = %659, %655
  %668 = load i8, ptr %50, align 1, !tbaa !14
  %669 = icmp ne i8 %668, 0
  br i1 %669, label %670, label %671

670:                                              ; preds = %667
  br label %674

671:                                              ; preds = %667
  %672 = load ptr, ptr %2, align 8, !tbaa !5
  %673 = load ptr, ptr %48, align 8, !tbaa !5
  call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %672, ptr noundef %673)
  br label %674

674:                                              ; preds = %671, %670
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  br label %675

675:                                              ; preds = %674, %623
  %676 = load ptr, ptr %2, align 8, !tbaa !5
  %677 = load ptr, ptr @mu_____string157, align 8
  %678 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string157, i32 0, i32 1), align 8
  %679 = call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %676, ptr %677, i32 %678)
  %680 = load ptr, ptr %5, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %680, i32 0, i32 26
  store ptr %679, ptr %681, align 8, !tbaa !38
  %682 = load ptr, ptr %5, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %682, i32 0, i32 26
  %684 = load ptr, ptr %683, align 8, !tbaa !38
  %685 = icmp ne ptr %684, null
  br i1 %685, label %686, label %727

686:                                              ; preds = %675
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  %687 = load ptr, ptr %5, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %687, i32 0, i32 26
  %689 = load ptr, ptr %688, align 8, !tbaa !38
  store ptr %689, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #5
  %690 = load ptr, ptr %51, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.tag_____Namespace__, ptr %690, i32 0, i32 9
  %692 = load ptr, ptr %691, align 8, !tbaa !19
  %693 = icmp ne ptr %692, null
  %694 = zext i1 %693 to i32
  %695 = trunc i32 %694 to i8
  store i8 %695, ptr %52, align 1, !tbaa !14
  %696 = load i8, ptr %52, align 1, !tbaa !14
  %697 = icmp ne i8 %696, 0
  br i1 %697, label %698, label %707

698:                                              ; preds = %686
  %699 = load ptr, ptr %51, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.tag_____Namespace__, ptr %699, i32 0, i32 9
  %701 = load ptr, ptr %700, align 8, !tbaa !19
  %702 = getelementptr inbounds %struct.tag_____List__Ptr__Namespace______, ptr %701, i32 0, i32 1
  %703 = load i32, ptr %702, align 8, !tbaa !32
  %704 = icmp eq i32 %703, 2
  %705 = zext i1 %704 to i32
  %706 = trunc i32 %705 to i8
  store i8 %706, ptr %52, align 1, !tbaa !14
  br label %707

707:                                              ; preds = %698, %686
  call void @llvm.lifetime.start.p0(i64 1, ptr %53) #5
  %708 = load i8, ptr %52, align 1, !tbaa !14
  store i8 %708, ptr %53, align 1, !tbaa !14
  %709 = load i8, ptr %53, align 1, !tbaa !14
  %710 = icmp ne i8 %709, 0
  br i1 %710, label %711, label %719

711:                                              ; preds = %707
  %712 = load ptr, ptr %51, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.tag_____Namespace__, ptr %712, i32 0, i32 3
  %714 = load i32, ptr %713, align 4, !tbaa !15
  %715 = and i32 %714, 512
  %716 = icmp ne i32 %715, 0
  %717 = zext i1 %716 to i32
  %718 = trunc i32 %717 to i8
  store i8 %718, ptr %53, align 1, !tbaa !14
  br label %719

719:                                              ; preds = %711, %707
  %720 = load i8, ptr %53, align 1, !tbaa !14
  %721 = icmp ne i8 %720, 0
  br i1 %721, label %722, label %723

722:                                              ; preds = %719
  br label %726

723:                                              ; preds = %719
  %724 = load ptr, ptr %2, align 8, !tbaa !5
  %725 = load ptr, ptr %51, align 8, !tbaa !5
  call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %724, ptr noundef %725)
  br label %726

726:                                              ; preds = %723, %722
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  br label %727

727:                                              ; preds = %726, %675
  %728 = load ptr, ptr %2, align 8, !tbaa !5
  %729 = load ptr, ptr @mu_____string158, align 8
  %730 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string158, i32 0, i32 1), align 8
  %731 = call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %728, ptr %729, i32 %730)
  %732 = load ptr, ptr %5, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %732, i32 0, i32 28
  store ptr %731, ptr %733, align 8, !tbaa !39
  %734 = load ptr, ptr %5, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %734, i32 0, i32 28
  %736 = load ptr, ptr %735, align 8, !tbaa !39
  %737 = icmp ne ptr %736, null
  br i1 %737, label %738, label %779

738:                                              ; preds = %727
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #5
  %739 = load ptr, ptr %5, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %739, i32 0, i32 28
  %741 = load ptr, ptr %740, align 8, !tbaa !39
  store ptr %741, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %55) #5
  %742 = load ptr, ptr %54, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.tag_____Namespace__, ptr %742, i32 0, i32 9
  %744 = load ptr, ptr %743, align 8, !tbaa !19
  %745 = icmp ne ptr %744, null
  %746 = zext i1 %745 to i32
  %747 = trunc i32 %746 to i8
  store i8 %747, ptr %55, align 1, !tbaa !14
  %748 = load i8, ptr %55, align 1, !tbaa !14
  %749 = icmp ne i8 %748, 0
  br i1 %749, label %750, label %759

750:                                              ; preds = %738
  %751 = load ptr, ptr %54, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.tag_____Namespace__, ptr %751, i32 0, i32 9
  %753 = load ptr, ptr %752, align 8, !tbaa !19
  %754 = getelementptr inbounds %struct.tag_____List__Ptr__Namespace______, ptr %753, i32 0, i32 1
  %755 = load i32, ptr %754, align 8, !tbaa !32
  %756 = icmp eq i32 %755, 2
  %757 = zext i1 %756 to i32
  %758 = trunc i32 %757 to i8
  store i8 %758, ptr %55, align 1, !tbaa !14
  br label %759

759:                                              ; preds = %750, %738
  call void @llvm.lifetime.start.p0(i64 1, ptr %56) #5
  %760 = load i8, ptr %55, align 1, !tbaa !14
  store i8 %760, ptr %56, align 1, !tbaa !14
  %761 = load i8, ptr %56, align 1, !tbaa !14
  %762 = icmp ne i8 %761, 0
  br i1 %762, label %763, label %771

763:                                              ; preds = %759
  %764 = load ptr, ptr %54, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.tag_____Namespace__, ptr %764, i32 0, i32 3
  %766 = load i32, ptr %765, align 4, !tbaa !15
  %767 = and i32 %766, 512
  %768 = icmp ne i32 %767, 0
  %769 = zext i1 %768 to i32
  %770 = trunc i32 %769 to i8
  store i8 %770, ptr %56, align 1, !tbaa !14
  br label %771

771:                                              ; preds = %763, %759
  %772 = load i8, ptr %56, align 1, !tbaa !14
  %773 = icmp ne i8 %772, 0
  br i1 %773, label %774, label %775

774:                                              ; preds = %771
  br label %778

775:                                              ; preds = %771
  %776 = load ptr, ptr %2, align 8, !tbaa !5
  %777 = load ptr, ptr %54, align 8, !tbaa !5
  call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %776, ptr noundef %777)
  br label %778

778:                                              ; preds = %775, %774
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  br label %779

779:                                              ; preds = %778, %727
  %780 = load ptr, ptr %2, align 8, !tbaa !5
  %781 = load ptr, ptr @mu_____string159, align 8
  %782 = load i32, ptr getelementptr inbounds ({ ptr, i32 }, ptr @mu_____string159, i32 0, i32 1), align 8
  %783 = call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %780, ptr %781, i32 %782)
  %784 = load ptr, ptr %5, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %784, i32 0, i32 27
  store ptr %783, ptr %785, align 8, !tbaa !40
  %786 = load ptr, ptr %5, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %786, i32 0, i32 27
  %788 = load ptr, ptr %787, align 8, !tbaa !40
  %789 = icmp ne ptr %788, null
  br i1 %789, label %790, label %831

790:                                              ; preds = %779
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #5
  %791 = load ptr, ptr %5, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct.tag_____CommonTags__, ptr %791, i32 0, i32 27
  %793 = load ptr, ptr %792, align 8, !tbaa !40
  store ptr %793, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %58) #5
  %794 = load ptr, ptr %57, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.tag_____Namespace__, ptr %794, i32 0, i32 9
  %796 = load ptr, ptr %795, align 8, !tbaa !19
  %797 = icmp ne ptr %796, null
  %798 = zext i1 %797 to i32
  %799 = trunc i32 %798 to i8
  store i8 %799, ptr %58, align 1, !tbaa !14
  %800 = load i8, ptr %58, align 1, !tbaa !14
  %801 = icmp ne i8 %800, 0
  br i1 %801, label %802, label %811

802:                                              ; preds = %790
  %803 = load ptr, ptr %57, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.tag_____Namespace__, ptr %803, i32 0, i32 9
  %805 = load ptr, ptr %804, align 8, !tbaa !19
  %806 = getelementptr inbounds %struct.tag_____List__Ptr__Namespace______, ptr %805, i32 0, i32 1
  %807 = load i32, ptr %806, align 8, !tbaa !32
  %808 = icmp eq i32 %807, 2
  %809 = zext i1 %808 to i32
  %810 = trunc i32 %809 to i8
  store i8 %810, ptr %58, align 1, !tbaa !14
  br label %811

811:                                              ; preds = %802, %790
  call void @llvm.lifetime.start.p0(i64 1, ptr %59) #5
  %812 = load i8, ptr %58, align 1, !tbaa !14
  store i8 %812, ptr %59, align 1, !tbaa !14
  %813 = load i8, ptr %59, align 1, !tbaa !14
  %814 = icmp ne i8 %813, 0
  br i1 %814, label %815, label %823

815:                                              ; preds = %811
  %816 = load ptr, ptr %57, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.tag_____Namespace__, ptr %816, i32 0, i32 3
  %818 = load i32, ptr %817, align 4, !tbaa !15
  %819 = and i32 %818, 512
  %820 = icmp eq i32 %819, 0
  %821 = zext i1 %820 to i32
  %822 = trunc i32 %821 to i8
  store i8 %822, ptr %59, align 1, !tbaa !14
  br label %823

823:                                              ; preds = %815, %811
  %824 = load i8, ptr %59, align 1, !tbaa !14
  %825 = icmp ne i8 %824, 0
  br i1 %825, label %826, label %827

826:                                              ; preds = %823
  br label %830

827:                                              ; preds = %823
  %828 = load ptr, ptr %2, align 8, !tbaa !5
  %829 = load ptr, ptr %57, align 8, !tbaa !5
  call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %828, ptr noundef %829)
  br label %830

830:                                              ; preds = %827, %826
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #5
  br label %831

831:                                              ; preds = %830, %779
  %832 = load ptr, ptr %5, align 8, !tbaa !5
  %833 = load ptr, ptr %2, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.tag_____TypeCheckerContext__, ptr %833, i32 0, i32 4
  store ptr %832, ptr %834, align 8, !tbaa !41
  %835 = load ptr, ptr %5, align 8, !tbaa !5
  %836 = load ptr, ptr %2, align 8, !tbaa !5
  %837 = getelementptr inbounds %struct.tag_____TypeCheckerContext__, ptr %836, i32 0, i32 0
  %838 = load ptr, ptr %837, align 8, !tbaa !43
  %839 = getelementptr inbounds %struct.tag_____Compilation__, ptr %838, i32 0, i32 4
  store ptr %835, ptr %839, align 8, !tbaa !44
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 384, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @TypeCheckerFirstPass__badCoreType__(ptr noundef, ptr, i32, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef, ptr, i32) #4

; Function Attrs: nounwind uwtable
declare dso_local ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef, ptr, i32) #4

; Function Attrs: nounwind uwtable
declare dso_local { i32, ptr } @Map__getOrDefault__string__Node____(ptr noundef, ptr, i32) #4

; Function Attrs: nounwind uwtable
declare dso_local void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef, ptr noundef) #4

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 8}
!10 = !{!"tag_____IAllocator__", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!11 = !{!10, !6, i64 0}
!12 = !{i64 0, i64 8, !5, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 8, !5, i64 56, i64 8, !5, i64 64, i64 8, !5, i64 72, i64 8, !5, i64 80, i64 8, !5, i64 88, i64 8, !5, i64 96, i64 8, !5, i64 104, i64 8, !5, i64 112, i64 8, !5, i64 120, i64 8, !5, i64 128, i64 8, !5, i64 136, i64 8, !5, i64 144, i64 8, !5, i64 152, i64 8, !5, i64 160, i64 8, !5, i64 168, i64 8, !5, i64 176, i64 8, !5, i64 184, i64 8, !5, i64 192, i64 8, !5, i64 200, i64 8, !5, i64 208, i64 8, !5, i64 216, i64 8, !5, i64 224, i64 8, !5, i64 232, i64 8, !5, i64 240, i64 8, !5, i64 248, i64 8, !5, i64 256, i64 8, !5, i64 264, i64 8, !5, i64 272, i64 8, !5, i64 280, i64 8, !5, i64 288, i64 8, !5, i64 296, i64 8, !5, i64 304, i64 8, !5, i64 312, i64 8, !5, i64 320, i64 8, !5, i64 328, i64 8, !5, i64 336, i64 8, !5, i64 344, i64 8, !5, i64 352, i64 8, !5, i64 360, i64 8, !5, i64 368, i64 8, !5, i64 376, i64 8, !5}
!13 = !{i64 0, i64 8, !5, i64 8, i64 8, !5}
!14 = !{!7, !7, i64 0}
!15 = !{!16, !18, i64 28}
!16 = !{!"tag_____Namespace__", !17, i64 0, !6, i64 16, !18, i64 24, !18, i64 28, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !18, i64 104}
!17 = !{!"", !6, i64 0, !18, i64 8}
!18 = !{!"int", !7, i64 0}
!19 = !{!16, !6, i64 72}
!20 = !{!16, !6, i64 32}
!21 = !{!22, !6, i64 8}
!22 = !{!"", !18, i64 0, !6, i64 8}
!23 = !{!24, !6, i64 0}
!24 = !{!"tag_____Tag__", !6, i64 0, !6, i64 8}
!25 = !{!26, !6, i64 304}
!26 = !{!"tag_____CommonTags__", !24, i64 0, !24, i64 16, !24, i64 32, !24, i64 48, !24, i64 64, !24, i64 80, !24, i64 96, !24, i64 112, !24, i64 128, !24, i64 144, !24, i64 160, !24, i64 176, !24, i64 192, !24, i64 208, !24, i64 224, !24, i64 240, !24, i64 256, !24, i64 272, !24, i64 288, !6, i64 304, !6, i64 312, !6, i64 320, !6, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !6, i64 360, !6, i64 368, !6, i64 376}
!27 = !{!28, !18, i64 16}
!28 = !{!"tag_____Map__string__Node____", !29, i64 0, !18, i64 16, !18, i64 20, !18, i64 24}
!29 = !{!"tag_____Array__MapEntry__string__Node______", !6, i64 0, !18, i64 8}
!30 = !{!26, !6, i64 312}
!31 = !{!26, !6, i64 320}
!32 = !{!33, !18, i64 8}
!33 = !{!"tag_____List__Ptr__Namespace______", !6, i64 0, !18, i64 8, !18, i64 12}
!34 = !{!26, !6, i64 328}
!35 = !{!26, !6, i64 336}
!36 = !{!26, !6, i64 344}
!37 = !{!26, !6, i64 352}
!38 = !{!26, !6, i64 360}
!39 = !{!26, !6, i64 376}
!40 = !{!26, !6, i64 368}
!41 = !{!42, !6, i64 32}
!42 = !{!"tag_____TypeCheckerContext__", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !18, i64 120, !18, i64 124, !6, i64 128, !18, i64 136, !7, i64 140}
!43 = !{!42, !6, i64 0}
!44 = !{!45, !6, i64 32}
!45 = !{!"tag_____Compilation__", !6, i64 0, !6, i64 8, !18, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !18, i64 48}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.string__ = type { ptr, i32 }
%struct.tag_____IAllocator__ = type { ptr, ptr, ptr, ptr }

@mu_____string158 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string148 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string157 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string137 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string150 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string129 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string149 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string151 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string145 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string147 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string144 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string142 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string155 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string136 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string140 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string132 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string146 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string130 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string133 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string128 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string139 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string156 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string134 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string154 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string159 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string141 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string143 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string135 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string153 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string138 = external dso_local local_unnamed_addr global %struct.string__, align 8
@mu_____string131 = external dso_local local_unnamed_addr global %struct.string__, align 8
@top_____currentAllocator__ = external dso_local thread_local local_unnamed_addr global %struct.tag_____IAllocator__, align 8

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #0

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

; Function Attrs: nounwind uwtable
define dso_local void @TypeCheckerFirstPass__buildTags__(ptr noundef %0) local_unnamed_addr #2 {
  %2 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @top_____currentAllocator__)
  %3 = getelementptr inbounds i8, ptr %2, i64 8
  %4 = load ptr, ptr %3, align 8, !tbaa !5
  %5 = load ptr, ptr %2, align 8, !tbaa !10
  %6 = tail call ptr %4(ptr noundef %5, i64 noundef 384) #3
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(384) %6, i8 0, i64 384, i1 false)
  %7 = load ptr, ptr @mu_____string128, align 8
  %8 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string128, i64 8), align 8
  %9 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %7, i32 %8)
  %10 = extractvalue { ptr, ptr } %9, 0
  %11 = extractvalue { ptr, ptr } %9, 1
  store ptr %10, ptr %6, align 8, !tbaa !11
  %.sroa.4122.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  store ptr %11, ptr %.sroa.4122.0..sroa_idx, align 8, !tbaa !11
  %12 = getelementptr inbounds i8, ptr %6, i64 16
  %13 = load ptr, ptr @mu_____string129, align 8
  %14 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string129, i64 8), align 8
  %15 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %13, i32 %14)
  %16 = extractvalue { ptr, ptr } %15, 0
  %17 = extractvalue { ptr, ptr } %15, 1
  store ptr %16, ptr %12, align 8, !tbaa !11
  %.sroa.4120.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 24
  store ptr %17, ptr %.sroa.4120.0..sroa_idx, align 8, !tbaa !11
  %18 = getelementptr inbounds i8, ptr %6, i64 32
  %19 = load ptr, ptr @mu_____string130, align 8
  %20 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string130, i64 8), align 8
  %21 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %19, i32 %20)
  %22 = extractvalue { ptr, ptr } %21, 0
  %23 = extractvalue { ptr, ptr } %21, 1
  store ptr %22, ptr %18, align 8, !tbaa !11
  %.sroa.4118.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 40
  store ptr %23, ptr %.sroa.4118.0..sroa_idx, align 8, !tbaa !11
  %24 = getelementptr inbounds i8, ptr %6, i64 48
  %25 = load ptr, ptr @mu_____string131, align 8
  %26 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string131, i64 8), align 8
  %27 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %25, i32 %26)
  %28 = extractvalue { ptr, ptr } %27, 0
  %29 = extractvalue { ptr, ptr } %27, 1
  store ptr %28, ptr %24, align 8, !tbaa !11
  %.sroa.4116.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 56
  store ptr %29, ptr %.sroa.4116.0..sroa_idx, align 8, !tbaa !11
  %30 = getelementptr inbounds i8, ptr %6, i64 64
  %31 = load ptr, ptr @mu_____string132, align 8
  %32 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string132, i64 8), align 8
  %33 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %31, i32 %32)
  %34 = extractvalue { ptr, ptr } %33, 0
  %35 = extractvalue { ptr, ptr } %33, 1
  store ptr %34, ptr %30, align 8, !tbaa !11
  %.sroa.4114.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 72
  store ptr %35, ptr %.sroa.4114.0..sroa_idx, align 8, !tbaa !11
  %36 = getelementptr inbounds i8, ptr %6, i64 80
  %37 = load ptr, ptr @mu_____string133, align 8
  %38 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string133, i64 8), align 8
  %39 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %37, i32 %38)
  %40 = extractvalue { ptr, ptr } %39, 0
  %41 = extractvalue { ptr, ptr } %39, 1
  store ptr %40, ptr %36, align 8, !tbaa !11
  %.sroa.4112.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 88
  store ptr %41, ptr %.sroa.4112.0..sroa_idx, align 8, !tbaa !11
  %42 = getelementptr inbounds i8, ptr %6, i64 96
  %43 = load ptr, ptr @mu_____string134, align 8
  %44 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string134, i64 8), align 8
  %45 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %43, i32 %44)
  %46 = extractvalue { ptr, ptr } %45, 0
  %47 = extractvalue { ptr, ptr } %45, 1
  store ptr %46, ptr %42, align 8, !tbaa !11
  %.sroa.4110.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 104
  store ptr %47, ptr %.sroa.4110.0..sroa_idx, align 8, !tbaa !11
  %48 = getelementptr inbounds i8, ptr %6, i64 112
  %49 = load ptr, ptr @mu_____string135, align 8
  %50 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string135, i64 8), align 8
  %51 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %49, i32 %50)
  %52 = extractvalue { ptr, ptr } %51, 0
  %53 = extractvalue { ptr, ptr } %51, 1
  store ptr %52, ptr %48, align 8, !tbaa !11
  %.sroa.4108.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 120
  store ptr %53, ptr %.sroa.4108.0..sroa_idx, align 8, !tbaa !11
  %54 = getelementptr inbounds i8, ptr %6, i64 128
  %55 = load ptr, ptr @mu_____string136, align 8
  %56 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string136, i64 8), align 8
  %57 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %55, i32 %56)
  %58 = extractvalue { ptr, ptr } %57, 0
  %59 = extractvalue { ptr, ptr } %57, 1
  store ptr %58, ptr %54, align 8, !tbaa !11
  %.sroa.4106.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 136
  store ptr %59, ptr %.sroa.4106.0..sroa_idx, align 8, !tbaa !11
  %60 = getelementptr inbounds i8, ptr %6, i64 144
  %61 = load ptr, ptr @mu_____string137, align 8
  %62 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string137, i64 8), align 8
  %63 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %61, i32 %62)
  %64 = extractvalue { ptr, ptr } %63, 0
  %65 = extractvalue { ptr, ptr } %63, 1
  store ptr %64, ptr %60, align 8, !tbaa !11
  %.sroa.4104.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 152
  store ptr %65, ptr %.sroa.4104.0..sroa_idx, align 8, !tbaa !11
  %66 = getelementptr inbounds i8, ptr %6, i64 160
  %67 = load ptr, ptr @mu_____string138, align 8
  %68 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string138, i64 8), align 8
  %69 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %67, i32 %68)
  %70 = extractvalue { ptr, ptr } %69, 0
  %71 = extractvalue { ptr, ptr } %69, 1
  store ptr %70, ptr %66, align 8, !tbaa !11
  %.sroa.4102.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 168
  store ptr %71, ptr %.sroa.4102.0..sroa_idx, align 8, !tbaa !11
  %72 = getelementptr inbounds i8, ptr %6, i64 176
  %73 = load ptr, ptr @mu_____string139, align 8
  %74 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string139, i64 8), align 8
  %75 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %73, i32 %74)
  %76 = extractvalue { ptr, ptr } %75, 0
  %77 = extractvalue { ptr, ptr } %75, 1
  store ptr %76, ptr %72, align 8, !tbaa !11
  %.sroa.4100.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 184
  store ptr %77, ptr %.sroa.4100.0..sroa_idx, align 8, !tbaa !11
  %78 = getelementptr inbounds i8, ptr %6, i64 192
  %79 = load ptr, ptr @mu_____string140, align 8
  %80 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string140, i64 8), align 8
  %81 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %79, i32 %80)
  %82 = extractvalue { ptr, ptr } %81, 0
  %83 = extractvalue { ptr, ptr } %81, 1
  store ptr %82, ptr %78, align 8, !tbaa !11
  %.sroa.498.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 200
  store ptr %83, ptr %.sroa.498.0..sroa_idx, align 8, !tbaa !11
  %84 = getelementptr inbounds i8, ptr %6, i64 208
  %85 = load ptr, ptr @mu_____string141, align 8
  %86 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string141, i64 8), align 8
  %87 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %85, i32 %86)
  %88 = extractvalue { ptr, ptr } %87, 0
  %89 = extractvalue { ptr, ptr } %87, 1
  store ptr %88, ptr %84, align 8, !tbaa !11
  %.sroa.496.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 216
  store ptr %89, ptr %.sroa.496.0..sroa_idx, align 8, !tbaa !11
  %90 = getelementptr inbounds i8, ptr %6, i64 224
  %91 = load ptr, ptr @mu_____string142, align 8
  %92 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string142, i64 8), align 8
  %93 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %91, i32 %92)
  %94 = extractvalue { ptr, ptr } %93, 0
  %95 = extractvalue { ptr, ptr } %93, 1
  store ptr %94, ptr %90, align 8, !tbaa !11
  %.sroa.494.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 232
  store ptr %95, ptr %.sroa.494.0..sroa_idx, align 8, !tbaa !11
  %96 = getelementptr inbounds i8, ptr %6, i64 240
  %97 = load ptr, ptr @mu_____string143, align 8
  %98 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string143, i64 8), align 8
  %99 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %97, i32 %98)
  %100 = extractvalue { ptr, ptr } %99, 0
  %101 = extractvalue { ptr, ptr } %99, 1
  store ptr %100, ptr %96, align 8, !tbaa !11
  %.sroa.492.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 248
  store ptr %101, ptr %.sroa.492.0..sroa_idx, align 8, !tbaa !11
  %102 = load ptr, ptr @mu_____string144, align 8
  %103 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string144, i64 8), align 8
  %104 = tail call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %0, ptr %102, i32 %103)
  %.not = icmp eq ptr %104, null
  br i1 %.not, label %.thread320, label %105

105:                                              ; preds = %1
  %106 = getelementptr inbounds i8, ptr %104, i64 28
  %107 = load i32, ptr %106, align 4, !tbaa !12
  %108 = and i32 %107, 256
  %.not260 = icmp eq i32 %108, 0
  br i1 %.not260, label %.thread320, label %109

109:                                              ; preds = %105
  %110 = getelementptr inbounds i8, ptr %104, i64 72
  %111 = load ptr, ptr %110, align 8, !tbaa !16
  %.not357 = icmp eq ptr %111, null
  br i1 %.not357, label %112, label %.thread320

112:                                              ; preds = %109
  %113 = getelementptr inbounds i8, ptr %104, i64 32
  %114 = load ptr, ptr %113, align 8, !tbaa !17
  %115 = load ptr, ptr @mu_____string145, align 8
  %116 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string145, i64 8), align 8
  %117 = tail call { i32, ptr } @Map__getOrDefault__string__Node____(ptr noundef %114, ptr %115, i32 %116)
  %118 = extractvalue { i32, ptr } %117, 1
  %.not358 = icmp eq ptr %118, null
  br i1 %.not358, label %.thread320, label %119

119:                                              ; preds = %112
  %120 = load ptr, ptr %113, align 8, !tbaa !17
  %121 = load ptr, ptr @mu_____string146, align 8
  %122 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string146, i64 8), align 8
  %123 = tail call { i32, ptr } @Map__getOrDefault__string__Node____(ptr noundef %120, ptr %121, i32 %122)
  %124 = extractvalue { i32, ptr } %123, 1
  %.not359 = icmp eq ptr %124, null
  br i1 %.not359, label %.thread320, label %125

125:                                              ; preds = %119
  %126 = getelementptr inbounds i8, ptr %6, i64 256
  store ptr %104, ptr %126, align 8, !tbaa !11
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 264
  store ptr null, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !11
  br label %129

.thread320:                                       ; preds = %1, %105, %109, %112, %119
  %127 = load ptr, ptr @mu_____string144, align 8
  %128 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string144, i64 8), align 8
  tail call void @TypeCheckerFirstPass__badCoreType__(ptr noundef %0, ptr %127, i32 %128, ptr noundef %104)
  br label %129

129:                                              ; preds = %.thread320, %125
  %130 = getelementptr inbounds i8, ptr %6, i64 288
  %131 = load ptr, ptr @mu_____string147, align 8
  %132 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string147, i64 8), align 8
  %133 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %131, i32 %132)
  %134 = extractvalue { ptr, ptr } %133, 0
  %135 = extractvalue { ptr, ptr } %133, 1
  store ptr %134, ptr %130, align 8, !tbaa !11
  %.sroa.471.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 296
  store ptr %135, ptr %.sroa.471.0..sroa_idx, align 8, !tbaa !11
  %136 = getelementptr inbounds i8, ptr %6, i64 272
  %137 = load ptr, ptr @mu_____string148, align 8
  %138 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string148, i64 8), align 8
  %139 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %137, i32 %138)
  %140 = extractvalue { ptr, ptr } %139, 0
  %141 = extractvalue { ptr, ptr } %139, 1
  store ptr %140, ptr %136, align 8, !tbaa !11
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 280
  store ptr %141, ptr %.sroa.4.0..sroa_idx, align 8, !tbaa !11
  %142 = load ptr, ptr @mu_____string149, align 8
  %143 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string149, i64 8), align 8
  %144 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %142, i32 %143)
  %145 = extractvalue { ptr, ptr } %144, 0
  %146 = getelementptr inbounds i8, ptr %6, i64 304
  store ptr %145, ptr %146, align 8, !tbaa !18
  %.not264 = icmp eq ptr %145, null
  br i1 %.not264, label %.thread323, label %147

147:                                              ; preds = %129
  %148 = getelementptr inbounds i8, ptr %145, i64 32
  %149 = load ptr, ptr %148, align 8, !tbaa !17
  %150 = getelementptr inbounds i8, ptr %149, i64 16
  %151 = load i32, ptr %150, align 8, !tbaa !21
  %152 = icmp slt i32 %151, 1
  br i1 %152, label %.thread323, label %153

153:                                              ; preds = %147
  %154 = load ptr, ptr @mu_____string149, align 8
  %155 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string149, i64 8), align 8
  tail call void @TypeCheckerFirstPass__badCoreType__(ptr noundef %0, ptr %154, i32 %155, ptr noundef nonnull %145)
  br label %.thread323

.thread323:                                       ; preds = %129, %153, %147
  %156 = load ptr, ptr @mu_____string150, align 8
  %157 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string150, i64 8), align 8
  %158 = tail call { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef %0, ptr %156, i32 %157)
  %159 = extractvalue { ptr, ptr } %158, 0
  %160 = getelementptr inbounds i8, ptr %6, i64 312
  store ptr %159, ptr %160, align 8, !tbaa !24
  %.not266 = icmp eq ptr %159, null
  br i1 %.not266, label %.thread326, label %161

161:                                              ; preds = %.thread323
  %162 = getelementptr inbounds i8, ptr %159, i64 32
  %163 = load ptr, ptr %162, align 8, !tbaa !17
  %164 = getelementptr inbounds i8, ptr %163, i64 16
  %165 = load i32, ptr %164, align 8, !tbaa !21
  %166 = icmp slt i32 %165, 1
  br i1 %166, label %.thread326, label %167

167:                                              ; preds = %161
  %168 = load ptr, ptr @mu_____string150, align 8
  %169 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string150, i64 8), align 8
  tail call void @TypeCheckerFirstPass__badCoreType__(ptr noundef %0, ptr %168, i32 %169, ptr noundef nonnull %159)
  br label %.thread326

.thread326:                                       ; preds = %.thread323, %167, %161
  %170 = load ptr, ptr @mu_____string151, align 8
  %171 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string151, i64 8), align 8
  %172 = tail call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %0, ptr %170, i32 %171)
  %173 = getelementptr inbounds i8, ptr %6, i64 320
  store ptr %172, ptr %173, align 8, !tbaa !25
  %.not268 = icmp eq ptr %172, null
  br i1 %.not268, label %184, label %174

174:                                              ; preds = %.thread326
  %175 = getelementptr inbounds i8, ptr %172, i64 72
  %176 = load ptr, ptr %175, align 8, !tbaa !16
  %.not269 = icmp eq ptr %176, null
  br i1 %.not269, label %.thread333, label %177

177:                                              ; preds = %174
  %178 = getelementptr inbounds i8, ptr %176, i64 8
  %179 = load i32, ptr %178, align 8, !tbaa !26
  %.not360 = icmp eq i32 %179, 1
  br i1 %.not360, label %180, label %.thread333

180:                                              ; preds = %177
  %181 = getelementptr inbounds i8, ptr %172, i64 28
  %182 = load i32, ptr %181, align 4, !tbaa !12
  %183 = and i32 %182, 512
  %.not271 = icmp eq i32 %183, 0
  br i1 %.not271, label %.thread333, label %184

.thread333:                                       ; preds = %174, %177, %180
  tail call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %0, ptr noundef nonnull %172)
  br label %184

184:                                              ; preds = %.thread333, %180, %.thread326
  %185 = load ptr, ptr @mu_____string153, align 8
  %186 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string153, i64 8), align 8
  %187 = tail call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %0, ptr %185, i32 %186)
  %188 = getelementptr inbounds i8, ptr %6, i64 328
  store ptr %187, ptr %188, align 8, !tbaa !28
  %.not272 = icmp eq ptr %187, null
  br i1 %.not272, label %199, label %189

189:                                              ; preds = %184
  %190 = getelementptr inbounds i8, ptr %187, i64 72
  %191 = load ptr, ptr %190, align 8, !tbaa !16
  %.not273 = icmp eq ptr %191, null
  br i1 %.not273, label %.thread340, label %192

192:                                              ; preds = %189
  %193 = getelementptr inbounds i8, ptr %191, i64 8
  %194 = load i32, ptr %193, align 8, !tbaa !26
  %.not361 = icmp eq i32 %194, 1
  br i1 %.not361, label %195, label %.thread340

195:                                              ; preds = %192
  %196 = getelementptr inbounds i8, ptr %187, i64 28
  %197 = load i32, ptr %196, align 4, !tbaa !12
  %198 = and i32 %197, 512
  %.not275 = icmp eq i32 %198, 0
  br i1 %.not275, label %.thread340, label %199

.thread340:                                       ; preds = %189, %192, %195
  tail call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %0, ptr noundef nonnull %187)
  br label %199

199:                                              ; preds = %.thread340, %195, %184
  %200 = load ptr, ptr @mu_____string154, align 8
  %201 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string154, i64 8), align 8
  %202 = tail call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %0, ptr %200, i32 %201)
  %203 = getelementptr inbounds i8, ptr %6, i64 336
  store ptr %202, ptr %203, align 8, !tbaa !29
  %.not276 = icmp eq ptr %202, null
  br i1 %.not276, label %214, label %204

204:                                              ; preds = %199
  %205 = getelementptr inbounds i8, ptr %202, i64 72
  %206 = load ptr, ptr %205, align 8, !tbaa !16
  %.not277 = icmp eq ptr %206, null
  br i1 %.not277, label %.thread347, label %207

207:                                              ; preds = %204
  %208 = getelementptr inbounds i8, ptr %206, i64 8
  %209 = load i32, ptr %208, align 8, !tbaa !26
  %.not362 = icmp eq i32 %209, 1
  br i1 %.not362, label %210, label %.thread347

210:                                              ; preds = %207
  %211 = getelementptr inbounds i8, ptr %202, i64 28
  %212 = load i32, ptr %211, align 4, !tbaa !12
  %213 = and i32 %212, 512
  %.not279 = icmp eq i32 %213, 0
  br i1 %.not279, label %.thread347, label %214

.thread347:                                       ; preds = %204, %207, %210
  tail call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %0, ptr noundef nonnull %202)
  br label %214

214:                                              ; preds = %.thread347, %210, %199
  %215 = load ptr, ptr @mu_____string155, align 8
  %216 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string155, i64 8), align 8
  %217 = tail call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %0, ptr %215, i32 %216)
  %218 = getelementptr inbounds i8, ptr %6, i64 344
  store ptr %217, ptr %218, align 8, !tbaa !30
  %.not280 = icmp eq ptr %217, null
  br i1 %.not280, label %229, label %219

219:                                              ; preds = %214
  %220 = getelementptr inbounds i8, ptr %217, i64 72
  %221 = load ptr, ptr %220, align 8, !tbaa !16
  %.not281 = icmp eq ptr %221, null
  br i1 %.not281, label %.thread354, label %222

222:                                              ; preds = %219
  %223 = getelementptr inbounds i8, ptr %221, i64 8
  %224 = load i32, ptr %223, align 8, !tbaa !26
  %.not363 = icmp eq i32 %224, 1
  br i1 %.not363, label %225, label %.thread354

225:                                              ; preds = %222
  %226 = getelementptr inbounds i8, ptr %217, i64 28
  %227 = load i32, ptr %226, align 4, !tbaa !12
  %228 = and i32 %227, 512
  %.not364 = icmp eq i32 %228, 0
  br i1 %.not364, label %229, label %.thread354

.thread354:                                       ; preds = %219, %222, %225
  tail call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %0, ptr noundef nonnull %217)
  br label %229

229:                                              ; preds = %.thread354, %225, %214
  %230 = load ptr, ptr @mu_____string156, align 8
  %231 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string156, i64 8), align 8
  %232 = tail call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %0, ptr %230, i32 %231)
  %233 = getelementptr inbounds i8, ptr %6, i64 352
  store ptr %232, ptr %233, align 8, !tbaa !31
  %.not284 = icmp eq ptr %232, null
  br i1 %.not284, label %244, label %234

234:                                              ; preds = %229
  %235 = getelementptr inbounds i8, ptr %232, i64 72
  %236 = load ptr, ptr %235, align 8, !tbaa !16
  %.not285 = icmp eq ptr %236, null
  br i1 %.not285, label %.critedge300, label %237

237:                                              ; preds = %234
  %238 = getelementptr inbounds i8, ptr %236, i64 8
  %239 = load i32, ptr %238, align 8, !tbaa !26
  %.not365 = icmp eq i32 %239, 1
  br i1 %.not365, label %.critedge, label %.critedge300

.critedge:                                        ; preds = %237
  %240 = getelementptr inbounds i8, ptr %232, i64 28
  %241 = load i32, ptr %240, align 4, !tbaa !12
  %242 = and i32 %241, 512
  %243 = icmp eq i32 %242, 0
  br i1 %243, label %.critedge300, label %244

.critedge300:                                     ; preds = %237, %234, %.critedge
  tail call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %0, ptr noundef nonnull %232)
  br label %244

244:                                              ; preds = %.critedge300, %.critedge, %229
  %245 = load ptr, ptr @mu_____string157, align 8
  %246 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string157, i64 8), align 8
  %247 = tail call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %0, ptr %245, i32 %246)
  %248 = getelementptr inbounds i8, ptr %6, i64 360
  store ptr %247, ptr %248, align 8, !tbaa !32
  %.not288 = icmp eq ptr %247, null
  br i1 %.not288, label %259, label %249

249:                                              ; preds = %244
  %250 = getelementptr inbounds i8, ptr %247, i64 72
  %251 = load ptr, ptr %250, align 8, !tbaa !16
  %.not289 = icmp eq ptr %251, null
  br i1 %.not289, label %.critedge303, label %252

252:                                              ; preds = %249
  %253 = getelementptr inbounds i8, ptr %251, i64 8
  %254 = load i32, ptr %253, align 8, !tbaa !26
  %.not366 = icmp eq i32 %254, 2
  br i1 %.not366, label %.critedge302, label %.critedge303

.critedge302:                                     ; preds = %252
  %255 = getelementptr inbounds i8, ptr %247, i64 28
  %256 = load i32, ptr %255, align 4, !tbaa !12
  %257 = and i32 %256, 512
  %258 = icmp eq i32 %257, 0
  br i1 %258, label %.critedge303, label %259

.critedge303:                                     ; preds = %252, %249, %.critedge302
  tail call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %0, ptr noundef nonnull %247)
  br label %259

259:                                              ; preds = %.critedge303, %.critedge302, %244
  %260 = load ptr, ptr @mu_____string158, align 8
  %261 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string158, i64 8), align 8
  %262 = tail call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %0, ptr %260, i32 %261)
  %263 = getelementptr inbounds i8, ptr %6, i64 376
  store ptr %262, ptr %263, align 8, !tbaa !33
  %.not292 = icmp eq ptr %262, null
  br i1 %.not292, label %274, label %264

264:                                              ; preds = %259
  %265 = getelementptr inbounds i8, ptr %262, i64 72
  %266 = load ptr, ptr %265, align 8, !tbaa !16
  %.not293 = icmp eq ptr %266, null
  br i1 %.not293, label %.critedge306, label %267

267:                                              ; preds = %264
  %268 = getelementptr inbounds i8, ptr %266, i64 8
  %269 = load i32, ptr %268, align 8, !tbaa !26
  %.not367 = icmp eq i32 %269, 2
  br i1 %.not367, label %.critedge305, label %.critedge306

.critedge305:                                     ; preds = %267
  %270 = getelementptr inbounds i8, ptr %262, i64 28
  %271 = load i32, ptr %270, align 4, !tbaa !12
  %272 = and i32 %271, 512
  %273 = icmp eq i32 %272, 0
  br i1 %273, label %.critedge306, label %274

.critedge306:                                     ; preds = %267, %264, %.critedge305
  tail call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %0, ptr noundef nonnull %262)
  br label %274

274:                                              ; preds = %.critedge306, %.critedge305, %259
  %275 = load ptr, ptr @mu_____string159, align 8
  %276 = load i32, ptr getelementptr inbounds (i8, ptr @mu_____string159, i64 8), align 8
  %277 = tail call ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef %0, ptr %275, i32 %276)
  %278 = getelementptr inbounds i8, ptr %6, i64 368
  store ptr %277, ptr %278, align 8, !tbaa !34
  %.not296 = icmp eq ptr %277, null
  br i1 %.not296, label %288, label %279

279:                                              ; preds = %274
  %280 = getelementptr inbounds i8, ptr %277, i64 72
  %281 = load ptr, ptr %280, align 8, !tbaa !16
  %.not297 = icmp eq ptr %281, null
  br i1 %.not297, label %.critedge309, label %282

282:                                              ; preds = %279
  %283 = getelementptr inbounds i8, ptr %281, i64 8
  %284 = load i32, ptr %283, align 8, !tbaa !26
  %.not368 = icmp eq i32 %284, 2
  br i1 %.not368, label %.critedge308, label %.critedge309

.critedge308:                                     ; preds = %282
  %285 = getelementptr inbounds i8, ptr %277, i64 28
  %286 = load i32, ptr %285, align 4, !tbaa !12
  %287 = and i32 %286, 512
  %.not369 = icmp eq i32 %287, 0
  br i1 %.not369, label %288, label %.critedge309

.critedge309:                                     ; preds = %282, %279, %.critedge308
  tail call void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef %0, ptr noundef nonnull %277)
  br label %288

288:                                              ; preds = %.critedge309, %.critedge308, %274
  %289 = getelementptr inbounds i8, ptr %0, i64 32
  store ptr %6, ptr %289, align 8, !tbaa !35
  %290 = load ptr, ptr %0, align 8, !tbaa !37
  %291 = getelementptr inbounds i8, ptr %290, i64 32
  store ptr %6, ptr %291, align 8, !tbaa !38
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @TypeCheckerFirstPass__badCoreType__(ptr noundef, ptr, i32, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local { ptr, ptr } @TypeCheckerFirstPass__getCoreTypeTag__(ptr noundef, ptr, i32) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local ptr @TypeCheckerFirstPass__getTypeTi__(ptr noundef, ptr, i32) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local { i32, ptr } @Map__getOrDefault__string__Node____(ptr noundef, ptr, i32) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @TypeCheckerFirstPass__invalidTypeDeclaration__(ptr noundef, ptr noundef) local_unnamed_addr #2

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 8}
!6 = !{!"tag_____IAllocator__", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!6, !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !15, i64 28}
!13 = !{!"tag_____Namespace__", !14, i64 0, !7, i64 16, !15, i64 24, !15, i64 28, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !15, i64 104}
!14 = !{!"", !7, i64 0, !15, i64 8}
!15 = !{!"int", !8, i64 0}
!16 = !{!13, !7, i64 72}
!17 = !{!13, !7, i64 32}
!18 = !{!19, !7, i64 304}
!19 = !{!"tag_____CommonTags__", !20, i64 0, !20, i64 16, !20, i64 32, !20, i64 48, !20, i64 64, !20, i64 80, !20, i64 96, !20, i64 112, !20, i64 128, !20, i64 144, !20, i64 160, !20, i64 176, !20, i64 192, !20, i64 208, !20, i64 224, !20, i64 240, !20, i64 256, !20, i64 272, !20, i64 288, !7, i64 304, !7, i64 312, !7, i64 320, !7, i64 328, !7, i64 336, !7, i64 344, !7, i64 352, !7, i64 360, !7, i64 368, !7, i64 376}
!20 = !{!"tag_____Tag__", !7, i64 0, !7, i64 8}
!21 = !{!22, !15, i64 16}
!22 = !{!"tag_____Map__string__Node____", !23, i64 0, !15, i64 16, !15, i64 20, !15, i64 24}
!23 = !{!"tag_____Array__MapEntry__string__Node______", !7, i64 0, !15, i64 8}
!24 = !{!19, !7, i64 312}
!25 = !{!19, !7, i64 320}
!26 = !{!27, !15, i64 8}
!27 = !{!"tag_____List__Ptr__Namespace______", !7, i64 0, !15, i64 8, !15, i64 12}
!28 = !{!19, !7, i64 328}
!29 = !{!19, !7, i64 336}
!30 = !{!19, !7, i64 344}
!31 = !{!19, !7, i64 352}
!32 = !{!19, !7, i64 360}
!33 = !{!19, !7, i64 376}
!34 = !{!19, !7, i64 368}
!35 = !{!36, !7, i64 32}
!36 = !{!"tag_____TypeCheckerContext__", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !15, i64 120, !15, i64 124, !7, i64 128, !15, i64 136, !8, i64 140}
!37 = !{!36, !7, i64 0}
!38 = !{!39, !7, i64 32}
!39 = !{!"tag_____Compilation__", !7, i64 0, !7, i64 8, !15, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !15, i64 48}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,MemCpyOptPass,SROAPass,SimplifyCFGPass,TailCallElimPass