<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJy9V1tz6jYQ_jXmRWOP8YXAAw_ckmZKkk6Sdk77wsi2jNXIFiPJIZxf310ZgyE0Jz2ZKaMx0mov315krROZ7ca3hJakYltiJFku_7hzghmhVUYsfSvVC6_WRFaEkkxuK20UA_pGKkO23BTkRsiEitsnJlpBStJaG1kyRRRDRpYRUzDCta4ZzKghuVSWlEsh5BYNaF5uBCMzksqM2b1UlhsuQAlfV1IxbYlmt4Edqo3n-HPHnzgDfz_ssq40cKM9po0TDHllCEVcOEnaSdpOMpwcZHSBTr05wYg4V9NGIQEXTK3Qeye8JqASxkEiLahC9kYmnMAk3As6V_OLCG-JURwBSpjQ9MUGtRMeDCB4zki9aeJ7GqaSV7ykgrA3auPVRJNy0YRHU5Dc0h2hQstGfjJRaTGIAN1FPE4QkvuH5wWin2jNlOGy0qSgr4wkjIHjtZFrVjFFMY_JjtQGrDnBdb3JgLQquVphtFdpwdIX7W12R8WPv9-jXiFS4pbgNyKm1OIhrqord0O1dsL5nuZuFBNsTQX_zpQLUUg42CXuK1M837klTQsgcKxBDamINXElcSFZM3INlTJDAJa-R2Cfrus2kwpig2g6Pw3mUrPCqK1eqWj4cv7GsicDuTnEjFgrU8IzVOBj1WAh4iJjOa2FQZLMc80MEoe41OAFLiJ7LgRUTMmqzjZacBuNRyWtPfxxfVuWtaGJsHqMqpktXD0RnGpmJXNItKWmVAjGXA15y1zF1lwbppDDCa7seMcCR1Q1Svaau7YzltRrl1e5dF-p4i2Go7IOA3uDvGkNdfOvLEKm1JwwkMMBSeAldJYXTGmLJkk834PAqV0nHcARTsnsl8XsV3c5mS6WqKBN8MWsnshYGPEUxvXj5G6xur2fL76h-iAGmu-OnHjuBFN8wggnKzj0G7855HNys-pIYb3ZinFtQj3_EsT7xbfno83Zw29__sCYDoPWGnKDkWj7Cc1_wWr5MJl_XvvNqpW5EJBG5uj6pEnfUEia4b8eIj1XsnwfhWD0ebj9_wtvf_A1wE-L5WL2_F_QNhLdxLcgGzY8J2e52zOc0_v7jY9AYpV0iqaL-czsB1oeF8-rRwbvit3yscMXxP7Pn4Qg7v-4sk_4g49z_x7NTxdnEIdftvWZwjoxOfioWM6jZYvhEJLZEfI7vaf5Pzdz5HyfY8-73FHdwYVfZUyBN1WGHQjXTdOB7QZwnb9sBz50Vrgxa65vz2RIg3u-LtleFPhqmGP0mpbCdnZbiWLHwFsxxQ59DXq-LXhaIIRKGnttgWJk2DUNS8bznCm4LOzlq7225cIGFwR0Dep4bjVulIQ7rURdtk266Iq91RXR0I-ZYu98CX0aTm2yURO60Zpqnr1sHGajcER70DxBUzmmawm3bQUmob_q1UqMC2M22r5IrmGsAUGdeNDxwEKI1_YPGiL5N2CCpe0Ose2KwziIesV4FEVxNhrESRQEV8kg8NNRP-3nV4N-RIeZ7_cETZjQY3wLBAH291YFzOFF0Ps6Aj4O_ACG3--HURD5XjBgUdwfRCGLs2EyvHIin5XQmXqox5Nq3VNjqxK6Ag2bAloUfdyECsGmmlnAgNBwI-yi84ERz8kd182HwaGfOJybNaR43zTaqjrLp_3oOFZIU4Q969XYuvQPsDG6Uw>53524</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [GlobalISel] Miscompilation: G_SELECT got combined by select_same_val for different values
        </td>
    </tr>

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

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

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

<pre>
    I am new to LLVM, and I am working on a downstream port with GlobalISel, and a customer reported the issue that for the following simple C code the compiler ignores the type cast.
