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

    <tr>
        <th>Summary</th>
        <td>
            LLVM cannot remove switch even if all branches jump to same code
        </td>
    </tr>

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

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

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

<pre>
    [godbolt link](https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1C1aANxakl9ZATwDKjdAGFUtAK4sGexwBk8DTAA5DwAjTGIQACZpAAdUBUI7Bhd3Tz04hNsBPwDgljCI6MtMayyGIQImYgIUjy8uYtKkiqqCHKDQ8KjpBUrq2rSG3tb2vILugEpLVDdiZHYOAFIAZgAhAGoAWQw3egBJABF1laOwDhiDAE9gYhmGdAA6ZA1lzA0ATklMAFpkYDcHhozosNABBBQzOaYAD6NHozDYx2WR0WkUiFyY11ubnuTxeb0%2BPz%2BAI0qMiINBfWAmAI63QTEqVxmtJOxzRPxYIB%2BMUiAHYNCBlpFBZFvjzeVwRSKxXzhQA2SQgBXfPAKpWSb5UAAcAq4kS13wYWokcqlyqEeq1ZIpVJp6wIxDwF0wSJRaNUWrl0OVOIA1gxUAB3BjfWj%2BNyqb7ABhua1gimogCsZM2l2wMZYKycZ2hK2wIBAoLJrvtlxiLsWvI2i0Tqy461U61VkhrB1Ixyr6xiDvbzY7KN5BwTkWTaNT6Y8WZzeYLq2LrIIZYrnZrdYbTYVrfblY23bIG8k/f7w9HkXHGanHFzy3zICc8%2BRpfLHertfrjebW5fXZ7B6PlaHeMRxTNML2WbMrxnEAhzREtF2fHdjjfddP0TNtvz3XsFX/QcE3jNYuyuG47nQAsCEwXpoRCEiFATAiADEcRsJJ1kpB0FBAdYWDcXoYluG4KIUdYAyoYhMBdAMxOQWYlGE%2BJLgYZA5JxQN/HQOSGAMAAvS4QjU9YxKYdABFoS51lUkwxIIWYGHWNxA0qEJ6ApLAaACZT7kwKg/wAAWpAhoXhYACAQBQIApdZIp/Yg5LEPAmCEgNRG7WYJJIryDMwIyTLMuLo3WLU6XCLzisUrKnMwCBogmNlE0YCkapxBFMHQaEjPQGLUWWDQXwpYZqhACLauhSIS1oVAjIPds91qxh2zy2ytXbMAwGIQxqXWFbImWsAAxxVzNrAZYhoUVSCGQBA/yTEb2wMMJaFqkIQlG1chsivsNFuph7sekJjrBKK/wadY7pKX6WwBqK%2B22kHvrBpMnuTSH3uw5Yvp%2BhGQi4IbWzw0EnuFQGieJknSbJkmVl3MT0CE1kk36gghpxQyLu%2B5z4zBJ7lk48neb5vnKa7anacfem%2BkZyGkx61l/JKTA2EEGb/Go/baeAsdQMncDpxvAsizRaaHVmhgsMPT6myFdZgbwS3schkIYtBh7MblPGnsVfnPa9wHBb4lqRbdRMGZxkd6xlmk5YVgglYYFX7jV09zy1iDr1vOcDei43TfWc2bdG63baGh3YYxkcntdjn8ZCRMee9uved94WSzF1oQ8TF7H1l%2Bgo5juOadqkCJ0zbXIN1u8yUNzqRzmv9c9t3tC/tx24edsuQgrotOax2v6934nG/95uR2DyWR2WEsu/lxho6N5WaIHjWh8vVOCxgmGZqTGePoX/Of6tovl6l0TOXN268d57wgUiKmh86ZrzRuDbca9EyIOAVjNugIHj%2BBLDEBAeBM6rlqvAzGYc0LblrLVGGmNExIXQgQpMwNMaHi/HQkc5tMbn1xqfRMgIxoTXUs2SetUMH%2BHmmGfKVpIZWSuiOQECZcKVwZA6PAIQ3DkTVt1ZuVY3pcR4tHfiYkFC0WRnJUS4ltGSUwNJYgShzHyUUrYlSalbGaSYDpPS9xtGGWMppS42iLK0CsjZbR9lHL0DZOiW4YRvjDGQL6a0yIyTQmhMQXR0I%2BKoDCDEuJaJtFkltAQX4MRYw5ISe6T03xNw5PjPIzeoIVomHMA8FgOx6APCoAYYAAdDo7hWubFa2MakUl6SWFaO487rF5DtMkyg9hOHWD4TApgSgTwtqNckNT%2BkjLAGMy2MNRlogAEptGUYoTAABxAA8gAFRWeMgZgE6lgA7qcbZVZv5/hbBso6WydwAQ4FMWgnBEy8C8BwLQpBUCcB8D4AAapsdYewDnrAhLMeYbJlg8FIAQTQ/ypi%2BhAImT6gKOCSBBTiiFnBeAcU%2BtisF/zSBwFgEgNALAYh0HCOQSgLK2X0AiCYGwKSGC%2BlIFgUweB5gwrwJgQMFzyygsxXCci1jKAhHJe4qolxOCYvVcQS4FyQjaEsbSzFLKo4XJ8eSrALB1riDpSKvAUlbBLI4nazAqhLGqIWJi/w5FiXgrDA7DVLgsDkqUZybg9L2lME6ZK6VsrGBat4PwQQIgxDsCkDIQQpy1Dkt0A0AwRgQANIsAGjikApioG7EkF13wLnLCpXLZi9gICOAGPUUgvh/AdHyF0BoGREgCDbekeIA6GCjE6BEIYjaygtH6K4OoegrBGuaOLcdPbJ2WHFkOoYq6u1jF7VMFFUIJAAqBWSu1kKOAg1oEpCADo/Q1QgLgQgJB0VcAmLwWlWgJh4oJUSzgpLSCgvBZeqlIAaU4p/foTgkRz0gcpViyDUwlnWKSCASQQA)

Code:
```llvm-ir
; ModuleID = 'playground.c03e094e-cgu.0'
source_filename = "playground.c03e094e-cgu.0"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"MyEnum<'_>::A" = type { [1 x i64], { ptr, i64 } }
%"MyEnum<'_>::B" = type { [1 x i64], { ptr, i64 } }
%"MyEnum<'_>::C" = type { [1 x i64], { ptr, i64 } }
%"MyEnum<'_>::D" = type { [1 x i64], { ptr, i64 } }

; playground::test_bounds
; Function Attrs: mustprogress nofree norecurse nosync nounwind nonlazybind readonly willreturn uwtable
define noundef i64 @get_lengths(
    ptr noalias nocapture noundef readonly align 8 dereferenceable(24) %en
) unnamed_addr #0 {
start:
  %_2 = load i64, ptr %en, align 8, !range !2, !noundef !3
  switch i64 %_2, label %bb2 [
    i64 0, label %bb3
    i64 1, label %bb4
    i64 2, label %bb5
    i64 3, label %bb1
  ]

bb2: ; preds = %start
  unreachable

bb3: ; preds = %start
  %0 = getelementptr inbounds %"MyEnum<'_>::A", ptr %en, i64 0, i32 1, i32 1
  br label %bb6

bb4:                                              ; preds = %start
  %1 = getelementptr inbounds %"MyEnum<'_>::B", ptr %en, i64 0, i32 1, i32 1
  br label %bb6

bb5: ; preds = %start
  %2 = getelementptr inbounds %"MyEnum<'_>::C", ptr %en, i64 0, i32 1, i32 1
  br label %bb6

bb1:                                              ; preds = %start
  %3 = getelementptr inbounds %"MyEnum<'_>::D", ptr %en, i64 0, i32 1, i32 1
  br label %bb6

bb6: ; preds = %bb3, %bb4, %bb5, %bb1
  %.0.in = phi ptr [ %3, %bb1 ], [ %2, %bb5 ], [ %1, %bb4 ], [ %0, %bb3 ]
  %.0 = load i64, ptr %.0.in, align 8
  ret i64 %.0
}

attributes #0 = {
 mustprogress
    nofree
    norecurse
    nosync
    nounwind
 nonlazybind
    readonly
    willreturn
    uwtable "probe-stack"="__rust_probestack"
 "target-cpu"="x86-64"
}

!llvm.module.flags = !{!0, !1}

!0 = !{i32 7, !"PIC Level", i32 2}
!1 = !{i32 2, !"RtLibUseGOT", i32 1}
!2 = !{i64 0, i64 4}
!3 = !{}
```

