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

    <tr>
        <th>Summary</th>
        <td>
            [X86][GlobalIsel] Missed optimization for memory access
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          mahesh-attarde
      </td>
    </tr>
</table>

<pre>
    Hi
I have small case that produces suboptimal code. In GISEL  we dont do memory access contraction as follows.

```
define void @test_float_abs(ptr %argptr)   {
     %arg = load  float, float* %argptr
     %abs = tail call float @llvm.fabs.f32(float %arg)
     store float %abs, ptr %argptr
     ret void
 }
```

SDAG
```
*** IR Dump After Module Verifier (verify) ***
define void @test_float_abs(ptr %argptr) {
  %arg = load float, ptr %argptr, align 4
  %abs = tail call float @llvm.fabs.f32(float %arg)
  store float %abs, ptr %argptr, align 4
  ret void
}
# *** IR Dump After X86 DAG->DAG Instruction Selection (x86-isel) ***:
  %0:gr64 = COPY $rdi
  AND8mi %0:gr64, 1, $noreg, 3, $noreg, 127, implicit-def dead $eflags :: (store (s8) into %ir.argptr + 3), (load (s8) from %ir.argptr + 3)
  RET 0
# FINAL

test_float_abs:                         # @test_float_abs
 and     byte ptr [rdi + 3], 127
 ret

```

GISEL
```
test_float_abs:                         # @test_float_abs
        and     dword ptr [rdi], 2147483647
 ret
```

Please note dword and byte ptr reads on AND. 
https://godbolt.org/z/bfoM3qE31
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVV-P4yYQ_zTkZRQL4z9xHvxA1ps00u31dFtV16cTNuOECpsUcLZ7n77CdnLZXFeq2iIUE5g_v_kxwwjn1KFHLEm2IVm1EIM_Glt24ojuuBTeCytxURv5Wv6kCOV7OIozguuE1tAIh-CPwsPJGjk06MANtTl51QkNjZEYwb6H3f758QPAC4I0vQdpoMPO2FcQTYPOQWN6b0XjlelBOGiN1ubFRYTyMHM6T8oltqpHOBslgaTUo_NfW22E_ypqR1hx8hYIy4Q9nLwlbA0AZLUhlEMY0wmQpAJthAQYVQl7uCz4jfKNTu1GHS9UiFjrSTwA0PrcRa2oXdQmjLBiPhiNELa-GHHeWITvhwHrA7wFO4ta9GN44T9ZVXfxE8qfK76732XzhP1nqIbuBLz1aOHJyEEj_IpWtQqDs-Ic1q-BmavSv6H1Quo9o1dC7zQeQGh16CG9av03Tv8JoXdOb4ideWUJvMfclyKHiu-WJHms-A72vfN2mPLzGTVOK8KKP4t8qRzqt4Qm_BImJQk_2DwdY334-dNvQFhqpRrP-ceq6NStWMAchx_C0t5YPIR1cr8Rs1X4qO6kVaP8UmILEoUMQthqcQjUBhQB4cRUWBQBpOq9CR6VjSaagLBNcLGevBTjNV7FW2u6d8RDBJ8ffwE6U7ndf-QfphS9y59kyuy_G-Md_JBwlIPo5ShQv3qc7jXbWKlm91l14YHycLE_PhSE8vHRudv-H5DN4wJQvhgrbxDO2FicrtIiydNbiG_xfdIYXs_eeJytBJvXgC0K6cD0IU0iIJQfvT8FyIRtCdsejKyN9pEJRbH9Rti2bs1T8sdjEi9kmch1shYLLONVFicZLbJ4cSwZo20mE9oUyApM8gYLxJiu2yJOktW6WaiSUZbRFY1pzmgWRy1FWjcrbNdxHqfrhqQUO6F0NBapsYeFcm7AMk7zdJUttKhRu7GTMNbjC4ynhLHQWGwZlJb1cHChypXz7rsZr7weW9CXIg8UZpudNrXQ-1BcWQVPyjmUMHYW9U2M9dca-7aPLAaryzualD8OddSYjrBt8DZ_lidrfsfGE7YdMTrCtnMQ55L9FQAA__-J6hC2">