opt -passes=attributor-cgscc eliminates store instructions without updating debuginfo
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
When running `opt -passes="attributor-cgscc"`, the optimizer eliminates store instructions to an array variable, but it doesn't update debug information of this variable. Thus, debugger can't display the correct value of the variable as defined by the source code.
case.c
```C
void func() {
int a[9] = {0L,100,0L,100,0L,100,0L,100,0L};
}
int main() {
func();
return 0;
}
```
Compile and opotimize the program with the following commands:
```
clang -g -O1 -Xclang -disable-llvm-passes case.c -emit-llvm -S -o case.ll
opt -passes="attributor-cgscc" case.ll -S -o case_opt.ll
```
The unoptimized func:
```
define dso_local void @func() #0 !dbg !13 {
%1 = alloca [9 x i32], align 16
call void @llvm.lifetime.start.p0(ptr %1) #3, !dbg !22
#dbg_declare(ptr %1, !17, !DIExpression(), !23)
call void @llvm.memset.p0.i64(ptr align 16 %1, i8 0, i64 36, i1 false), !dbg !24
%2 = getelementptr inbounds [9 x i32], ptr %1, i32 0, i32 1, !dbg !23
store i32 100, ptr %2, align 4, !dbg !24
%3 = getelementptr inbounds [9 x i32], ptr %1, i32 0, i32 3, !dbg !23
store i32 100, ptr %3, align 4, !dbg !24
%4 = getelementptr inbounds [9 x i32], ptr %1, i32 0, i32 5, !dbg !23
store i32 100, ptr %4, align 4, !dbg !24
%5 = getelementptr inbounds [9 x i32], ptr %1, i32 0, i32 7, !dbg !23
store i32 100, ptr %5, align 4, !dbg !24
call void @llvm.lifetime.end.p0(ptr %1) #3, !dbg !25
ret void, !dbg !26
}
```
The optimized func:
```
define dso_local void @func() #0 !dbg !13 {
%1 = alloca [9 x i32], align 16
call void @llvm.lifetime.start.p0(ptr noundef %1) #4, !dbg !22
#dbg_declare(ptr %1, !17, !DIExpression(), !23)
call void @llvm.memset.p0.i64(ptr noundef writeonly align 16 %1, i8 noundef 0, i64 noundef 36, i1 noundef false) #5, !dbg !24
%2 = getelementptr inbounds [9 x i32], ptr %1, i32 0, i32 1, !dbg !23
%3 = getelementptr inbounds [9 x i32], ptr %1, i32 0, i32 3, !dbg !23
%4 = getelementptr inbounds [9 x i32], ptr %1, i32 0, i32 5, !dbg !23
%5 = getelementptr inbounds [9 x i32], ptr %1, i32 0, i32 7, !dbg !23
call void @llvm.lifetime.end.p0(ptr noundef %1) #4, !dbg !25
ret void, !dbg !26
}
```
I put the full IR file on Compiler Explorer: [Full IR](https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1C1aANxakl9ZATwDKjdAGFUtAK4sGexwBk8DTAA5DwAjTGIQAA4AZlIAB1QFQjsGF3dPPQSk2wE/AOCWMIiYy0xrHIYhAiZiAjSPLy5S8pSqmoI8oNDwqNiFatr6jKb%2B9s6Cot6ASktUN2Jkdg4AUmiAIQBqAFkMN3oASQARDdXjsA5RJQA6ZHPljQBBBTmFzAB9GnpmNhPo4%2BWAEwAy6YG6AgH3B4DYCYAgbdBMaoGACeczhpxOQMwAFoWCAcXEAQB2DQgaIAskA7GEolcSmU6nEikANkkIFZ2LwrPZkk5XABkQkAuxVEipP5kWxDEFXGZ9I5Qgl4Mh0NhGwIxDwcXov3%2BQNUkWZbw5bgYAGsGKgAO4MbG0fxuVTY4AMNzKx6Q1abABippsKQ2UI1ChAG0tpqt/nQGzcVuqIXokKwNAC8Oeb1oqFEtA2plQeGjAAEqH6IFNMdENBswGB0CFgNWwFxoiciWtIRtMQBWLi6jZiTOiE5dtYATg2qg2eHJyy7h1I/ftLo2so7G2zObzBY2hZM5iu9qosLwbCuo1qVziGggcQ13a45cB0VijbrDZrQLXnafb7eWGQBjEJgN53oCPYLjWXBEhBYCHPs2CqHEQEKEkAhljBALRFMa4brm%2BZFnuLBXGwLBKAQl4aFcXKSCBxCLngy6yveC54JEGwaCxrIbNEzIsb2VBiEoMyvvWjYApIa5gQCfYwgQZSYGwgi3nR/ghHMDDoAow5jhOU4znOC7KcxenSRxJkrjBb5idEa79CQmDmVwGhmUZUkLmIDEMBs0gie%2BYDiZJAJdi2GKyfJikEEZqnqZp2njpO04QgZGyuUFTTmWZiXcZZokfjZjydnZQGOc5hmgUFL4ecuPk1lZH4SQV3aSDJsLhYwkV3tFpqxbOOkJfp84peV4EZSx5IbF2OV%2BZhtlEMVWVOS5w0%2BVVXk1bWuX%2BQ1DzfkFXYtXJ9ARVFDBqd1Wm9fFJmzoNqUjVlmXjdBvnWbN9klUtdFgZN9HVVNYnbZ2uFbgRZhEYex6no4FG0fej6YS%2BtWbUFa5AXCIP/R%2BzKekShyeh66wbL6DD%2BgIgYEMGoaWhuIRMMgZphqgVBAQ5loKMiJOMxGUYbJGJho/MXkkSQyIQDUwAkaGQFMOgVqanJ2GPP%2BgEOSDO6EQeeBHrYp7nuRV6w6It7zJgCgQJaARTPD0RcPjDxekTfoVOTlOMzTdMM5azOYKz6mRhpvN0LQAvEELCki2LxASwpoZy4QmCKw8ys1Kr%2BHq2DxEKWRFFUaysNx3JAi0Mi65MMbyHmwICcsZEnE%2BXgvYniw4vWxCHoEz6TsBkGxAhm7A60/TjPe777Oc%2BGDD%2B9GfPB7CgsbMLxCi%2BLksbNLsvywnSaYABKd4duu4ZxDOugtDBtGUbBAm2bFsJ9btvt/bhPE6TXk933E9TzGcZMAmmDbymBymlUAZizGIcyhZm7%2BDLBWKsSNppElbO2RqYFewYgHGAky7klxrTevNcan1jKrW8jhAc%2B8iwlhJuhF6NZKyozVA9TGYAbY4zxo/REGo8AhDcHJC6mEqwYmWG2Lmk8eaxnjDqcELB/B2kwMAMQ2JTA7zmtiSM6ACAIGVH8cEGhwSYgBJabEGoy5xH8MAXEiJNGfm0UCDUbh/5An0aMem1JiCoDkjYEg2JuFUCPMQbESQABeDiIQ2IFHo8EqoCDYmQHEN01i8b6kNNiVkETbHi1hCKTAiJr5aMSRCAEaxkAsFQKYUggIikGnKYUqgqgFBkAqSwFgqhqlrBQpgVp7SAStINESNJAIr4BBiXEvJ4IYQBE1MgCJuNIQcM1Nw3hFY0F/CQf3Ewg9PZMxZozMeyARFfxniHMOJSl6R2jniNe2SN7x0fDMx4cyuE8NNhWaSgjhHUwHh7Ye2zP480OXPUOC9w6nJXjHXmm9blsIeA8hZzynwhRWUIzYvyA5CKhZCGsGs3w3DcH2GsSKay6LuQ8TFGcSnoD2KCKgBhgAXRWfitsH4YKIzAOtH6NZeKNj6cS0l%2B4CztTxWAAlYBIhooxWADW4RQ6oCuAQWmTBBXCtHGKx%2BhK%2Bz4H6P4GwjY4IuBYKY%2BgcgGCEAgAYIwbgmAwlDIcAA6m8HwDxAgAHE3hOC4OlT47BGzpSQrsRYER9G7yMLmcIqEvJAiuJRDQwBCAbAgAgCmcQQwAHpk0xo0W4EINxUAsGTYRPNYNXGoG0Moq46b%2ByjkwMyKgo4NCGiJCELgyAiTIGQFwSIR5JDMkiECKQkR0CjlHFQZkUga2YGfNhIELEFAAHlbwnjwME9AoY7EdLXqaE%2BAA1UNKRQxmQUngFCKQADSUZQy%2BhMIcTA3DgALgUNqQgV6b37AYPaY1RhQwCVoEoBc3xMAABVf70FPRpUMgQq6J0goKuC3o6DAU9X%2B0M4IQRginfCPAQFPFLyQ0CZNCAc2YGTWgIw9A8BWkMMAZNcFeEECI0wJQCg6NKAKd09cCAd5mgUB4M0Z6NhOCEMet4WxDg/WQOx%2BmXGLngioM2LtTAmDPkwOgZAo50DNh7D2SQGhJCSGQBoEIXYmDMmBOCSD/lFVtiys9fFQJDjkeIFQDY27e4pHBGNaSXYVUkuYRZtYWVWM2YBE%2BtwDYX38CczugQbnzI2R5ay3zC0YLgitGJmobwgkhPcyQuL%2B0MQMr8%2BNWujZwTKH2E4DYPhMBKNoNF/zXmOUJaekloEpXsAVaq2UWr40IRxcQXloVlmmvFaBOIoDmXzI9ahTWNi/XhXIbNQ2JRLmyYRqjeW%2BNiaU1psIAgTN2bc35sIkWktNgy2xqYJW6ttb62Nuba29tnbu29skP2wdw7R2VoncqOL45ZuMqbGZSCmUuJEqmwD3zgX/AEGi5BdK1F2L1abMss4A21iBZzcahIclBBsZqDDpsrH4eg/FfyCHQqgRCBPNqByThk1OAqRUjY/61gPHtp%2BOLzZ1WHtsCTOENY4JCEzb64AxBWDm1YF66TfposKDQHEL1kEFyetDIrjYb6vXpQIMieXKumw%2BVl6geXnRQweppX3GDNKHgmCcAOBQV7ZfzKU3euI3ozfWv2EIZQrvLVXpTMkMmQjysC69zSudOtF1O5jMagguuzJoyYP4JT4GsB90gpys0mBkQvv6MQNwr8%2B6rrM1IaDHvM1uJ4Yn/92vgJa/l6npsXYi%2B5fpaj10JhEdMT%2B2jps3KwdQRLz4MBtBN01DwGN8XbAcMAiYDLuXCumwvmV96hc6vQysdr/P9tReZst91TmrI8cq/y4gNUUAGxbVvH/Q8F1NRRfIjeBvhctMlBH836OO9Ee1%2BRCK21QQ9eAQaBF6/a777BrD0Z4DICv4T6S5AhQ4y6f7cSsaMBoD4Afrn52oPD/rYDpaeRKZmYAFk4Ai2xxZEEl6C4hCi5GDARoAbqhijj4GvIgGD6iAVCmqJ5r4LhoDpBeATR3pz667Nj4EIoo5wTMGIgpBsEBAcHriuANB0F8GG6b5YTiriQD5gKsGr4bCsZcFyEbDv4bAG467eqVREAsBOrl5xAm7uSmEABKhgZoJu%2BBzeIh%2BwYhGh7B2UMh3BVhBh/Bxh%2BBzIahLBEhmhL4OhGQFkvhihAhJhOa5hcwlhWh1hOadh5ojhKhfWKyGqPO2q/OpeIQwuouLA0BU%2BUCDAs%2B0Ry%2BGwS%2BqumhP0G%2BuuAoChRuHhP01Klq5u%2Bw3uwAVutANuJgdupsyAju6Azu3RnRnu3Rvu/g/uXkge5%2BHuIelqYeC6S6C4pohAseC4GeWeDAOeeeFQBeueW8jwH4O%2BLh5B5ePOAG1eJ%2B1e/%2B9BKhwBKOwqXAyqcWlYQR4haEmhnK4RPBP0hh8%2BxIZmNsXx7hUhGwz0/xoYgJfhH4z0iIcRFhPhSJLAqRDhK4icHAMwtAnAXYvAXgHAWgpAqAnAPgPgm6WwGw%2BwNhBhLwiwSyvAMexJOJMwDhkgRIVwzIGgzI0QPao4RIkQRImE0geJHAkghJmgvAZJHAvAIYHELJWgMwcAsASAaA%2BqcGZAFAEAGpBqPQhuBAvaHEnwckvclAIQ0ppAIQ/gNQyInAPA1ptpS8M6IQJ2LJjpGpEUM6r69prJpAWAN6/R36DpvAWAzcJGSwJJ%2BAmGtgSiIY3AvAmAqgO8TyoZ5AggZQVp9oFBdpLgWAVpnCeIiZpAS2akSgV6EZwAb6oArJMw7RtKm6eAmAVoc6jA6Z/AggIgYg7AUgMgggigKg6g/pugTQC2IAhE%2BgXCIYkAMwhpKQCZ1I9GDGpwMKPCXiyAtKraMpS2moKe8AMwVgyiu6EAjgQwjQpAvgieEwPQTQB%2BFQ55mQiQsx4w3QEQIw8kr8bQgwshwwzQx5Ag35HQ15b5egesj5IwAwwF%2BQoFD4sw8wiwEguJ%2BJUp/pspGwhpWhAIVwXAkacauAhAJASyUwzJ0pVspADhXY2F0Qo4PEUEGgRBxIzIvE4pkppARJJJsp8pIAipZFyFHAAIqFnFnApFdZMwS2YaIAkgQAA).
Contributor guide
Assessment
This issue has not been assessed yet.