mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 14:20:17 +00:00
[Simplify] Count PHINodes in simplifiable exit nodes as escaping use.
After region exit simplification, the incoming block of a phi node in the SCoP region's exit block lands outside of the region. Since we treat SCoPs as if this already happened, we need to account for that when looking for outside uses of scalars (i.e. escaping scalars). llvm-svn: 309271
This commit is contained in:
parent
88202be1f0
commit
8a8aca4299
@ -170,6 +170,13 @@ static bool isEscaping(Scop *S, Instruction *ComputingInst) {
|
||||
BasicBlock *UserBB = getUseBlock(Use);
|
||||
if (!S->contains(UserBB))
|
||||
return true;
|
||||
|
||||
// When the SCoP region exit needs to be simplified, PHIs in the region exit
|
||||
// move to a new basic block such that its incoming blocks are not in the
|
||||
// scop anymore.
|
||||
if (S->hasSingleExitEdge() && isa<PHINode>(Use.getUser()) &&
|
||||
S->isExit(cast<PHINode>(Use.getUser())->getParent()))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
37
polly/test/Simplify/exit_phi_accesses-2.ll
Normal file
37
polly/test/Simplify/exit_phi_accesses-2.ll
Normal file
@ -0,0 +1,37 @@
|
||||
; RUN: opt %loadPolly -polly-scops -polly-simplify -analyze < %s | FileCheck %s
|
||||
;
|
||||
; The use of %sum.next by %phi counts as an escaping use.
|
||||
; Don't remove the scalar write of %sum.next.
|
||||
;
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
|
||||
define float @foo(float* %A) {
|
||||
entry:
|
||||
br label %header
|
||||
|
||||
header:
|
||||
fence seq_cst
|
||||
br i1 true, label %body, label %exit
|
||||
|
||||
body:
|
||||
%i = phi i64 [ 0, %header ], [ %next, %body ]
|
||||
%sum = phi float [ 0.0, %header ], [ %sum.next, %body ]
|
||||
%arrayidx = getelementptr float, float* %A, i64 %i
|
||||
%next = add nuw nsw i64 %i, 1
|
||||
%val = load float, float* %arrayidx
|
||||
%sum.next = fadd float %sum, %val
|
||||
%cond = icmp ne i64 %i, 100
|
||||
br i1 %cond, label %body, label %after
|
||||
|
||||
after:
|
||||
br label %exit
|
||||
|
||||
exit:
|
||||
%phi = phi float [%sum.next, %after], [0.0, %header]
|
||||
ret float %phi
|
||||
}
|
||||
|
||||
|
||||
; CHECK: Statistics {
|
||||
; CHECK: Dead accesses removed: 0
|
||||
; CHECK: }
|
Loading…
Reference in New Issue
Block a user