@@ -2371,32 +2371,34 @@ are listed below.
23712371 or because all objects are instances of the same class/type.
23722372
23732373 Ex of IR before the optimization:
2374- .. code-block :: llvm
2375- %vtable = load ptr, ptr %BV, align 8, !tbaa !6
2376- %0 = tail call i1 @llvm.public.type.test(ptr %vtable, metadata !"_ZTS4Base")
2377- tail call void @llvm.assume(i1 %0)
2378- %0 = load ptr, ptr %vtable, align 8
2379- tail call void %0(ptr noundef nonnull align 8 dereferenceable(8) %BV)
2380- ret void
2381-
2382- IR after the optimization:
2383- .. code-block :: llvm
2384- %vtable = load ptr, ptr %BV, align 8, !tbaa !12
2385- %0 = load ptr, ptr %vtable, align 8
2386- %1 = icmp eq ptr %0, @_ZN4Base17virtual_function1Ev
2387- br i1 %1, label %if.true.direct_targ, label %if.false.orig_indirect, !prof !15
2388- if.true.direct_targ: ; preds = %entry
2389- tail call void @_ZN4Base17virtual_function1Ev(ptr noundef nonnull align 8 dereferenceable(8) %BV)
2390- br label %if.end.icp
2391- if.false.orig_indirect: ; preds = %entry
2392- tail call void %0(ptr noundef nonnull align 8 dereferenceable(8) %BV)
2393- br label %if.end.icp
2394-
2395- if.end.icp: ; preds = %if.false.orig_indirect, %if.true.direct_targ
2396- ret void
2397- This feature is temporarily ignored at the LLVM side when LTO is enabled.
2398- TODO: Update the comment when the LLVM side supports this feature for LTO.
2399- This feature is turned off by default.
2374+
2375+ .. code-block :: llvm
2376+ %vtable = load ptr, ptr %BV, align 8, !tbaa !6
2377+ %0 = tail call i1 @llvm.public.type.test(ptr %vtable, metadata !"_ZTS4Base")
2378+ tail call void @llvm.assume(i1 %0)
2379+ %0 = load ptr, ptr %vtable, align 8
2380+ tail call void %0(ptr noundef nonnull align 8 dereferenceable(8) %BV)
2381+ ret void
2382+
2383+ IR after the optimization:
2384+
2385+ .. code-block :: llvm
2386+ %vtable = load ptr, ptr %BV, align 8, !tbaa !12
2387+ %0 = load ptr, ptr %vtable, align 8
2388+ %1 = icmp eq ptr %0, @_ZN4Base17virtual_function1Ev
2389+ br i1 %1, label %if.true.direct_targ, label %if.false.orig_indirect, !prof !15
2390+ if.true.direct_targ: ; preds = %entry
2391+ tail call void @_ZN4Base17virtual_function1Ev(ptr noundef nonnull align 8 dereferenceable(8) %BV)
2392+ br label %if.end.icp
2393+ if.false.orig_indirect: ; preds = %entry
2394+ tail call void %0(ptr noundef nonnull align 8 dereferenceable(8) %BV)
2395+ br label %if.end.icp
2396+ if.end.icp: ; preds = %if.false.orig_indirect, %if.true.direct_targ
2397+ ret void
2398+
2399+ This feature is temporarily ignored at the LLVM side when LTO is enabled.
2400+ TODO: Update the comment when the LLVM side supports this feature for LTO.
2401+ This feature is turned off by default.
24002402
24012403.. option :: -f[no-]unique-source-file-names
24022404
0 commit comments