@@ -1697,29 +1697,23 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
1697
1697
if (FOp) {
1698
1698
// TODO: Support other kinds of Intrinsics (i.e. reductions)
1699
1699
if (ICA.getID () == Intrinsic::vp_load) {
1700
- Align Alignment = isa_and_nonnull<VPIntrinsic>(ICA.getInst ())
1701
- ? cast<VPIntrinsic>(ICA.getInst ())
1702
- ->getPointerAlignment ()
1703
- .valueOrOne ()
1704
- : Align (1 );
1705
- unsigned AS = ICA.getArgs ().size () >= 1 &&
1706
- isa<PointerType>(ICA.getArgs ()[0 ]->getType ())
1707
- ? cast<PointerType>(ICA.getArgs ()[0 ]->getType ())
1708
- ->getAddressSpace ()
1709
- : 0 ;
1700
+ Align Alignment;
1701
+ if (auto *VPI = dyn_cast_or_null<VPIntrinsic>(ICA.getInst ()))
1702
+ Alignment = VPI->getPointerAlignment ().valueOrOne ();
1703
+ unsigned AS = 0 ;
1704
+ if (ICA.getArgs ().size () > 1 )
1705
+ if (auto PtrTy = dyn_cast<PointerType>(ICA.getArgs ()[0 ]->getType ()))
1706
+ AS = PtrTy->getAddressSpace ();
1710
1707
return thisT ()->getMemoryOpCost (*FOp, ICA.getReturnType (), Alignment,
1711
1708
AS, CostKind);
1712
1709
} else if (ICA.getID () == Intrinsic::vp_store) {
1713
- Align Alignment = isa_and_nonnull<VPIntrinsic>(ICA.getInst ())
1714
- ? cast<VPIntrinsic>(ICA.getInst ())
1715
- ->getPointerAlignment ()
1716
- .valueOrOne ()
1717
- : Align (1 );
1718
- unsigned AS = ICA.getArgs ().size () >= 2 &&
1719
- isa<PointerType>(ICA.getArgs ()[1 ]->getType ())
1720
- ? cast<PointerType>(ICA.getArgs ()[1 ]->getType ())
1721
- ->getAddressSpace ()
1722
- : 0 ;
1710
+ Align Alignment;
1711
+ if (auto *VPI = dyn_cast_or_null<VPIntrinsic>(ICA.getInst ()))
1712
+ Alignment = VPI->getPointerAlignment ().valueOrOne ();
1713
+ unsigned AS = 0 ;
1714
+ if (ICA.getArgs ().size () >= 2 )
1715
+ if (auto PtrTy = dyn_cast<PointerType>(ICA.getArgs ()[1 ]->getType ()))
1716
+ AS = PtrTy->getAddressSpace ();
1723
1717
return thisT ()->getMemoryOpCost (*FOp, Args[0 ]->getType (), Alignment,
1724
1718
AS, CostKind);
1725
1719
} else if (VPBinOpIntrinsic::isVPBinOp (ICA.getID ())) {
@@ -1732,6 +1726,9 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
1732
1726
VPIntrinsic::getFunctionalIntrinsicIDForVP (ICA.getID ());
1733
1727
if (FID) {
1734
1728
// Non-vp version will have same Args/Tys except mask and vector length.
1729
+ assert (ICA.getArgs ().size () >= 2 && ICA.getArgTypes ().size () >= 2 &&
1730
+ " Expected VPIntrinsic to have Mask and Vector Length args and "
1731
+ " types" );
1735
1732
ArrayRef<const Value *> NewArgs (ICA.getArgs ().begin (),
1736
1733
ICA.getArgs ().end () - 2 );
1737
1734
ArrayRef<Type *> NewTys (ICA.getArgTypes ().begin (),
0 commit comments