@@ -8612,11 +8612,13 @@ VPRecipeBuilder::tryToWidenMemory(Instruction *I, ArrayRef<VPValue *> Operands,
8612
8612
}
8613
8613
if (LoadInst *Load = dyn_cast<LoadInst>(I))
8614
8614
return new VPWidenLoadRecipe (*Load, Ptr, Mask, Consecutive, Reverse,
8615
+ getMetadataToPropagate (Load),
8615
8616
I->getDebugLoc ());
8616
8617
8617
8618
StoreInst *Store = cast<StoreInst>(I);
8618
8619
return new VPWidenStoreRecipe (*Store, Ptr, Operands[0 ], Mask, Consecutive,
8619
- Reverse, I->getDebugLoc ());
8620
+ Reverse, getMetadataToPropagate (Store),
8621
+ I->getDebugLoc ());
8620
8622
}
8621
8623
8622
8624
// / Creates a VPWidenIntOrFpInductionRecpipe for \p Phi. If needed, it will also
@@ -8758,6 +8760,7 @@ VPSingleDefRecipe *VPRecipeBuilder::tryToWidenCall(CallInst *CI,
8758
8760
Range);
8759
8761
if (ShouldUseVectorIntrinsic)
8760
8762
return new VPWidenIntrinsicRecipe (*CI, ID, Ops, CI->getType (),
8763
+ getMetadataToPropagate (CI),
8761
8764
CI->getDebugLoc ());
8762
8765
8763
8766
Function *Variant = nullptr ;
@@ -8811,7 +8814,8 @@ VPSingleDefRecipe *VPRecipeBuilder::tryToWidenCall(CallInst *CI,
8811
8814
}
8812
8815
8813
8816
Ops.push_back (Operands.back ());
8814
- return new VPWidenCallRecipe (CI, Variant, Ops, CI->getDebugLoc ());
8817
+ return new VPWidenCallRecipe (CI, Variant, Ops, getMetadataToPropagate (CI),
8818
+ CI->getDebugLoc ());
8815
8819
}
8816
8820
8817
8821
return nullptr ;
@@ -8849,7 +8853,8 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
8849
8853
Plan.getOrAddLiveIn (ConstantInt::get (I->getType (), 1u , false ));
8850
8854
auto *SafeRHS = Builder.createSelect (Mask, Ops[1 ], One, I->getDebugLoc ());
8851
8855
Ops[1 ] = SafeRHS;
8852
- return new VPWidenRecipe (*I, make_range (Ops.begin (), Ops.end ()));
8856
+ return new VPWidenRecipe (*I, make_range (Ops.begin (), Ops.end ()),
8857
+ getMetadataToPropagate (I));
8853
8858
}
8854
8859
[[fallthrough]];
8855
8860
}
@@ -8895,7 +8900,8 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
8895
8900
// For other binops, the legacy cost model only checks the second operand.
8896
8901
NewOps[1 ] = GetConstantViaSCEV (NewOps[1 ]);
8897
8902
}
8898
- return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()));
8903
+ return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()),
8904
+ getMetadataToPropagate (I));
8899
8905
}
8900
8906
case Instruction::ExtractValue: {
8901
8907
SmallVector<VPValue *> NewOps (Operands);
@@ -8904,7 +8910,8 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
8904
8910
assert (EVI->getNumIndices () == 1 && " Expected one extractvalue index" );
8905
8911
unsigned Idx = EVI->getIndices ()[0 ];
8906
8912
NewOps.push_back (Plan.getOrAddLiveIn (ConstantInt::get (I32Ty, Idx, false )));
8907
- return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()));
8913
+ return new VPWidenRecipe (*I, make_range (NewOps.begin (), NewOps.end ()),
8914
+ getMetadataToPropagate (I));
8908
8915
}
8909
8916
};
8910
8917
}
@@ -9109,6 +9116,13 @@ bool VPRecipeBuilder::getScaledReductions(
9109
9116
return false ;
9110
9117
}
9111
9118
9119
+ SmallVector<std::pair<unsigned , MDNode *>>
9120
+ VPRecipeBuilder::getMetadataToPropagate (Instruction *I) {
9121
+ SmallVector<std::pair<unsigned , MDNode *>> Metadata;
9122
+ ::getMetadataToPropagate (I, Metadata);
9123
+ return Metadata;
9124
+ }
9125
+
9112
9126
VPRecipeBase *VPRecipeBuilder::tryToCreateWidenRecipe (
9113
9127
Instruction *Instr, ArrayRef<VPValue *> Operands, VFRange &Range) {
9114
9128
// First, check for specific widening recipes that deal with inductions, Phi
@@ -9181,13 +9195,14 @@ VPRecipeBase *VPRecipeBuilder::tryToCreateWidenRecipe(
9181
9195
make_range (Operands.begin (), Operands.end ()));
9182
9196
9183
9197
if (auto *SI = dyn_cast<SelectInst>(Instr)) {
9184
- return new VPWidenSelectRecipe (
9185
- *SI, make_range (Operands.begin (), Operands.end ()));
9198
+ return new VPWidenSelectRecipe (*SI,
9199
+ make_range (Operands.begin (), Operands.end ()),
9200
+ getMetadataToPropagate (SI));
9186
9201
}
9187
9202
9188
9203
if (auto *CI = dyn_cast<CastInst>(Instr)) {
9189
9204
return new VPWidenCastRecipe (CI->getOpcode (), Operands[0 ], CI->getType (),
9190
- *CI);
9205
+ *CI, getMetadataToPropagate (CI) );
9191
9206
}
9192
9207
9193
9208
return tryToWiden (Instr, Operands);
@@ -9213,7 +9228,8 @@ VPRecipeBuilder::tryToCreatePartialReduction(Instruction *Reduction,
9213
9228
SmallVector<VPValue *, 2 > Ops;
9214
9229
Ops.push_back (Plan.getOrAddLiveIn (Zero));
9215
9230
Ops.push_back (BinOp);
9216
- BinOp = new VPWidenRecipe (*Reduction, make_range (Ops.begin (), Ops.end ()));
9231
+ BinOp = new VPWidenRecipe (*Reduction, make_range (Ops.begin (), Ops.end ()),
9232
+ getMetadataToPropagate (Reduction));
9217
9233
Builder.insert (BinOp->getDefiningRecipe ());
9218
9234
ReductionOpcode = Instruction::Add;
9219
9235
}
0 commit comments