Page MenuHomePhabricator

hoy (Hongtao Yu)
Software Engineer at Facebook

Projects

User does not belong to any projects.

User Details

User Since
Feb 23 2020, 3:46 PM (47 w, 11 h)

Recent Activity

Yesterday

hoy added inline comments to D72537: [NewPM] Port MergeFunctions pass.
Sun, Jan 17, 2:11 PM · Restricted Project

Fri, Jan 15

hoy added inline comments to D93556: [CSSPGO][llvm-profgen] Compress recursive cycles in calling context.
Fri, Jan 15, 4:41 PM · Restricted Project
hoy added inline comments to D94111: [CSSPGO][llvm-profgen] Merge and trim profile for cold context to reduce profile size.
Fri, Jan 15, 4:29 PM · Restricted Project
hoy accepted D94111: [CSSPGO][llvm-profgen] Merge and trim profile for cold context to reduce profile size.
Fri, Jan 15, 10:00 AM · Restricted Project

Thu, Jan 14

hoy added inline comments to D93264: [CSSPGO] Introducing distribution factor for pseudo probe..
Thu, Jan 14, 11:15 PM · Restricted Project, Restricted Project
hoy added inline comments to D93556: [CSSPGO][llvm-profgen] Compress recursive cycles in calling context.
Thu, Jan 14, 4:45 PM · Restricted Project
hoy added inline comments to D93556: [CSSPGO][llvm-profgen] Compress recursive cycles in calling context.
Thu, Jan 14, 4:08 PM · Restricted Project
hoy added inline comments to D93264: [CSSPGO] Introducing distribution factor for pseudo probe..
Thu, Jan 14, 11:49 AM · Restricted Project, Restricted Project
hoy added inline comments to D93556: [CSSPGO][llvm-profgen] Compress recursive cycles in calling context.
Thu, Jan 14, 11:13 AM · Restricted Project

Wed, Jan 13

hoy added inline comments to D93264: [CSSPGO] Introducing distribution factor for pseudo probe..
Wed, Jan 13, 10:58 PM · Restricted Project, Restricted Project
hoy accepted D94435: [SampleFDO] Add the support to split the function profiles with context into separate sections..

LGTM, thanks.

Wed, Jan 13, 10:41 PM · Restricted Project
hoy updated the summary of D93264: [CSSPGO] Introducing distribution factor for pseudo probe..
Wed, Jan 13, 10:16 PM · Restricted Project, Restricted Project
hoy updated the diff for D93264: [CSSPGO] Introducing distribution factor for pseudo probe..

Adding support in the priority-based inliner.

Wed, Jan 13, 10:13 PM · Restricted Project, Restricted Project
hoy added inline comments to D93264: [CSSPGO] Introducing distribution factor for pseudo probe..
Wed, Jan 13, 10:12 PM · Restricted Project, Restricted Project
hoy added inline comments to D94435: [SampleFDO] Add the support to split the function profiles with context into separate sections..
Wed, Jan 13, 5:38 PM · Restricted Project
hoy accepted D94613: [NFC] Rename ThinLTOPhase to PhaseInAllLTO and move it from PassBuilder.h to Pass.h.
Wed, Jan 13, 2:14 PM · Restricted Project
hoy added a comment to D94613: [NFC] Rename ThinLTOPhase to PhaseInAllLTO and move it from PassBuilder.h to Pass.h.

Thanks for the refactoring!

Wed, Jan 13, 2:14 PM · Restricted Project
hoy added inline comments to D94435: [SampleFDO] Add the support to split the function profiles with context into separate sections..
Wed, Jan 13, 9:23 AM · Restricted Project

Tue, Jan 12

hoy committed rG175288a1afef: Add sample-profile-suffix-elision-policy attribute with -funique-internal… (authored by hoy).
Add sample-profile-suffix-elision-policy attribute with -funique-internal…
Tue, Jan 12, 3:16 PM
hoy closed D94455: Add sample-profile-suffix-elision-policy attribute with -funique-internal-linkage-names..
Tue, Jan 12, 3:16 PM · Restricted Project
hoy added inline comments to D93264: [CSSPGO] Introducing distribution factor for pseudo probe..
Tue, Jan 12, 12:25 PM · Restricted Project, Restricted Project
hoy added a comment to D94435: [SampleFDO] Add the support to split the function profiles with context into separate sections..

Thanks for working on this which will help the thinLTO throughput. I guess there will be a separate patch to turn on this work, i.e, setting CtxSplitLayout?

Tue, Jan 12, 10:31 AM · Restricted Project

Mon, Jan 11

hoy updated the summary of D94455: Add sample-profile-suffix-elision-policy attribute with -funique-internal-linkage-names..
Mon, Jan 11, 2:47 PM · Restricted Project
hoy requested review of D94455: Add sample-profile-suffix-elision-policy attribute with -funique-internal-linkage-names..
Mon, Jan 11, 2:45 PM · Restricted Project
hoy committed rG32bcfcda4e28: Rename debug linkage name with -funique-internal-linkage-names (authored by hoy).
Rename debug linkage name with -funique-internal-linkage-names
Mon, Jan 11, 1:56 PM
hoy closed D93747: Rename debug linkage name with -funique-internal-linkage-names.
Mon, Jan 11, 1:56 PM · Restricted Project, Restricted Project
hoy updated the diff for D93747: Rename debug linkage name with -funique-internal-linkage-names.

Rebasing.

Mon, Jan 11, 12:29 PM · Restricted Project, Restricted Project
hoy added inline comments to D92334: [CSSPGO][llvm-profgen] Pseudo probe decoding and disassembling.
Mon, Jan 11, 10:15 AM · Restricted Project

Fri, Jan 8

hoy updated the diff for D93747: Rename debug linkage name with -funique-internal-linkage-names.

Removing the UniqueDebugLinakgeNames switch.

Fri, Jan 8, 11:15 PM · Restricted Project, Restricted Project
hoy added a comment to D93747: Rename debug linkage name with -funique-internal-linkage-names.

