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

    <tr>
        <th>Summary</th>
        <td>
            side effect with option "-mattr=+unaligned-scalar-mem"
        </td>
    </tr>

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

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

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

<pre>
    For such ll code:
```
$ cat x.ll
; ModuleID = 'x.c'
source_filename = "x.c"
target datalayout = "e-m:e-p:32:32-i64:64-n32-S128"
target triple = "riscv32-unknown-unknown-elf"

; Function Attrs: argmemonly mustprogress nofree norecurse nosync nounwind willreturn
define dso_local void @foo_set(ptr nocapture noundef %a, i32 noundef %v) local_unnamed_addr #0 {
entry:
  %bf.load = load i96, ptr %a, align 1
  %0 = and i32 %v, 65535
  %bf.value = zext i32 %0 to i96
  %bf.shl = shl nuw nsw i96 %bf.value, 24
  %bf.clear = and i96 %bf.load, -1099494850561
  %bf.set = or i96 %bf.clear, %bf.shl
  store i96 %bf.set, ptr %a, align 1
  ret void
}

attributes #0 = { argmemonly mustprogress nofree norecurse nosync nounwind willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true"
"stack-protector-buffer-size"="8" "target-features"="+a,+c,+m,+relax,-save-restore" }

!llvm.module.flags = !{!0, !1, !2}
!llvm.ident = !{!3}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 1, !"target-abi", !"ilp32"}
!2 = !{i32 1, !"SmallDataLimit", i32 8}
!3 = !{!"clang version 15.0.0 (git@172.30.80.200:/opt/repos/fortirisc_llvm.git c2bb2e5973acd24c45c1823e95e8e33003c59484)"}
```
When compile it with "-mattr=+unaligned-scalar-mem":
`$ ./bin/llc x.ll -O2 -mattr=+unaligned-scalar-mem`
We would get such asm code:
```
$ cat x.s
    .text
    .attribute  4, 16
    .attribute  5, "rv32i2p0"
    .file   "x.c"
    .globl  foo_set                         # -- Begin function foo_set
    .p2align    1
    .type   foo_set,@function
foo_set:                                # @foo_set
# %bb.0:                                # %entry
    lw  a2, 4(a0)
    lw  a3, 0(a0)
    slli    a4, a1, 16
    srli    a6, a4, 24
    slli    a1, a1, 24
    lui a5, 4080
    and a5, a5, a3
    andi    a4, a2, -256
    or  a1, a1, a5
    or  a4, a4, a6
    sh  a3, 0(a0)
    srli    a2, a2, 16
    sh  a2, 6(a0)
    sh  a4, 4(a0)
    srli    a1, a1, 16
    sh  a1, 2(a0)
    ret
.Lfunc_end0:
    .size   foo_set, .Lfunc_end0-foo_set
                                        # -- End function
    .ident  "clang version 15.0.0 (git@172.30.80.200:/opt/repos/fortirisc_llvm.git c2bb2e5973acd24c45c1823e95e8e33003c59484)"
    .section    ".note.GNU-stack","",@progbits

```
But if compile it **without** "-mattr=+unaligned-scalar-mem", the generated asm code is much shorter:

