<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/131403>131403</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] Incorrect optimization with unreachable in bitshift of vectors
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
BreadTom
</td>
</tr>
</table>
<pre>
Clang x86 20.1.2 incorrectly assumes that (ret_vector0[n] > 1) on line 59 might be true, thus clearing the whole function while GCC 14.2 generates same code without unreachable().
https://godbolt.org/z/sK4GWYbGW
```
#include <stdbool.h>
#include <stddef.h>
#include <inttypes.h>
#include <string.h>
typedef uint8_t expozig_vector_u8_64 __attribute__ ((vector_size (64)));
uint64_t expozig_tokenizer_v2_ret_bitstring(unsigned char * restrict ptr, const uint8_t is_what){
uint64_t ret_val = 0;
expozig_vector_u8_64 input_vector0 = {};
expozig_vector_u8_64 ret_vector0 = {};
memcpy(&input_vector0, ptr, 64);
switch(is_what){
case 0:
ret_vector0 = ((input_vector0 == '_') | ((input_vector0 >= 'a') & (input_vector0 <= 'z')) | ((input_vector0 >= 'A') & (input_vector0 <= 'Z')) | ((input_vector0 >= '0') & (input_vector0 <= '9'))) >> 7;
break;
case 1:
ret_vector0 = ((input_vector0 == 33) | (input_vector0 == 34) | ((input_vector0 >= 37) & (input_vector0 <= 47)) | ((input_vector0 >= 58) & (input_vector0 <= 64)) | ((input_vector0 >= 91) & (input_vector0 <= 94)) | ((input_vector0 >= 123) & (input_vector0 <= 126))) >> 7;
break;
case 2:
ret_vector0 = (input_vector0 == '\n') >> 7;
break;
default:
__builtin_unreachable();
break;
}
/*
case 1:
case '"':
case '\'':
case '@':
case '=':
case '!':
case '|':
case '(':
case ')':
case '[':
case ']':
case ';':
case ',':
case '?':
case ':':
case '%':
case '*':
case '+':
case '<':
case '>':
case '^':
case '\\':
case '{':
case '}':
case '~':
case '.':
case '-':
case '/':
case '&':
*/
for(size_t n = 0; n < 64; ++n){
// Clang "error"
if(ret_vector0[n] > 1)
__builtin_unreachable();
ret_val |= (uint64_t)((uint64_t)ret_vector0[n] << n);
}
return ret_val;
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycV02P4jgT_jXmUhqUlPN54ADpZvTqva402r1ETlIQ7wQH2U73NIf97SsngWW2wTCLUH_kqXqqnip_VIQxcq-IVizesPhlIQbb9nq10SSa3_rDouqbj1XRCbWHH1kCGCzDJYJUda811bb7AGHMcCADthUWGGaabPlGte11wOKNYvELMP4KIcMcegWdVARxDge5by1UBFYPxLAA2w4G6o6ElmoPtiV4b_uOYDeo2spewXsrO4KvRQFhtETYkyItLBkw4kBQ9w3Bu7RtP1gYlCZRt6LqiGHGMF-yYN1aezSMrxluGW73fVP1nV32es9we2K4Nf-Pvn77vfr6jQVrlgTzN1gz5FLV3dAQMF4Y21R93y1bxl9vgQ3tbmNSWftxJHPP08m-YMHa2Ta0g0Eqm5UW6MexP8n9XNpyyMokgrIU1mpZDZbKEkap2Wxg5InckyRimM9fvpm4HWcSXZHa_jspeSJdvmHpGlhJO2XEMBvUuEQaqFuhgeEaNDmwtnC02rWu7pWxl0ylKd9bYV3AdAqYXwKOi0N0wPgLBOd88pvapDoOl5U0Oji69MXvdbX6bvkc6FAfP8ZCJT8FcDJmNVPFzh7mXdq6ZZjdkFULQ07GevqXBfmn8GNLPkmZoLRkmLptwdLijuXrbCnOlpjADbNiNjtNZs9xrp_j_ONXOIPnOPML52js3F8hvdScBXmlSXy_PBgLHf7HQnN-lftti-gJdfyhsOjJOsXZI6bzpn3ElIePmPInmULkj6hCTH65Z_igZ_d2BosLdV5KDyM1tBNDZ69DlWU1yM5KVX66Cu7zuIMimK6H9b11d344Jofu5x0wLkaTu3gUeED-4gEx9IBp4fPMfGDuU7Pxgb5suc8TfdnyrQ9c-2hjH-j19GXLvdm--irkBYt5sdxrqS-n1FP7v-5Dy_vQF195fC1xx8MZxHEbjVa7XjPM3DhSWlCXm3_8c7xs-QbGum_U5W6F-TONajDNnwyRtHZs6Ezkzj9sXtG4z5MnwmVASee7KjvPLuMGyX5-cDN84XSpn3jHg0WTHbQ6j0AzOB0552lz0ax4k_NcLGgVplGY52EaBot2VSeEWZwnFYkQMQqjKs2THaedSKMwCcOFXGGAccDDCJHHYbCMkhoxoqThTdLETcaigA5Cdsuuezu4qXchjRloFfIwCviiExV1ZnwLQKxdvV2Z45eFXjmHL9WwNywKOmms-YfCStuNrw5jh5z8_53fDKA_WnmQJzHN7tK211M5SAVuxmzlzkK_g6mIZjHobvWvOV3adqiWdX9guHWB519fjrr_k2rLcDsKMQy3s5a3Ff4dAAD__4y_fho">