Generated ASM:
```asm
get_lengths: # @get_lengths
        mov     rax, qword ptr [rdi]
        jmp qword ptr [8*rax + .LJTI0_0]
.LBB0_1:                                # %bb6
        mov     rax, qword ptr [rdi + 16]
 ret
.LJTI0_0:
        .quad   .LBB0_1
        .quad   .LBB0_1
 .quad   .LBB0_1
        .quad   .LBB0_1
```

If you look at the asm, it is clear that jump and jump-table can be removed because all branches jump to same place.


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0eVuXsrjy96fhuWF1LwgH9aIvAgiioCIq4k2vADEgCMhBwE__LtA-PD3z7pk9_9msbgip-iVVlTqxRGUZkRTjN0qQKEH5heoqzIo3mBKcRH5WrsOszMOsyMpfXhZ0PRvJAi9LKjqJ0pgSFAqMw6rKS4qDFFApoD7pr1lBhgnuTnFw5RokhKp0DQRLbqHbrF3JlC_SJpAMqLKW7EO0nsrQvDdSZcIRtBq1Mi2pgxsyWVSWO4VdGXmMdYByO5YkuMikdAvhDs7yBpo3qLpbu5oTVmYRXLYoTiZHuG2UxTmAmrqr4IIvNdw2UjxWthAKSgPPW023oHzMIQx20k4fSWHAbe8MHy5Lad0oJDnLumhWJuo6Tbf0i0v03bkb1261iKPrVZ4tFGu8OOfSrriCwta4ygM33ajJNDf2ShAdZ-4Kqjo8EhhCLYOO1XCYSHMoqWyCVo0SRgqcTogbXrQAQvEI2eQOGbiNExOqeewq_izM7lm5hJIkWfcVcqEiLmfZXXFb4GwYJ95FaueybO2l9bbFHkMBAUjr-_CAOnM1I30pnRx4gbrIWdvpdd9eqvmqvW_WratLA5-5i-DMXcpSkqvSUb2d73jfbOxFe7iHFgS2RaTDaQ0XuWN7wg5CH1752Ga5xnWy2L8m3XWKr-xRz_fzXGz0VmlUprHnG7TcOUXCrPYrHbKk3UGJk84n5zxsuuyu3ghKYY1YEl0yIpdHEySgMY_uovOPIFyARpdgZsyLW5W0kVE6Nx1EzPba8SK7E9l9HBYSq7ddIbaRcvPu7mixFKRmGztbtNyK7tg53rFrXIFR6PrRLdJjEbje1t0XJy9xAefp2jimgHoaNZNZfJhpKJ2p946767I_HmTc5CdjhovqVJyx5winw3EkiesEzbC5abdL0wCOZxZtOoXhfTOtVHCaBefzKQjWzHZZ3e7coVQPFFAtf8qdl27d1Ro_Si1YytPmkGcbeRqpcAsjqEz9TTmfs3EuMaoEA9dR_EPmJrXGL_Rd4MIuc0NTCqDZrizHTbTpIN_cIO4RCvPWWlJAnVkrW4MmhDebt867idsu3ABKamYLbLKLm1bXHVebOcsWMtfpXIS5ARGUj9tR3Cz6SG0gdHIYZofQhTK0JEuHeXDUcwqoLhGM6Rpe5ClZbrSR487netEpZqN3W8OsjYxzjJ14kI17VO6KRWo2spSRyzKZMq4co7yVVHNmoel5bWnGznEU69Dk7vEaQtlAdWjrNpvt4VlfB-WEvbYhuHegqw6eCRtNt9rrwVE9_eKUELbt_r4s4NENs93eljVL6rNOt516oDHNOVKvsW4lGuuHZXQrl2qdh6MSx_NzIS0WvZIocEf54iA6jXRdDGYEIJ7dCik303prz7i6EdxbPlBCzYp43XPuDTNNa9XSIjyPU9ubx5d9wplbRp6yccyJhIR5a3VGPaCEO3-X5qMk5scp9oRbukAjlCL_hC8DPT52WtyKbEIBdb7YQjCdah4FVC2jgOohDMvAMlNfydsbLKP7BqHZ_hKS0lxvxUunBkfiNTZX-mGsu5UUjkwvWWtpuT-lazRpZpLHJ9eNF2xM7djGgdgml1hw94QkrqseRuc9M7l3bKQU7G3lKzjiue3J8YEXaCLnIS3kXLeN_bQKzun4KG9MjCf1DQcT3rHvKptZ4606mvXCC0AimXCuVyi4xvKcuXsHfcnW4263vF8398tt4k8qrpIpoFYt4HFQ1hYpsmqFWnATJxyfahRQJ0K9AUrnbIAzLWsKqEkbZuJScJA-Ozvh-LZfyS25aMfrVsPrrI-n1UmsslsiJsx2dVgCcRwIo4bsosUlHIvH4r6pFc9Hk2mnr-D-vKyJPnskHclQphLEkikWyfUG75rrM4aXFMZe0y7LaasfLGLlZrM00SwaQir2hcr0Ura9njYm0dtse9iVwMbVzpwNS84uF-202Of60bHraGVN5aO_2DdHKK6hbnFKvN1X7LHeu1zub_hqdorcWJUZZ5POdzafVJq9a5Zzl9jhfdbtdoWb2CjxNGS7Sr62J22laY6Z5zYPImPByOX56G0mycxglOMqcnh3czsrmmWIiOn0bmtdQtM6bBh9kG2RKbIyredoXqlxUkHrwJsbtxF0G4tbhmuXjbA-r_U7zvR9dpmZcKySVSvCtZxB14UwULJR6NSeioCJ4l0i2o6KVvx4VKiCUplxRybhauYo_BbmxCbbprou_Xi5fXj52YCa2QFzuUkyAqd5pe3cbAuh1EI4JlDdONgkRzIVEwJHV9877o83gQJq6EllJjpd0ECLV02HpNK0G8tjqTGsXNrJvjRWeAhRXgYubpS0gKFhYtebJ2Ss6tDaWn1CyKNHBEP9shXJYiXbkrSNIjWVMPR3A62Kyr5dudtSo5IpWUIDuiEzk1eWTYwFODAwkl2tWdiaPPAnukp2DZYE0hTNnFimeu86UrYH2Y_Y8wKGsznmr1nSrmT3tvctm1c764ympWffVWOR8Yf5GNsFNCS2iJTcXtzgLvEkQ-dTdIfX0NCuujPv_a4R1OhACgWOlL1BSiW-7o6dRyYGSMypeFyI-7LQJFTx68aydNIqpRwrumXlHavEFQMZ2GyIBZd6CbVzFMM8yrTRNFZZrjFSQ84PxjGaEF1eQW2925FbSAEVBrNOZaRM20yJrHg4xjoUNfk8FaWp7p5RR6qZuOBXGSaFpNVoZfjB2psDZ6bGq8y9ijV7Vkd7U1V3-hzCq-TYNRsvVpCw2TSXodJnN4u1iEEsMpeYvQ8vRuMkDpmHfDbf2XeSG7ZMbtIRXxMdoh3fV55TtiXx5s4QP99HnbJrktRZ2DK0LQtSYEIxCsXAx13OAtw3oY8pkXn8Jcnt8hIVz1lOos0sqBOsKzTFKTQFRnmCOlJkdRq8-gyHmQmPX3xSvzIUGD1QZVYXPn4_RQlO0QU_geA_AMEDWKGC4IoOUIUS1GV19QHFLxeKg_glByOG4iAHhlv_yv7-2o9Efri9RB-D07gHsWD8ko77gfiBEfkXmwXjn_tXRZQnn2K3Y_Fd5F_qNE6zJn1JorRuX0haf6KedyBQAJjdNK0vFCdTYPROcdPevhyEFADDclWXY5oaSTQlSCzd0r2I_ReBPEzmVdEPI5GnqZHS___10tL_bmn5f7e08n9c-tM5v3zqsXCFy-rd69_LLya1Tv0qylIaVlXRf3fRl7qs8iIjBS5LOs1OBcZ0mhXYr4uyH5Vd6tNpVqdNlAZ0mqUJundePy4wCrI06egmSpICV3WR0nVTIS_Bjw0DfIpSPIADfHrIzjMEV-8JTkkVlhQYPzhpmu41pNMMJRHq5fBRXtXFF_hzM5REJKXHdIALfMIFTn087AjGgKfAhKaAgNMPs0_oOu3jLnhHQVDQFOCY3prP2KxQUX1GPd0j3x9HkWQoGOwP5EGsx5pA_th8OBTAFigluB-A58SHsBRguY9Vyyaq_PChfL9Bz5ogDyf9q-eB_ri_jNCzMT9YuN_J7A8y_zv55wbC72TuB5n91F74zaM8r88K9OBYBQ7KZwoQHkZ7Yuq0wMgPv078A8v9NZYCAjMQCK5wgi84rXpTR-nDZem_SiJ_OJtP00UceBjpMXju5xXf1RZ_l7fPjvR_df2lcuw_VU76t5UT_tZhgH8qr_xvy8v--4fB_VPllH9bOfFPD6OPmCGFDPH8MRI-R-w3XV6Z1ygdgHkYPQQTpEHJL3b6o3I8KOBryR8U9mvbHxTmk8J95YanAP-_JDmI9j1PPkEFrj4S4CvztMfvBQxVVRF5dYXLZ5Lu7fKRqH-rUV_p7FGsvr8_q9b3qb58fX9_1LHnzLdq9sXzUWm-Zr7q29fcs9ANzVyRefilrJAf997C9T7z_l7UZfU-kD4pDzAFwKO5evHz-hPQjsWX3pbgT81DAbZvRl8vQwP6ekoQ-fAdtjcTYJ_HxbJ_RDLfOHtHHT1ZKQDWukwb-IaTp5v3ZPCtbWHZH1jwhd1URuTtSqyttt_Q7Hc0-I7-DBqRp_nvXNx3TT7nP5rw78poOMUFqnBAQ9v8Y7-Oystj5nuL0Ycb4H42Hp_n2F-X7DY8C9T2Al6brAg-AqsIom_e_7jOl_x3pjEFYIFamgIS_WrMtzrzznyiXg1JYt7_TlIb5PyWM_6mfMO2rPglZoGrj62fsnw1OY_r9VqjoH8-ZfsbxP8e8qdHqJ_oLqvpJMtiGlV0FWK6P7beLyo6Kmk_waigqxBV9Lm-5DRKg2Hw8gg3H6W0h-kCX7IbDmgP-6guMY2ShPYKlPohLh-4KqPL_oMrT5CPX79L8Ct444IJN0G_8BsrjjkwEbmJ8Ct84ydj_uR540AcsRNO9ESMAw6Io0ngg7EIwK_oDTCAYwRGYHl2IgivIpqc2MloIoz8EYfGHMUz-IKi5HUI1qwgv6KyrPGbCIQR82soCuXwawkAKW7ogdjHjqD8Kt6Gr02vJiXFM0lUVuXXKlVUJfjNMPZmb4A0q54G-Ggu8Q2ndHT6D2bwswD_qovk7cfvLVEV1t6rn10ooPbbPR8veZGdsV9RQB2ELCmgDkr8vwAAAP__rRqZhg">