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

    <tr>
        <th>Summary</th>
        <td>
            [clang][LoongArch] Too many instructions are generated for const-string copy with -mstrict-align
        </td>
    </tr>

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

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

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

<pre>
    **Command line options:**

```bash
clang -target loongarch64 -O3 -S -o - align.c -mstrict-align
```

**Minimal reproduction:**

```c
#include <stdio.h>

extern void outs(char *str);

void test(void)
{
        char msgbuf[64];
 sprintf(msgbuf, "preemption imbalance ");
 outs(msgbuf);
}
```

**LoongArch machine code:**

```asm
        .text
        .file   "align.c"
        .globl  test # -- Begin function test
        .p2align        5
        .type   test,@function
test: # @test
# %bb.0:                                # %entry
        addi.d  $sp, $sp, -80
        st.d    $ra, $sp, 72 # 8-byte Folded Spill
        pcalau12i       $a0, %pc_hi20(.L.str)
        addi.d  $a0, $a0, %pc_lo12(.L.str)
        ld.b    $a1, $a0, 21
        ld.bu   $a2, $a0, 20
        slli.d  $a1, $a1, 8
        or      $a1, $a1, $a2
        st.h    $a1, $sp, 28
        ld.bu   $a1, $a0, 17
        ld.bu   $a2, $a0, 16
        ld.bu   $a3, $a0, 18
        ld.b    $a4, $a0, 19
        slli.d  $a1, $a1, 8
        or      $a1, $a1, $a2
        slli.d  $a2, $a3, 16
        slli.d  $a3, $a4, 24
        or      $a2, $a3, $a2
        or      $a1, $a2, $a1
        st.w    $a1, $sp, 24
        ld.bu   $a1, $a0, 9
        ld.bu   $a2, $a0, 8
        ld.bu   $a3, $a0, 10
        ld.bu   $a4, $a0, 11
        slli.d  $a1, $a1, 8
        or      $a1, $a1, $a2
        slli.d  $a2, $a3, 16
        slli.d  $a3, $a4, 24
        or      $a2, $a3, $a2
        or      $a1, $a2, $a1
        ld.bu   $a2, $a0, 13
        ld.bu   $a3, $a0, 12
        ld.bu   $a4, $a0, 14
        ld.bu   $a5, $a0, 15
        slli.d  $a2, $a2, 8
        or      $a2, $a2, $a3
        slli.d  $a3, $a4, 16
        slli.d  $a4, $a5, 24
        or      $a3, $a4, $a3
        or      $a2, $a3, $a2
        slli.d  $a2, $a2, 32
        or      $a1, $a2, $a1
        st.d    $a1, $sp, 16
        ld.bu   $a1, $a0, 1
        ld.bu   $a2, $a0, 0
        ld.bu   $a3, $a0, 2
        ld.bu   $a4, $a0, 3
        slli.d  $a1, $a1, 8
        or      $a1, $a1, $a2
        slli.d  $a2, $a3, 16
        slli.d  $a3, $a4, 24
        or      $a2, $a3, $a2
        or      $a1, $a2, $a1
        ld.bu   $a2, $a0, 5
        ld.bu   $a3, $a0, 4
        ld.bu   $a4, $a0, 6
        ld.bu   $a0, $a0, 7
        slli.d  $a2, $a2, 8
        or      $a2, $a2, $a3
        slli.d  $a3, $a4, 16
        slli.d  $a0, $a0, 24
        or      $a0, $a0, $a3
        or      $a0, $a0, $a2
        slli.d  $a0, $a0, 32
        or      $a0, $a0, $a1
        st.d    $a0, $sp, 8
        addi.d  $a0, $sp, 8
        bl      %plt(outs)
        ld.d    $ra, $sp, 72 # 8-byte Folded Reload
        addi.d  $sp, $sp, 80
        ret
.Lfunc_end0:
        .size   test, .Lfunc_end0-test
 # -- End function
        .type   .L.str,@object # @.str
        .section        .rodata.str1.1,"aMS",@progbits,1
.L.str:
        .asciz  "preemption imbalance "
        .size   .L.str, 22

        .ident  "clang version 20.0.0git (https://github.com/llvm/llvm-project 84ad292f343e0b0b821fc18447a20c59530f9ec7)"
        .section        ".note.GNU-stack","",@progbits
        .addrsig
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWM1u2zgXfRp6Q0igriRLWniRn-bbtN8A05l1QZGUxBlaFEg6bfr0A-rPkqKk7mKAARoEjkOee3nuuaR9KGqtrFshTii9RwCNkI0wCACljwd6cY02p2HsUGr-ckJwh-DuQZ_PtOVYyVZg3TmpW4viu2ESkUdEptcjGX5LapthiCna1jhw1NTCYaV1W1PDmmOCg99iHHzGgcYBpkrWbchwcLbOSOaCfmCTdLVSv_Yn2cozVdiIzmh-YZ7Z-8TYFB7LlqkLFxjFD9ZxqcMGxR-WMeKbE6bFz1pyrC_OIshZQw1GcGedQVCg-H6J74FOWIcg9-89YpjOZlzRZzjburxUKL0_Jih9nNNg2xnZugpBPiLgASOAzghx7lXH8lxSRVsm_PiSwsRwClyQyx5_qONH35Y7wxp8pqzxXWaai_eVpPY8VxU68c1d_6ukEogUCGDsqyc7z9ZKlwqRwkuFEcQ4CPC9qGWLq0vbt3BQcQ7oYNwNRbpY8aUTYxIEDyghU_AA6cfjuz4_SsgioR-AtCxD4ud_8DOiRevMy7w25VyGvC8wsd3QpPFNkM_qFtZNIENXoAz6vHlQvjiBn7TiguPPnVRqju0YVfQSgRwSUDIkSDv2pZFAEOThx3DchXu0poBVpNIR7EYqHpZjXLSKg2iFuYwgWIMWJSt1pTCn6t_kM0ibXcCQeCFes4EN4kG-S2nNO8pu4B0dd0HxGpTvqZSsMcW_IcAy00w83hBfoWbmPT1IXi-4zrNe8DUruNJbtOXrfluSG9pS3NCV_fZumkJ2QZuuRL9MV97Z4_EtcsItcu43OF2D0h8oBW9oDq-qi29R8y3NZ-rpW5qv86wXvKkx79QX__yh2m7O4VC98Qm1-ay7YRvsn5f1LrhlE7zRlF_qSKU3aLl_VtZa7vd2_b2d_TeO05rUnt5bu7F7nF6D3tgFa-DecXqdavc4kdVxyt-3SltQb1K9c1Le0Q_-evUN9hPu7nehNOW3OMiFgTRi9KzhR29uv4iWe8969cBWfl94YLyABVfDO1nsDy3Ha4-8sNGTJ_RGWpd_CeYm59yPX1cUY3wRGs2po346Cv1J8m7_0-f-WuKzdEbXpfSaPURTFX2uZQHUMvl9uCm8ecnZVjtTxdfJCSK5aN2Qb7h3PgtjfUogIQlJLX1ZeeNcN9xfnxA81dI1lzJk-ozgSann6U_QGd0LkSeUQwFVnMSClKTMIapYlCdJRoGwtEhjUhWCZX53rPjOWiGAsNVOhP_7_5-BdZT9PcrkX7d6XcXh3FhZb65dB36KeREX9CBOUQaQkCI9wqE5MZJVSX4kVQmkqvI043meRVFSHdOCxCw6yBMQSEgWRyQjRwJhzvMyIcc4ZiIiQClKiDhTqUJffqhNfZDWXsQpIhEU6UHRUig7Pjjo5R2fG5hTr1d5qS1KiJLW2WsKJ53qnzYMEekjSu_n6yZKH_EfWuMzbV-wbK0zwx3eYmoErkUrDHWC40obzHRrXWCdkW2Nme5e8Ffpms0Tg8PFqNPP9RfBU1-mRfA0Vvp8gn8CAAD__wOSTwQ">