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

    <tr>
        <th>Summary</th>
        <td>
            Missed Optimization: bswap in big endian
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:optimizations,
            missed-optimization
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          hstk30-hw
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/f4x9aoax6

```
typedef unsigned int UINT32;
typedef signed short INT16;
typedef unsigned short UINT16;
typedef unsigned char UINT8;
typedef unsigned long int UINT64;

typedef struct {
    UINT16 coma;
    UINT16 comb;
} Stru;
extern Stru *g_Ptr;

UINT32 CheckFrmAndSlot(int *a)
{
    UINT16 coma = g_Ptr->coma;
    if (coma == 100) {
        return 0;
    }
 return ((UINT32)coma << 16) | g_Ptr->comb;
}
```

Current llvm output : 

```
CheckFrmAndSlot:
        adrp    x8, :got:g_Ptr
        ldr x8, [x8, :got_lo12:g_Ptr]
        ldr     x8, [x8]
        ldrh    w9, [x8]
        cmp     w9, #100
        b.ne    .LBB0_2
        mov     w0, wzr
        ret
.LBB0_2:
        ldrh    w8, [x8, #2]
        orr     w0, w8, w9, lsl #16
        ret
```

expected like gcc, it equals `((UINT32)coma << 16) | g_Ptr->comb == (*(UINT32*)g_Ptr)` in bswap pass

```
CheckFrmAndSlot:
        adrp    x1, g_Ptr
        mov     w0, 0
        ldr     x1, [x1, #:lo12:g_Ptr]
        ldrh    w2, [x1]
 cmp     w2, 100
        beq     .L1
        ldr     w0, [x1]
.L1:
 ret
```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVVGPmzgQ_jXDi5XIHgcCDzyQ5CJVuuud1PZ5ZcAJvgVMbbOb7q8_GUhC2G2la4TkhPm-mW9mPoKwVp1bKVMIdxAeAtG7Spu0su6Z01X1GuS6_JFWznUWeAZ4BDyedZnr2q21OQMe3wCPp80lEVpcIqCZvyI6XTRzPzpZyhPp26FQSVTryLdPn79yBL6bAaawrbRx5NPnryx6jN8SjIhvv4IUlTADIv4JoNbt-aYk2oyouRhn-sIR2Pr7hJCpHCl0I0bw4818yrA9kC_O9OMveXHStMMNApidn_5x5lZpHAHZV7J4Ppoma8svtXaAsVcFmAnAZMj4gQIC_ECGdCvgfzxqUicCGF9RHsgoBUxmvfiPka43LaF3ImwP_tsUAIwB42lPmEz59sD3hEVjuv2DhPsEFgYAmu17Y2TrSF2_NET3rusdAZ6R925ZjoNnM82iNJ0_LzHg3ic4D4hxrndYXZorJNzNsU-1ZngjhIcFZ5Z64C0BlT9fk58AimbQdgUg92O_h_N1K_25_nO3o084izT6ZSRST3x9M49bAppdOQ_DuAladIocH4VpY-b5B9Qosrb1IDR6V3GxP3npZOH8Y6OeJTkXhWcrR-T3XtSWeNz_tsvVnQMzm5EzwGTcECYQUaJakttX0ZFOWPu7jmFe8dIoj5OnH9mBXYfLpuECz37ponEneKeNgJs7hsjCGvI7Ga3BPpAwipvl8rCxyfe7CsqUlwlPRCBTtt2wmFOKNKhSFsYFj0q6wZLJbcGjMC-LPIkZ5wUNkzxQKVIMKWecsg1Fuj4xlpxEEm_zU8wj3MKGykaoeu0fYv_XHyhre5kyzmjIg1rksrbDWwTRQ4BnunOqUW_CKd1aQN86IDbKWlmu5kEfCw-BST1xlfdnCxtaK-vsvZpTrpbpXwOZ_D0n82wyiHeKOhPZlkq0QW_q5XtLuarP14VuAI-DxvFYdUb_KwsHeBx6soDHqa2XFP8LAAD__whZ81k">