aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
diff options
context:
space:
mode:
authorJuneyoung Lee <aqjune@gmail.com>2020-02-26 11:33:34 +0900
committerJuneyoung Lee <aqjune@gmail.com>2020-02-26 13:47:33 +0900
commit181628b52d390f2136fb5a63fe644d230a9b822d (patch)
tree4708a91cee14f7cec28161582fb00210c6f7d858 /lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
parentb083d7a3460d28884a1e2f7dae5a93465cd1099e (diff)
downloadllvm-181628b52d390f2136fb5a63fe644d230a9b822d.zip
llvm-181628b52d390f2136fb5a63fe644d230a9b822d.tar.gz
llvm-181628b52d390f2136fb5a63fe644d230a9b822d.tar.bz2
[SimpleLoopUnswitch] Fix introduction of UB when hoisted condition may be undef or poison
Summary: Loop unswitch hoists branches on loop-invariant conditions. However, if this condition is poison/undef and the branch wasn't originally reachable, loop unswitch introduces UB (since the optimized code will branch on poison/undef and the original one didn't)). We fix this problem by freezing the condition to ensure we don't introduce UB. We will now transform the following: while (...) { if (C) { A } else { B } } Into: C' = freeze(C) if (C') { while (...) { A } } else { while (...) { B } } This patch fixes the root cause of the following bug reports (which use the old loop unswitch, but can be reproduced with minor changes in the code and -enable-nontrivial-unswitch): - https://llvm.org/bugs/show_bug.cgi?id=27506 - https://llvm.org/bugs/show_bug.cgi?id=31652 Reviewers: reames, majnemer, chenli, sanjoy, hfinkel Reviewed By: reames Subscribers: hiraditya, jvesely, nhaehnle, filcab, regehr, trentxintong, nlopes, llvm-commits, mzolotukhin Tags: #llvm Differential Revision: https://reviews.llvm.org/D29015
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp')
0 files changed, 0 insertions, 0 deletions