@@ -364,13 +364,12 @@ Value *VPTransformState::get(const VPValue *Def, bool NeedsScalar) {
364364 VectorValue = GetBroadcastInstrs (ScalarValue);
365365 set (Def, VectorValue);
366366 } else {
367- // Initialize packing with insertelements to start from undef.
368367 assert (!VF.isScalable () && " VF is assumed to be non scalable." );
369- Value *Undef = PoisonValue::get ( toVectorizedTy (LastInst-> getType (), VF));
370- set (Def, Undef );
368+ // Initialize packing with insertelements to start from poison.
369+ VectorValue = PoisonValue::get ( toVectorizedTy (LastInst-> getType (), VF) );
371370 for (unsigned Lane = 0 ; Lane < VF.getFixedValue (); ++Lane)
372- packScalarIntoVectorizedValue (Def, Lane);
373- VectorValue = get (Def);
371+ VectorValue = packScalarIntoVectorizedValue (Def, VectorValue , Lane);
372+ set (Def, VectorValue );
374373 }
375374 Builder.restoreIP (OldIP);
376375 return VectorValue;
@@ -398,10 +397,10 @@ void VPTransformState::setDebugLocFrom(DebugLoc DL) {
398397 Builder.SetCurrentDebugLocation (DL);
399398}
400399
401- void VPTransformState::packScalarIntoVectorizedValue (const VPValue *Def,
402- const VPLane &Lane) {
400+ Value *VPTransformState::packScalarIntoVectorizedValue (const VPValue *Def,
401+ Value *WideValue,
402+ const VPLane &Lane) {
403403 Value *ScalarInst = get (Def, Lane);
404- Value *WideValue = get (Def);
405404 Value *LaneExpr = Lane.getAsRuntimeExpr (Builder, VF);
406405 if (auto *StructTy = dyn_cast<StructType>(WideValue->getType ())) {
407406 // We must handle each element of a vectorized struct type.
@@ -415,7 +414,7 @@ void VPTransformState::packScalarIntoVectorizedValue(const VPValue *Def,
415414 } else {
416415 WideValue = Builder.CreateInsertElement (WideValue, ScalarInst, LaneExpr);
417416 }
418- set (Def, WideValue) ;
417+ return WideValue;
419418}
420419
421420BasicBlock *VPBasicBlock::createEmptyBasicBlock (VPTransformState &State) {
0 commit comments