HomePhabricator

[CodeGenPrepare] Fix isIVIncrement (PR49466)

Authored by TaWeiTu on Mar 8 2021, 9:31 PM.

Description

[CodeGenPrepare] Fix isIVIncrement (PR49466)

In the NFC commit 8d835f42a57f15c0b9053bd7c41ea95821a40e5f, the check for !L is
moved to a separate function getIVIncrement which, instead of using BO->getParent(),
uses PN->getParent(). However, these two basic blocks are not necessarily the same.

https://bugs.llvm.org/show_bug.cgi?id=49466 demonstrates a case where PN is contained in
a loop while BO is not, causing the null-pointer dereference in L->getLoopLatch().

This patch checks whether both BO and PN belong to the same loop before entering getIVIncrement.

Reviewed By: mkazantsev

Differential Revision: https://reviews.llvm.org/D98144