```
$ ./bin/llc x.ll -O2
[bpang@server220-256gb-3-4ghz-40 ~/lwork/llvm_fort/build]
$ cat x.s
    .text
    .attribute  4, 16
    .attribute  5, "rv32i2p0"
    .file   "x.c"
    .globl  foo_set                         # -- Begin function foo_set
    .p2align    1
    .type   foo_set,@function
foo_set:                                # @foo_set
# %bb.0:                                # %entry
    srli    a2, a1, 8
    sb  a1, 3(a0)
    sb  a2, 4(a0)
    ret
.Lfunc_end0:
    .size   foo_set, .Lfunc_end0-foo_set
                                        # -- End function
    .ident  "clang version 15.0.0 (git@172.30.80.200:/opt/repos/fortirisc_llvm.git c2bb2e5973acd24c45c1823e95e8e33003c59484)"
    .section    ".note.GNU-stack","",@progbits


```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztV0mPozgU_jXJxQIZAwk55FDpdI1G6lmk1qiPkTEmeNoYZJukqn_9PJslkKrqqcNo1IeOqjDw9sXfM3lTPO8fG41MxyokJWJNwVfxwwofV_hhtcHDX_9IEsSoRU-hlMOb-IB-a4pO8l-PaBXDP9k-hQyuPd00nWb8VArJFa35wEI8C-lZLNVnblFBLZX0uensyMSDGhzhQQvXmPhLIDYJ3GySQMHD54hk92qsFq2c7Ghh2AU4O_VVNVc1rVyWk-AtkMdOMSsahR6s1QbsINBZ87pR8hnVnbGtbs6aG4NUU2rOYdGcddq4O_OsGCydugpVoKuQUnPbadWrL3gpFEeFaU6yYVSiSyMKtEpw2TQnw-2KZK3VIM9oC1LcawIhCCKlK_IBiZjM311WZIe8plOnXGaLEy0KDaQYo9X20FvlyurnqZjICeZlKBta-AT5G7HbOP3O-miLSnFWKJpJYc9PITDnR2__A9qkaZwudV-o7Prsf-NPduTGyDbe0ILXVNJzulV1V6TM1THNNTkrJFmKMcmpvvkzCbhoHH8Q4d0u2SVZitNNdGeS990F_X4T9Aqd5OTWKGQsFHjG6Qv13VxBzX1ph6baHuc9RqGtRN5ZboY6uSbdHv6LLnPNXmrog6BthLJcu_aOj3BVjYI0ujKQWqhA8jOVwYUzCC24isJWEyce2FQTWE3bVqhzUNMZg9WuIuO2IcRYyr4G4K7t1eVdWXIdGPGNTzLZoLTfnkHJqWtvM9FX5ODyCAvrl7pfNJf0CW4DQy88AAlXCq9rmdMViaS81GHtQSgsJT2bYfdHbh-QCPeljaJhJTcNg6woYKMsheKXZvCMw_X1qA-curKK6tMY97Bbk7md6G3hITM0F4Nw_1rIFkCPLLwlb2v5XFMpj4Chn0Qt7MyNbK4gXkYJbExSdUYXro0DvigNcQiBkuwMShIcbUkY4zDDIcHYAQl5bFrQ_qh520ARH8tGW-FQ9uQzCVKIkTwnPN1tY8oKkrAkZVFGYr5LecbjGOOYpbA7E0CwRXjLUfOl4gpmUd3C5ECg9Sps5frIdaTVvncOnfK7jxeBASCkOoBd5BtrNr1gYoXgZy4UXKVkfnah4A-C_lXT5ApH16aTBXLzxY9Jaup3zkkzAgNCoQVEnD1OaICgVaBY0eZ1YtoXmWgYZIK0eNqBntFNVoTuZ6onnWWTS4SGCYPe-gEUoSBAB34WCpXjCBzn0k1dS3qsg180j-q5dQ5Mc-yDG2qDlp5tJMUPb_owc2U2E4dcxh598xC_VwNJ-8E3OSmvCFG_IyDTGcWu9ZbE2BHxS6KRUriV-hLR6L5QRg90P0R7rtvAmslHN_k5XXYCUV_hBGf49t6Ntv79cI0XtLlPPq6ApDOvYLwtLNL0jpbcvKXzaKrvpWIMldzMRvfC_u3mFeFqtPpKBSbN0RtJrkYaeSmsx0YJP7m2O3FV4NmRBzrU4fKiQ9GMNXjR6O_5DXvmI1Rp2eveYD9P0I-ArrMs8H5je-9JqGBoh7_8_lfgh3g_L_yV9FvYHUJyYc1iCC5R7gBHdVHOQXpFIIYHB9VwjO8f3ovZUBVbcYBYxTW1vJgwFgkDpyIAXVNBNuBgM2HuW8j7Ot4P9PSQt1ATiNBwDYWBY4_bO-c8iIPkXH0LEnd-_uiEr43-6pVc6pOrhFPbCVms0uPN2E-Y_3Fg_g6hPGJkM3I-wkj8Cgbl3xkRPzHm_8OY5a5eF_u42MU7urbCSr43EDfi8JnBhiMhBOMsvg9l1p2W-8ra1vSZgD-It-ryEEBs2OrD4j5r_gYr8CiM6dwXyyN8TkZ4Xe0Ji7YsSXKWsXyT7qK42G5LTPOsSHc4K6O1pDmXZg9g4z6nOHzWOhUu7vS4FnuCAXU20Q4nEUmysMDbKIuyhEasYJuIQWZ4TYUMfUEafV7rvXcp784GiFIYa25EaowLlXtzoJ92AL96f6CNqaj6E5pj7c3vvfv_AM9k3L0">