<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">