@@ -8585,11 +8585,13 @@ VPRecipeBuilder::tryToWidenMemory(Instruction *I, ArrayRef<VPValue *> Operands,
8585
8585
}
8586
8586
if (LoadInst *Load = dyn_cast<LoadInst>(I))
8587
8587
return new VPWidenLoadRecipe (*Load, Ptr, Mask, Consecutive, Reverse,
8588
+ getMetadataToPropagate (Load),
8588
8589
I->getDebugLoc ());
8589
8590
8590
8591
StoreInst *Store = cast<StoreInst>(I);
8591
8592
return new VPWidenStoreRecipe (*Store, Ptr, Operands[0 ], Mask, Consecutive,
8592
- Reverse, I->getDebugLoc ());
8593
+ Reverse, getMetadataToPropagate (Store),
8594
+ I->getDebugLoc ());
8593
8595
}
8594
8596
8595
8597
// / Creates a VPWidenIntOrFpInductionRecpipe for \p Phi. If needed, it will also
@@ -8731,6 +8733,7 @@ VPSingleDefRecipe *VPRecipeBuilder::tryToWidenCall(CallInst *CI,
8731
8733
Range);
8732
8734
if (ShouldUseVectorIntrinsic)
8733
8735
return new VPWidenIntrinsicRecipe (*CI, ID, Ops, CI->getType (),
8736
+ getMetadataToPropagate (CI),
8734
8737
CI->getDebugLoc ());
8735
8738
8736
8739
Function *Variant = nullptr ;
@@ -8784,7 +8787,8 @@ VPSingleDefRecipe *VPRecipeBuilder::tryToWidenCall(CallInst *CI,
8784
8787
}
8785
8788
8786
8789
Ops.push_back (Operands.back ());
8787
- return new VPWidenCallRecipe (CI, Variant, Ops, CI->getDebugLoc ());
8790
+ return new VPWidenCallRecipe (CI, Variant, Ops, getMetadataToPropagate (CI),
8791
+ CI->getDebugLoc ());
8788
8792
}
8789
8793
8790
8794
return nullptr ;
@@ -8822,7 +8826,8 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
8822
8826
Plan.getOrAddLiveIn (ConstantInt::get (I->getType (), 1u , false ));
8823
8827
auto *SafeRHS = Builder.createSelect (Mask, Ops[1 ], One, I->getDebugLoc ());
8824
8828
Ops[1 ] = SafeRHS;
8825
- return new VPWidenRecipe (*I, make_range (Ops.begin (), Ops.end ()));
8829
+ return new VPWidenRecipe (*I, make_range (Ops.begin (), Ops.end ()),
8830
+ getMetadataToPropagate (I));
8826
8831
}
8827
8832
[[fallthrough]];
8828
8833
}
@@ -8868,7 +8873,8 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
8868
8873
// For other binops, the legacy cost model only checks the second operand.
8869
8874
NewOps[1 ] = GetConstantViaSCEV (NewOps[1 ]);
8870
8875
}
8871
- return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()));
8876
+ return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()),
8877
+ getMetadataToPropagate (I));
8872
8878
}
8873
8879
case Instruction::ExtractValue: {
8874
8880
SmallVector<VPValue *> NewOps (Operands);
@@ -8877,7 +8883,8 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
8877
8883
assert (EVI->getNumIndices () == 1 && " Expected one extractvalue index" );
8878
8884
unsigned Idx = EVI->getIndices ()[0 ];
8879
8885
NewOps.push_back (Plan.getOrAddLiveIn (ConstantInt::get (I32Ty, Idx, false )));
8880
- return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()));
8886
+ return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()),
8887
+ getMetadataToPropagate (I));
8881
8888
}
8882
8889
};
8883
8890
}
@@ -9082,6 +9089,13 @@ bool VPRecipeBuilder::getScaledReductions(
9082
9089
return false ;
9083
9090
}
9084
9091
9092
+ SmallVector<std::pair<unsigned , MDNode *>>
9093
+ VPRecipeBuilder::getMetadataToPropagate (Instruction *I) {
9094
+ SmallVector<std::pair<unsigned , MDNode *>> Metadata;
9095
+ ::getMetadataToPropagate (I, Metadata);
9096
+ return Metadata;
9097
+ }
9098
+
9085
9099
VPRecipeBase *VPRecipeBuilder::tryToCreateWidenRecipe (
9086
9100
Instruction *Instr, ArrayRef<VPValue *> Operands, VFRange &Range) {
9087
9101
// First, check for specific widening recipes that deal with inductions, Phi
@@ -9154,13 +9168,14 @@ VPRecipeBase *VPRecipeBuilder::tryToCreateWidenRecipe(
9154
9168
make_range (Operands.begin (), Operands.end ()));
9155
9169
9156
9170
if (auto *SI = dyn_cast<SelectInst>(Instr)) {
9157
- return new VPWidenSelectRecipe (
9158
- *SI, make_range (Operands.begin (), Operands.end ()));
9171
+ return new VPWidenSelectRecipe (*SI,
9172
+ make_range (Operands.begin (), Operands.end ()),
9173
+ getMetadataToPropagate (SI));
9159
9174
}
9160
9175
9161
9176
if (auto *CI = dyn_cast<CastInst>(Instr)) {
9162
9177
return new VPWidenCastRecipe (CI->getOpcode (), Operands[0 ], CI->getType (),
9163
- *CI);
9178
+ *CI, getMetadataToPropagate (CI) );
9164
9179
}
9165
9180
9166
9181
return tryToWiden (Instr, Operands);
@@ -9186,7 +9201,8 @@ VPRecipeBuilder::tryToCreatePartialReduction(Instruction *Reduction,
9186
9201
SmallVector<VPValue *, 2 > Ops;
9187
9202
Ops.push_back (Plan.getOrAddLiveIn (Zero));
9188
9203
Ops.push_back (BinOp);
9189
- BinOp = new VPWidenRecipe (*Reduction, make_range (Ops.begin (), Ops.end ()));
9204
+ BinOp = new VPWidenRecipe (*Reduction, make_range (Ops.begin (), Ops.end ()),
9205
+ getMetadataToPropagate (Reduction));
9190
9206
Builder.insert (BinOp->getDefiningRecipe ());
9191
9207
ReductionOpcode = Instruction::Add;
9192
9208
}
0 commit comments