Hi, Jonathan, thanks for your review on the documentation change for -flive-patching option.
> >> --- a/gcc/doc/invoke.texi >> +++ b/gcc/doc/invoke.texi >> @@ -416,6 +416,7 @@ Objective-C and Objective-C++ Dialects}. >> -fipa-bit-cp -fipa-vrp @gol >> -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference >> -fipa-reference-addressable @gol >> -fipa-stack-alignment -fipa-icf -fira-algorithm=@var{algorithm} @gol >> +-flive-patching=@var{level} @gol >> -fira-region=@var{region} -fira-hoist-pressure @gol >> -fira-loop-pressure -fno-ira-share-save-slots @gol >> -fno-ira-share-spill-slots @gol >> @@ -9045,6 +9046,65 @@ equivalences that are found only by GCC and >> equivalences found only by Gold. >> This flag is enabled by default at @option{-O2} and @option{-Os}. >> +@item -flive-patching=@var{level} >> +@opindex flive-patching >> +Control GCC's optimizations to provide a safe compilation for live-patching. > > "provide a safe compilation" isn't very clear to me. I don't know what > it means to "provide a compilation", let alone a safe one. > > Could we say something like "Control GCC’s optimizations to produce > output suitable for live-patching.” ? yes, this is better. > > >> +If the compiler's optimization uses a function's body or information >> extracted >> +from its body to optimize/change another function, the latter is called an >> +impacted function of the former. If a function is patched, its impacted >> +functions should be patched too. >> + >> +The impacted functions are decided by the compiler's interprocedural > > decided or determined? determined is better. > >> +optimizations. For example, inlining a function into its caller, cloning >> +a function and changing its caller to call this new clone, or extracting >> +a function's pureness/constness information to optimize its direct or >> +indirect callers, etc. > > I don't know what the second sentence is saying. I can read it two > different ways: > > 1) Those are examples of interprocedural optimizations which > participate in the decision making, but the actual details of how the > decisions are made are not specified here. > > 2) Performing those optimizations causes a function to be impacted. > > If 1) is the intended meaning, then I think it should say "For > example, <INS>when</INS> inlining a function into its caller, ..." > > If 2) is the intended meaning, then I think it should say "For > example, <INS>a caller is impacted when</INS> inlining a function > into its caller …". 2) is the intended meaining. > > Does either of those suggestions match the intended meaning? Or do you > have a better way to rephrase it? > >> +Usually, the more IPA optimizations enabled, the larger the number of >> +impacted functions for each function. In order to control the number of >> +impacted functions and computed the list of impacted function easily, > > Should be "and more easily compute the list of impacted functions”. this is good. > >> +we provide control to partially enable IPA optimizations on two different >> +levels. > > We don't usually say "we provide" like this. I suggest simply "IPA > optimizations can be partially enabled at two different levels.” Okay. > >> + >> +The @var{level} argument should be one of the following: >> + >> +@table @samp >> + >> +@item inline-clone >> + >> +Only enable inlining and cloning optimizations, which includes inlining, >> +cloning, interprocedural scalar replacement of aggregates and partial >> inlining. >> +As a result, when patching a function, all its callers and its clones' >> +callers need to be patched as well. > > Since you've defined the term "impacted" could this just say "all its > callers and its clones' callers are impacted.”? I think that the following might be better: when patching a function, all its callers and its clones’ callers are impacted, therefore need to be patched as well. > >> +@option{-flive-patching=inline-clone} disables the following optimization >> flags: >> +@gccoptlist{-fwhole-program -fipa-pta -fipa-reference -fipa-ra @gol >> +-fipa-icf -fipa-icf-functions -fipa-icf-variables @gol >> +-fipa-bit-cp -fipa-vrp -fipa-pure-const -fipa-reference-addressable @gol >> +-fipa-stack-alignment} >> + >> +@item inline-only-static >> + >> +Only enable inlining of static functions. >> +As a result, when patching a static function, all its callers need to be >> +patches as well. > > "Typo: "patches" should be "patched", but I'd suggest "are impacted" > here too. Okay. > >> +In addition to all the flags that -flive-patching=inline-clone disables, >> +@option{-flive-patching=inline-only-static} disables the following >> additional >> +optimization flags: >> +@gccoptlist{-fipa-cp-clone -fipa-sra -fpartial-inlining -fipa-cp} >> + >> +@end table >> + >> +When -flive-patching specified without any value, the default value >> +is "inline-clone". > > This should use @option{} and @var{} and is missing the word "is”. Okay. > >> +This flag is disabled by default. >> + >> +Note that -flive-patching is not supported with link-time optimizer. > > s/optimizer./optimization/ Okay. > >> +(@option{-flto}). >> + >> @item -fisolate-erroneous-paths-dereference >> @opindex fisolate-erroneous-paths-dereference >> Detect paths that trigger erroneous or undefined behavior due to > > The attached patch makes some of these changes, but I'd like to know > if my changes preserve the intended meaning. the changes in the patch looks good to me. thanks a lot. Qing > > <patch.txt>