<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/114381>114381</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang optimizer problem
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
joevt
</td>
</tr>
</table>
<pre>
Problem with clang versions up to 19.1
```C++
#include <iostream>
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
uint32_t mem_start[] = { 0x80008000, 0xFFFF8000 };
uint32_t ext_mem_start[] = { 0x01010000, 0xFFFF0202 };
uint32_t mem_end[] = { 0xFF7FFF7F, 0xFFFFFF7F };
uint32_t ext_mem_end[] = { 0x01010000, 0xFFFF0202 };
uint8_t mem_bank_en = 0x3F;
bool add_ram_region(uint32_t start_addr, uint32_t size) {
printf("add_ram_region start:%08x size:%08x\n", start_addr, size);
return true;
}
void setup_ram() {
uint32_t bank_start[8];
uint32_t bank_end[8];
int bank_order[8];
int bank_count = 0;
int region_count = 0;
// get non-empty banks
for (int bank = 0; bank < 8; bank++) {
if (mem_bank_en & (1 << bank)) {
int b = bank >= 4;
bank_start[bank_count] = (((ext_mem_start[b] >> bank * 8) & 3) << 28) |
(((mem_start[b] >> bank * 8) & 0xFF) << 20);
bank_end[bank_count] = (((ext_mem_end[b] >> bank * 8) & 3) << 28) |
(((mem_end[b] >> bank * 8) & 0xFF) << 20) | 0xFFFFFUL;
bank_order[bank_count] = bank_count;
//printf("b:%d start:%X end:%X\n", b, bank_start[bank_count], bank_start[bank_count]);
bank_count++;
}
}
// sort banks by start address
for (int i = 0; i < bank_count; i++) {
for (int j = i + 1; j < bank_count; j++) {
if (bank_start[bank_order[j]] < bank_start[bank_order[i]]) {
int temp = bank_order[i];
bank_order[i] = bank_order[j];
bank_order[j] = temp;
}
}
}
// squash adjacent banks into memory regions
for (int i = 0; i < bank_count; i++) {
if (region_count > 0 && bank_start[bank_order[i]] == bank_end[bank_order[region_count - 1]] + 1)
bank_end[bank_order[region_count - 1]] = bank_end[bank_order[i]];
else {
bank_order[region_count] = bank_order[i];
region_count++;
}
}
// allocate memory regions
for (int i = 0; i < region_count; i++) {
uint32_t region_size = bank_end[bank_order[i]] - bank_start[bank_order[i]] + 1;
if (!add_ram_region(bank_start[bank_order[i]], region_size)) {
printf("nope");
}
}
}
int main() {
setup_ram();
}
```
<img width="1669" alt="Compiler Explorer" src="https://github.com/user-attachments/assets/893dfa3f-b1cb-4155-ac5d-e9b0d30cf2f6">
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0V0-TqjgQ_zTxknIqJKJ44DCjctrDXrZqb1YgUeNCwiZhnvM-_VYIIP90fFX7ptSB0P3rP7_uJqHGiLPkPAbhBwj3C1rZi9LxVfFPu0gV-4r_1CrNeQF_CHuBWU7lGX5ybYSSBlYltAoG27cAoD1A783vGvnPDuAP9_GrmAiZ5RXjEJCdUMZqTgtADn1V-1Vyxk-wkrVbDAppYSWkJfhoAfl4IJVdqK7FomdS5qK0RwvWPTn_2xqBBS-OxlJtfUYgIHsINh8Q3SKEkPsCvIPoliRJ4u4g2Ow7rA6F3-zxMRIKUIAGSAgjPI_kULhkDYb_uyMlySZx3zuSu3vuUx_tl32KGpdSKv85ctm5g24kGaU0VSqHlLGjpsVR87NQEuCoc6dOzZEypp3J-7L4yQHeOq88jLNQaiHtCeAIYDxE9DCAvAMcoujm1ds7EO4kwNjhD601RjqHnQ3NbaUltLri90A2-35En0owaLitSudB7U7f0S6GOjkt9REI9wNDQzHPxkTIFX79XGnG9VOJTFXSehImAj5JsyJ3QYATgBN45hZKJZe8KO1XDW3uMielIcBRa7TDau92MGrvmq4fc1i7dHIg_foBeO2WAgfhUDzAdla7i7q23hg-uOvVIPD2b0DDPVVdLzr-3GfcrKmXOAByaKzgd-i5xmtI6gvvbVsBu6lxn9jGwuvorvX6BtC4TAfB-eJ5IbRG8LcE9gr2XFgOvh1af_3xOMi2A6Zh9lY6bV_M_YGR-nnA-qPib-i89pe9KZHWPw_L5runT5jyQr4zxkLdlIGjedNrTuPeXXVPwvTLR-Jmq-ZmvknFvUMFbBuryxUUT5q0h3KtUQQE-AMGTu86g3Wdw_KdPk1WS-bVJaymcS6lrZTwUiNoaaHlRXkvgYH4HAWTWhKDEho49ZL-tdV3jsyqzJA6WJ4y_G9FzQVSdqUZly3ZQlrlXrhKfzXDvOX7_yHb8zR6TRwgcl3rGvdbbpzpLpG9edSKDaCXMGi16orC28abX9V-YrCtmTEpPDe8F_9DM7OV8bCyBpqj9n6ReJrnKqOWz9P8TVsP7H_DdbfxaJTcLuiVVMLlK2XQjIi58gI4mOwDX2j6Xd_RyaagP-KlKnk9wqcT-AEJQzZcagsq5GRLN9rszWwM28NOc0t2ojjDH4LZi2sMjIP1egswhjS3fmGnilLkXMPDrcyV5to9NTrzTy_WlqZ-MbnaOAt7qdK3TBUAJ5Xhekmtpdml4NIagBNqDK8voi1hJ0pOyzTI0uUqCMMlzUK25NsUMYKyEz6tXYKGx60Fiwnbki1d8DjYEETWG0w2i0uMo82GBehEEF2vVigIt3gdRhRnq5CEmKOFiDHCqwCRAG0JCTdvhKWUZQTx8LReBRsKVogXVORvef5ZvCl9XghjKh4HwYpEwSKnKc9NferEuD5VOu_C_ULHTmGZVmcDVigXxpo7hBU257E_hKrSikL85BqW_oS6qHQeP0mfQ2n-LUutrjyzACe1Vy6DjWOfMf4vAAD__-5QKzs">