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

    <tr>
        <th>Summary</th>
        <td>
            [SLP] SLP ignores command line options and creates oversized vectors
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:SLPVectorizer
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          ashermancinelli
      </td>
    </tr>
</table>

<pre>
    The SLP vectorizer is creating vectors that exceed the maximum register size specified by `-slp-max-reg-size`, the `"prefer-vector-width"="N"` metadata, and the `-force-vector-width=N` command line option.

https://godbolt.org/z/KMj67594P

I see a few checks like this in SLPVectorizer.cpp

```cpp
// Lines 1804-1809
if (MaxVectorRegSizeOption.getNumOccurrences())
  MaxVecRegSize = MaxVectorRegSizeOption;
else
  MaxVecRegSize = 
 TTI->getRegisterBitWidth(TargetTransformInfo::RGK_FixedWidthVector)
 .getFixedValue();

// Line 2072
unsigned getMaximumVF(unsigned ElemWidth, unsigned Opcode) const {
  unsigned MaxVF = MaxVFOption.getNumOccurrences() ?
    MaxVFOption : TTI->getMaximumVF(ElemWidth, Opcode);
  return MaxVF ? MaxVF : UINT_MAX;
}
```

Is this expected behavior? Is there another way to force slp to use a given max vector width?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8VN9vozgQ_muclxGRsUkIDzzQzXKqtr_U5nr3tnLMAN4FjGyTpv3rTzZsrj31VkLKZDzf-JvxfCOsVc2AmJPNFdnsV2JyrTa5sC2aXgxSDdh1anXU1Wt-aBGebh7ghNJpo97QgLIgDQqnhmZxW3CtcIBniViBaxF6cVb91IPBRlmHBqx6Q7AjSlUrrOD4CmRLI9uNUS_OkcEm8hFkSwn7EjIEk40GazTRfE30oirXEsYI3xPG7ry1pdCjE5VwwiPFUP1CR7U2Ej9C-f7OI6Tuex_ZqQFBj07pYU1oQWjROjdawgvCSsLKRldH3bm1Ng1h5Rth5bfbH9t0kyUPc_g1WEQQUOMLyBblTwud-ongWmVBDb5zz5fGreU4zjBfW_gWT7gMbtSAFuIdTaJ4RzNCC1UDYbtbcZ6TPGLzpN7wfibcoLub-nspJ2NwkGgJ2xGW-Y8WADNqgQDhe_g8D-FXhBbYWfwfmHcfDtcR4V8bdI_Lg14p99f8GruDMA26gxGDrbXpr4da-w7y4vGPb99LdcYqRM53L_Q8-3D0LLoJF-aBycd-AKMpI7SYhjCyFTTobufZei4J2138XzvsF0Jf4OK9H6WukLAMpB6sA5JehSovAb7c8tKd8vetBcLLAIf30UD4-wa9Z_eB1IXLXCeAQTeZ4UKhvFgF_Hl9d_h-W_y9tCTdvx-aZfTsPGV4HlE6LylsxUlp4zOFQzQIYtDegBfxCk5DkATYbvR_JutHt1EnHLxeFy3DopRyVeW8yngmVpjH6YbRbZYk6arNeVInktUxZpxWVcwZT9O4yli6S4WsZLpSOaNsQ1OaxXyTsnQd1zQ5ym3F0niDMduRhGIvVLfuulPv1bVS1k6Yx0macr7qxBE7G7YTYz6E8OKDkrzwN_uVyf1hdJwaSxLaKevsvxmdcl3YcE83D2SzD0tMNYM2aD_Tvw2rI-w1tKBPaPw-qn4tuNVkuvw_y0G5djqupe4JKwPL-Scajf6B0hFWhqosYeVS2Cln_wQAAP__Pl_Dfg">