@@ -8599,11 +8599,13 @@ VPRecipeBuilder::tryToWidenMemory(Instruction *I, ArrayRef<VPValue *> Operands,
8599
8599
}
8600
8600
if (LoadInst *Load = dyn_cast<LoadInst>(I))
8601
8601
return new VPWidenLoadRecipe (*Load, Ptr, Mask, Consecutive, Reverse,
8602
+ getMetadataToPropagate (Load),
8602
8603
I->getDebugLoc ());
8603
8604
8604
8605
StoreInst *Store = cast<StoreInst>(I);
8605
8606
return new VPWidenStoreRecipe (*Store, Ptr, Operands[0 ], Mask, Consecutive,
8606
- Reverse, I->getDebugLoc ());
8607
+ Reverse, getMetadataToPropagate (Store),
8608
+ I->getDebugLoc ());
8607
8609
}
8608
8610
8609
8611
// / Creates a VPWidenIntOrFpInductionRecpipe for \p Phi. If needed, it will also
@@ -8745,6 +8747,7 @@ VPSingleDefRecipe *VPRecipeBuilder::tryToWidenCall(CallInst *CI,
8745
8747
Range);
8746
8748
if (ShouldUseVectorIntrinsic)
8747
8749
return new VPWidenIntrinsicRecipe (*CI, ID, Ops, CI->getType (),
8750
+ getMetadataToPropagate (CI),
8748
8751
CI->getDebugLoc ());
8749
8752
8750
8753
Function *Variant = nullptr ;
@@ -8798,7 +8801,8 @@ VPSingleDefRecipe *VPRecipeBuilder::tryToWidenCall(CallInst *CI,
8798
8801
}
8799
8802
8800
8803
Ops.push_back (Operands.back ());
8801
- return new VPWidenCallRecipe (CI, Variant, Ops, CI->getDebugLoc ());
8804
+ return new VPWidenCallRecipe (CI, Variant, Ops, getMetadataToPropagate (CI),
8805
+ CI->getDebugLoc ());
8802
8806
}
8803
8807
8804
8808
return nullptr ;
@@ -8836,7 +8840,8 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
8836
8840
Plan.getOrAddLiveIn (ConstantInt::get (I->getType (), 1u , false ));
8837
8841
auto *SafeRHS = Builder.createSelect (Mask, Ops[1 ], One, I->getDebugLoc ());
8838
8842
Ops[1 ] = SafeRHS;
8839
- return new VPWidenRecipe (*I, make_range (Ops.begin (), Ops.end ()));
8843
+ return new VPWidenRecipe (*I, make_range (Ops.begin (), Ops.end ()),
8844
+ getMetadataToPropagate (I));
8840
8845
}
8841
8846
[[fallthrough]];
8842
8847
}
@@ -8882,7 +8887,8 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
8882
8887
// For other binops, the legacy cost model only checks the second operand.
8883
8888
NewOps[1 ] = GetConstantViaSCEV (NewOps[1 ]);
8884
8889
}
8885
- return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()));
8890
+ return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()),
8891
+ getMetadataToPropagate (I));
8886
8892
}
8887
8893
case Instruction::ExtractValue: {
8888
8894
SmallVector<VPValue *> NewOps (Operands);
@@ -8891,7 +8897,8 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
8891
8897
assert (EVI->getNumIndices () == 1 && " Expected one extractvalue index" );
8892
8898
unsigned Idx = EVI->getIndices ()[0 ];
8893
8899
NewOps.push_back (Plan.getOrAddLiveIn (ConstantInt::get (I32Ty, Idx, false )));
8894
- return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()));
8900
+ return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()),
8901
+ getMetadataToPropagate (I));
8895
8902
}
8896
8903
};
8897
8904
}
@@ -9096,6 +9103,13 @@ bool VPRecipeBuilder::getScaledReductions(
9096
9103
return false ;
9097
9104
}
9098
9105
9106
+ SmallVector<std::pair<unsigned , MDNode *>>
9107
+ VPRecipeBuilder::getMetadataToPropagate (Instruction *I) {
9108
+ SmallVector<std::pair<unsigned , MDNode *>> Metadata;
9109
+ ::getMetadataToPropagate (I, Metadata);
9110
+ return Metadata;
9111
+ }
9112
+
9099
9113
VPRecipeBase *VPRecipeBuilder::tryToCreateWidenRecipe (
9100
9114
Instruction *Instr, ArrayRef<VPValue *> Operands, VFRange &Range) {
9101
9115
// First, check for specific widening recipes that deal with inductions, Phi
@@ -9168,13 +9182,14 @@ VPRecipeBase *VPRecipeBuilder::tryToCreateWidenRecipe(
9168
9182
make_range (Operands.begin (), Operands.end ()));
9169
9183
9170
9184
if (auto *SI = dyn_cast<SelectInst>(Instr)) {
9171
- return new VPWidenSelectRecipe (
9172
- *SI, make_range (Operands.begin (), Operands.end ()));
9185
+ return new VPWidenSelectRecipe (*SI,
9186
+ make_range (Operands.begin (), Operands.end ()),
9187
+ getMetadataToPropagate (SI));
9173
9188
}
9174
9189
9175
9190
if (auto *CI = dyn_cast<CastInst>(Instr)) {
9176
9191
return new VPWidenCastRecipe (CI->getOpcode (), Operands[0 ], CI->getType (),
9177
- *CI);
9192
+ *CI, getMetadataToPropagate (CI) );
9178
9193
}
9179
9194
9180
9195
return tryToWiden (Instr, Operands);
@@ -9200,7 +9215,8 @@ VPRecipeBuilder::tryToCreatePartialReduction(Instruction *Reduction,
9200
9215
SmallVector<VPValue *, 2 > Ops;
9201
9216
Ops.push_back (Plan.getOrAddLiveIn (Zero));
9202
9217
Ops.push_back (BinOp);
9203
- BinOp = new VPWidenRecipe (*Reduction, make_range (Ops.begin (), Ops.end ()));
9218
+ BinOp = new VPWidenRecipe (*Reduction, make_range (Ops.begin (), Ops.end ()),
9219
+ getMetadataToPropagate (Reduction));
9204
9220
Builder.insert (BinOp->getDefiningRecipe ());
9205
9221
ReductionOpcode = Instruction::Add;
9206
9222
}
0 commit comments