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

    <tr>
        <th>Summary</th>
        <td>
            clang generating compare-branch for a large switch statement
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    It makes sense for a couple of cases but this one has a dozen case statements and I wonder why clang assumes that jump table is better?

```cpp
#include<cstring>
#include<wctype.h>

enum {
  WC_TYPE_INVALID = 0,
  WC_TYPE_ALNUM,
  WC_TYPE_ALPHA,
 WC_TYPE_BLANK,
  WC_TYPE_CNTRL,
  WC_TYPE_DIGIT,
 WC_TYPE_GRAPH,
  WC_TYPE_LOWER,
  WC_TYPE_PRINT,
 WC_TYPE_PUNCT,
  WC_TYPE_SPACE,
  WC_TYPE_UPPER,
 WC_TYPE_XDIGIT,
  WC_TYPE_MAX
};

int iswctype(wint_t wc, wctype_t char_class) {
  switch (char_class) {
    case WC_TYPE_ALNUM: return iswalnum(wc);
    case WC_TYPE_ALPHA: return iswalpha(wc);
 case WC_TYPE_BLANK: return iswblank(wc);
    case WC_TYPE_CNTRL: return iswcntrl(wc);
    case WC_TYPE_DIGIT: return iswdigit(wc);
    case WC_TYPE_GRAPH: return iswgraph(wc);
    case WC_TYPE_LOWER: return iswlower(wc);
    case WC_TYPE_PRINT: return iswprint(wc);
    case WC_TYPE_PUNCT: return iswpunct(wc);
    case WC_TYPE_SPACE: return iswspace(wc);
    case WC_TYPE_UPPER: return iswupper(wc);
    case WC_TYPE_XDIGIT: return iswxdigit(wc);
    default: return 0;
 }
}
```

https://godbolt.org/z/jzx33W9Mx

```asm
iswctype: // @iswctype
        cmp     x1, #6
 b.gt    .LBB0_6
        cmp     x1, #3
        b.gt    .LBB0_11
 cmp     x1, #1
        b.eq    .LBB0_19
        cmp     x1, #2
 b.eq    .LBB0_23
        cmp     x1, #3
        b.ne .LBB0_27
        b       iswblank
.LBB0_6:
        cmp     x1, #9
        b.gt    .LBB0_15
        cmp     x1, #7
        b.eq .LBB0_20
        cmp     x1, #8
        b.eq    .LBB0_24
        cmp x1, #9
        b.ne    .LBB0_27
        b iswpunct
.LBB0_11:
        cmp     x1, #4
        b.eq .LBB0_21
        cmp     x1, #5
        b.eq    .LBB0_25
        cmp x1, #6
        b.ne    .LBB0_27
        b iswgraph
.LBB0_15:
        cmp     x1, #10
        b.eq .LBB0_22
        cmp     x1, #11
        b.eq    .LBB0_26
 cmp     x1, #12
        b.ne    .LBB0_27
        b iswxdigit
.LBB0_19:
        b       iswalnum
.LBB0_20:
        b iswlower
.LBB0_21:
        b       iswcntrl
.LBB0_22:
 b       iswspace
.LBB0_23:
        b       iswalpha
.LBB0_24:
 b       iswprint
.LBB0_25:
        b iswdigit
.LBB0_26:
        b       iswupper
.LBB0_27:
        mov w0, wzr
        ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUV19zqjgU_zTxJVMHElB54AG13uusdZ1uu-0-OSFEoBcCm4Ta9tPfwfgnKErvTEem5_x-yfmbkxAp05gz5gN3DNxpj1QqKYRPyrJ6Y6wXFtGnP1cwJ7-YhJJxyeCmEJBAWlRlxmCxgZRIJmFYKaiSVMKCM5gQCQmMii_Gd2ooFVEsZ1xJSHgE53Bb8IgJuE0-Ic0IjyGRssqZhCohCr5VeQkVCTMGUwlDphQTAM-ANQVWsP8dWPqPluVegnDKaVZFDOAJlUqkPAb4vkW5peqzZP3kpN39Ml7lEAzH-j8IXybrp_9W9-v58t9gMZ9CgKfQAmhyrg8Wy-eHVvnqZ3CSH8TjRbD8qwU-WT49Llrk0_mP-dPlMj8eg9XPFvji75f7xxb56nG-bFlm9bycPLXA_1kFk_sW-fNqZS5_EL-eWXlUPASv-xgPpwCPzXinXMFU6mQANNqmXK0V3FKAJlBL1wrShIg1zYiUAHlmduQ2VTSBAI2uQqAuvmaecAAFU5Xg9d4k41Ve700B8o7mtTDrTJ4xy4RcMhs0nekGLcwI_9W9oa6FBpNyJbJups5Dgxmlcaq6mbqgGsxYkDLpZuqSazCzYstEN1MXZYNZipR_w1pdt01mxek3mLqyG0xZEsq6mbr2G8yqLL_j52tLWj6u5yViG1JlysBbJ33dSMeOap6FZnclSpUS4ACgGUCzuIjCIlP9QsQAzb4Amr19fWD84j18tJ6qROb7Jj00KA6gXgoCxzpKjybvXM7L3ffDrlsYIDzY68N-rGpFfzEeW-tBBws39U2ybR867Zxmn9PY_wbN69gUHU01aQj_qa2cHajDM9X-ezwEdtpDRHDQsZF3MyhuB_vcltrJvZlWB3V0K6zIuWRfN5kzg3kRnmMHG4Gx7e7IONd9szuo7k3fWoJ6Udnf902fpaZvbrdvtnXdOdTFvdkQaHC1j9Af-7Y_ykznvAvnjAbQY9eAI6sFfhwjJvCyIIx19Yw04egEN3D6vDdx-La59aw34U7rsnp0mbjLFIeniWwCL08AY109ZEz48AKeF-9wa-2uTl-iqRJMnZ3uvcjHkYc90mO-PUSW63oDz-sl_mDg4g0LLY-EwyFjI89FLsYDL_QwiawN7qU-spBjDS0P2bbjen1CRsjxHGdDLUqHdAgci-UkzfpZ9p7X46aXSlkx3xshhHsZCVkmd48NhHYXf4BQ_e4Qfo2_C6tYAsfKUqnkaQWVqoz5-p0QM84EUSmPIS3ykgh2FwrCabJ_l2RExOxwOTw-O3qVyPyziZiqpAr7tMgBmtVb7T93pSjeWH2RmO0slwDNtPHvPvodAAD__1Fng34">