skan added a comment.

In D72227 <https://reviews.llvm.org/D72227> you wrote
> 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.

This implemetation is consistent with the principles.  However, as I mentioned 
in D72227 <https://reviews.llvm.org/D72227>, I hold a slightly different 
opinion about the principles.

> 1. Different options are position independent. -mA -mB should be the same as 
> -mB -mA.

I think only when A and B are not related,  (-mA -mB) == (-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

Totally agree.

> 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 think general options can aslo override specific options. The last one wins. 
e.g.
The net effect of `-malign-branch=fused -malign-branch-within-32B-boundaries` 
should be `-malign-branch-boundary=32 -malign-branch=fused+jcc+jmp 
-malign-branch-prefix-size=5`



================
Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2034
+            << T << "fused, jcc, jmp, call, ret, indirect";
+        AlignBranch = StringRef();
+      }
----------------
`AlignBranch = StringRef()` seems unnecessary.


================
Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2040
+    if (Value.getAsInteger(10, AlignBranchBoundary) ||
+        AlignBranchBoundary < 16 || !llvm::isPowerOf2_64(AlignBranchBoundary)) 
{
+      D.Diag(diag::err_drv_invalid_argument_to_option)
----------------
Any reason for  precluding 16?


================
Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2053
+          << Value << A->getOption().getName();
+      AlignBranch = StringRef();
+    }
----------------
AlignBranch = StringRef() seems unnecessary.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D72463



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

Reply via email to