```
unsigned test(int a, int b, int c, int d, unsigned short x) {
  return a ? ((unsigned char) x) : x;
}
```
I tried to track down the issue and come up with the following minimal example that fails the same way also with AArch64:
```
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s

---
name:            select_same_val
fixedStack:
  - { id: 0, type: default, offset: 8, size: 4, alignment: 8, stack-id: default,
      isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
body:             |
  bb.0.entry:
    ; CHECK-LABEL: name: select_same_val
    ; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
    ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[FRAME_INDEX]](p0) :: (load (s8) from %fixed-stack.0)
    ; CHECK-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[FRAME_INDEX]](p0) :: (load (s16) from %fixed-stack.0)
    ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[COPY]](s32), [[ZEXTLOAD]], [[ZEXTLOAD1]]
    ; CHECK-NEXT: $w0 = COPY [[SELECT]](s32)
    ; CHECK-NEXT: RET_ReallyLR
    %0:_(p0) = G_FRAME_INDEX %fixed-stack.0
    %1:_(s32) = COPY $w0

    %2:_(s32) = G_ZEXTLOAD %0:_(p0) :: (load (s8) from %fixed-stack.0)
    %3:_(s32) = G_ZEXTLOAD %0:_(p0) :: (load (s16) from %fixed-stack.0)

    %6:_(s32) = G_SELECT %1:_(s32), %2:_, %3:_

    $w0 = COPY %6:_(s32)
    RET_ReallyLR
...
```
My understanding is that the `select_same_val` in `Combine.td` assumes that values loaded by the two `G_ZEXTLOAD` are the same, which is not true as they have different sizes.
I am not sure if the problem is with `select_same_val`, or something is missing from the loads.


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9V1lv4zYQ_jXyCyFB1uE4D37wlTSoky2StNj2xaBEymJDiQZJxfH--s5Qlq-42XQXqCHY1GiObw6KnzPFtqM7QitS8w2xiiwWf9x70ZTQmhEn3yj9IuoVUTWhhKlNbazmIF8rbclG2JLcSpVReffEZWdISd4YqyquieaoyBmxJSfCmIbDilpSKO1EhZJSbTCAEdVacjIluWLcPctVtRYSnIhVrTQ3Tmi3a3hCjQ28cOaFY28Q7i5329QGtDEeN9aLhqK2hCIuXGTdIu8WDBd7G1NiUm9edE28q0nrkEAKttGYvRffEHAJ194iL6lG9dYmHsMi3hl6V7OLCO-I1QIBKljQ_MUV9ag8WEDInJNm3db3tEyVqEVFJeFv1NWrrSYVsi2PoWC5oVtCpVGt_Xis83KQALqLeLwoJg9fnueIfmwM11ao2pCSvnKScQ6JN1ateM01xT5mW9JYiOZFN82agWhZCb3Eai_zkucvJlhvD44ff39Av1LmxK8gb0RMqcNDfN3U_poa48Wzncxfay75ikrxjWsfqpAJiEv8V65FsfUrmpcgEDiDBlqRGuIr4kOzpuQGJmWKAJx8h8B9-77fLmqoDaI5-hgIl9slVm35SmWrV4g3zp4s9GZfM-KiTIhg6CDEqcFBxBvGC9pIiyJVFIZbFA7x1kAWeJO4fSFhYipeHz3GCH7r8eCki4cfYe6qqrE0k86P1Q13g2vGUlDDnWUBjXbSnErJuW-gb8zXfCWM5Ro1vOjKXe9UYIvq1snO83FsxrNm5Yu6UP4r1aLDcHB2pMDfoG_GwNz8q4pUObUnCmS_QTJ4CZ31BVvaocmyIAygcHp71A7QiCdk-st8-qu_GE_mC3TQNfhiV09sHIx0AtfN4_h-vrx7mM2_ovsoBVnoX3vpzIsm-A1XPF7Cpl-H7SafkdvlkRXOm5sY3zU0CC9BfJh_fT7EnH757c_vBDNx1EVDbQiSbD7h-S-4W3wZzz7v_XbZ2VwoSGtzSH3ctm8oFWX4a4YoL7Sq3lchuv483P7_hbc_-DnAT_PFfPr8X9C2FseN70C2arhPznq3UziX93cPPgKJU3I0NMeYz8J-4OVx_rx85PCu2C4ej_SiNPzxnRCl_e9P9ol-9HHv36P54eGM0vinY31msE5CDj4alvNquWHYl2R6gPzO72n_z8McNN_3OAguM6p7OPBrxjVkUzNkIMK0pAPpBmidv2wHITArfDBtj-_AMpTBOd9UfGcKeg2ssXotpXDMbqPQ7FB4Z6b5ntdg5ptS5CVCqJV1xxY4RoVtS1iYKAqu4bBwh68JOsqFBBcMTAPuROE8rrWCM61CX44mXUzFneqaGOBjttwlXwFPw6VrNnrCNLpQ7XePjWJ2HV_TnhVW8hHswiOWnM7IvTAtu90fivvmrwDnjvm40pyBcsz5kGZbyV6j5ai0dm3cq-kGrhXk1GQBeIIbKV-7H6BY6m9wCLeObyKRS-M0Snrl6CoskkGcFpTSPMmKvBjmNM8HjCVXBUsZ60macWkwHS-K8B-DcwFryKknRlEYwRX2-3ESJWEQDXiS9gdJzFM2zIZXXhLyCphqgDgCpVc9PXKQgCUYeCiBspjDQ5gYJNmueugfeCjw8xFdKSAuNXQPqGrPARi5BP4B6YunJA">