[polly] Skip instructions of different function in isHoistableLoad. (#118963)

After patch 5ce47a5, some assert crashes occur in Polly. This issue
arises because an instruction from one function queries the Dominator
Tree (DT) of another function. To fix this, the `isHoistableLoad`
function now skips instructions that belong to different function while
iterating.
This commit is contained in:
Karthika Devi C 2024-12-31 11:57:34 +05:30 committed by GitHub
parent f590963db8
commit 2e3d3903e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 33 additions and 1 deletions

View File

@ -604,7 +604,8 @@ bool polly::isHoistableLoad(LoadInst *LInst, Region &R, LoopInfo &LI,
for (auto *User : Ptr->users()) { for (auto *User : Ptr->users()) {
auto *UserI = dyn_cast<Instruction>(User); auto *UserI = dyn_cast<Instruction>(User);
if (!UserI || !R.contains(UserI)) if (!UserI || UserI->getFunction() != LInst->getFunction() ||
!R.contains(UserI))
continue; continue;
if (!UserI->mayWriteToMemory()) if (!UserI->mayWriteToMemory())
continue; continue;

View File

@ -0,0 +1,31 @@
; RUN: opt %loadNPMPolly '-passes=print<polly-detect>' -disable-output < %s 2>&1 | FileCheck %s
; CHECK: Detected Scops in Function foo
; This unit test case is to check if the following IR does not crash in isHoistableLoad function during Scop Detection.
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
target triple = "aarch64-unknown-linux-gnueabi"
define void @foo(ptr %block) {
entry:
br label %for.body
for.cond1.preheader: ; preds = %for.body
%0 = load ptr, ptr null, align 8
%1 = load i16, ptr %block, align 2
%2 = load i16, ptr %0, align 2
br label %foo.exit
for.body: ; preds = %for.body, %entry
br i1 false, label %for.cond1.preheader, label %for.body
foo.exit: ; preds = %for.cond1.preheader
ret void
}
define void @init_foo() {
entry:
store ptr null, ptr null, align 8
ret void
}