llvm / llvm/llvm-project

opt -passes=attributor-cgscc eliminates store instructions without updating debuginfo

Open
#196,705 2 comments 0 reactions 0 assignees View on GitHub
debuginfo llvm:optimizations
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.