mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
[LV] Minor savings to Sink casts to unravel first order recurrence
Two minor savings: avoid copying the SinkAfter map and avoid moving a cast if it is not needed. Differential Revision: https://reviews.llvm.org/D36408 llvm-svn: 310910
This commit is contained in:
parent
b9919e8ad8
commit
43ce19524f
@ -565,7 +565,8 @@ bool RecurrenceDescriptor::isFirstOrderRecurrence(
|
||||
auto *I = Phi->user_back();
|
||||
if (I->isCast() && (I->getParent() == Phi->getParent()) && I->hasOneUse() &&
|
||||
DT->dominates(Previous, I->user_back())) {
|
||||
SinkAfter[I] = Previous;
|
||||
if (!DT->dominates(Previous, I)) // Otherwise we're good w/o sinking.
|
||||
SinkAfter[I] = Previous;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -7655,7 +7655,7 @@ void LoopVectorizationPlanner::executePlan(InnerLoopVectorizer &ILV) {
|
||||
// 2. Copy and widen instructions from the old loop into the new loop.
|
||||
|
||||
// Move instructions to handle first-order recurrences.
|
||||
DenseMap<Instruction *, Instruction *> SinkAfter = Legal->getSinkAfter();
|
||||
DenseMap<Instruction *, Instruction *> &SinkAfter = Legal->getSinkAfter();
|
||||
for (auto &Entry : SinkAfter) {
|
||||
Entry.first->removeFromParent();
|
||||
Entry.first->insertAfter(Entry.second);
|
||||
|
@ -140,7 +140,10 @@ scalar.body:
|
||||
; CHECK: vector.body:
|
||||
; CHECK: %vector.recur = phi <4 x i16> [ %vector.recur.init, %vector.ph ], [ [[L1:%[a-zA-Z0-9.]+]], %vector.body ]
|
||||
; CHECK: [[L1]] = load <4 x i16>
|
||||
; CHECK: {{.*}} = shufflevector <4 x i16> %vector.recur, <4 x i16> [[L1]], <4 x i32> <i32 3, i32 4, i32 5, i32 6>
|
||||
; CHECK: [[SHUF:%[a-zA-Z0-9.]+]] = shufflevector <4 x i16> %vector.recur, <4 x i16> [[L1]], <4 x i32> <i32 3, i32 4, i32 5, i32 6>
|
||||
; Check also that the casts were not moved needlessly.
|
||||
; CHECK: sitofp <4 x i16> [[L1]] to <4 x double>
|
||||
; CHECK: sitofp <4 x i16> [[SHUF]] to <4 x double>
|
||||
; CHECK: middle.block:
|
||||
; CHECK: %vector.recur.extract = extractelement <4 x i16> [[L1]], i32 3
|
||||
; CHECK: scalar.ph:
|
||||
|
Loading…
Reference in New Issue
Block a user