@@ -256,7 +256,7 @@ static bool isReInterleaveMask(ShuffleVectorInst *SVI, unsigned &Factor,
256256static Value *getMaskOperand (IntrinsicInst *II) {
257257 switch (II->getIntrinsicID ()) {
258258 default :
259- llvm_unreachable ( " Unexpected intrinsic " ) ;
259+ return nullptr ;
260260 case Intrinsic::vp_load:
261261 return II->getOperand (1 );
262262 case Intrinsic::masked_load:
@@ -382,8 +382,11 @@ bool InterleavedAccessImpl::lowerInterleavedLoad(
382382 if (LI) {
383383 LLVM_DEBUG (dbgs () << " IA: Found an interleaved load: " << *Load << " \n " );
384384 } else {
385+ Value *MaskOperand = getMaskOperand (II);
386+ if (!MaskOperand)
387+ llvm_unreachable (" unsupported intrinsic" );
385388 // Check mask operand. Handle both all-true/false and interleaved mask.
386- Mask = getMask (getMaskOperand (II) , Factor, VecTy);
389+ Mask = getMask (MaskOperand , Factor, VecTy);
387390 if (!Mask)
388391 return false ;
389392
@@ -534,10 +537,12 @@ bool InterleavedAccessImpl::lowerInterleavedStore(
534537 if (SI) {
535538 LLVM_DEBUG (dbgs () << " IA: Found an interleaved store: " << *Store << " \n " );
536539 } else {
540+ Value *MaskOperand = getMaskOperand (II);
541+ if (!MaskOperand)
542+ llvm_unreachable (" unsupported intrinsic" );
537543 // Check mask operand. Handle both all-true/false and interleaved mask.
538544 unsigned LaneMaskLen = NumStoredElements / Factor;
539- Mask = getMask (getMaskOperand (II), Factor,
540- ElementCount::getFixed (LaneMaskLen));
545+ Mask = getMask (MaskOperand, Factor, ElementCount::getFixed (LaneMaskLen));
541546 if (!Mask)
542547 return false ;
543548
@@ -634,9 +639,12 @@ bool InterleavedAccessImpl::lowerDeinterleaveIntrinsic(
634639 << " and factor = " << Factor << " \n " );
635640 } else {
636641 assert (II);
642+ Value *MaskOperand = getMaskOperand (II);
643+ if (!MaskOperand)
644+ return false ;
637645
638646 // Check mask operand. Handle both all-true/false and interleaved mask.
639- Mask = getMask (getMaskOperand (II) , Factor, getDeinterleavedVectorType (DI));
647+ Mask = getMask (MaskOperand , Factor, getDeinterleavedVectorType (DI));
640648 if (!Mask)
641649 return false ;
642650
@@ -673,8 +681,11 @@ bool InterleavedAccessImpl::lowerInterleaveIntrinsic(
673681
674682 Value *Mask = nullptr ;
675683 if (II) {
684+ Value *MaskOperand = getMaskOperand (II);
685+ if (!MaskOperand)
686+ return false ;
676687 // Check mask operand. Handle both all-true/false and interleaved mask.
677- Mask = getMask (getMaskOperand (II) , Factor,
688+ Mask = getMask (MaskOperand , Factor,
678689 cast<VectorType>(InterleaveValues[0 ]->getType ()));
679690 if (!Mask)
680691 return false ;
0 commit comments