@@ -1424,40 +1424,29 @@ void VPWidenCastRecipe::execute(VPTransformState &State) {
14241424
14251425void VPWidenCastEVLRecipe::execute (VPTransformState &State) {
14261426 unsigned Opcode = getOpcode ();
1427- auto Inst = cast<CastInst>(getUnderlyingInstr ());
14281427 State.setDebugLocFrom (getDebugLoc ());
1429- assert (State. UF == 1 && " Expected only UF == 1 when vectorizing with "
1430- " explicit vector length. " );
1428+ Value *SrcVal = State. get ( getOperand ( 0 ));
1429+ VectorType *DsType = VectorType::get ( getResultType (), State. VF );
14311430
1432- if (Inst->isCast ()) {
1433- Value *SrcVal = State.get (getOperand (0 ), 0 );
1434- VectorType *DsType = VectorType::get (getResultType (), State.VF );
1435-
1436- IRBuilderBase &BuilderIR = State.Builder ;
1437- VectorBuilder Builder (BuilderIR);
1438- Value *Mask = BuilderIR.CreateVectorSplat (State.VF , BuilderIR.getTrue ());
1439- Builder.setMask (Mask).setEVL (State.get (getEVL (), 0 , /* NeedsScalar=*/ true ));
1440-
1441- Value *VPInst =
1442- Builder.createVectorInstruction (Opcode, DsType, {SrcVal}, " vp.cast" );
1431+ IRBuilderBase &BuilderIR = State.Builder ;
1432+ VectorBuilder Builder (BuilderIR);
1433+ Value *Mask = BuilderIR.CreateVectorSplat (State.VF , BuilderIR.getTrue ());
1434+ Builder.setMask (Mask).setEVL (State.get (getEVL (), /* NeedsScalar=*/ true ));
14431435
1444- if (VPInst) {
1445- if (auto *VecOp = dyn_cast<CastInst>(VPInst))
1446- VecOp->copyIRFlags (getUnderlyingInstr ());
1447- }
1436+ Value *VPInst =
1437+ Builder.createVectorInstruction (Opcode, DsType, {SrcVal}, " vp.cast" );
14481438
1449- State.set (this , VPInst, 0 );
1450- State.addMetadata (VPInst,
1451- dyn_cast_or_null<Instruction>(getUnderlyingValue ()));
1452- }
1439+ State.set (this , VPInst, 0 );
1440+ State.addMetadata (VPInst,
1441+ dyn_cast_or_null<Instruction>(getUnderlyingValue ()));
14531442}
14541443
14551444#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
14561445void VPWidenCastRecipe::print (raw_ostream &O, const Twine &Indent,
14571446 VPSlotTracker &SlotTracker) const {
14581447 O << Indent << " WIDEN-CAST " ;
14591448 printAsOperand (O, SlotTracker);
1460- O << " = " << Instruction::getOpcodeName (Opcode);
1449+ O << " = " << Instruction::getOpcodeName (Opcode) << " " ;
14611450 printFlags (O);
14621451 printOperands (O, SlotTracker);
14631452 O << " to " << *getResultType ();
0 commit comments