| Issue |
114381
|
| Summary |
clang optimizer problem
|
| Labels |
clang
|
| Assignees |
|
| Reporter |
joevt
|
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=""
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs