<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/110325>110325</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            -Xarch_device fails to propagate -O1
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            yxsamliu
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Artem-B
      </td>
    </tr>
</table>

<pre>
    Clang reports an error if one attempts to pass `-O1` to a CUDA/HIP sib-compilation via `-Xarch_device`:

```
bin/clang++ -x cuda /dev/null --offload-arch=sm_60 -Xarch_device -O1 -c -o /tmp/foo.o -nocudainc -nocudalib
clang++: error: invalid Xarch argument: '-Xarch_device -O1', not all driver options can be forwared via Xarch argument
clang++: error: invalid Xarch argument: '-Xarch_device -O1', not all driver options can be forwared via Xarch argument
```

It appears to be a bug. The code that handles `-Xarch..` options appears to misinterpret `-O1` as a clang-cl option "/O":

```
p *XarchArg->getOption().Info
$41 = {
 Prefixes = llvm::ArrayRef of length 2 = {
    {
      <llvm::StringRef> = "/", <No data fields>},
    {
      <llvm::StringRef> = "-", <No data fields>}
  },
  PrefixedName = {
    <llvm::StringRef> = "/O", <No data fields>},
  HelpText = 0x55fb406ce5d4 "Set multiple /O flags at once; e.g. '/O2y-' for '/O2 /Oy-'",
  HelpTextsForVariants = {
    _M_elems = {
      {
        first = {
          _M_elems = {
            0,
            0
          }
        },
 second = 0x0
      }
    }
  },
  MetaVar = 0x55fb402591a2 "<flags>",
  ID = 3005,
  Kind = 4 '\004',
  Param = 0 '\000',
  Flags = 16,
  Visibility = 66,
  GroupID = 20,
 AliasID = 0,
  AliasArgs = 0x0,
  Values = 0x0
}
```

This is the option here: https://github.com/llvm/llvm-project/blob/63899748738ce7449e46eebb1aeb7909f2fdea2b/clang/include/clang/Driver/Options.td#L8465
The option has `NoXarchOption` flag set, which triggers the error.

The correct option should've been this one:
 https://github.com/llvm/llvm-project/blob/63899748738ce7449e46eebb1aeb7909f2fdea2b/clang/include/clang/Driver/Options.td#L929

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVt1u2zoSfhr6ZiBDpv6sC184drUNdlsXbbfYu2AkjSQuKFEgKTd5-wNSSmynOac956pBIEtDzsw33_yQaIxoB6IdS-4Y50-PBnspJsY5S44rnGyn9G6vLfXB3apU9dPuIHFoQdOotDWAA5DWSoNoQA0EaC31ozVgFYxoDLA0DE4bloZOgnD473HPePH-_hMYUQaV6kch0Qo1wFmg3_0_1FX3UNNZVMTSkEV7Fh5Z-PxMw-Xff5ZiYLyoHCbG7xi_g-ARqqlGYLyo6cx4MUxSQhCoppEK68BZZ9HR9A9pCDfOIDhtIKggUE7Z9iPjRaPUWkEwKGdTDNXzqxTlDODKNYv2MxnuRQxnlKIG7wBQt1NPg3UrjGc_uGU8Y_wAg7KAUkKtxZk0qNERY6DCAUqCRunvqKn2TL2y-9theZWn-XlvAceRUPv6KAkQyqldw9eOoFI1ge3QQodDLclcimG9dvXzjODKQi-MGCzpUZO9qjQ0gODJCCq56IEraV6c3M9fVtQIjO-9271uAxa9a8mevAnGt4zn6_uhUYsmj-MNsOgILLubRfBJUyMeHfroCFKee-ct2u-1xqfP1IBqQNLQ2g74K02A2w8AFh0uFr5YLYb2MzUsejdr-oD88-C2flRQo0VoBMnasOgdy46MH_659eAnthdbt26W-OuP2NMbAf5CRKdfDuk9yfErPVqvHD4mSVPGYVpRUsfO1hey0E_SilGS6-gTNBJbA2hBDRWx6A5o3a7BF3xx4k8B45mr7BeJ1_LiGdNrx6ZQ-htqgYM1Pwb78OGBJPVvrPyQC4BGaGPf2vkzS_NfeJPpi_SV6CptF8GLpqFKDfXCZngL93hdR3-S-w9k8Rvqm3TwJN8g96mNDp5_l8YbNu-PXiMKw-RK-m-xQIl9OpJDGMbzaHopNdTYz85etoS3WwqfcLdlk16JvwkjSiGFffJr6fXav7SaxgUSv6J1LwWaRX7Ntpfv9eLG8XblB-VE5pbQF_benJBfO2FAGLAdPQ-ujjS5Wd1ZOxrXOa7pi1bYbirXleoZL3xPzT_BqNX_qbKMF6VUJeNFGm3zPIu3WbStKIvjnOKUqCw3SGWWh3nDm5qQl5dztBBDJaeariRHfwq4dpin8NrWjEf_2cZp8gz8Ahj97P6o_BRdZmca-u4DQ9Y19_dOVB1YLdqW9ByuP67Wt2S4Y0FrquyzbdOpSdaMZ2eCkmgA6whTA70M9d-Sp5znM7pVvYvqPMpxRbtNxrM4zRO-XXU7CmmbYBVt63iTRkm8qZswSjElTOqYl9FK7HjI4zDnGQ-jbbxd5w3GdZRnEdZRmJQli0PqUci1C2-tdLsSxky022zCiCcriSVJs9zzBvoOfnW56Omd56ScWsPiUApjzcWMFVbS7vae0KCQ8yVPqxFbtP7qsJq03P1t_j0Qw3ixID3v-B8BAAD__x0mB40">