Avatar
omochimetaru 11/6/2018 7:04 AM
define hidden swiftcc i8* @"$S1a3FooV3barSivau"() #0 { entry: %0 = load i64, i64* @globalinit_33_EFF83A1F47B777EA672D48C97C71346F_token0, align 8 %1 = icmp eq i64 %0, -1 br i1 %1, label %once_done, label %once_not_done once_not_done: ; preds = %entry call void @swift_once(i64* @globalinit_33_EFF83A1F47B777EA672D48C97C71346F_token0, i8* bitcast (void ()* @globalinit_33_EFF83A1F47B777EA672D48C97C71346F_func0 to i8*), i8* undef) br label %once_done once_done: ; preds = %once_not_done, %entry %2 = load i64, i64* @globalinit_33_EFF83A1F47B777EA672D48C97C71346F_token0, align 8 %3 = icmp eq i64 %2, -1 call void @llvm.assume(i1 %3) ret i8* bitcast (%TSi* @"$S1a3FooV3barSivpZ" to i8*) }
7:04 AM
↑-Ononeでの、その分岐
7:05 AM
@"$S1a3FooV3barSivpZ" = hidden global %TSi <{ i64 42 }>, align 8 define hidden swiftcc i8* @"$S1a3FooV3barSivau"() local_unnamed_addr #0 { entry: ret i8* bitcast (%TSi* @"$S1a3FooV3barSivpZ" to i8*) }
7:05 AM
↑-Oでその分岐の削除
7:06 AM
ストレージの初期値をLLVMのconstantにできるなら分岐削除できるっぽいから
7:06 AM
koherの言ってる完全struct treeなら
7:06 AM
消えそう。
7:08 AM
でもその場合はインライン化もされそうだな、インライン化はされないけど同期は消える場合はどういうのだろ、モジュール跨ぎ?