*** IR Dump After Annotation2MetadataPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %5 = load i8*, i8** %4, align 8, !tbaa !8 ret i8* %5 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 %5 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %6 = bitcast i8** %5 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %6) #1 %7 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 store i8* %7, i8** %5, align 8, !tbaa !8 %8 = load i8*, i8** %5, align 8, !tbaa !8 %9 = call i8* @llvm.objc.retain(i8* %8) #1 %10 = load i8*, i8** %5, align 8 call void @llvm.objc.release(i8* %10) #1, !clang.imprecise_release !9 %11 = bitcast i8** %5 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %11) #1 %12 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* %9) #1 ret i8* %12 } ; Function Attrs: argmemonly nofree nosync nounwind willreturn declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: argmemonly nofree nosync nounwind willreturn declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca %0*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store %0* %0, %0** %4, align 8, !tbaa !8 %5 = load %0*, %0** %4, align 8, !tbaa !8 %6 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %7 = zext i32 %6 to i64 %8 = bitcast %0* %5 to i8* %9 = getelementptr inbounds i8, i8* %8, i64 %7 %10 = bitcast i8* %9 to i8** call void @llvm.objc.storeStrong(i8** %10, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = alloca i32, align 4 %2 = alloca %0*, align 8 store i32 0, i32* %1, align 4 %3 = bitcast %0** %2 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %3) #1 %4 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %5 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %4, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !10, !clang.arc.no_objc_arc_exceptions !9 call void (...) @llvm.objc.clang.arc.noop.use(i8* %5) #1 %6 = bitcast i8* %5 to %0* store %0* %6, %0** %2, align 8, !tbaa !8 %7 = load %0*, %0** %2, align 8, !tbaa !8 %8 = icmp ne %0* %7, null %9 = zext i1 %8 to i64 %10 = select i1 %8, i32 0, i32 1 store i32 %10, i32* %1, align 4 %11 = load %0*, %0** %2, align 8 %12 = bitcast %0* %11 to i8* call void @llvm.objc.release(i8* %12) #1, !clang.imprecise_release !9 %13 = bitcast %0** %2 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %13) #1 %14 = load i32, i32* %1, align 4 ret i32 %14 } declare dso_local i8* @objc_msgSend(i8*, ...) ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #3 define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) attributes #0 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { argmemonly nofree nosync nounwind willreturn } attributes #3 = { inaccessiblememonly nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!5, !5, i64 0} !5 = !{!"any pointer", !6, i64 0} !6 = !{!"omnipotent char", !7, i64 0} !7 = !{!"Simple C/C++ TBAA"} !8 = !{!6, !6, i64 0} !9 = !{} !10 = !{!"testObj", !"TestObj", i1 true} *** IR Dump After ForceFunctionAttrsPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %5 = load i8*, i8** %4, align 8, !tbaa !8 ret i8* %5 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 %5 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %6 = bitcast i8** %5 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %6) #1 %7 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 store i8* %7, i8** %5, align 8, !tbaa !8 %8 = load i8*, i8** %5, align 8, !tbaa !8 %9 = call i8* @llvm.objc.retain(i8* %8) #1 %10 = load i8*, i8** %5, align 8 call void @llvm.objc.release(i8* %10) #1, !clang.imprecise_release !9 %11 = bitcast i8** %5 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %11) #1 %12 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* %9) #1 ret i8* %12 } ; Function Attrs: argmemonly nofree nosync nounwind willreturn declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: argmemonly nofree nosync nounwind willreturn declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca %0*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store %0* %0, %0** %4, align 8, !tbaa !8 %5 = load %0*, %0** %4, align 8, !tbaa !8 %6 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %7 = zext i32 %6 to i64 %8 = bitcast %0* %5 to i8* %9 = getelementptr inbounds i8, i8* %8, i64 %7 %10 = bitcast i8* %9 to i8** call void @llvm.objc.storeStrong(i8** %10, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = alloca i32, align 4 %2 = alloca %0*, align 8 store i32 0, i32* %1, align 4 %3 = bitcast %0** %2 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %3) #1 %4 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %5 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %4, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !10, !clang.arc.no_objc_arc_exceptions !9 call void (...) @llvm.objc.clang.arc.noop.use(i8* %5) #1 %6 = bitcast i8* %5 to %0* store %0* %6, %0** %2, align 8, !tbaa !8 %7 = load %0*, %0** %2, align 8, !tbaa !8 %8 = icmp ne %0* %7, null %9 = zext i1 %8 to i64 %10 = select i1 %8, i32 0, i32 1 store i32 %10, i32* %1, align 4 %11 = load %0*, %0** %2, align 8 %12 = bitcast %0* %11 to i8* call void @llvm.objc.release(i8* %12) #1, !clang.imprecise_release !9 %13 = bitcast %0** %2 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %13) #1 %14 = load i32, i32* %1, align 4 ret i32 %14 } declare dso_local i8* @objc_msgSend(i8*, ...) ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #3 define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) attributes #0 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { argmemonly nofree nosync nounwind willreturn } attributes #3 = { inaccessiblememonly nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!5, !5, i64 0} !5 = !{!"any pointer", !6, i64 0} !6 = !{!"omnipotent char", !7, i64 0} !7 = !{!"Simple C/C++ TBAA"} !8 = !{!6, !6, i64 0} !9 = !{} !10 = !{!"testObj", !"TestObj", i1 true} *** IR Dump After ObjCARCExpandPass on _c_TestObj__class *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %5 = load i8*, i8** %4, align 8, !tbaa !8 ret i8* %5 } *** IR Dump After ObjCARCExpandPass on _c_TestObj__testObj *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 %5 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %6 = bitcast i8** %5 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %6) #1 %7 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 store i8* inttoptr (i64 -6226332862589698012 to i8*), i8** %5, align 8, !tbaa !8 %8 = load i8*, i8** %5, align 8, !tbaa !8 %9 = call i8* @llvm.objc.retain(i8* %8) #1 %10 = load i8*, i8** %5, align 8 call void @llvm.objc.release(i8* %10) #1, !clang.imprecise_release !9 %11 = bitcast i8** %5 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %11) #1 %12 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* %8) #1 ret i8* %8 } *** IR Dump After ObjCARCExpandPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca %0*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store %0* %0, %0** %4, align 8, !tbaa !8 %5 = load %0*, %0** %4, align 8, !tbaa !8 %6 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %7 = zext i32 %6 to i64 %8 = bitcast %0* %5 to i8* %9 = getelementptr inbounds i8, i8* %8, i64 %7 %10 = bitcast i8* %9 to i8** call void @llvm.objc.storeStrong(i8** %10, i8* null) #1 ret void } *** IR Dump After ObjCARCExpandPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = alloca i32, align 4 %2 = alloca %0*, align 8 store i32 0, i32* %1, align 4 %3 = bitcast %0** %2 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %3) #1 %4 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %5 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %4, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !10, !clang.arc.no_objc_arc_exceptions !9 call void (...) @llvm.objc.clang.arc.noop.use(i8* %5) #1 %6 = bitcast i8* %5 to %0* store %0* %6, %0** %2, align 8, !tbaa !8 %7 = load %0*, %0** %2, align 8, !tbaa !8 %8 = icmp ne %0* %7, null %9 = zext i1 %8 to i64 %10 = select i1 %8, i32 0, i32 1 store i32 %10, i32* %1, align 4 %11 = load %0*, %0** %2, align 8 %12 = bitcast %0* %11 to i8* call void @llvm.objc.release(i8* %12) #1, !clang.imprecise_release !9 %13 = bitcast %0** %2 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %13) #1 %14 = load i32, i32* %1, align 4 ret i32 %14 } *** IR Dump After ObjCARCExpandPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } *** IR Dump After InferFunctionAttrsPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %5 = load i8*, i8** %4, align 8, !tbaa !8 ret i8* %5 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 %5 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %6 = bitcast i8** %5 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %6) #1 %7 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 store i8* inttoptr (i64 -6226332862589698012 to i8*), i8** %5, align 8, !tbaa !8 %8 = load i8*, i8** %5, align 8, !tbaa !8 %9 = call i8* @llvm.objc.retain(i8* %8) #1 %10 = load i8*, i8** %5, align 8 call void @llvm.objc.release(i8* %10) #1, !clang.imprecise_release !9 %11 = bitcast i8** %5 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %11) #1 %12 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* %8) #1 ret i8* %8 } ; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca %0*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store %0* %0, %0** %4, align 8, !tbaa !8 %5 = load %0*, %0** %4, align 8, !tbaa !8 %6 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %7 = zext i32 %6 to i64 %8 = bitcast %0* %5 to i8* %9 = getelementptr inbounds i8, i8* %8, i64 %7 %10 = bitcast i8* %9 to i8** call void @llvm.objc.storeStrong(i8** %10, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = alloca i32, align 4 %2 = alloca %0*, align 8 store i32 0, i32* %1, align 4 %3 = bitcast %0** %2 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %3) #1 %4 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %5 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %4, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !10, !clang.arc.no_objc_arc_exceptions !9 call void (...) @llvm.objc.clang.arc.noop.use(i8* %5) #1 %6 = bitcast i8* %5 to %0* store %0* %6, %0** %2, align 8, !tbaa !8 %7 = load %0*, %0** %2, align 8, !tbaa !8 %8 = icmp ne %0* %7, null %9 = zext i1 %8 to i64 %10 = select i1 %8, i32 0, i32 1 store i32 %10, i32* %1, align 4 %11 = load %0*, %0** %2, align 8 %12 = bitcast %0* %11 to i8* call void @llvm.objc.release(i8* %12) #1, !clang.imprecise_release !9 %13 = bitcast %0** %2 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %13) #1 %14 = load i32, i32* %1, align 4 ret i32 %14 } declare dso_local i8* @objc_msgSend(i8*, ...) ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #3 define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) attributes #0 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { argmemonly mustprogress nofree nosync nounwind willreturn } attributes #3 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!5, !5, i64 0} !5 = !{!"any pointer", !6, i64 0} !6 = !{!"omnipotent char", !7, i64 0} !7 = !{!"Simple C/C++ TBAA"} !8 = !{!6, !6, i64 0} !9 = !{} !10 = !{!"testObj", !"TestObj", i1 true} *** IR Dump After LowerExpectIntrinsicPass on _c_TestObj__class *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %5 = load i8*, i8** %4, align 8, !tbaa !8 ret i8* %5 } *** IR Dump After SimplifyCFGPass on _c_TestObj__class *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %5 = load i8*, i8** %4, align 8, !tbaa !8 ret i8* %5 } *** IR Dump After SROAPass on _c_TestObj__class *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } *** IR Dump After EarlyCSEPass on _c_TestObj__class *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } *** IR Dump After CoroEarlyPass on _c_TestObj__class *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } *** IR Dump After LowerExpectIntrinsicPass on _c_TestObj__testObj *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 %5 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %6 = bitcast i8** %5 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %6) #1 %7 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 store i8* inttoptr (i64 -6226332862589698012 to i8*), i8** %5, align 8, !tbaa !8 %8 = load i8*, i8** %5, align 8, !tbaa !8 %9 = call i8* @llvm.objc.retain(i8* %8) #1 %10 = load i8*, i8** %5, align 8 call void @llvm.objc.release(i8* %10) #1, !clang.imprecise_release !9 %11 = bitcast i8** %5 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %11) #1 %12 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* %8) #1 ret i8* %8 } *** IR Dump After SimplifyCFGPass on _c_TestObj__testObj *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca i8*, align 8 %5 = alloca i8*, align 8 store i8* %1, i8** %3, align 8, !tbaa !4 store i8* %0, i8** %4, align 8, !tbaa !8 %6 = bitcast i8** %5 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %6) #1 %7 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 store i8* inttoptr (i64 -6226332862589698012 to i8*), i8** %5, align 8, !tbaa !8 %8 = load i8*, i8** %5, align 8, !tbaa !8 %9 = call i8* @llvm.objc.retain(i8* %8) #1 %10 = load i8*, i8** %5, align 8 call void @llvm.objc.release(i8* %10) #1, !clang.imprecise_release !9 %11 = bitcast i8** %5 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %11) #1 %12 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* %8) #1 ret i8* %8 } *** IR Dump After SROAPass on _c_TestObj__testObj *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After EarlyCSEPass on _c_TestObj__testObj *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After CoroEarlyPass on _c_TestObj__testObj *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LowerExpectIntrinsicPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca %0*, align 8 store i8* %1, i8** %3, align 8, !tbaa !5 store %0* %0, %0** %4, align 8, !tbaa !9 %5 = load %0*, %0** %4, align 8, !tbaa !9 %6 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %7 = zext i32 %6 to i64 %8 = bitcast %0* %5 to i8* %9 = getelementptr inbounds i8, i8* %8, i64 %7 %10 = bitcast i8* %9 to i8** call void @llvm.objc.storeStrong(i8** %10, i8* null) #1 ret void } *** IR Dump After SimplifyCFGPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = alloca i8*, align 8 %4 = alloca %0*, align 8 store i8* %1, i8** %3, align 8, !tbaa !5 store %0* %0, %0** %4, align 8, !tbaa !9 %5 = load %0*, %0** %4, align 8, !tbaa !9 %6 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %7 = zext i32 %6 to i64 %8 = bitcast %0* %5 to i8* %9 = getelementptr inbounds i8, i8* %8, i64 %7 %10 = bitcast i8* %9 to i8** call void @llvm.objc.storeStrong(i8** %10, i8* null) #1 ret void } *** IR Dump After SROAPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After EarlyCSEPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After CoroEarlyPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LowerExpectIntrinsicPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = alloca i32, align 4 %2 = alloca %0*, align 8 store i32 0, i32* %1, align 4 %3 = bitcast %0** %2 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %3) #1 %4 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %5 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %4, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %5) #1 %6 = bitcast i8* %5 to %0* store %0* %6, %0** %2, align 8, !tbaa !6 %7 = load %0*, %0** %2, align 8, !tbaa !6 %8 = icmp ne %0* %7, null %9 = zext i1 %8 to i64 %10 = select i1 %8, i32 0, i32 1 store i32 %10, i32* %1, align 4 %11 = load %0*, %0** %2, align 8 %12 = bitcast %0* %11 to i8* call void @llvm.objc.release(i8* %12) #1, !clang.imprecise_release !4 %13 = bitcast %0** %2 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %13) #1 %14 = load i32, i32* %1, align 4 ret i32 %14 } *** IR Dump After SimplifyCFGPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = alloca i32, align 4 %2 = alloca %0*, align 8 store i32 0, i32* %1, align 4 %3 = bitcast %0** %2 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* %3) #1 %4 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %5 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %4, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %5) #1 %6 = bitcast i8* %5 to %0* store %0* %6, %0** %2, align 8, !tbaa !6 %7 = load %0*, %0** %2, align 8, !tbaa !6 %8 = icmp ne %0* %7, null %9 = zext i1 %8 to i64 %10 = select i1 %8, i32 0, i32 1 store i32 %10, i32* %1, align 4 %11 = load %0*, %0** %2, align 8 %12 = bitcast %0* %11 to i8* call void @llvm.objc.release(i8* %12) #1, !clang.imprecise_release !4 %13 = bitcast %0** %2 to i8* call void @llvm.lifetime.end.p0i8(i64 8, i8* %13) #1 %14 = load i32, i32* %1, align 4 ret i32 %14 } *** IR Dump After SROAPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = bitcast i8* %2 to %0* %4 = icmp ne %0* %3, null %5 = zext i1 %4 to i64 %6 = select i1 %4, i32 0, i32 1 %7 = bitcast %0* %3 to i8* call void @llvm.objc.release(i8* %7) #1, !clang.imprecise_release !4 ret i32 %6 } *** IR Dump After EarlyCSEPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = bitcast i8* %2 to %0* %4 = icmp ne %0* %3, null %5 = select i1 %4, i32 0, i32 1 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %5 } *** IR Dump After CoroEarlyPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = bitcast i8* %2 to %0* %4 = icmp ne %0* %3, null %5 = select i1 %4, i32 0, i32 1 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %5 } *** IR Dump After LowerExpectIntrinsicPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } *** IR Dump After SimplifyCFGPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } *** IR Dump After SROAPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } *** IR Dump After EarlyCSEPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } *** IR Dump After CoroEarlyPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } *** IR Dump After OpenMPOptPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = bitcast i8* %2 to %0* %4 = icmp ne %0* %3, null %5 = select i1 %4, i32 0, i32 1 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %5 } declare dso_local i8* @objc_msgSend(i8*, ...) ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #3 define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) attributes #0 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { argmemonly mustprogress nofree nosync nounwind willreturn } attributes #3 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{} !5 = !{!"testObj", !"TestObj", i1 true} *** IR Dump After ObjCARCAPElimPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = bitcast i8* %2 to %0* %4 = icmp ne %0* %3, null %5 = select i1 %4, i32 0, i32 1 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %5 } declare dso_local i8* @objc_msgSend(i8*, ...) ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #3 define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) attributes #0 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { argmemonly mustprogress nofree nosync nounwind willreturn } attributes #3 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{} !5 = !{!"testObj", !"TestObj", i1 true} *** IR Dump After IPSCCPPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = bitcast i8* %2 to %0* %4 = icmp ne %0* %3, null %5 = select i1 %4, i32 0, i32 1 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %5 } declare dso_local i8* @objc_msgSend(i8*, ...) ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #3 define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) attributes #0 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { argmemonly mustprogress nofree nosync nounwind willreturn } attributes #3 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{} !5 = !{!"testObj", !"TestObj", i1 true} *** IR Dump After CalledValuePropagationPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: argmemonly mustprogress nofree nosync nounwind willreturn declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = bitcast i8* %2 to %0* %4 = icmp ne %0* %3, null %5 = select i1 %4, i32 0, i32 1 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %5 } declare dso_local i8* @objc_msgSend(i8*, ...) ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #3 define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) attributes #0 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { argmemonly mustprogress nofree nosync nounwind willreturn } attributes #3 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{} !5 = !{!"testObj", !"TestObj", i1 true} *** IR Dump After GlobalOptPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = bitcast i8* %2 to %0* %4 = icmp ne %0* %3, null %5 = select i1 %4, i32 0, i32 1 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %5 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #2 define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{} !5 = !{!"testObj", !"TestObj", i1 true} *** IR Dump After PromotePass on _c_TestObj__class *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } *** IR Dump After PromotePass on _c_TestObj__testObj *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After PromotePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After PromotePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = bitcast i8* %2 to %0* %4 = icmp ne %0* %3, null %5 = select i1 %4, i32 0, i32 1 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %5 } *** IR Dump After PromotePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } *** IR Dump After DeadArgumentEliminationPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = bitcast i8* %2 to %0* %4 = icmp ne %0* %3, null %5 = select i1 %4, i32 0, i32 1 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %5 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #2 define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{} !5 = !{!"testObj", !"TestObj", i1 true} *** IR Dump After InstCombinePass on _c_TestObj__class *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } *** IR Dump After SimplifyCFGPass on _c_TestObj__class *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } *** IR Dump After InstCombinePass on _c_TestObj__testObj *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SimplifyCFGPass on _c_TestObj__testObj *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InstCombinePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SimplifyCFGPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InstCombinePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %4 } *** IR Dump After SimplifyCFGPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %4 } *** IR Dump After InstCombinePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SimplifyCFGPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After RequireAnalysisPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #2 define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{} !5 = !{!"testObj", !"TestObj", i1 true} *** IR Dump After InvalidateAnalysisPass on _c_TestObj__class *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } *** IR Dump After InvalidateAnalysisPass on _c_TestObj__testObj *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InvalidateAnalysisPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InvalidateAnalysisPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %4 } *** IR Dump After InvalidateAnalysisPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After RequireAnalysisPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #0 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !5, !clang.arc.no_objc_arc_exceptions !4 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !4 ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #2 define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{} !5 = !{!"testObj", !"TestObj", i1 true} *** IR Dump After InlinerPass on (_i_TestObj__.cxx_destruct) *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InlinerPass on (_i_TestObj__.cxx_destruct) *** ; Function Attrs: uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* noundef %1) #0 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After PostOrderFunctionAttrsPass on (_i_TestObj__.cxx_destruct) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After OpenMPOptCGSCCPass on (_i_TestObj__.cxx_destruct) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SROAPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After EarlyCSEPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SpeculativeExecutionPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After JumpThreadingPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After CorrelatedValuePropagationPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SimplifyCFGPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InstCombinePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LibCallsShrinkWrapPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After TailCallElimPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SimplifyCFGPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After ReassociatePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After RequireAnalysisPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LoopSimplifyPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LCSSAPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SimplifyCFGPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InstCombinePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LoopSimplifyPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LCSSAPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SROAPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After MergedLoadStoreMotionPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After GVNPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SCCPPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After BDCEPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InstCombinePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After JumpThreadingPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After CorrelatedValuePropagationPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After ADCEPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After MemCpyOptPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After DSEPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LoopSimplifyPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LCSSAPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After CoroElidePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After ObjCARCOptPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SimplifyCFGPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InstCombinePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After CoroSplitPass on (_i_TestObj__.cxx_destruct) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InlinerPass on (_c_TestObj__testObj) *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InlinerPass on (_c_TestObj__testObj) *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__testObj(i8* noundef %0, i8* noundef %1) #0 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After PostOrderFunctionAttrsPass on (_c_TestObj__testObj) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After OpenMPOptCGSCCPass on (_c_TestObj__testObj) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SROAPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After EarlyCSEPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SpeculativeExecutionPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After JumpThreadingPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After CorrelatedValuePropagationPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SimplifyCFGPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InstCombinePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LibCallsShrinkWrapPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After TailCallElimPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SimplifyCFGPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After ReassociatePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After RequireAnalysisPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LoopSimplifyPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LCSSAPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SimplifyCFGPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InstCombinePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LoopSimplifyPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LCSSAPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SROAPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After MergedLoadStoreMotionPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After GVNPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SCCPPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After BDCEPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InstCombinePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After JumpThreadingPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After CorrelatedValuePropagationPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After ADCEPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After MemCpyOptPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After DSEPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LoopSimplifyPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LCSSAPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After CoroElidePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 tail call void @llvm.objc.release(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1, !clang.imprecise_release !4 %5 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After ObjCARCOptPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SimplifyCFGPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InstCombinePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After CoroSplitPass on (_c_TestObj__testObj) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InlinerPass on (_c_TestObj__class) *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } *** IR Dump After InlinerPass on (_c_TestObj__class) *** ; Function Attrs: uwtable define internal i8* @_c_TestObj__class(i8* noundef %0, i8* noundef %1) #0 { ret i8* %0 } *** IR Dump After PostOrderFunctionAttrsPass on (_c_TestObj__class) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After OpenMPOptCGSCCPass on (_c_TestObj__class) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After SROAPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After EarlyCSEPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After SpeculativeExecutionPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After JumpThreadingPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After CorrelatedValuePropagationPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After SimplifyCFGPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After InstCombinePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LibCallsShrinkWrapPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After TailCallElimPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After SimplifyCFGPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After ReassociatePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After RequireAnalysisPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LoopSimplifyPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LCSSAPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After SimplifyCFGPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After InstCombinePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LoopSimplifyPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LCSSAPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After SROAPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After MergedLoadStoreMotionPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After GVNPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After SCCPPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After BDCEPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After InstCombinePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After JumpThreadingPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After CorrelatedValuePropagationPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After ADCEPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After MemCpyOptPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After DSEPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LoopSimplifyPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LCSSAPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After CoroElidePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After ObjCARCOptPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After SimplifyCFGPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After InstCombinePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After CoroSplitPass on (_c_TestObj__class) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After InlinerPass on (main) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After InlinerPass on (main) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After PostOrderFunctionAttrsPass on (main) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After OpenMPOptCGSCCPass on (main) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After SROAPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After EarlyCSEPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After SpeculativeExecutionPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After JumpThreadingPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After CorrelatedValuePropagationPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After SimplifyCFGPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After InstCombinePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LibCallsShrinkWrapPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After TailCallElimPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After SimplifyCFGPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After ReassociatePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After RequireAnalysisPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LoopSimplifyPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LCSSAPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After SimplifyCFGPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After InstCombinePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LoopSimplifyPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LCSSAPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After SROAPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After MergedLoadStoreMotionPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After GVNPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After SCCPPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After BDCEPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After InstCombinePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After JumpThreadingPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After CorrelatedValuePropagationPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After ADCEPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After MemCpyOptPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After DSEPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LoopSimplifyPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LCSSAPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After CoroElidePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After ObjCARCOptPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After SimplifyCFGPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After InstCombinePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After CoroSplitPass on (main) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After InlinerPass on (.objcv2_load_function) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After InlinerPass on (.objcv2_load_function) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After PostOrderFunctionAttrsPass on (.objcv2_load_function) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After OpenMPOptCGSCCPass on (.objcv2_load_function) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SROAPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After EarlyCSEPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SpeculativeExecutionPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After JumpThreadingPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After CorrelatedValuePropagationPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SimplifyCFGPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After InstCombinePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LibCallsShrinkWrapPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After TailCallElimPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SimplifyCFGPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After ReassociatePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After RequireAnalysisPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LoopSimplifyPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LCSSAPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SimplifyCFGPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After InstCombinePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LoopSimplifyPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LCSSAPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SROAPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After MergedLoadStoreMotionPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After GVNPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SCCPPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After BDCEPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After InstCombinePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After JumpThreadingPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After CorrelatedValuePropagationPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After ADCEPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After MemCpyOptPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After DSEPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LoopSimplifyPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LCSSAPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After CoroElidePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After ObjCARCOptPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SimplifyCFGPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After InstCombinePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After CoroSplitPass on (.objcv2_load_function) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After GlobalOptPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #4 define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #3 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!"testObj", !"TestObj", i1 true} !5 = !{} *** IR Dump After GlobalDCEPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #4 define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #3 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!"testObj", !"TestObj", i1 true} !5 = !{} *** IR Dump After EliminateAvailableExternallyPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #4 define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #3 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!"testObj", !"TestObj", i1 true} !5 = !{} *** IR Dump After ReversePostOrderFunctionAttrsPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #4 define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #3 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!"testObj", !"TestObj", i1 true} !5 = !{} *** IR Dump After RequireAnalysisPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #4 define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #3 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!"testObj", !"TestObj", i1 true} !5 = !{} *** IR Dump After Float2IntPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LowerConstantIntrinsicsPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LoopSimplifyPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LCSSAPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LoopDistributePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After InjectTLIMappings on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LoopVectorizePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LoopLoadEliminationPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After InstCombinePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After SimplifyCFGPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After SLPVectorizerPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After VectorCombinePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After InstCombinePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LoopUnrollPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After WarnMissedTransformationsPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After InstCombinePass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After RequireAnalysisPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LoopSimplifyPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LCSSAPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After AlignmentFromAssumptionsPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After LoopSinkPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After InstSimplifyPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After DivRemPairsPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After SimplifyCFGPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After CoroCleanupPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Float2IntPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LowerConstantIntrinsicsPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LoopSimplifyPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LCSSAPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LoopDistributePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InjectTLIMappings on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LoopVectorizePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LoopLoadEliminationPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InstCombinePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SimplifyCFGPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SLPVectorizerPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After VectorCombinePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InstCombinePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LoopUnrollPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After WarnMissedTransformationsPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InstCombinePass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After RequireAnalysisPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LoopSimplifyPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LCSSAPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After AlignmentFromAssumptionsPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After LoopSinkPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After InstSimplifyPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After DivRemPairsPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After SimplifyCFGPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After CoroCleanupPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After Float2IntPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LowerConstantIntrinsicsPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LoopSimplifyPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LCSSAPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LoopDistributePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InjectTLIMappings on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LoopVectorizePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LoopLoadEliminationPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InstCombinePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SimplifyCFGPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SLPVectorizerPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After VectorCombinePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InstCombinePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LoopUnrollPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After WarnMissedTransformationsPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InstCombinePass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After RequireAnalysisPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LoopSimplifyPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LCSSAPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After AlignmentFromAssumptionsPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After LoopSinkPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After InstSimplifyPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After DivRemPairsPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After SimplifyCFGPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After CoroCleanupPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After Float2IntPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LowerConstantIntrinsicsPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LoopSimplifyPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LCSSAPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LoopDistributePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After InjectTLIMappings on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LoopVectorizePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LoopLoadEliminationPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After InstCombinePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After SimplifyCFGPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After SLPVectorizerPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After VectorCombinePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After InstCombinePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LoopUnrollPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After WarnMissedTransformationsPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After InstCombinePass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After RequireAnalysisPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LoopSimplifyPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LCSSAPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After AlignmentFromAssumptionsPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After LoopSinkPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After InstSimplifyPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After DivRemPairsPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After SimplifyCFGPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After CoroCleanupPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After Float2IntPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LowerConstantIntrinsicsPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LoopSimplifyPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LCSSAPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LoopDistributePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After InjectTLIMappings on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LoopVectorizePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LoopLoadEliminationPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After InstCombinePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SimplifyCFGPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SLPVectorizerPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After VectorCombinePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After InstCombinePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LoopUnrollPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After WarnMissedTransformationsPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After InstCombinePass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After RequireAnalysisPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LoopSimplifyPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LCSSAPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After AlignmentFromAssumptionsPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After LoopSinkPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After InstSimplifyPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After DivRemPairsPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After SimplifyCFGPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After CoroCleanupPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After CGProfilePass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #4 define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #3 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!"testObj", !"TestObj", i1 true} !5 = !{} *** IR Dump After GlobalDCEPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #4 define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #3 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!"testObj", !"TestObj", i1 true} !5 = !{} *** IR Dump After ConstantMergePass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #4 define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #3 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!"testObj", !"TestObj", i1 true} !5 = !{} *** IR Dump After RelLookupTableConverterPass on [module] *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #4 define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #3 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!"testObj", !"TestObj", i1 true} !5 = !{} *** IR Dump After AnnotationRemarksPass on _c_TestObj__class *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After AnnotationRemarksPass on _c_TestObj__testObj *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retain(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 %4 = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After AnnotationRemarksPass on _i_TestObj__.cxx_destruct *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After AnnotationRemarksPass on main *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = tail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 tail call void (...) @llvm.objc.clang.arc.noop.use(i8* %2) #1 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After AnnotationRemarksPass on .objcv2_load_function *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After ObjC ARC contraction (objc-arc-contract) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After ObjC ARC contraction (objc-arc-contract) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @llvm.objc.retainAutoreleaseReturnValue(i8* nonnull inttoptr (i64 -6226332862589698012 to i8*)) #1 ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After ObjC ARC contraction (objc-arc-contract) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @llvm.objc.storeStrong(i8** %7, i8* null) #1 ret void } *** IR Dump After ObjC ARC contraction (objc-arc-contract) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @llvm.objc.retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @llvm.objc.release(i8* %2) #1, !clang.imprecise_release !5 ret i32 %4 } *** IR Dump After ObjC ARC contraction (objc-arc-contract) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Pre-ISel Intrinsic Lowering (pre-isel-intrinsic-lowering) *** ; ModuleID = 'wrong-class-runtime.m' source_filename = "wrong-class-runtime.m" target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc19.32.31329" %0 = type opaque %.objc_section_sentinel = type <{}> $.objcv2_load_function = comdat any $.objc_sel_name_class = comdat any $".objc_sel_types_#16\010:8" = comdat any $".objc_selector_class_#16\010:8" = comdat any $.objc_sel_name_testObj = comdat any $".objc_sel_types_\0116\010:8" = comdat any $".objc_selector_testObj_\0116\010:8" = comdat any $.objc_sel_name_.cxx_destruct = comdat any $".objc_sel_types_v16\010:8" = comdat any $".objc_selector_.cxx_destruct_v16\010:8" = comdat any $"__start_.objcrt$SEL" = comdat any $"__stop.objcrt$SEL" = comdat any $"__start_.objcrt$CLS" = comdat any $"__stop.objcrt$CLS" = comdat any $"__start_.objcrt$CLR" = comdat any $"__stop.objcrt$CLR" = comdat any $"__start_.objcrt$CAT" = comdat any $"__stop.objcrt$CAT" = comdat any $"__start_.objcrt$PCL" = comdat any $"__stop.objcrt$PCL" = comdat any $"__start_.objcrt$PCR" = comdat any $"__stop.objcrt$PCR" = comdat any $"__start_.objcrt$CAL" = comdat any $"__stop.objcrt$CAL" = comdat any $"__start_.objcrt$STR" = comdat any $"__stop.objcrt$STR" = comdat any $.objc_init = comdat any $.objc_ctor = comdat any @"__objc_ivar_offset_TestObj.isa.\01" = global i32 0 @0 = private unnamed_addr constant [8 x i8] c"TestObj\00", align 1 @.objc_sel_name_class = linkonce_odr hidden constant [6 x i8] c"class\00", comdat @".objc_sel_types_#16\010:8" = linkonce_odr hidden constant [8 x i8] c"#16@0:8\00", comdat @".objc_selector_class_#16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.objc_sel_name_class, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_#16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @1 = private unnamed_addr constant [8 x i8] c"#16@0:8\00", align 1 @.objc_sel_name_testObj = linkonce_odr hidden constant [8 x i8] c"testObj\00", comdat @".objc_sel_types_\0116\010:8" = linkonce_odr hidden constant [8 x i8] c"@16@0:8\00", comdat @".objc_selector_testObj_\0116\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.objc_sel_name_testObj, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_\0116\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @2 = private unnamed_addr constant [8 x i8] c"@16@0:8\00", align 1 @.objc_method_list = internal global { i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 2, i64 24, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__class to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_class_#16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @1, i32 0, i32 0) }, { i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (i8* (i8*, i8*)* @_c_TestObj__testObj to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0) }] }, align 8 @"$_OBJC_METACLASS_TestObj" = internal global { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { i8* null, i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 1, i32 0, i8* null, i8* bitcast ({ i8*, i32, i64, [2 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @3 = private unnamed_addr constant [4 x i8] c"isa\00", align 1 @4 = private unnamed_addr constant [2 x i8] c"@\00", align 1 @.objc_ivar_list = private global { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] } { i32 1, i64 32, [1 x { i8*, i8*, i32*, i32, i32 }] [{ i8*, i8*, i32*, i32, i32 } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0), i32* @"__objc_ivar_offset_TestObj.isa.\01", i32 8, i32 29 }] }, align 8 @.objc_sel_name_.cxx_destruct = linkonce_odr hidden constant [14 x i8] c".cxx_destruct\00", comdat @".objc_sel_types_v16\010:8" = linkonce_odr hidden constant [8 x i8] c"v16@0:8\00", comdat @".objc_selector_.cxx_destruct_v16\010:8" = linkonce_odr hidden global { i8*, i8* } { i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.objc_sel_name_.cxx_destruct, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".objc_sel_types_v16\010:8", i32 0, i32 0) }, section ".objcrt$SEL$m", comdat, align 8 @5 = private unnamed_addr constant [8 x i8] c"v16@0:8\00", align 1 @.objc_method_list.1 = internal global { i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] } { i8* null, i32 1, i64 24, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] [{ i8* (i8*, i8*, ...)*, i8*, i8* } { i8* (i8*, i8*, ...)* bitcast (void (%0*, i8*)* @_i_TestObj__.cxx_destruct to i8* (i8*, i8*, ...)*), i8* bitcast ({ i8*, i8* }* @".objc_selector_.cxx_destruct_v16\010:8" to i8*), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @5, i32 0, i32 0) }] }, align 8 @"$_OBJC_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* } { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_METACLASS_TestObj", i8* null, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @0, i32 0, i32 0), i32 0, i32 0, i32 -8, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }* @.objc_ivar_list, i8* bitcast ({ i8*, i32, i64, [1 x { i8* (i8*, i8*, ...)*, i8*, i8* }] }* @.objc_method_list.1 to i8*), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 0, i8* null }, align 8 @"$_OBJC_REF_CLASS_TestObj" = local_unnamed_addr global i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj" to i8*), section ".objcrt$CLR$m" @"$_OBJC_INIT_CLASS_TestObj" = global { { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }* @"$_OBJC_CLASS_TestObj", section ".objcrt$CLS$m" @"__start_.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$a", comdat, align 8 @"__stop.objcrt$SEL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$SEL$z", comdat, align 8 @"__start_.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$a", comdat, align 8 @"__stop.objcrt$CLS" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLS$z", comdat, align 8 @"__start_.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$a", comdat, align 8 @"__stop.objcrt$CLR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CLR$z", comdat, align 8 @"__start_.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$a", comdat, align 8 @"__stop.objcrt$CAT" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAT$z", comdat, align 8 @"__start_.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$a", comdat, align 8 @"__stop.objcrt$PCL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCL$z", comdat, align 8 @"__start_.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$a", comdat, align 8 @"__stop.objcrt$PCR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$PCR$z", comdat, align 8 @"__start_.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$a", comdat, align 8 @"__stop.objcrt$CAL" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$CAL$z", comdat, align 8 @"__start_.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$a", comdat, align 8 @"__stop.objcrt$STR" = linkonce_odr hidden global %.objc_section_sentinel zeroinitializer, section ".objcrt$STR$z", comdat, align 8 @.objc_init = linkonce_odr hidden global { i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* } { i64 0, %.objc_section_sentinel* @"__start_.objcrt$SEL", %.objc_section_sentinel* @"__stop.objcrt$SEL", %.objc_section_sentinel* @"__start_.objcrt$CLS", %.objc_section_sentinel* @"__stop.objcrt$CLS", %.objc_section_sentinel* @"__start_.objcrt$CLR", %.objc_section_sentinel* @"__stop.objcrt$CLR", %.objc_section_sentinel* @"__start_.objcrt$CAT", %.objc_section_sentinel* @"__stop.objcrt$CAT", %.objc_section_sentinel* @"__start_.objcrt$PCL", %.objc_section_sentinel* @"__stop.objcrt$PCL", %.objc_section_sentinel* @"__start_.objcrt$PCR", %.objc_section_sentinel* @"__stop.objcrt$PCR", %.objc_section_sentinel* @"__start_.objcrt$CAL", %.objc_section_sentinel* @"__stop.objcrt$CAL", %.objc_section_sentinel* @"__start_.objcrt$STR", %.objc_section_sentinel* @"__stop.objcrt$STR" }, comdat, align 8 @.objc_ctor = linkonce hidden global void ()* @.objcv2_load_function, section ".CRT$XCLz", comdat @llvm.used = appending global [2 x i8*] [i8* bitcast ({ { i8*, i8*, i8*, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }*, i8*, i8*, i32, i32, i32, { i32, i64, [1 x { i8*, i8*, i32*, i32, i32 }] }*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i8* }** @"$_OBJC_INIT_CLASS_TestObj" to i8*), i8* bitcast (void ()** @.objc_ctor to i8*)], section "llvm.metadata" @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (void ()* @.objcv2_load_function to i8*)], section "llvm.metadata" ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } ; Function Attrs: nounwind declare i8* @llvm.objc.retain(i8*) #1 ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) ret i8* inttoptr (i64 -6226332862589698012 to i8*) } ; Function Attrs: nounwind declare void @llvm.objc.release(i8*) #1 ; Function Attrs: nounwind declare i8* @llvm.objc.autoreleaseReturnValue(i8*) #1 ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } ; Function Attrs: nounwind declare void @llvm.objc.storeStrong(i8**, i8*) #1 ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } declare dso_local i8* @objc_msgSend(i8*, ...) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) #1 ; Function Attrs: inaccessiblememonly mustprogress nofree nosync nounwind willreturn declare void @llvm.objc.clang.arc.noop.use(...) #4 define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } declare dso_local void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }*) local_unnamed_addr ; Function Attrs: nounwind declare i8* @llvm.objc.retainAutoreleaseReturnValue(i8*) #1 ; Function Attrs: nonlazybind declare void @objc_release(i8*) #5 declare void @objc_storeStrong(i8**, i8*) declare i8* @objc_retainAutoreleasedReturnValue(i8*) declare i8* @objc_retainAutoreleaseReturnValue(i8*) attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { nounwind } attributes #2 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #3 = { uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { inaccessiblememonly mustprogress nofree nosync nounwind willreturn } attributes #5 = { nonlazybind } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 1, !"wchar_size", i32 2} !1 = !{i32 7, !"PIC Level", i32 2} !2 = !{i32 7, !"uwtable", i32 1} !3 = !{!"clang version 14.0.5"} !4 = !{!"testObj", !"TestObj", i1 true} !5 = !{} *** IR Dump After Expand Atomic instructions (atomic-expand) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Lower AMX intrinsics (lower-amx-intrinsics) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Lower AMX type for load/store (lower-amx-type) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Canonicalize natural loops (loop-simplify) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Merge contiguous icmps into a memcmp (mergeicmps) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Expand memcmp() to load/stores (expandmemcmp) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Lower Garbage Collection Instructions (gc-lowering) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Shadow Stack GC Lowering (shadow-stack-gc-lowering) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Lower constant intrinsics (lower-constant-intrinsics) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Remove unreachable blocks from the CFG (unreachableblockelim) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Constant Hoisting (consthoist) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Replace intrinsics with calls to vector library (replace-with-veclib) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Partially inline calls to library functions (partially-inline-libcalls) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Expand vector predication intrinsics (expandvp) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Scalarize Masked Memory Intrinsics (scalarize-masked-mem-intrin) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Expand reduction intrinsics (expand-reductions) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Interleaved Access Pass (interleaved-access) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After X86 Partial Reduction (x86-partial-reduction) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Expand indirectbr instructions (indirectbr-expand) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After CFGuard (CFGuard) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After CodeGen Prepare (codegenprepare) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Windows exception handling preparation (winehprepare) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Exception handling preparation (dwarfehprepare) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } *** IR Dump After Safe Stack instrumentation pass (safe-stack) *** ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn define internal i8* @_c_TestObj__class(i8* noundef readnone returned %0, i8* nocapture noundef readnone %1) #0 { ret i8* %0 } # *** IR Dump After X86 DAG->DAG Instruction Selection (amdgpu-isel) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Finalize ISel and expand pseudo-instructions (finalize-isel) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 Domain Reassignment Pass (x86-domain-reassignment) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Early Tail Duplication (early-tailduplication) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Optimize machine instruction PHIs (opt-phis) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Slot index numbering (slotindexes) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B $rax = COPY %0:gr64 48B RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Merge disjoint stack slots (stack-coloring) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Local Stack Slot Allocation (localstackalloc) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Remove dead machine instructions (dead-mi-elimination) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Early If-Conversion (early-ifcvt) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Machine InstCombiner (machine-combiner) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 cmov Conversion (x86-cmov-conversion) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Early Machine Loop Invariant Code Motion (early-machinelicm) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Machine Common Subexpression Elimination (machine-cse) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Machine code sinking (machine-sink) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Peephole Optimizations (peephole-opt) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Remove dead machine instructions (dead-mi-elimination) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Live Range Shrink (lrshrink) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 Fixup SetCC (x86-fixup-setcc) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 LEA Optimize (x86-optimize-LEAs) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 Optimize Call Frame (x86-cf-opt) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 Avoid Store Forwarding Blocks (x86-avoid-SFB) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 speculative load hardening (x86-slh) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 EFLAGS copy lowering (x86-flags-copy-lowering) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Detect Dead Lanes (detect-dead-lanes) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Process Implicit Definitions (processimpdefs) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Remove unreachable machine basic blocks (unreachable-mbb-elimination) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx $rax = COPY %0:gr64 RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Live Variable Analysis (livevars) ***: # Machine code for function _c_TestObj__class: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY killed $rcx $rax = COPY killed %0:gr64 RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Eliminate PHI nodes for register allocation (phi-node-elimination) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY killed $rcx $rax = COPY killed %0:gr64 RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Two-Address instruction pass (twoaddressinstruction) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY killed $rcx $rax = COPY killed %0:gr64 RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Slot index numbering (slotindexes) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY killed $rcx 32B $rax = COPY killed %0:gr64 48B RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Live Interval Analysis (liveintervals) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B $rax = COPY %0:gr64 48B RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Simple Register Coalescing (simple-register-coalescing) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B $rax = COPY %0:gr64 48B RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Rename Disconnected Subregister Components (rename-independent-subregs) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B $rax = COPY %0:gr64 48B RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Machine Instruction Scheduler (machine-scheduler) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B $rax = COPY %0:gr64 48B RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Debug Variable Analysis (livedebugvars) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B $rax = COPY %0:gr64 48B RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Live Stack Slot Analysis (livestacks) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B $rax = COPY %0:gr64 48B RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Virtual Register Map (virtregmap) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B $rax = COPY %0:gr64 48B RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Live Register Matrix (liveregmatrix) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B $rax = COPY %0:gr64 48B RET 0, killed $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Greedy Register Allocator (greedy) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B $rax = COPY %0:gr64 48B RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Tile Register Configure (tileconfig) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B $rax = COPY %0:gr64 48B RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Virtual Register Rewriter (virtregrewriter) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx 0B bb.0 (%ir-block.2): liveins: $rcx 16B renamable $rax = COPY $rcx 48B RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Register Allocation Pass Scoring (regallocscoringpass) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx 0B bb.0 (%ir-block.2): liveins: $rcx 16B renamable $rax = COPY $rcx 48B RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Stack Slot Coloring (stack-slot-coloring) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx 0B bb.0 (%ir-block.2): liveins: $rcx 16B renamable $rax = COPY $rcx 48B RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Machine Copy Propagation Pass (machine-cp) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Machine Loop Invariant Code Motion (machinelicm) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 Lower Tile Copy (lowertilecopy) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 FP Stackifier (x86-codegen) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 Load Value Injection (LVI) Load Hardening (x86-lvi-load) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Remove Redundant DEBUG_VALUE analysis (removeredundantdebugvalues) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Fixup Statepoint Caller Saved (fixup-statepoint-caller-saved) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After PostRA Machine Sink (postra-machine-sink) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Shrink Wrapping analysis (shrink-wrap) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Prologue/Epilogue Insertion & Frame Finalization (prologepilog) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Control Flow Optimizer (branch-folder) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Tail Duplication (tailduplication) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Machine Copy Propagation Pass (machine-cp) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $rax = COPY $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Post-RA pseudo instruction expansion pass (postrapseudos) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET 0, $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 pseudo instruction expansion pass (x86-pseudo) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Post RA top-down list latency scheduler (post-RA-sched) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Analyze Machine Code For Garbage Collection (gc-analysis) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Branch Probability Basic Block Placement (block-placement) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Insert fentry calls (fentry-insert) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Insert XRay ops (xray-instrumentation) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Implement the 'patchable-function' attribute (patchable-function) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 Execution Dependency Fix (x86-execution-domain-fix) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After BreakFalseDeps (break-false-deps) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 Byte/Word Instruction Fixup (x86-fixup-bw-insts) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 LEA Fixup (x86-fixup-LEAs) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Compressing EVEX instrs to VEX encoding when possible (x86-evex-to-vex-compress) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Contiguously Lay Out Funclets (funclet-layout) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After StackMap Liveness Analysis (stackmap-liveness) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Live DEBUG_VALUE analysis (livedebugvalues) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 Speculative Execution Side Effect Suppression (x86-seses) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 avoid trailing call pass (x86-avoid-trailing-call) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Control Flow Guard longjmp targets (CFGuardLongjmp) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After EH Cont Guard catchret targets (EHContGuardCatchret) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After X86 Load Value Injection (LVI) Ret-Hardening (x86-lvi-ret) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. # *** IR Dump After Pseudo Probe Inserter (pseudo-probe-inserter) ***: # Machine code for function _c_TestObj__class: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx $rax = MOV64rr $rcx RET64 $rax # End machine code for function _c_TestObj__class. *** IR Dump After Expand Atomic instructions (atomic-expand) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After Lower AMX intrinsics (lower-amx-intrinsics) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After Lower AMX type for load/store (lower-amx-type) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After Canonicalize natural loops (loop-simplify) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After Merge contiguous icmps into a memcmp (mergeicmps) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After Expand memcmp() to load/stores (expandmemcmp) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After Lower Garbage Collection Instructions (gc-lowering) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After Shadow Stack GC Lowering (shadow-stack-gc-lowering) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After Lower constant intrinsics (lower-constant-intrinsics) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After Remove unreachable blocks from the CFG (unreachableblockelim) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* inttoptr (i64 -6226332862589698012 to i8*)) ret i8* inttoptr (i64 -6226332862589698012 to i8*) } *** IR Dump After Constant Hoisting (consthoist) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After Replace intrinsics with calls to vector library (replace-with-veclib) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After Partially inline calls to library functions (partially-inline-libcalls) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After Expand vector predication intrinsics (expandvp) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After Scalarize Masked Memory Intrinsics (scalarize-masked-mem-intrin) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After Expand reduction intrinsics (expand-reductions) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After Interleaved Access Pass (interleaved-access) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After X86 Partial Reduction (x86-partial-reduction) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After Expand indirectbr instructions (indirectbr-expand) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After CFGuard (CFGuard) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After CodeGen Prepare (codegenprepare) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After Windows exception handling preparation (winehprepare) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After Exception handling preparation (dwarfehprepare) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } *** IR Dump After Safe Stack instrumentation pass (safe-stack) *** ; Function Attrs: nounwind uwtable define internal nonnull i8* @_c_TestObj__testObj(i8* nocapture noundef readnone %0, i8* nocapture noundef readnone %1) #2 { %3 = bitcast i64 -6226332862589698012 to i64 %4 = inttoptr i64 %3 to i8* %5 = tail call i8* @objc_retainAutoreleaseReturnValue(i8* %4) %6 = inttoptr i64 %3 to i8* ret i8* %6 } # *** IR Dump After X86 DAG->DAG Instruction Selection (amdgpu-isel) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %3:gr64 = COPY $rax $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Finalize ISel and expand pseudo-instructions (finalize-isel) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %3:gr64 = COPY $rax $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 Domain Reassignment Pass (x86-domain-reassignment) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %3:gr64 = COPY $rax $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Early Tail Duplication (early-tailduplication) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %3:gr64 = COPY $rax $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Optimize machine instruction PHIs (opt-phis) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %3:gr64 = COPY $rax $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Slot index numbering (slotindexes) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B %3:gr64 = COPY $rax 112B $rax = COPY %2:gr64 128B RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Merge disjoint stack slots (stack-coloring) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %3:gr64 = COPY $rax $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Local Stack Slot Allocation (localstackalloc) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %3:gr64 = COPY $rax $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Remove dead machine instructions (dead-mi-elimination) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Early If-Conversion (early-ifcvt) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Machine InstCombiner (machine-combiner) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 cmov Conversion (x86-cmov-conversion) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Early Machine Loop Invariant Code Motion (early-machinelicm) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Machine Common Subexpression Elimination (machine-cse) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Machine code sinking (machine-sink) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Peephole Optimizations (peephole-opt) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Remove dead machine instructions (dead-mi-elimination) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Live Range Shrink (lrshrink) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 Fixup SetCC (x86-fixup-setcc) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 LEA Optimize (x86-optimize-LEAs) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 Optimize Call Frame (x86-cf-opt) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 Avoid Store Forwarding Blocks (x86-avoid-SFB) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 speculative load hardening (x86-slh) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 EFLAGS copy lowering (x86-flags-copy-lowering) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Detect Dead Lanes (detect-dead-lanes) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Process Implicit Definitions (processimpdefs) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Remove unreachable machine basic blocks (unreachable-mbb-elimination) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY %2:gr64 RET 0, $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Live Variable Analysis (livevars) ***: # Machine code for function _c_TestObj__testObj: IsSSA, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed %2:gr64 RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Eliminate PHI nodes for register allocation (phi-node-elimination) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed %2:gr64 RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Two-Address instruction pass (twoaddressinstruction) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = MOV64ri -6226332862589698012 $rcx = COPY %2:gr64 CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed %2:gr64 RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Slot index numbering (slotindexes) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY killed %2:gr64 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Live Interval Analysis (liveintervals) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY %2:gr64 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Simple Register Coalescing (simple-register-coalescing) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY %2:gr64 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Rename Disconnected Subregister Components (rename-independent-subregs) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY %2:gr64 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Machine Instruction Scheduler (machine-scheduler) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY %2:gr64 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Debug Variable Analysis (livedebugvars) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY %2:gr64 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Live Stack Slot Analysis (livestacks) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY %2:gr64 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Virtual Register Map (virtregmap) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY %2:gr64 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Live Register Matrix (liveregmatrix) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY %2:gr64 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Greedy Register Allocator (greedy) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY %2:gr64 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Tile Register Configure (tileconfig) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B %2:gr64 = MOV64ri -6226332862589698012 48B $rcx = COPY %2:gr64 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY %2:gr64 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Virtual Register Rewriter (virtregrewriter) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B renamable $rsi = MOV64ri -6226332862589698012 48B $rcx = COPY renamable $rsi 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY killed renamable $rsi 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Register Allocation Pass Scoring (regallocscoringpass) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B renamable $rsi = MOV64ri -6226332862589698012 48B $rcx = COPY renamable $rsi 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY killed renamable $rsi 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Stack Slot Coloring (stack-slot-coloring) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.2): 16B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 32B renamable $rsi = MOV64ri -6226332862589698012 48B $rcx = COPY renamable $rsi 64B CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 80B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 96B $rax = COPY killed renamable $rsi 112B RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Machine Copy Propagation Pass (machine-cp) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed renamable $rsi RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Machine Loop Invariant Code Motion (machinelicm) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed renamable $rsi RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 Lower Tile Copy (lowertilecopy) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed renamable $rsi RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 FP Stackifier (x86-codegen) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed renamable $rsi RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 Load Value Injection (LVI) Load Hardening (x86-lvi-load) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed renamable $rsi RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Remove Redundant DEBUG_VALUE analysis (removeredundantdebugvalues) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed renamable $rsi RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Fixup Statepoint Caller Saved (fixup-statepoint-caller-saved) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed renamable $rsi RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After PostRA Machine Sink (postra-machine-sink) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed renamable $rsi RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Shrink Wrapping analysis (shrink-wrap) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.2): ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rax = COPY killed renamable $rsi RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Prologue/Epilogue Insertion & Frame Finalization (prologepilog) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = COPY killed renamable $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Control Flow Optimizer (branch-folder) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = COPY killed renamable $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Tail Duplication (tailduplication) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = COPY killed renamable $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Machine Copy Propagation Pass (machine-cp) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = COPY renamable $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = COPY killed renamable $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Post-RA pseudo instruction expansion pass (postrapseudos) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET 0, killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 pseudo instruction expansion pass (x86-pseudo) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Post RA top-down list latency scheduler (post-RA-sched) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Analyze Machine Code For Garbage Collection (gc-analysis) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Branch Probability Basic Block Placement (block-placement) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Insert fentry calls (fentry-insert) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Insert XRay ops (xray-instrumentation) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Implement the 'patchable-function' attribute (patchable-function) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 Execution Dependency Fix (x86-execution-domain-fix) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After BreakFalseDeps (break-false-deps) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 Byte/Word Instruction Fixup (x86-fixup-bw-insts) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 LEA Fixup (x86-fixup-LEAs) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Compressing EVEX instrs to VEX encoding when possible (x86-evex-to-vex-compress) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Contiguously Lay Out Funclets (funclet-layout) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After StackMap Liveness Analysis (stackmap-liveness) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Live DEBUG_VALUE analysis (livedebugvalues) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 Speculative Execution Side Effect Suppression (x86-seses) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 avoid trailing call pass (x86-avoid-trailing-call) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Control Flow Guard longjmp targets (CFGuardLongjmp) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After EH Cont Guard catchret targets (EHContGuardCatchret) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After X86 Load Value Injection (LVI) Ret-Hardening (x86-lvi-ret) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. # *** IR Dump After Pseudo Probe Inserter (pseudo-probe-inserter) ***: # Machine code for function _c_TestObj__testObj: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.2): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rsi = MOV64ri -6226332862589698012 $rcx = MOV64rr $rsi CALL64pcrel32 @objc_retainAutoreleaseReturnValue, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax $rax = MOV64rr killed $rsi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 killed $rax # End machine code for function _c_TestObj__testObj. *** IR Dump After Expand Atomic instructions (atomic-expand) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Lower AMX intrinsics (lower-amx-intrinsics) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Lower AMX type for load/store (lower-amx-type) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Canonicalize natural loops (loop-simplify) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Merge contiguous icmps into a memcmp (mergeicmps) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Expand memcmp() to load/stores (expandmemcmp) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Lower Garbage Collection Instructions (gc-lowering) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Shadow Stack GC Lowering (shadow-stack-gc-lowering) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Lower constant intrinsics (lower-constant-intrinsics) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Remove unreachable blocks from the CFG (unreachableblockelim) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Constant Hoisting (consthoist) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Replace intrinsics with calls to vector library (replace-with-veclib) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Partially inline calls to library functions (partially-inline-libcalls) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Expand vector predication intrinsics (expandvp) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Scalarize Masked Memory Intrinsics (scalarize-masked-mem-intrin) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Expand reduction intrinsics (expand-reductions) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Interleaved Access Pass (interleaved-access) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After X86 Partial Reduction (x86-partial-reduction) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Expand indirectbr instructions (indirectbr-expand) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After CFGuard (CFGuard) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After CodeGen Prepare (codegenprepare) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Windows exception handling preparation (winehprepare) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Exception handling preparation (dwarfehprepare) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } *** IR Dump After Safe Stack instrumentation pass (safe-stack) *** ; Function Attrs: nounwind uwtable define internal void @_i_TestObj__.cxx_destruct(%0* noundef %0, i8* nocapture noundef readnone %1) #2 { %3 = load i32, i32* @"__objc_ivar_offset_TestObj.isa.\01", align 4 %4 = zext i32 %3 to i64 %5 = bitcast %0* %0 to i8* %6 = getelementptr inbounds i8, i8* %5, i64 %4 %7 = bitcast i8* %6 to i8** tail call void @objc_storeStrong(i8** %7, i8* null) ret void } # *** IR Dump After X86 DAG->DAG Instruction Selection (amdgpu-isel) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Finalize ISel and expand pseudo-instructions (finalize-isel) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 Domain Reassignment Pass (x86-domain-reassignment) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Early Tail Duplication (early-tailduplication) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Optimize machine instruction PHIs (opt-phis) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Slot index numbering (slotindexes) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 48B %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit 64B %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags 80B %5:gr32 = MOV32r0 implicit-def dead $eflags 96B %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit 112B $rcx = COPY %4:gr64 128B $rdx = COPY %6:gr64 144B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Merge disjoint stack slots (stack-coloring) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Local Stack Slot Allocation (localstackalloc) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Remove dead machine instructions (dead-mi-elimination) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Early If-Conversion (early-ifcvt) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Machine InstCombiner (machine-combiner) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 cmov Conversion (x86-cmov-conversion) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Early Machine Loop Invariant Code Motion (early-machinelicm) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Machine Common Subexpression Elimination (machine-cse) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Machine code sinking (machine-sink) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Peephole Optimizations (peephole-opt) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Remove dead machine instructions (dead-mi-elimination) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Live Range Shrink (lrshrink) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 Fixup SetCC (x86-fixup-setcc) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 LEA Optimize (x86-optimize-LEAs) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 Optimize Call Frame (x86-cf-opt) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 Avoid Store Forwarding Blocks (x86-avoid-SFB) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 speculative load hardening (x86-slh) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 EFLAGS copy lowering (x86-flags-copy-lowering) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Detect Dead Lanes (detect-dead-lanes) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Process Implicit Definitions (processimpdefs) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Remove unreachable machine basic blocks (unreachable-mbb-elimination) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY %4:gr64 $rdx = COPY %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Live Variable Analysis (livevars) ***: # Machine code for function _i_TestObj__.cxx_destruct: IsSSA, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY killed $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr killed %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY killed %4:gr64 $rdx = COPY killed %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Eliminate PHI nodes for register allocation (phi-node-elimination) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY killed $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = ADD64rr killed %0:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY killed %4:gr64 $rdx = COPY killed %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Two-Address instruction pass (twoaddressinstruction) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 bb.0 (%ir-block.2): liveins: $rcx %0:gr64 = COPY killed $rcx %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit %4:gr64 = COPY killed %0:gr64 %4:gr64 = ADD64rr %4:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit $rcx = COPY killed %4:gr64 $rdx = COPY killed %6:gr64 TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Slot index numbering (slotindexes) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY killed $rcx 32B %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 48B %3:gr64 = SUBREG_TO_REG 0, killed %2:gr32, %subreg.sub_32bit 64B %4:gr64 = COPY killed %0:gr64 80B %4:gr64 = ADD64rr %4:gr64(tied-def 0), killed %3:gr64, implicit-def dead $eflags 96B %5:gr32 = MOV32r0 implicit-def dead $eflags 112B %6:gr64 = SUBREG_TO_REG 0, killed %5:gr32, %subreg.sub_32bit 128B $rcx = COPY killed %4:gr64 144B $rdx = COPY killed %6:gr64 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Live Interval Analysis (liveintervals) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %0:gr64 = COPY $rcx 32B %2:gr32 = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 48B %3:gr64 = SUBREG_TO_REG 0, %2:gr32, %subreg.sub_32bit 64B %4:gr64 = COPY %0:gr64 80B %4:gr64 = ADD64rr %4:gr64(tied-def 0), %3:gr64, implicit-def dead $eflags 96B %5:gr32 = MOV32r0 implicit-def dead $eflags 112B %6:gr64 = SUBREG_TO_REG 0, %5:gr32, %subreg.sub_32bit 128B $rcx = COPY %4:gr64 144B $rdx = COPY %6:gr64 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Simple Register Coalescing (simple-register-coalescing) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %4:gr64 = COPY $rcx 32B undef %3.sub_32bit:gr64_with_sub_8bit = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B %4:gr64 = ADD64rr %4:gr64(tied-def 0), %3:gr64_with_sub_8bit, implicit-def dead $eflags 128B $rcx = COPY %4:gr64 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Rename Disconnected Subregister Components (rename-independent-subregs) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %4:gr64 = COPY $rcx 32B undef %3.sub_32bit:gr64_with_sub_8bit = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B %4:gr64 = ADD64rr %4:gr64(tied-def 0), %3:gr64_with_sub_8bit, implicit-def dead $eflags 128B $rcx = COPY %4:gr64 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Machine Instruction Scheduler (machine-scheduler) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %4:gr64 = COPY $rcx 32B undef %3.sub_32bit:gr64_with_sub_8bit = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B %4:gr64 = ADD64rr %4:gr64(tied-def 0), %3:gr64_with_sub_8bit, implicit-def dead $eflags 128B $rcx = COPY %4:gr64 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Debug Variable Analysis (livedebugvars) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %4:gr64 = COPY $rcx 32B undef %3.sub_32bit:gr64_with_sub_8bit = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B %4:gr64 = ADD64rr %4:gr64(tied-def 0), %3:gr64_with_sub_8bit, implicit-def dead $eflags 128B $rcx = COPY %4:gr64 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Live Stack Slot Analysis (livestacks) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %4:gr64 = COPY $rcx 32B undef %3.sub_32bit:gr64_with_sub_8bit = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B %4:gr64 = ADD64rr %4:gr64(tied-def 0), %3:gr64_with_sub_8bit, implicit-def dead $eflags 128B $rcx = COPY %4:gr64 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Virtual Register Map (virtregmap) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %4:gr64 = COPY $rcx 32B undef %3.sub_32bit:gr64_with_sub_8bit = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B %4:gr64 = ADD64rr %4:gr64(tied-def 0), %3:gr64_with_sub_8bit, implicit-def dead $eflags 128B $rcx = COPY %4:gr64 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Live Register Matrix (liveregmatrix) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %4:gr64 = COPY $rcx 32B undef %3.sub_32bit:gr64_with_sub_8bit = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B %4:gr64 = ADD64rr %4:gr64(tied-def 0), %3:gr64_with_sub_8bit, implicit-def dead $eflags 128B $rcx = COPY %4:gr64 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Greedy Register Allocator (greedy) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %4:gr64 = COPY $rcx 32B undef %3.sub_32bit:gr64_with_sub_8bit = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B %4:gr64 = ADD64rr %4:gr64(tied-def 0), %3:gr64_with_sub_8bit, implicit-def dead $eflags 128B $rcx = COPY %4:gr64 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Tile Register Configure (tileconfig) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx in %0 0B bb.0 (%ir-block.2): liveins: $rcx 16B %4:gr64 = COPY $rcx 32B undef %3.sub_32bit:gr64_with_sub_8bit = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B %4:gr64 = ADD64rr %4:gr64(tied-def 0), %3:gr64_with_sub_8bit, implicit-def dead $eflags 128B $rcx = COPY %4:gr64 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Virtual Register Rewriter (virtregrewriter) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx 0B bb.0 (%ir-block.2): liveins: $rcx 32B renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Register Allocation Pass Scoring (regallocscoringpass) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx 0B bb.0 (%ir-block.2): liveins: $rcx 32B renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Stack Slot Coloring (stack-slot-coloring) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx 0B bb.0 (%ir-block.2): liveins: $rcx 32B renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") 80B renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags 144B dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx 160B TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Machine Copy Propagation Pass (machine-cp) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Machine Loop Invariant Code Motion (machinelicm) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 Lower Tile Copy (lowertilecopy) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 FP Stackifier (x86-codegen) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 Load Value Injection (LVI) Load Hardening (x86-lvi-load) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Remove Redundant DEBUG_VALUE analysis (removeredundantdebugvalues) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Fixup Statepoint Caller Saved (fixup-statepoint-caller-saved) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After PostRA Machine Sink (postra-machine-sink) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Shrink Wrapping analysis (shrink-wrap) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Prologue/Epilogue Insertion & Frame Finalization (prologepilog) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Control Flow Optimizer (branch-folder) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Tail Duplication (tailduplication) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Machine Copy Propagation Pass (machine-cp) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = MOV32r0 implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Post-RA pseudo instruction expansion pass (postrapseudos) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TCRETURNdi64 @objc_storeStrong, 0, , implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 pseudo instruction expansion pass (x86-pseudo) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Post RA top-down list latency scheduler (post-RA-sched) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Analyze Machine Code For Garbage Collection (gc-analysis) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Branch Probability Basic Block Placement (block-placement) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Insert fentry calls (fentry-insert) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Insert XRay ops (xray-instrumentation) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Implement the 'patchable-function' attribute (patchable-function) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 Execution Dependency Fix (x86-execution-domain-fix) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After BreakFalseDeps (break-false-deps) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 Byte/Word Instruction Fixup (x86-fixup-bw-insts) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 LEA Fixup (x86-fixup-LEAs) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Compressing EVEX instrs to VEX encoding when possible (x86-evex-to-vex-compress) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Contiguously Lay Out Funclets (funclet-layout) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After StackMap Liveness Analysis (stackmap-liveness) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Live DEBUG_VALUE analysis (livedebugvalues) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 Speculative Execution Side Effect Suppression (x86-seses) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 avoid trailing call pass (x86-avoid-trailing-call) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Control Flow Guard longjmp targets (CFGuardLongjmp) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After EH Cont Guard catchret targets (EHContGuardCatchret) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After X86 Load Value Injection (LVI) Ret-Hardening (x86-lvi-ret) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. # *** IR Dump After Pseudo Probe Inserter (pseudo-probe-inserter) ***: # Machine code for function _i_TestObj__.cxx_destruct: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Function Live Ins: $rcx bb.0 (%ir-block.2): liveins: $rcx renamable $eax = MOV32rm $rip, 1, $noreg, @"__objc_ivar_offset_TestObj.isa.\01", $noreg, implicit-def $rax :: (dereferenceable load (s32) from @"__objc_ivar_offset_TestObj.isa.\01") renamable $rcx = ADD64rr killed renamable $rcx(tied-def 0), killed renamable $rax, implicit-def dead $eflags dead $edx = XOR32rr undef $edx(tied-def 0), undef $edx, implicit-def dead $eflags, implicit-def $rdx TAILJMPd64 @objc_storeStrong, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit killed $rdx # End machine code for function _i_TestObj__.cxx_destruct. *** IR Dump After Expand Atomic instructions (atomic-expand) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Lower AMX intrinsics (lower-amx-intrinsics) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Lower AMX type for load/store (lower-amx-type) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Canonicalize natural loops (loop-simplify) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Merge contiguous icmps into a memcmp (mergeicmps) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Expand memcmp() to load/stores (expandmemcmp) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Lower Garbage Collection Instructions (gc-lowering) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Shadow Stack GC Lowering (shadow-stack-gc-lowering) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Lower constant intrinsics (lower-constant-intrinsics) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Remove unreachable blocks from the CFG (unreachableblockelim) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Constant Hoisting (consthoist) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Replace intrinsics with calls to vector library (replace-with-veclib) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Partially inline calls to library functions (partially-inline-libcalls) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Expand vector predication intrinsics (expandvp) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Scalarize Masked Memory Intrinsics (scalarize-masked-mem-intrin) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Expand reduction intrinsics (expand-reductions) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Interleaved Access Pass (interleaved-access) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After X86 Partial Reduction (x86-partial-reduction) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Expand indirectbr instructions (indirectbr-expand) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After CFGuard (CFGuard) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After CodeGen Prepare (codegenprepare) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Windows exception handling preparation (winehprepare) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Exception handling preparation (dwarfehprepare) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } *** IR Dump After Safe Stack instrumentation pass (safe-stack) *** ; Function Attrs: uwtable define dso_local i32 @main() local_unnamed_addr #3 { %1 = load i8*, i8** @"$_OBJC_REF_CLASS_TestObj", align 8 %2 = notail call i8* bitcast (i8* (i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* noundef %1, i8* noundef bitcast ({ i8*, i8* }* @".objc_selector_testObj_\0116\010:8" to i8*)) [ "clang.arc.attachedcall"(i8* (i8*)* @objc_retainAutoreleasedReturnValue) ], !GNUObjCMessageSend !4, !clang.arc.no_objc_arc_exceptions !5 %3 = icmp eq i8* %2, null %4 = zext i1 %3 to i32 tail call void @objc_release(i8* %2) ret i32 %4 } # *** IR Dump After X86 DAG->DAG Instruction Selection (amdgpu-isel) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Finalize ISel and expand pseudo-instructions (finalize-isel) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After X86 Domain Reassignment Pass (x86-domain-reassignment) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Early Tail Duplication (early-tailduplication) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Optimize machine instruction PHIs (opt-phis) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Slot index numbering (slotindexes) ***: # Machine code for function main: IsSSA, TracksLiveness 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY %0:gr64 80B $rdx = COPY %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY $rax 144B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 160B %3:gr8 = SETCCr 4, implicit $eflags 176B %4:gr32 = MOVZX32rr8 killed %3:gr8 192B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 208B $rcx = COPY %2:gr64 224B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp 240B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 256B $eax = COPY %4:gr32 272B RET 0, $eax # End machine code for function main. # *** IR Dump After Merge disjoint stack slots (stack-coloring) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Local Stack Slot Allocation (localstackalloc) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Remove dead machine instructions (dead-mi-elimination) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Early If-Conversion (early-ifcvt) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Machine InstCombiner (machine-combiner) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After X86 cmov Conversion (x86-cmov-conversion) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Early Machine Loop Invariant Code Motion (early-machinelicm) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Machine Common Subexpression Elimination (machine-cse) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Machine code sinking (machine-sink) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Peephole Optimizations (peephole-opt) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Remove dead machine instructions (dead-mi-elimination) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Live Range Shrink (lrshrink) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = MOVZX32rr8 killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After X86 Fixup SetCC (x86-fixup-setcc) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax %5:gr32 = MOV32r0 implicit-def $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = INSERT_SUBREG %5:gr32(tied-def 0), %3:gr8, %subreg.sub_8bit ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After X86 LEA Optimize (x86-optimize-LEAs) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax %5:gr32 = MOV32r0 implicit-def $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = INSERT_SUBREG %5:gr32(tied-def 0), %3:gr8, %subreg.sub_8bit ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After X86 Optimize Call Frame (x86-cf-opt) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax %5:gr32 = MOV32r0 implicit-def $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = INSERT_SUBREG %5:gr32(tied-def 0), %3:gr8, %subreg.sub_8bit ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After X86 Avoid Store Forwarding Blocks (x86-avoid-SFB) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax %5:gr32 = MOV32r0 implicit-def $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = INSERT_SUBREG %5:gr32(tied-def 0), %3:gr8, %subreg.sub_8bit ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After X86 speculative load hardening (x86-slh) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax %5:gr32 = MOV32r0 implicit-def $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = INSERT_SUBREG %5:gr32(tied-def 0), %3:gr8, %subreg.sub_8bit ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After X86 EFLAGS copy lowering (x86-flags-copy-lowering) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax %5:gr32 = MOV32r0 implicit-def $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = INSERT_SUBREG %5:gr32(tied-def 0), %3:gr8, %subreg.sub_8bit ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Detect Dead Lanes (detect-dead-lanes) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax %5:gr32 = MOV32r0 implicit-def $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = INSERT_SUBREG %5:gr32(tied-def 0), %3:gr8, %subreg.sub_8bit ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Process Implicit Definitions (processimpdefs) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax %5:gr32 = MOV32r0 implicit-def $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = INSERT_SUBREG %5:gr32(tied-def 0), %3:gr8, %subreg.sub_8bit ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Remove unreachable machine basic blocks (unreachable-mbb-elimination) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY %0:gr64 $rdx = COPY %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY $rax %5:gr32 = MOV32r0 implicit-def $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit $eflags %4:gr32 = INSERT_SUBREG %5:gr32(tied-def 0), %3:gr8, %subreg.sub_8bit ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY %4:gr32 RET 0, $eax # End machine code for function main. # *** IR Dump After Live Variable Analysis (livevars) ***: # Machine code for function main: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY killed %0:gr64 $rdx = COPY killed %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY killed $rax %5:gr32 = MOV32r0 implicit-def dead $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit killed $eflags %4:gr32 = INSERT_SUBREG killed %5:gr32(tied-def 0), killed %3:gr8, %subreg.sub_8bit ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed %4:gr32 RET 0, killed $eax # End machine code for function main. # *** IR Dump After Eliminate PHI nodes for register allocation (phi-node-elimination) ***: # Machine code for function main: NoPHIs, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY killed %0:gr64 $rdx = COPY killed %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY killed $rax %5:gr32 = MOV32r0 implicit-def dead $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit killed $eflags %4:gr32 = INSERT_SUBREG killed %5:gr32(tied-def 0), killed %3:gr8, %subreg.sub_8bit ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed %4:gr32 RET 0, killed $eax # End machine code for function main. # *** IR Dump After Two-Address instruction pass (twoaddressinstruction) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten bb.0 (%ir-block.0): %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg $rcx = COPY killed %0:gr64 $rdx = COPY killed %1:gr64 CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp %2:gr64 = COPY killed $rax %5:gr32 = MOV32r0 implicit-def dead $eflags TEST64rr %2:gr64, %2:gr64, implicit-def $eflags %3:gr8 = SETCCr 4, implicit killed $eflags %4:gr32 = COPY killed %5:gr32 %4.sub_8bit:gr32 = COPY killed %3:gr8 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed %2:gr64 CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed %4:gr32 RET 0, killed $eax # End machine code for function main. # *** IR Dump After Slot index numbering (slotindexes) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY killed %0:gr64 80B $rdx = COPY killed %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY killed $rax 144B %5:gr32 = MOV32r0 implicit-def dead $eflags 160B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 176B %3:gr8 = SETCCr 4, implicit killed $eflags 192B %4:gr32 = COPY killed %5:gr32 208B %4.sub_8bit:gr32 = COPY killed %3:gr8 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY killed %2:gr64 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY killed %4:gr32 304B RET 0, killed $eax # End machine code for function main. # *** IR Dump After Live Interval Analysis (liveintervals) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY %0:gr64 80B $rdx = COPY %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY killed $rax 144B %5:gr32 = MOV32r0 implicit-def dead $eflags 160B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 176B %3:gr8 = SETCCr 4, implicit killed $eflags 192B %4:gr32 = COPY %5:gr32 208B %4.sub_8bit:gr32 = COPY %3:gr8 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY %2:gr64 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY %4:gr32 304B RET 0, killed $eax # End machine code for function main. # *** IR Dump After Simple Register Coalescing (simple-register-coalescing) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY %0:gr64 80B $rdx = COPY %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY killed $rax 144B %4:gr32 = MOV32r0 implicit-def dead $eflags 160B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 176B %4.sub_8bit:gr32 = SETCCr 4, implicit killed $eflags 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY %2:gr64 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY %4:gr32 304B RET 0, killed $eax # End machine code for function main. # *** IR Dump After Rename Disconnected Subregister Components (rename-independent-subregs) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY %0:gr64 80B $rdx = COPY %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY killed $rax 144B %4:gr32 = MOV32r0 implicit-def dead $eflags 160B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 176B %4.sub_8bit:gr32 = SETCCr 4, implicit killed $eflags 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY %2:gr64 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY %4:gr32 304B RET 0, killed $eax # End machine code for function main. # *** IR Dump After Machine Instruction Scheduler (machine-scheduler) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY %0:gr64 80B $rdx = COPY %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY killed $rax 144B %4:gr32 = MOV32r0 implicit-def dead $eflags 160B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 176B %4.sub_8bit:gr32 = SETCCr 4, implicit killed $eflags 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY %2:gr64 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY %4:gr32 304B RET 0, killed $eax # End machine code for function main. # *** IR Dump After Debug Variable Analysis (livedebugvars) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY %0:gr64 80B $rdx = COPY %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY killed $rax 144B %4:gr32 = MOV32r0 implicit-def dead $eflags 160B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 176B %4.sub_8bit:gr32 = SETCCr 4, implicit killed $eflags 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY %2:gr64 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY %4:gr32 304B RET 0, killed $eax # End machine code for function main. # *** IR Dump After Live Stack Slot Analysis (livestacks) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY %0:gr64 80B $rdx = COPY %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY killed $rax 144B %4:gr32 = MOV32r0 implicit-def dead $eflags 160B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 176B %4.sub_8bit:gr32 = SETCCr 4, implicit killed $eflags 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY %2:gr64 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY %4:gr32 304B RET 0, killed $eax # End machine code for function main. # *** IR Dump After Virtual Register Map (virtregmap) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY %0:gr64 80B $rdx = COPY %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY killed $rax 144B %4:gr32 = MOV32r0 implicit-def dead $eflags 160B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 176B %4.sub_8bit:gr32 = SETCCr 4, implicit killed $eflags 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY %2:gr64 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY %4:gr32 304B RET 0, killed $eax # End machine code for function main. # *** IR Dump After Live Register Matrix (liveregmatrix) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY %0:gr64 80B $rdx = COPY %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit killed $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY killed $rax 144B %4:gr32 = MOV32r0 implicit-def dead $eflags 160B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 176B %4.sub_8bit:gr32 = SETCCr 4, implicit killed $eflags 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY %2:gr64 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit killed $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY %4:gr32 304B RET 0, killed $eax # End machine code for function main. # *** IR Dump After Greedy Register Allocator (greedy) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY %0:gr64 80B $rdx = COPY %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY $rax 144B %4:gr32 = MOV32r0 implicit-def dead $eflags 160B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 176B %4.sub_8bit:gr32 = SETCCr 4, implicit killed $eflags 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY %2:gr64 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY %4:gr32 304B RET 0, $eax # End machine code for function main. # *** IR Dump After Tile Register Configure (tileconfig) ***: # Machine code for function main: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B %1:gr64 = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 64B $rcx = COPY %0:gr64 80B $rdx = COPY %1:gr64 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 128B %2:gr64 = COPY $rax 144B %4:gr32 = MOV32r0 implicit-def dead $eflags 160B TEST64rr %2:gr64, %2:gr64, implicit-def $eflags 176B %4.sub_8bit:gr32 = SETCCr 4, implicit killed $eflags 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY %2:gr64 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY %4:gr32 304B RET 0, $eax # End machine code for function main. # *** IR Dump After Virtual Register Rewriter (virtregrewriter) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 144B renamable $esi = MOV32r0 implicit-def dead $eflags 160B TEST64rr renamable $rax, renamable $rax, implicit-def $eflags 176B renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY killed renamable $rax 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY killed renamable $esi 304B RET 0, $eax # End machine code for function main. # *** IR Dump After Register Allocation Pass Scoring (regallocscoringpass) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 144B renamable $esi = MOV32r0 implicit-def dead $eflags 160B TEST64rr renamable $rax, renamable $rax, implicit-def $eflags 176B renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY killed renamable $rax 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY killed renamable $esi 304B RET 0, $eax # End machine code for function main. # *** IR Dump After Stack Slot Coloring (stack-slot-coloring) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") 32B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 48B renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg 96B CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 112B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 144B renamable $esi = MOV32r0 implicit-def dead $eflags 160B TEST64rr renamable $rax, renamable $rax, implicit-def $eflags 176B renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi 224B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 240B $rcx = COPY killed renamable $rax 256B CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp 272B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 288B $eax = COPY killed renamable $esi 304B RET 0, $eax # End machine code for function main. # *** IR Dump After Machine Copy Propagation Pass (machine-cp) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed renamable $esi RET 0, $eax # End machine code for function main. # *** IR Dump After Machine Loop Invariant Code Motion (machinelicm) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed renamable $esi RET 0, $eax # End machine code for function main. # *** IR Dump After X86 Lower Tile Copy (lowertilecopy) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed renamable $esi RET 0, $eax # End machine code for function main. # *** IR Dump After X86 FP Stackifier (x86-codegen) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed renamable $esi RET 0, $eax # End machine code for function main. # *** IR Dump After X86 Load Value Injection (LVI) Load Hardening (x86-lvi-load) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed renamable $esi RET 0, $eax # End machine code for function main. # *** IR Dump After Remove Redundant DEBUG_VALUE analysis (removeredundantdebugvalues) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed renamable $esi RET 0, $eax # End machine code for function main. # *** IR Dump After Fixup Statepoint Caller Saved (fixup-statepoint-caller-saved) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed renamable $esi RET 0, $eax # End machine code for function main. # *** IR Dump After PostRA Machine Sink (postra-machine-sink) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed renamable $esi RET 0, $eax # End machine code for function main. # *** IR Dump After Shrink Wrapping analysis (shrink-wrap) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp $eax = COPY killed renamable $esi RET 0, $eax # End machine code for function main. # *** IR Dump After Prologue/Epilogue Insertion & Frame Finalization (prologepilog) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = COPY killed renamable $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET 0, $eax # End machine code for function main. # *** IR Dump After Control Flow Optimizer (branch-folder) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = COPY killed renamable $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET 0, $eax # End machine code for function main. # *** IR Dump After Tail Duplication (tailduplication) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = COPY killed renamable $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET 0, $eax # End machine code for function main. # *** IR Dump After Machine Copy Propagation Pass (machine-cp) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax renamable $esi = MOV32r0 implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = COPY killed renamable $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = COPY killed renamable $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET 0, $eax # End machine code for function main. # *** IR Dump After Post-RA pseudo instruction expansion pass (postrapseudos) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32_RVMARKER @objc_retainAutoreleasedReturnValue, @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET 0, $eax # End machine code for function main. # *** IR Dump After X86 pseudo instruction expansion pass (x86-pseudo) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After Post RA top-down list latency scheduler (post-RA-sched) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After Analyze Machine Code For Garbage Collection (gc-analysis) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After Branch Probability Basic Block Placement (block-placement) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After Insert fentry calls (fentry-insert) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After Insert XRay ops (xray-instrumentation) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After Implement the 'patchable-function' attribute (patchable-function) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After X86 Execution Dependency Fix (x86-execution-domain-fix) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After BreakFalseDeps (break-false-deps) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After X86 Byte/Word Instruction Fixup (x86-fixup-bw-insts) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After X86 LEA Fixup (x86-fixup-LEAs) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After Compressing EVEX instrs to VEX encoding when possible (x86-evex-to-vex-compress) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After Contiguously Lay Out Funclets (funclet-layout) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After StackMap Liveness Analysis (stackmap-liveness) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After Live DEBUG_VALUE analysis (livedebugvalues) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After X86 Speculative Execution Side Effect Suppression (x86-seses) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After X86 avoid trailing call pass (x86-avoid-trailing-call) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After Control Flow Guard longjmp targets (CFGuardLongjmp) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After EH Cont Guard catchret targets (EHContGuardCatchret) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After X86 Load Value Injection (LVI) Ret-Hardening (x86-lvi-ret) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. # *** IR Dump After Pseudo Probe Inserter (pseudo-probe-inserter) ***: # Machine code for function main: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues Frame Objects: fi#-1: size=8, align=16, fixed, at location [SP-8] bb.0 (%ir-block.0): liveins: $rsi frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp frame-setup SEH_PushReg 57 $rsp = frame-setup SUB64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags frame-setup SEH_StackAlloc 32 frame-setup SEH_EndPrologue renamable $rcx = MOV64rm $rip, 1, $noreg, @"$_OBJC_REF_CLASS_TestObj", $noreg :: (dereferenceable load (s64) from @"$_OBJC_REF_CLASS_TestObj") renamable $rdx = LEA64r $rip, 1, $noreg, @".objc_selector_testObj_\0116\010:8", $noreg CALL64pcrel32 @objc_msgSend, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax $rdi = MOV64rr $rax CALL64pcrel32 @objc_retainAutoreleasedReturnValue, , implicit $rsp, implicit $ssp, implicit-def $rax renamable $esi = XOR32rr undef $esi(tied-def 0), undef $esi, implicit-def dead $eflags TEST64rr renamable $rax, renamable $rax, implicit-def $eflags renamable $sil = SETCCr 4, implicit killed $eflags, implicit killed $esi, implicit-def $esi $rcx = MOV64rr killed $rax CALL64pcrel32 @objc_release, , implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp $eax = MOV32rr killed $esi SEH_Epilogue $rsp = frame-destroy ADD64ri8 $rsp(tied-def 0), 32, implicit-def dead $eflags $rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp RET64 $eax # End machine code for function main. *** IR Dump After Expand Atomic instructions (atomic-expand) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Lower AMX intrinsics (lower-amx-intrinsics) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Lower AMX type for load/store (lower-amx-type) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Canonicalize natural loops (loop-simplify) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Merge contiguous icmps into a memcmp (mergeicmps) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Expand memcmp() to load/stores (expandmemcmp) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Lower Garbage Collection Instructions (gc-lowering) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Shadow Stack GC Lowering (shadow-stack-gc-lowering) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Lower constant intrinsics (lower-constant-intrinsics) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Remove unreachable blocks from the CFG (unreachableblockelim) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Constant Hoisting (consthoist) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Replace intrinsics with calls to vector library (replace-with-veclib) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Partially inline calls to library functions (partially-inline-libcalls) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Expand vector predication intrinsics (expandvp) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Scalarize Masked Memory Intrinsics (scalarize-masked-mem-intrin) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Expand reduction intrinsics (expand-reductions) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Interleaved Access Pass (interleaved-access) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After X86 Partial Reduction (x86-partial-reduction) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Expand indirectbr instructions (indirectbr-expand) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After CFGuard (CFGuard) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After CodeGen Prepare (codegenprepare) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Windows exception handling preparation (winehprepare) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Exception handling preparation (dwarfehprepare) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } *** IR Dump After Safe Stack instrumentation pass (safe-stack) *** define linkonce_odr hidden void @.objcv2_load_function() comdat { tail call void @__objc_load({ i64, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel*, %.objc_section_sentinel* }* nonnull @.objc_init) ret void } # *** IR Dump After X86 DAG->DAG Instruction Selection (amdgpu-isel) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Finalize ISel and expand pseudo-instructions (finalize-isel) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 Domain Reassignment Pass (x86-domain-reassignment) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Early Tail Duplication (early-tailduplication) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Optimize machine instruction PHIs (opt-phis) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Slot index numbering (slotindexes) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Merge disjoint stack slots (stack-coloring) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Local Stack Slot Allocation (localstackalloc) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Remove dead machine instructions (dead-mi-elimination) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Early If-Conversion (early-ifcvt) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Machine InstCombiner (machine-combiner) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 cmov Conversion (x86-cmov-conversion) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Early Machine Loop Invariant Code Motion (early-machinelicm) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Machine Common Subexpression Elimination (machine-cse) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Machine code sinking (machine-sink) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Peephole Optimizations (peephole-opt) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Remove dead machine instructions (dead-mi-elimination) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Live Range Shrink (lrshrink) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 Fixup SetCC (x86-fixup-setcc) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 LEA Optimize (x86-optimize-LEAs) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 Optimize Call Frame (x86-cf-opt) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 Avoid Store Forwarding Blocks (x86-avoid-SFB) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 speculative load hardening (x86-slh) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 EFLAGS copy lowering (x86-flags-copy-lowering) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Detect Dead Lanes (detect-dead-lanes) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Process Implicit Definitions (processimpdefs) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Remove unreachable machine basic blocks (unreachable-mbb-elimination) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Live Variable Analysis (livevars) ***: # Machine code for function .objcv2_load_function: IsSSA, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY killed %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Eliminate PHI nodes for register allocation (phi-node-elimination) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY killed %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Two-Address instruction pass (twoaddressinstruction) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten bb.0 (%ir-block.0): %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg $rcx = COPY killed %0:gr64 TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Slot index numbering (slotindexes) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY killed %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Live Interval Analysis (liveintervals) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Simple Register Coalescing (simple-register-coalescing) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Rename Disconnected Subregister Components (rename-independent-subregs) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Machine Instruction Scheduler (machine-scheduler) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Debug Variable Analysis (livedebugvars) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Live Stack Slot Analysis (livestacks) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Virtual Register Map (virtregmap) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Live Register Matrix (liveregmatrix) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit killed $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Greedy Register Allocator (greedy) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Tile Register Configure (tileconfig) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B %0:gr64 = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 32B $rcx = COPY %0:gr64 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Virtual Register Rewriter (virtregrewriter) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Register Allocation Pass Scoring (regallocscoringpass) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Stack Slot Coloring (stack-slot-coloring) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues 0B bb.0 (%ir-block.0): 16B renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg 48B TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Machine Copy Propagation Pass (machine-cp) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Machine Loop Invariant Code Motion (machinelicm) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 Lower Tile Copy (lowertilecopy) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 FP Stackifier (x86-codegen) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 Load Value Injection (LVI) Load Hardening (x86-lvi-load) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Remove Redundant DEBUG_VALUE analysis (removeredundantdebugvalues) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Fixup Statepoint Caller Saved (fixup-statepoint-caller-saved) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After PostRA Machine Sink (postra-machine-sink) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Shrink Wrapping analysis (shrink-wrap) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Prologue/Epilogue Insertion & Frame Finalization (prologepilog) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Control Flow Optimizer (branch-folder) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Tail Duplication (tailduplication) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Machine Copy Propagation Pass (machine-cp) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Post-RA pseudo instruction expansion pass (postrapseudos) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TCRETURNdi64 @__objc_load, 0, , implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 pseudo instruction expansion pass (x86-pseudo) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Post RA top-down list latency scheduler (post-RA-sched) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Analyze Machine Code For Garbage Collection (gc-analysis) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Branch Probability Basic Block Placement (block-placement) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Insert fentry calls (fentry-insert) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Insert XRay ops (xray-instrumentation) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Implement the 'patchable-function' attribute (patchable-function) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 Execution Dependency Fix (x86-execution-domain-fix) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After BreakFalseDeps (break-false-deps) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 Byte/Word Instruction Fixup (x86-fixup-bw-insts) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 LEA Fixup (x86-fixup-LEAs) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Compressing EVEX instrs to VEX encoding when possible (x86-evex-to-vex-compress) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Contiguously Lay Out Funclets (funclet-layout) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After StackMap Liveness Analysis (stackmap-liveness) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Live DEBUG_VALUE analysis (livedebugvalues) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 Speculative Execution Side Effect Suppression (x86-seses) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 avoid trailing call pass (x86-avoid-trailing-call) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Control Flow Guard longjmp targets (CFGuardLongjmp) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After EH Cont Guard catchret targets (EHContGuardCatchret) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After X86 Load Value Injection (LVI) Ret-Hardening (x86-lvi-ret) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function. # *** IR Dump After Pseudo Probe Inserter (pseudo-probe-inserter) ***: # Machine code for function .objcv2_load_function: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten, TracksDebugUserValues bb.0 (%ir-block.0): renamable $rcx = LEA64r $rip, 1, $noreg, @.objc_init, $noreg TAILJMPd64 @__objc_load, , implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rcx # End machine code for function .objcv2_load_function.