<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/146652>146652</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang][TBAA] Clang's TBAA is too conservative than GCC when long type cast?
</td>
</tr>
<tr>
<th>Labels</th>
<td>
llvm:optimizations,
missed-optimization,
TBAA
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hstk30-hw
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/cnjvbzj9a
```typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef signed short int16_t;
typedef unsigned int uint32_t;
typedef unsigned long int uint64_t;
typedef long int intptr_t;
typedef struct MBuf {
void *buf_addr;
union {
void *userdata;
uint64_t udata64;
};
} __attribute__((__aligned__(64))) MBuf_t;
typedef struct MBuf MBuf;
typedef union {
struct {
uint32_t srcIp;
uint32_t dstIp;
uint16_t srcPort;
uint16_t dstPort;
uint16_t vrfIndex;
uint8_t protocol;
} detail;
} FlowKey;
typedef struct {
union {
uint8_t u6_ucaddr[16];
uint16_t u6_usaddr[8];
uint32_t u6_uladdr[4];
uint64_t u6_ulladdr[2];
} u6_addr;
} In6Addr;
typedef struct {
uint16_t vsys_index;
FlowKey packet_key;
uint16_t dst_nat_port;
uint32_t dst_nat_ip;
struct {
In6Addr src_ip;
In6Addr dst_ip;
} ipv6_pkt_info;
} __attribute__((__aligned__(64))) MbufContext;
typedef struct {
_Bool is_ipv6;
union {
uint32_t v4;
In6Addr v6;
} addr;
} ip_addr_t;
typedef struct fc_fwd_flow_info_s {
ip_addr_t src_ip;
ip_addr_t src_natip;
ip_addr_t dst_ip;
ip_addr_t dst_natip;
uint16_t vsys_id;
uint16_t vrf_index;
uint16_t src_port;
uint16_t dst_port;
uint16_t dst_natport;
uint8_t proto;
uint8_t nat_type;
} flow_info_t;
enum PORT_TYPE {
TYPE_ONE,
TYPE_TWO,
TYPE_THREE,
TYPE_FOUR,
TYPE_FIVE,
TYPE_MAX
};
void foo(MBuf *mbuf, flow_info_t *info)
{
info->vsys_id = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->vsys_index);
info->vrf_index = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->packet_key.detail.vrfIndex);
info->proto = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->packet_key.detail.protocol);
info->src_port = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->packet_key.detail.srcPort);
info->dst_port = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->packet_key.detail.dstPort);
info->dst_natport = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->dst_nat_port);
info->dst_natip.addr.v4 = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->dst_nat_ip);
switch (info->nat_type) {
case TYPE_ONE: {
info->src_ip.addr.v6 = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->ipv6_pkt_info.src_ip);
info->dst_ip.addr.v6 = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->ipv6_pkt_info.dst_ip);
break;
}
case TYPE_TWO:
info->src_ip.addr.v4 = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->packet_key.detail.srcIp);
info->dst_ip.addr.v4 = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->packet_key.detail.dstIp);
break;
case TYPE_THREE:
case TYPE_FOUR:
default: {
info->src_ip.addr.v4 = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->packet_key.detail.srcIp);
info->dst_ip.addr.v4 = (((MbufContext *)((uint8_t *)((MBuf*)(intptr_t)(mbuf))->userdata))->packet_key.detail.dstIp);
break;
}
}
}
```
the TBAA matedata is `omnipotent char` cause the cast path have `uint8_t *`,
I'm not familiar with GCC's TBAA, but I think there are potential for performance improvement.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWEtzozgQ_jXyRRUXFg-Hgw84jnddW7OZmsq-TpQAYTQBiZIEnsyv35JAPBw8c9hDctgqV2K6v5a-fqhbBktJz4yQHfD3wD-scKMKLnaFVC-uc1dcVgnPXneFUrUEbgTQEaDjmWcJL9WaizNAx-8AHVP2tU2-fw0xcCL9CZzuo15rkpEcNszsksG0wAI2lKn7WAF3D5zoDUQWXCiD2QTXoBlkETEsQ1m3iItuQkrOzgMu8K5xg5oyVSth1VM6SjSpgp_2TQ7BVishhLDlNIMARUmTxzjLxGCmlQ2jnE3AU4NGEpFhhTsDq7XkYKN1gTdqwfYwrA22BxjHWClBk0aROAboHqD7OMalcdYIAg-gsPsY0j9xSf95A7h2oDeYe2QDD6VIT3XPeBBmUg3CiYFOpjb4zIW6oc2k-oG2FfmJZeTbW_V9rGAtuOIpL2fxgxlRmPYy_Xws-eU38norLqObS4m0WzVB3KQm9f5-EwD_cIOwxsked78IM_HSsLKHeYuwrj40zOLQDKc9a4JpNW4P8MSCaFqet10dAixfZUznIe4DBmucvhAVv9jYXectZljF9Sx504IwalqPZ2WxrnrKukoG8LVOLzbVaVdp3QZx_aJiynL-H85M0uQPnCny7ebBGfnGe85LSGWsN584faNuTCBae7qtM1NLTXeeQVqblN4-xnka55cszkt-Ma7HcrLzYP0mnHMNw2pZOYv0XDyxWS6ibKFKWpFPq8v2DNsXFqpnKK4fqBhWo9auOTSEuZEW60LUYRzDPIZvXIWwpoKfn748x8__fH60UdXf46ffHwF66Fc1kue_nq4lv355vEYdn_74ci06_WlR5vlT9HfHaeBhZkfOOUD33RhCUZU0OUAPU9pabEofhca-yxjL-R1wH_uEQOAeYHcC9GJjqWtjcwC03EZpKjNzwj4Pw9I8dVz04dE7DQNukEw6CgonNWap2Yp4F3JjS1t3Y2I9TJiBrGVqiumDsBwm3RuW9hR9EKJ22L_haY_0B-Fprx2LPPv-8i5UZ3P1Fjtar3VnXrfeu3Kk9cDQXh0vVKUFNCt2jIfei8KrEZliScb26kbwqol1I6x3NHgXR2eXjHU_UxeT8qGI9lN8IJoIgl_mVys9cJZSoeeaG01U0949y8j7lN5ixzn9LCkfhWv3M-lHeZlkwtwnZrkYleZiMdNlJMdNqSbn6P8EvkcCx4PVfev_2tcn_Z2-IPB5H0WwworoPSGVEAQOrxituSJMmdcqIHBgihtJoDZIsVSwxqqABW6Jhk_dDRx9QQROdAJoW0HGFcxxRUuKBbxQVcBfHh4A2kqzr4YmjYInqArKXvTygkAsCOx2p7iEORewJiLnosIsJZBWteAtqQhTa-BEq2znZqEb4hXZbbb-xvN8z3VWxW7jp0Ho-eF2k6RJsAmDkCRZ7mBv46Bw4_orukMO8p2tg5x7d-uE64A4JAyRh7w0RSggwHNIpaNdlm215uK8olI2ZLfxgsBHqxInpJTm7RZCGgLciNeKVvQ7VpQzCRDSN2yEKiolye6mykHXhUH_pl6JnV7lLmnOEnhOSaWS49aKqtK8SnsoMTvrn-D-3tj6B9iJbFB1DhXnMOVMEtFiRVudOMx06OGlIKx7_6SnoUkmcI-rRpTXr-KoKppknfIKoKNxr_t3Vwv-laQKoKMJhwTo2Eek3aF_AwAA___DiNqW">