Seems alright to me - I think we've hashed out the deeper issues (missing opportunity for C functions which could/should be addressed by moving the implementation to the frontend, where those C functions can be mangled and then use linkageName to give them the same AutoFDO opportunities as C++ functions) here and elsewhere - but for what it is, the patch makes sense. I'd probably say drop the flag - " check if rawLinkageName is set and only set it when it is not null. " was implemented and seems that addressed the debug info issue without an awkward tradeoff between AutoFDO fidelity and debugging fidelity, so there doesn't seem to be a need to be able to configure this.

Here is a suggestion for a plan forward. Let's get these patches along with D94154 in. No correctness issues but a missed opportunity. I will work with @rnk and @dblaikie and send out a patch where I move the uniqueification to clang? That patch will also do linkage name for C functions with mangled name when uniqueification is needed. Does that sound reasonable? As for timeline, I can do this in two weeks.

Sure sure - not urgent, just so long as it doesn't get lost.

Fri, Jan 8, 10:58 PM · Restricted Project, Restricted Project
hoy added a comment to D94154: Unique Internal Linkage Name suffixes must be demangler friendly.
In D94154#2488088, @rnk wrote:

@rnk so I think this ^ leads us back to the "maybe this should be done in clang where we can enable mangling for C static functions when needed/when this feature is enabled". (I don't mean that we should add this scheme into the mangling scheem proper - I'm still OK with it being a ".part.N" suffix - but that that suffix should only be added to a mangled name, not to an unmangled name like a plain C function name) - not sure how that works for Windows (does Windows mangling scheme have a notion of suffixes, etc - I guess this system as implemented assumes Windows is cool with ".foo.N" suffixes?).

We are going in circles. For C functions, there is no linkage name added and it will not be newly introduced either, Hoy's patch specifically updates linkage name only when it is not null. When "overloadable" is used, linkage name is added as a mangled name for C functions too and the suffix will also make it demangleable. I don't see any issues.

I think David already approved the patch in Phabricator, feel free to land it. David isn't blocking the patch, I think he's suggesting that perhaps we should revisit the IR pass design decision in the near future.

Regarding David's suggestion to only added suffixes to mangled names, wouldn't that be problematic for plain C static functions with no mangling? Suppose you have a program with many C TUs, each of which contains a static free function foo. In order for AutoFDO to work, the compiler has to rename all those foo's to something globally unique. That will probably break some debugging functionality, but hey, the user asked for unique names, so they got them.

Fri, Jan 8, 3:57 PM · Restricted Project, Restricted Project
hoy added a comment to D94154: Unique Internal Linkage Name suffixes must be demangler friendly.
In D94154#2486081, @hoy wrote:
In D94154#2482425, @rnk wrote:

This is only demangler friendly if the name is already an itanium mangled name, right? (ie: the name starts with _Z) So it wouldn't work for C code?

I'm pretty sure most demangling tools such as c++filt check for a leading prefix of _+Z before demangling, so I don't think there are any concerns for C names. A reasonable demangler would pass them through as is.

Yep - but passing them through unmodified was causing problems for gdb which was demangling the mangled names as they appear in the DWARF and using the unmangled name to figure out how to do name lookup. So if the symbol wasn't getting unmangled you wouldn't be able to "break f1" instead you'd have to "break f1.__part.1" which would be an unfortunate regression in debuggability.

But it seems like that only applies if a mangled name is present in the DWARF at all - if no mangled name is present, and the debug info just gives the pretty name it works OK. Bit weird to have no record of the real symbol name in the DWARF, but so far it doesn't seem to cause any problems? So I'm OK-ish with this.

Do you have plans to fix this more generally? (I think to fix it more generally, you might need to move this feature up to clang and have clang mangle the name then add the suffix (at least for itanium mangling - not sure if windows mangling supports arbitrary suffixes like this, @rnk might know) - that way for C functions you can force/enable the mangling as is done for attribute((overloadable)) and others (I think attribute((enable_if)) also causes mangling of C functions))

That was Sriram's original idea: have the mangler do it. I reviewed the code. Modifying the mangler was fairly complicated, so I suggested doing it in a pass. The original pass also operated by appending a suffix after mangling, it just happened earlier. There isn't a good way to "embed" this uniquification into the Itanium mangling scheme, so far as I am aware.

Oh, I was still in favor of adding it after the mangling (the current "mangled.__part.number") but I thought it may be necessary to force mangling on C functions before adding the suffix, if they needed to be demangleable for debug info purposes.

That all said, I don't see any reason to block this decimilization change. It's limited in scope and an obvious improvement.

My concern was that it was layering more workarounds on a patch series that might be going in the wrong direction overall.

