<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial">Hi, I'm curious that whether we can keep debug information of local variable when in the optimization condition (for example -O2, -O3) in LLVM.<br><br><div>For example this simple C source code:</div><div><br></div><div>int main()</div><div><div>{</div><div>    int i = 5;</div><div>    if(i > 5) {</div><div>        return 1;</div><div>    } else {</div><div>        return 0;</div><div>    }</div><div>}</div></div><div><br></div><div>If we compile clang -g a.c, we can get our expected result. We can check and update the local variable i in the debugger.<br><br>However, when we compile it using clang -O3 -g a.c, we can only check the variable i but we can not  update the local variable i.<br><br>I know, the design of LLVM opt-debug is that debug can not affect optimization, so this case llvm-opt will turn the llvm.dbg.declare and related alloc / store instruction to llvm.dbg.value, we don't have symbol of local variable i. So we can only check local variable i but we can not update the value of local variable i like set variable i = 7 in the gdb.<br><br>I think keep debug information of local variable in some condition is very useful and I want to explore it. However, I find there are many places do this work of local variable debug info. I want to know whether I have one simple way like disabling some passes or modify some llvm code to continue this way.<br><br>Thanks in advance. </div></div><br><br><span title="neteasefooter"><p> </p></span>