skan marked an inline comment as done and an inline comment as not done.
skan added inline comments.


================
Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2045
+
+  if (Args.hasFlag(options::OPT_mbranches_within_32B_boundaries,
+                   options::OPT_mno_branches_within_32B_boundaries, false)) {
----------------
MaskRay wrote:
> LuoYuanke wrote:
> > MaskRay wrote:
> > > skan wrote:
> > > > MaskRay wrote:
> > > > > `OPT_mbranches_within_32B_boundaries` should provide default values 
> > > > > which can be overridden by more specific options.
> > > > Currently, `-mbranches-within-32B-boundaries` is equivalent to 
> > > > `-malign-branch-boundary=32 -malign-branch=fused+jcc+jmp 
> > > > -malign-branch-prefix-size=4
> > > > 
> > > > What is expected behaviour would be very confusing if specific options 
> > > > could override `-mbranches-within-32B-boundaries`. For example, if 
> > > > passed options are
> > > > 
> > > > ```
> > > > -mbranches-within-32B-boundaries -malign-branch-boundary=32 
> > > > -mno-branches-within-32B-boundaries
> > > > ```
> > > > What should the value of `-malign-branch-boundary` be?  Is it 32 or 0?
> > > > 
> > > > If we think `-mno-branches-within-32B-boundaries` is the negative form 
> > > > of `-mbranches-within-32B-boundaries` , then `-malign-branch-boundary` 
> > > > should be 32.
> > > > 
> > > > Or if we think `-mno-branches-within-32B-boundaries` wins since it 
> > > > appears at the end, and `-mno-branches-within-32B-boundaries` means no 
> > > > need to align branches, `-malign-branch-boundary` should be 0.
> > > > 
> > > > As long as we don't support specific options could override 
> > > > `-mbranches-within-32B-boundaries`, the trouble disappears  :-)
> > > > 
> > > > 
> > > > -mbranches-within-32B-boundaries -malign-branch-boundary=32 
> > > > -mno-branches-within-32B-boundaries
> > > 
> > > My preference is that the net effect will be: `-malign-branch-boundary=32`
> > > 
> > > ```
> > > If (Args.hasFlag(options::OPT_mbranches_within_32B_boundaries, 
> > > options::OPT_mno_branches_within_32B_boundaries, false))
> > >   boundary = 32;
> > > if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_EQ))
> > >   boundary = ...
> > > if (boundary)
> > >   add -mllvm boundary
> > > ```
> > > 
> > > but I'd like to hear what others say. @jyknight @reames 
> > I have no preference. What's the general rule for such case in LLVM? Is 
> > there any similar option design before? 
> I think options should follow these principles:
> 
> 1. Different options are position independent. `-mA -mB` should be the same 
> as `-mB -mA`.
> 2. `-mA` and `-mno-A` are position dependent and the last one wins. 
> Sometimes, the set may include more than 2 options, e.g. the last of 
> `-fno-pic` `-fpie` and `-fpic` wins.
> 3. More specific options can override semantics of less specific options. In 
> our case, `-malign-branch*` are more specific than 
> `-malign-branch-within-32B-boundaries`.
> 
> I have implemented these ideas in https://reviews.llvm.org/D72463. I don't 
> include documentation. Maybe documentation can be added in a different change 
> (for example, this one, if D72463 looks good to you).
> More specific options can override semantics of less specific options.

I hold a slightly different opinion about this. I think only when specific 
option appears at the right of the general option, override can happen.




CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to