Anyway, sounds like, if I'm understanding/tested correctly, that the issue with unmangleability isn't about the symbol name itself but the DW_AT_linkage_name in the DWARF, so it seems like if that isn't present then there's no issue if the real symbol name can't be unmangled/back to the simple name. (but there's some reason the DW_AT_linkage_name, if present, must match the symbol name? (so it can't be the original unsuffixed mangled name))

One reason that DW_AT_linkage_name should be consistent with the real linkage name is to favor AutoFDO. DW_AT_linkage_name is used to generate profiles for inlined functions.

How's this work for C functions? Same sort of problem?

Fri, Jan 8, 1:18 PM · Restricted Project, Restricted Project
hoy committed rG0e23fd676c39: [Driver] Add DWARF64 flag: -gdwarf64 (authored by hoy).
[Driver] Add DWARF64 flag: -gdwarf64
Fri, Jan 8, 12:59 PM
hoy closed D90507: [Driver] Add DWARF64 flag: -gdwarf64.
Fri, Jan 8, 12:59 PM · Restricted Project

Thu, Jan 7

hoy added a comment to D94154: Unique Internal Linkage Name suffixes must be demangler friendly.
In D94154#2482425, @rnk wrote:

This is only demangler friendly if the name is already an itanium mangled name, right? (ie: the name starts with _Z) So it wouldn't work for C code?

I'm pretty sure most demangling tools such as c++filt check for a leading prefix of _+Z before demangling, so I don't think there are any concerns for C names. A reasonable demangler would pass them through as is.

Yep - but passing them through unmodified was causing problems for gdb which was demangling the mangled names as they appear in the DWARF and using the unmangled name to figure out how to do name lookup. So if the symbol wasn't getting unmangled you wouldn't be able to "break f1" instead you'd have to "break f1.__part.1" which would be an unfortunate regression in debuggability.

But it seems like that only applies if a mangled name is present in the DWARF at all - if no mangled name is present, and the debug info just gives the pretty name it works OK. Bit weird to have no record of the real symbol name in the DWARF, but so far it doesn't seem to cause any problems? So I'm OK-ish with this.

Do you have plans to fix this more generally? (I think to fix it more generally, you might need to move this feature up to clang and have clang mangle the name then add the suffix (at least for itanium mangling - not sure if windows mangling supports arbitrary suffixes like this, @rnk might know) - that way for C functions you can force/enable the mangling as is done for attribute((overloadable)) and others (I think attribute((enable_if)) also causes mangling of C functions))

That was Sriram's original idea: have the mangler do it. I reviewed the code. Modifying the mangler was fairly complicated, so I suggested doing it in a pass. The original pass also operated by appending a suffix after mangling, it just happened earlier. There isn't a good way to "embed" this uniquification into the Itanium mangling scheme, so far as I am aware.

Oh, I was still in favor of adding it after the mangling (the current "mangled.__part.number") but I thought it may be necessary to force mangling on C functions before adding the suffix, if they needed to be demangleable for debug info purposes.

That all said, I don't see any reason to block this decimilization change. It's limited in scope and an obvious improvement.

My concern was that it was layering more workarounds on a patch series that might be going in the wrong direction overall.

Anyway, sounds like, if I'm understanding/tested correctly, that the issue with unmangleability isn't about the symbol name itself but the DW_AT_linkage_name in the DWARF, so it seems like if that isn't present then there's no issue if the real symbol name can't be unmangled/back to the simple name. (but there's some reason the DW_AT_linkage_name, if present, must match the symbol name? (so it can't be the original unsuffixed mangled name))

Thu, Jan 7, 10:42 PM · Restricted Project, Restricted Project
hoy accepted D94283: [NewPM] Don't error when there's an unrecognized pass name.

Thanks for the quick fix. LGTM.

Thu, Jan 7, 10:26 PM · Restricted Project
hoy updated the summary of D92806: Single function compilation mode..
Thu, Jan 7, 6:30 PM · Restricted Project, Restricted Project
hoy added inline comments to D87216: [NewPM] Support --print-before/after in NPM.
Thu, Jan 7, 6:14 PM · Restricted Project, Restricted Project

Wed, Jan 6

hoy accepted D94154: Unique Internal Linkage Name suffixes must be demangler friendly.
Wed, Jan 6, 4:40 PM · Restricted Project, Restricted Project
hoy added a comment to D94154: Unique Internal Linkage Name suffixes must be demangler friendly.

https://github.com/gcc-mirror/gcc/blob/master/libiberty/cp-demangle.c#L3863

The demangler code for suffixes that accepts either lowercase letters with underscore or numbers.

Wed, Jan 6, 4:40 PM · Restricted Project, Restricted Project
hoy added a comment to D93747: Rename debug linkage name with -funique-internal-linkage-names.
In D93747#2482726, @hoy wrote:
In D93747#2481383, @hoy wrote:
In D93747#2481095, @hoy wrote:

Suggesting that gdb isn't using the DW_AT_name at all for "break <function name>" but instead demangling and stripping off the extras from the linkage name, and since it can't demangle this uniquified name (unlike the mangled name used when using the overloadable attribute) that degrades the debugger user experience? I'd have to test that in more detail/with some hand-hacked DWARF.

Yes, I think in your case the linage name can be demangled by the debugger. In my previous experiment, the uniquefied names could not be demangled therefore I was not able to breakpoint.

Ah, did some more testing. Seems it's because it isn't a classically mangled name.

The simplest fix I can think of is to emit the base 10 number of the md5hash. That would preserve all the existing uniqueness and be demangler friendly. @hoy @dblaikie WDYT?

I think using the base 10 form of md5hash is a smart workaround. Thanks for the suggestion.

Sure - wouldn't mind having some wording from the Itanium ABI/mangling rules that explain/corroborate what we've seen from testing to ensure we are using it correctly and there aren't any other ways that might be more suitable, or lurking gotchas we haven't tested.

Yes, makes sense. Also, like @dblaikie pointed out in D94154 it is now important that we don't generate the DW_AT_linkage_name for C style names using this suffix as it will not demangle. I think this makes it important that we only update this field if it already exists.

Yes, it makes sense to do the renaming only if the linkage name preexists to not break the debuggability. Unfortunately we won't be able to support C with this patch.

There is nothing needed to support C right? overloadable attribute will mangle with _Z so it will work as expected? What did I miss?

Wed, Jan 6, 11:59 AM · Restricted Project, Restricted Project
hoy updated the diff for D93747: Rename debug linkage name with -funique-internal-linkage-names.

Renaming debug linkage name if it preexisits.

Wed, Jan 6, 11:56 AM · Restricted Project, Restricted Project
hoy added a comment to D93747: Rename debug linkage name with -funique-internal-linkage-names.
In D93747#2481383, @hoy wrote:
In D93747#2481095, @hoy wrote:

Suggesting that gdb isn't using the DW_AT_name at all for "break <function name>" but instead demangling and stripping off the extras from the linkage name, and since it can't demangle this uniquified name (unlike the mangled name used when using the overloadable attribute) that degrades the debugger user experience? I'd have to test that in more detail/with some hand-hacked DWARF.

Yes, I think in your case the linage name can be demangled by the debugger. In my previous experiment, the uniquefied names could not be demangled therefore I was not able to breakpoint.

Ah, did some more testing. Seems it's because it isn't a classically mangled name.

The simplest fix I can think of is to emit the base 10 number of the md5hash. That would preserve all the existing uniqueness and be demangler friendly. @hoy @dblaikie WDYT?

I think using the base 10 form of md5hash is a smart workaround. Thanks for the suggestion.

Sure - wouldn't mind having some wording from the Itanium ABI/mangling rules that explain/corroborate what we've seen from testing to ensure we are using it correctly and there aren't any other ways that might be more suitable, or lurking gotchas we haven't tested.

Yes, makes sense. Also, like @dblaikie pointed out in D94154 it is now important that we don't generate the DW_AT_linkage_name for C style names using this suffix as it will not demangle. I think this makes it important that we only update this field if it already exists.

Wed, Jan 6, 11:55 AM · Restricted Project, Restricted Project

Tue, Jan 5

hoy added a comment to D94154: Unique Internal Linkage Name suffixes must be demangler friendly.

Thanks for the quick fix!

Tue, Jan 5, 10:36 PM · Restricted Project, Restricted Project
hoy added a comment to D93747: Rename debug linkage name with -funique-internal-linkage-names.
In D93747#2481095, @hoy wrote:

@tmsriram - any ideas what your case/example was like that might've caused degraded debugging experience? Would be good to understand if we're producing some bad DWARF with this patch/if there might be some way to avoid it (as it seems like gdb can handle mangled names/overloading in C in this example I've tried)

I haven't seen anything that caused degraded debugging experience. I am interested in this as we do look at this field for the purposes of profile attribtution for calls that are inlined. My comment was that we don't need to create this if it didn't already exist. I am not fully aware of what would happen if we did it all the time.

Ah, sorry, I got confused as to who's comment I was reading. I see it was @hoy who said:

If set, the gdb debugger will use that field to match the user input and set breakpoints. Therefore, giving DW_AT_linkage_name a uniquefied name prevents the debugger from setting a breakpoint based on source names unless the user specifies a decorated name.

Hence, this approach sounds like a workaround for us when the profile quality matters more than debugging experience.

So I'm still a bit confused. My test doesn't seem to demonstrate the issue with setting a linkage name preventing the debugger from setting a breakpoint based on the source name?

Suggesting that gdb isn't using the DW_AT_name at all for "break <function name>" but instead demangling and stripping off the extras from the linkage name, and since it can't demangle this uniquified name (unlike the mangled name used when using the overloadable attribute) that degrades the debugger user experience? I'd have to test that in more detail/with some hand-hacked DWARF.

Yes, I think in your case the linage name can be demangled by the debugger. In my previous experiment, the uniquefied names could not be demangled therefore I was not able to breakpoint.

Ah, did some more testing. Seems it's because it isn't a classically mangled name.

The simplest fix I can think of is to emit the base 10 number of the md5hash. That would preserve all the existing uniqueness and be demangler friendly. @hoy @dblaikie WDYT?

Tue, Jan 5, 10:31 PM · Restricted Project, Restricted Project
hoy added a comment to D93747: Rename debug linkage name with -funique-internal-linkage-names.

@tmsriram - any ideas what your case/example was like that might've caused degraded debugging experience? Would be good to understand if we're producing some bad DWARF with this patch/if there might be some way to avoid it (as it seems like gdb can handle mangled names/overloading in C in this example I've tried)

I haven't seen anything that caused degraded debugging experience. I am interested in this as we do look at this field for the purposes of profile attribtution for calls that are inlined. My comment was that we don't need to create this if it didn't already exist. I am not fully aware of what would happen if we did it all the time.

Ah, sorry, I got confused as to who's comment I was reading. I see it was @hoy who said:

If set, the gdb debugger will use that field to match the user input and set breakpoints. Therefore, giving DW_AT_linkage_name a uniquefied name prevents the debugger from setting a breakpoint based on source names unless the user specifies a decorated name.

Hence, this approach sounds like a workaround for us when the profile quality matters more than debugging experience.

So I'm still a bit confused. My test doesn't seem to demonstrate the issue with setting a linkage name preventing the debugger from setting a breakpoint based on the source name?

Suggesting that gdb isn't using the DW_AT_name at all for "break <function name>" but instead demangling and stripping off the extras from the linkage name, and since it can't demangle this uniquified name (unlike the mangled name used when using the overloadable attribute) that degrades the debugger user experience? I'd have to test that in more detail/with some hand-hacked DWARF.

Tue, Jan 5, 6:23 PM · Restricted Project, Restricted Project
hoy added a comment to D93747: Rename debug linkage name with -funique-internal-linkage-names.
In D93747#2469556, @hoy wrote:

In D93656, @dblaikie wrote:
Though the C case is interesting - it means you'll end up with C functions with the same DWARF 'name' but different linkage name. I don't know what that'll do to DWARF consumers - I guess they'll probably be OK-ish with it, as much as they are with C++ overloading. I think there are some cases of C name mangling so it's probably supported/OK-ish with DWARF Consumers. Wouldn't hurt for you to take a look/see what happens in that case with a debugger like gdb/check other cases of C name mangling to see what DWARF they end up creating (with both GCC and Clang).

I did a quick experiment with C name managing with GCC and -flto. It turns out the DW_AT_linkage_name field of DW_TAG_subprogram is never set for C programs. If set, the gdb debugger will use that field to match the user input and set breakpoints. Therefore, giving DW_AT_linkage_name a uniquefied name prevents the debugger from setting a breakpoint based on source names unless the user specifies a decorated name.

Hence, this approach sounds like a workaround for us when the profile quality matters more than debugging experience. I'm inclined to have it under a switch. What do you think?

Just a thought, we could always check if rawLinkageName is set and only set it when it is not null. That seems safe without needing the option. Not a strong opinion.

Was this thread concluded? Doesn't look like any check was added?

Thanks for the detailed analysis! Moving forward I would like to see a more clear contract about debug linkage names between the compiler and debugger as a guideline to code cloning work. For this patch, I'm adding a switch for it with a default value "on" since AutoFDO and propeller are the primary consumers of the work here and they mostly care about profile quality more than debugging experience. But correct me if I'm wrong and I'll flip the default value.

Presumably people are going to want to debug these binaries - I'm not sure it's a "one or the other" situation as it sounds like @tmsriram was suggesting by only modifying the linkage name when it's already set this might produce a better debugging experience, if I'm following the discussion correctly?

But I'm pretty sure there are places where C supports name mangling, so I wouldn't mind understanding the gdb behavior in more detail - perhaps there's a way to make it work better.

Using Clang's attribute((overloadable)) support, I was able to produce a C program with mangled names, with DW_AT_linkage_names on those functions, like this:

$ cat test.c
void __attribute__((overloadable)) f(int i) {
}
void __attribute__((overloadable)) f(long l) {
}
int main() {
  f(3);
  f(5l);
}
blaikie@blaikie-linux2:~/dev/scratch$ clang-tot test.c -g
blaikie@blaikie-linux2:~/dev/scratch$ llvm-dwarfdump-tot a.out
a.out:  file format elf64-x86-64

.debug_info contents:
0x00000000: Compile Unit: length = 0x0000009e, format = DWARF32, version = 0x0004, abbr_offset = 0x0000, addr_size = 0x08 (next unit at 0x000000a2)

0x0000000b: DW_TAG_compile_unit
              DW_AT_producer    ("clang version 12.0.0 (git@github.com:llvm/llvm-project.git 20013e0940dea465a173c3c7ce60f0e419242ef8)")
              DW_AT_language    (DW_LANG_C99)
              DW_AT_name        ("test.c")
              DW_AT_stmt_list   (0x00000000)
              DW_AT_comp_dir    ("/usr/local/google/home/blaikie/dev/scratch")
              DW_AT_low_pc      (0x0000000000401110)
              DW_AT_high_pc     (0x000000000040114c)

0x0000002a:   DW_TAG_subprogram
                DW_AT_low_pc    (0x0000000000401110)
                DW_AT_high_pc   (0x0000000000401119)
                DW_AT_frame_base        (DW_OP_reg6 RBP)
                DW_AT_linkage_name      ("_Z1fi")
                DW_AT_name      ("f")
                DW_AT_decl_file ("/usr/local/google/home/blaikie/dev/scratch/test.c")
                DW_AT_decl_line (1)
                DW_AT_prototyped        (true)
                DW_AT_external  (true)

0x00000043:     DW_TAG_formal_parameter
                  DW_AT_location        (DW_OP_fbreg -4)
                  DW_AT_name    ("i")
                  DW_AT_decl_file       ("/usr/local/google/home/blaikie/dev/scratch/test.c")
                  DW_AT_decl_line       (1)
                  DW_AT_type    (0x00000093 "int")

0x00000051:     NULL

0x00000052:   DW_TAG_subprogram
                DW_AT_low_pc    (0x0000000000401120)
                DW_AT_high_pc   (0x000000000040112a)
                DW_AT_frame_base        (DW_OP_reg6 RBP)
                DW_AT_linkage_name      ("_Z1fl")
                DW_AT_name      ("f")
                DW_AT_decl_file ("/usr/local/google/home/blaikie/dev/scratch/test.c")
                DW_AT_decl_line (3)
                DW_AT_prototyped        (true)
                DW_AT_external  (true)

0x0000006b:     DW_TAG_formal_parameter
                  DW_AT_location        (DW_OP_fbreg -8)
                  DW_AT_name    ("l")
                  DW_AT_decl_file       ("/usr/local/google/home/blaikie/dev/scratch/test.c")
                  DW_AT_decl_line       (3)
                  DW_AT_type    (0x0000009a "long int")

0x00000079:     NULL

0x0000007a:   DW_TAG_subprogram
                DW_AT_low_pc    (0x0000000000401130)
                DW_AT_high_pc   (0x000000000040114c)
                DW_AT_frame_base        (DW_OP_reg6 RBP)
                DW_AT_name      ("main")
                DW_AT_decl_file ("/usr/local/google/home/blaikie/dev/scratch/test.c")
                DW_AT_decl_line (5)
                DW_AT_type      (0x00000093 "int")
                DW_AT_external  (true)

0x00000093:   DW_TAG_base_type
                DW_AT_name      ("int")
                DW_AT_encoding  (DW_ATE_signed)
                DW_AT_byte_size (0x04)

0x0000009a:   DW_TAG_base_type
                DW_AT_name      ("long int")
                DW_AT_encoding  (DW_ATE_signed)
                DW_AT_byte_size (0x08)

0x000000a1:   NULL
$ gdb ./a.out
GNU gdb (GDB) 10.0-gg5
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-grtev4-linux-gnu".
Type "show configuration" for configuration details.

<http://go/gdb-home FAQ: http://go/gdb-faq Email: c-toolchain-team>
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word".
Reading symbols from ./a.out...
Unable to determine compiler version.
Skipping loading of libstdc++ pretty-printers for now.
Loading libc++ pretty-printers.
Non-google3 binary detected.
(gdb) b f(int)
Breakpoint 1 at 0x401117: file test.c, line 2.
(gdb) b f(long)
Breakpoint 2 at 0x401128: file test.c, line 4.
(gdb) del 1
(gdb) r
Starting program: /usr/local/google/home/blaikie/dev/scratch/a.out

Breakpoint 2, _Z1fl (l=5) at test.c:4 
4       }
(gdb) c
Continuing.
[Inferior 1 (process 497141) exited normally]
quit)
Aborted

@tmsriram - any ideas what your case/example was like that might've caused degraded debugging experience? Would be good to understand if we're producing some bad DWARF with this patch/if there might be some way to avoid it (as it seems like gdb can handle mangled names/overloading in C in this example I've tried)

I haven't seen anything that caused degraded debugging experience. I am interested in this as we do look at this field for the purposes of profile attribtution for calls that are inlined. My comment was that we don't need to create this if it didn't already exist. I am not fully aware of what would happen if we did it all the time.

Tue, Jan 5, 6:12 PM · Restricted Project, Restricted Project
hoy accepted D92998: [CSSPGO][llvm-profgen] Pseudo probe based CS profile generation.
Tue, Jan 5, 5:20 PM · Restricted Project

Mon, Jan 4

hoy added a comment to D94019: Switching Clang UniqueInternalLinkageNamesPass scheduling to using the LLVM one with newpm..
In D94019#2478277, @hoy wrote:
In D94019#2478206, @hoy wrote:
In D94019#2478047, @hoy wrote:

Please add a clang test for this.

There is the original clang test unique-internal-linkage-names.cpp that still works with the change here. What kind of new test would you like?

Something that tests this change (something that would fail before this patch is applied, and passes afterwards - demonstrating the change in behavior). Either something like the LLVM test, testing the pass sequence, or something with very simple IR (something that can robustly demonstrate the change in optimization behavior due to this patch and will be resilient to as many other changes to LLVM as possible (ie: something that captures the essence of this change)).

I'm not sure how to test this change if LLVM is treated as a black box to clang. This patch doesn't seem to change anything fundamental from the Clang point of view. My understanding is that the previous placement of the unique name pass in the pipeline didn't seem particularly important to Clang, therefore we ended up just testing the whole Clang output. If that's the case, I don't think we need to test the pass order here with this change.

My understanding was that the change in pass ordering has some observable change in the total behavior of LLVM? So an end-to-end test could be used here (I tend towards preferring the checking the pass ordering, but understand @aeubanks contrasting position) - that's what I was trying to describe in the "or something with very simple IR (... )" part of my suggestion. If the change in pass order can be observed in terms of different final IR, that's what an end-to-end Clang test could validate.

The change on the LLVM side is observable on the IR level when pseudo probe is enabled. I think that LLVM change is transparent to Clang. In other words, Clang doesn't need to know that the LLVM change is to favor pseudo probe.

Clang's overall, user-facing behavior changed (otherwise why make this change, right?) due to a change to Clang's source code, so it should be tested to demonstrate that the source change had the desired effect and doesn't regress. These particular changes are awkward because things like CodeGenOpts aren't serialized, unlike LLVM IR, but that doesn't mean they shouldn't be tested - it means the testing isn't as elegant as it is for serialized IR.

Mon, Jan 4, 4:34 PM · Restricted Project
hoy added a comment to D94019: Switching Clang UniqueInternalLinkageNamesPass scheduling to using the LLVM one with newpm..
In D94019#2478206, @hoy wrote:
In D94019#2478047, @hoy wrote:

Please add a clang test for this.

There is the original clang test unique-internal-linkage-names.cpp that still works with the change here. What kind of new test would you like?

Something that tests this change (something that would fail before this patch is applied, and passes afterwards - demonstrating the change in behavior). Either something like the LLVM test, testing the pass sequence, or something with very simple IR (something that can robustly demonstrate the change in optimization behavior due to this patch and will be resilient to as many other changes to LLVM as possible (ie: something that captures the essence of this change)).

I'm not sure how to test this change if LLVM is treated as a black box to clang. This patch doesn't seem to change anything fundamental from the Clang point of view. My understanding is that the previous placement of the unique name pass in the pipeline didn't seem particularly important to Clang, therefore we ended up just testing the whole Clang output. If that's the case, I don't think we need to test the pass order here with this change.

My understanding was that the change in pass ordering has some observable change in the total behavior of LLVM? So an end-to-end test could be used here (I tend towards preferring the checking the pass ordering, but understand @aeubanks contrasting position) - that's what I was trying to describe in the "or something with very simple IR (... )" part of my suggestion. If the change in pass order can be observed in terms of different final IR, that's what an end-to-end Clang test could validate.

Mon, Jan 4, 4:09 PM · Restricted Project
hoy added a comment to D94019: Switching Clang UniqueInternalLinkageNamesPass scheduling to using the LLVM one with newpm..
In D94019#2478047, @hoy wrote:

Please add a clang test for this.

There is the original clang test unique-internal-linkage-names.cpp that still works with the change here. What kind of new test would you like?

Something that tests this change (something that would fail before this patch is applied, and passes afterwards - demonstrating the change in behavior). Either something like the LLVM test, testing the pass sequence, or something with very simple IR (something that can robustly demonstrate the change in optimization behavior due to this patch and will be resilient to as many other changes to LLVM as possible (ie: something that captures the essence of this change)).

Mon, Jan 4, 3:52 PM · Restricted Project
hoy added a comment to D94019: Switching Clang UniqueInternalLinkageNamesPass scheduling to using the LLVM one with newpm..

Please add a clang test for this.

Mon, Jan 4, 2:57 PM · Restricted Project
hoy committed rG4034f9273eda: Switching Clang UniqueInternalLinkageNamesPass scheduling to using the LLVM one… (authored by hoy).
Switching Clang UniqueInternalLinkageNamesPass scheduling to using the LLVM one…
Mon, Jan 4, 12:05 PM
hoy closed D94019: Switching Clang UniqueInternalLinkageNamesPass scheduling to using the LLVM one with newpm..
Mon, Jan 4, 12:05 PM · Restricted Project
hoy added reviewers for D94019: Switching Clang UniqueInternalLinkageNamesPass scheduling to using the LLVM one with newpm.: aeubanks, dblaikie, tmsriram.
Mon, Jan 4, 10:18 AM · Restricted Project
hoy requested review of D94019: Switching Clang UniqueInternalLinkageNamesPass scheduling to using the LLVM one with newpm..
Mon, Jan 4, 10:16 AM · Restricted Project
hoy updated the diff for D93747: Rename debug linkage name with -funique-internal-linkage-names.

Replacing linkage names for debug declaration as well.

Mon, Jan 4, 9:09 AM · Restricted Project, Restricted Project

Sat, Jan 2

hoy committed rG01f0d162d672: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines. (authored by hoy).
Moving UniqueInternalLinkageNamesPass to the start of IR pipelines.
Sat, Jan 2, 2:26 PM
hoy closed D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Sat, Jan 2, 2:26 PM · Restricted Project, Restricted Project
hoy added a comment to D93747: Rename debug linkage name with -funique-internal-linkage-names.
In D93747#2470504, @hoy wrote:

Please remove the clang test change - if this is an LLVM change with LLVM test coverage, that's enough. (we don't generally test every LLVM change from both LLVM and Clang)

Sounds good.

I'd still be curious if you could look around to see whether there are other cases of function splitting/cloning/etc to see how they deal with updating the DISubprograms, to see if there's some prior art that should be used here.

To the best of my knowledge, existing code does not change the linkage name field of a DISubprogram once created. You can create a new DISubprogram record with any linkage name you want but bear in mind how the debugger will consume the record. Looks like we are the first one to change existing record which will confuse the debugger.

Sure enough - do any other transforms have similar requirements (of creating a record for something that looks like the same function but isn't quite) but take a different approach? Be good to know if other approaches were chosen/how/why they are applicable there but not here, etc. (conversely perhaps other passes worked around the issue in less than ideal ways and could benefit from using this new approach).

Looks like some places that could use this functionality aren't quite there yet -
The Attributor has an internalizing feature (added in 87a85f3d57f55f5652ec44f77816c7c9457545fa ) that produces invalid IR (ends up with two !dbg attachments of the same DISubprogram) if the function it's internalizing has a DISubprogram - but if it succeeded it'd have the same problem that the linkage name on the DISubprogram wouldn't match the actual symbol/function name. (@jdoerfert @bbn).
The IR Outliner (@AndrewLitteken ) seems to be only a few months old and appears to have no debug info handling - probably results in the same problem.
The Partial Inliner does clone a function into a new name & so would have an invalid DISubprogram, though it only uses the clone for inlining (this probably then goes on to produce the desired debug info, where the inlining appears to come from the original function)
ThinLTO does some function cloning within a module for aliases, but it then renames the clone to the aliasees name so I think the name works out to match again.

If this is an invariant, that the linkage name on the DISubprogram should match the actual llvm::Function name (@aprantl @JDevlieghere - verifier check, perhaps?) - it'd be nice to make that more reliable, either by removing the name and relying on the llvm::Function name (perhaps with a boolean on the DISubprogram as to whether the linkage name should be emitted or not - I think currently Clang's IRGen makes choices about which DISubprograms will get linkage names) or a verifier and utilities to keep them in sync.

But I'll leave that alone for now/for this review, unless someone else wants to chime in on it.

In D93747#2469556, @hoy wrote:

In D93656, @dblaikie wrote:
Though the C case is interesting - it means you'll end up with C functions with the same DWARF 'name' but different linkage name. I don't know what that'll do to DWARF consumers - I guess they'll probably be OK-ish with it, as much as they are with C++ overloading. I think there are some cases of C name mangling so it's probably supported/OK-ish with DWARF Consumers. Wouldn't hurt for you to take a look/see what happens in that case with a debugger like gdb/check other cases of C name mangling to see what DWARF they end up creating (with both GCC and Clang).

I did a quick experiment with C name managing with GCC and -flto. It turns out the DW_AT_linkage_name field of DW_TAG_subprogram is never set for C programs. If set, the gdb debugger will use that field to match the user input and set breakpoints. Therefore, giving DW_AT_linkage_name a uniquefied name prevents the debugger from setting a breakpoint based on source names unless the user specifies a decorated name.

Hence, this approach sounds like a workaround for us when the profile quality matters more than debugging experience. I'm inclined to have it under a switch. What do you think?

Just a thought, we could always check if rawLinkageName is set and only set it when it is not null. That seems safe without needing the option. Not a strong opinion.

Was this thread concluded? Doesn't look like any check was added?

Sat, Jan 2, 1:44 PM · Restricted Project, Restricted Project
hoy updated the diff for D93747: Rename debug linkage name with -funique-internal-linkage-names.

Adding a switch.

Sat, Jan 2, 1:36 PM · Restricted Project, Restricted Project
hoy updated the diff for D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

Addressing comments from dblaikie.

Sat, Jan 2, 1:34 PM · Restricted Project, Restricted Project
hoy added a comment to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

Looks good - test cases might benefit from some descriptive comments (explaining why the pseudo probe pass needs to be enabled to test the unique linkage name pass - I guess to check that it appears in just the right place in the pass pipeline?)

Sat, Jan 2, 1:34 PM · Restricted Project, Restricted Project

Thu, Dec 31

hoy updated the diff for D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

Adding a test for the new pseudo probe test.

Thu, Dec 31, 11:44 AM · Restricted Project, Restricted Project
hoy added inline comments to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Thu, Dec 31, 11:44 AM · Restricted Project, Restricted Project

Tue, Dec 29

hoy updated the diff for D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

Removing the checks of VerifierAnalysis in test code.

Tue, Dec 29, 5:52 PM · Restricted Project, Restricted Project
hoy added inline comments to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Tue, Dec 29, 5:17 PM · Restricted Project, Restricted Project
hoy added inline comments to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Tue, Dec 29, 2:22 PM · Restricted Project, Restricted Project

Wed, Dec 23

hoy updated the diff for D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

Removing unnecessary test code.

Wed, Dec 23, 8:36 PM · Restricted Project, Restricted Project
hoy added inline comments to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Wed, Dec 23, 8:35 PM · Restricted Project, Restricted Project
hoy updated the diff for D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

Adding PTO checks in LLVM test.

Wed, Dec 23, 5:20 PM · Restricted Project, Restricted Project
hoy added inline comments to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Wed, Dec 23, 4:42 PM · Restricted Project, Restricted Project
hoy added inline comments to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Wed, Dec 23, 1:45 PM · Restricted Project, Restricted Project
hoy added inline comments to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Wed, Dec 23, 1:36 PM · Restricted Project, Restricted Project
hoy updated the diff for D93747: Rename debug linkage name with -funique-internal-linkage-names.

Undoing changes to the clang test.

Wed, Dec 23, 1:20 PM · Restricted Project, Restricted Project
hoy added a comment to D93747: Rename debug linkage name with -funique-internal-linkage-names.

Please remove the clang test change - if this is an LLVM change with LLVM test coverage, that's enough. (we don't generally test every LLVM change from both LLVM and Clang)

Wed, Dec 23, 1:19 PM · Restricted Project, Restricted Project
hoy added inline comments to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Wed, Dec 23, 12:17 PM · Restricted Project, Restricted Project
hoy added a comment to D93747: Rename debug linkage name with -funique-internal-linkage-names.
In D93747#2469556, @hoy wrote:

In D93656, @dblaikie wrote:
Though the C case is interesting - it means you'll end up with C functions with the same DWARF 'name' but different linkage name. I don't know what that'll do to DWARF consumers - I guess they'll probably be OK-ish with it, as much as they are with C++ overloading. I think there are some cases of C name mangling so it's probably supported/OK-ish with DWARF Consumers. Wouldn't hurt for you to take a look/see what happens in that case with a debugger like gdb/check other cases of C name mangling to see what DWARF they end up creating (with both GCC and Clang).

I did a quick experiment with C name managing with GCC and -flto. It turns out the DW_AT_linkage_name field of DW_TAG_subprogram is never set for C programs. If set, the gdb debugger will use that field to match the user input and set breakpoints. Therefore, giving DW_AT_linkage_name a uniquefied name prevents the debugger from setting a breakpoint based on source names unless the user specifies a decorated name.

Hence, this approach sounds like a workaround for us when the profile quality matters more than debugging experience. I'm inclined to have it under a switch. What do you think?

Just a thought, we could always check if rawLinkageName is set and only set it when it is not null. That seems safe without needing the option. Not a strong opinion.

Wed, Dec 23, 9:40 AM · Restricted Project, Restricted Project
hoy updated the diff for D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

Checking pipeline in clang test.

Wed, Dec 23, 9:23 AM · Restricted Project, Restricted Project

Tue, Dec 22

hoy added a comment to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
In D93656#2469485, @hoy wrote:
In D93656#2468834, @hoy wrote:

Also it looks like this is doing 2 different things, the moving of things from Clang to LLVM's PassBuilder, and separately the change to the pass itself. Can these be separated?

I'm not sure about a good way to separate them. There are Clang tests that may fail with removing the pass from clang while not adding it correspondingly in llvm. Adding the pass in llvm while not removing it from Clang may cause the pass to run twice which may also fail the Clang tests. What do you think?

I mean keep that in one change, but separate out the change to llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp and DebugInfoMetadata.h.

I see, thanks for the clarification.

This should have a LLVM test coverage for the LLVM changes. (I realize they're also tested by the Clang test, because there's no way to test Clang's pass manager creation short of testing the effect of running the pass manager (hmm - /maybe/ there's a way to dump the pass pipeline? In which case that's how Clang should be tested, just testing that it creates the right pipeline, not that that pipeline does any particular thing))

Added an IR test. There is the llvm switch -debug-pass= that can dump the pass pipeline. I'm not aware of a clang switch that can do that.

Seems some clang tests use something like that, eg:

clang/test/CodeGen/thinlto-debug-pm.c:// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-obj -O0 -o %t2.o -x ir %t.o -fthinlto-index=%t.thinlto.bc -fno-experimental-new-pass-manager -mllvm -debug-pass=Structure 2>&1 | FileCheck %s --check-prefix=O0-OLDPM
Tue, Dec 22, 11:47 PM · Restricted Project, Restricted Project
hoy added a comment to D93747: Rename debug linkage name with -funique-internal-linkage-names.

In D93656, @dblaikie wrote:
Though the C case is interesting - it means you'll end up with C functions with the same DWARF 'name' but different linkage name. I don't know what that'll do to DWARF consumers - I guess they'll probably be OK-ish with it, as much as they are with C++ overloading. I think there are some cases of C name mangling so it's probably supported/OK-ish with DWARF Consumers. Wouldn't hurt for you to take a look/see what happens in that case with a debugger like gdb/check other cases of C name mangling to see what DWARF they end up creating (with both GCC and Clang).

Tue, Dec 22, 11:37 PM · Restricted Project, Restricted Project
hoy added reviewers for D93747: Rename debug linkage name with -funique-internal-linkage-names: dblaikie, tmsriram, wenlei, wmi, rnk.
Tue, Dec 22, 11:24 PM · Restricted Project, Restricted Project
hoy updated the summary of D93747: Rename debug linkage name with -funique-internal-linkage-names.
Tue, Dec 22, 11:22 PM · Restricted Project, Restricted Project
hoy updated the summary of D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Tue, Dec 22, 11:21 PM · Restricted Project, Restricted Project
hoy added a comment to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

The changes that rename debug linkage name has been separated as D93747. I'm moving the discussion there.

Tue, Dec 22, 11:21 PM · Restricted Project, Restricted Project
hoy requested review of D93747: Rename debug linkage name with -funique-internal-linkage-names.
Tue, Dec 22, 11:18 PM · Restricted Project, Restricted Project
hoy updated the diff for D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

Fixing IR test failure.

Tue, Dec 22, 10:50 PM · Restricted Project, Restricted Project
hoy updated the diff for D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

Separated PassBuilder changes.

Tue, Dec 22, 10:34 PM · Restricted Project, Restricted Project
hoy added a comment to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
In D93656#2468834, @hoy wrote:

Also it looks like this is doing 2 different things, the moving of things from Clang to LLVM's PassBuilder, and separately the change to the pass itself. Can these be separated?

I'm not sure about a good way to separate them. There are Clang tests that may fail with removing the pass from clang while not adding it correspondingly in llvm. Adding the pass in llvm while not removing it from Clang may cause the pass to run twice which may also fail the Clang tests. What do you think?

I mean keep that in one change, but separate out the change to llvm/lib/Transforms/Utils/UniqueInternalLinkageNames.cpp and DebugInfoMetadata.h.

Tue, Dec 22, 10:31 PM · Restricted Project, Restricted Project
hoy added a comment to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

Also it looks like this is doing 2 different things, the moving of things from Clang to LLVM's PassBuilder, and separately the change to the pass itself. Can these be separated?

Tue, Dec 22, 1:05 PM · Restricted Project, Restricted Project
hoy added inline comments to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Tue, Dec 22, 12:51 PM · Restricted Project, Restricted Project

Mon, Dec 21

hoy added inline comments to D92998: [CSSPGO][llvm-profgen] Pseudo probe based CS profile generation.
Mon, Dec 21, 5:52 PM · Restricted Project
hoy added inline comments to D92998: [CSSPGO][llvm-profgen] Pseudo probe based CS profile generation.
Mon, Dec 21, 5:34 PM · Restricted Project
hoy updated the summary of D92806: Single function compilation mode..
Mon, Dec 21, 5:11 PM · Restricted Project, Restricted Project
hoy updated the diff for D92806: Single function compilation mode..

Adding LTO, linker and clang supports.

Mon, Dec 21, 5:06 PM · Restricted Project, Restricted Project
hoy added inline comments to D92998: [CSSPGO][llvm-profgen] Pseudo probe based CS profile generation.
Mon, Dec 21, 2:58 PM · Restricted Project
hoy added inline comments to D92998: [CSSPGO][llvm-profgen] Pseudo probe based CS profile generation.
Mon, Dec 21, 2:45 PM · Restricted Project
hoy updated the diff for D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..

Addressing feedbacks.

Mon, Dec 21, 1:22 PM · Restricted Project, Restricted Project
hoy added inline comments to D93656: Moving UniqueInternalLinkageNamesPass to the start of IR pipelines..
Mon, Dec 21, 1:21 PM · Restricted Project, Restricted Project
hoy accepted D92896: [CSSPGO][llvm-profgen] Virtual unwinding with pseudo probe.
Mon, Dec 21, 12:32 PM · Restricted Project