@@ -627,6 +627,7 @@ static void scalarizeMaskedExpandLoad(const DataLayout &DL, CallInst *CI,
627
627
Value *Ptr = CI->getArgOperand (0 );
628
628
Value *Mask = CI->getArgOperand (1 );
629
629
Value *PassThru = CI->getArgOperand (2 );
630
+ Align Alignment = CI->getParamAlign (0 ).valueOrOne ();
630
631
631
632
auto *VecType = cast<FixedVectorType>(CI->getType ());
632
633
@@ -644,6 +645,10 @@ static void scalarizeMaskedExpandLoad(const DataLayout &DL, CallInst *CI,
644
645
// The result vector
645
646
Value *VResult = PassThru;
646
647
648
+ // Adjust alignment for the scalar instruction.
649
+ const Align AdjustedAlignment =
650
+ commonAlignment (Alignment, EltTy->getPrimitiveSizeInBits () / 8 );
651
+
647
652
// Shorten the way if the mask is a vector of constants.
648
653
// Create a build_vector pattern, with loads/poisons as necessary and then
649
654
// shuffle blend with the pass through value.
@@ -659,7 +664,7 @@ static void scalarizeMaskedExpandLoad(const DataLayout &DL, CallInst *CI,
659
664
} else {
660
665
Value *NewPtr =
661
666
Builder.CreateConstInBoundsGEP1_32 (EltTy, Ptr , MemIndex);
662
- InsertElt = Builder.CreateAlignedLoad (EltTy, NewPtr , Align ( 1 ) ,
667
+ InsertElt = Builder.CreateAlignedLoad (EltTy, NewPtr , AdjustedAlignment ,
663
668
" Load" + Twine (Idx));
664
669
ShuffleMask[Idx] = Idx;
665
670
++MemIndex;
@@ -713,7 +718,7 @@ static void scalarizeMaskedExpandLoad(const DataLayout &DL, CallInst *CI,
713
718
CondBlock->setName (" cond.load" );
714
719
715
720
Builder.SetInsertPoint (CondBlock->getTerminator ());
716
- LoadInst *Load = Builder.CreateAlignedLoad (EltTy, Ptr , Align ( 1 ) );
721
+ LoadInst *Load = Builder.CreateAlignedLoad (EltTy, Ptr , AdjustedAlignment );
717
722
Value *NewVResult = Builder.CreateInsertElement (VResult, Load, Idx);
718
723
719
724
// Move the pointer if there are more blocks to come.
@@ -755,6 +760,7 @@ static void scalarizeMaskedCompressStore(const DataLayout &DL, CallInst *CI,
755
760
Value *Src = CI->getArgOperand (0 );
756
761
Value *Ptr = CI->getArgOperand (1 );
757
762
Value *Mask = CI->getArgOperand (2 );
763
+ Align Alignment = CI->getParamAlign (1 ).valueOrOne ();
758
764
759
765
auto *VecType = cast<FixedVectorType>(Src->getType ());
760
766
@@ -767,6 +773,10 @@ static void scalarizeMaskedCompressStore(const DataLayout &DL, CallInst *CI,
767
773
768
774
Type *EltTy = VecType->getElementType ();
769
775
776
+ // Adjust alignment for the scalar instruction.
777
+ const Align AdjustedAlignment =
778
+ commonAlignment (Alignment, EltTy->getPrimitiveSizeInBits () / 8 );
779
+
770
780
unsigned VectorWidth = VecType->getNumElements ();
771
781
772
782
// Shorten the way if the mask is a vector of constants.
@@ -778,7 +788,7 @@ static void scalarizeMaskedCompressStore(const DataLayout &DL, CallInst *CI,
778
788
Value *OneElt =
779
789
Builder.CreateExtractElement (Src, Idx, " Elt" + Twine (Idx));
780
790
Value *NewPtr = Builder.CreateConstInBoundsGEP1_32 (EltTy, Ptr , MemIndex);
781
- Builder.CreateAlignedStore (OneElt, NewPtr , Align ( 1 ) );
791
+ Builder.CreateAlignedStore (OneElt, NewPtr , AdjustedAlignment );
782
792
++MemIndex;
783
793
}
784
794
CI->eraseFromParent ();
@@ -824,7 +834,7 @@ static void scalarizeMaskedCompressStore(const DataLayout &DL, CallInst *CI,
824
834
825
835
Builder.SetInsertPoint (CondBlock->getTerminator ());
826
836
Value *OneElt = Builder.CreateExtractElement (Src, Idx);
827
- Builder.CreateAlignedStore (OneElt, Ptr , Align ( 1 ) );
837
+ Builder.CreateAlignedStore (OneElt, Ptr , AdjustedAlignment );
828
838
829
839
// Move the pointer if there are more blocks to come.
830
840
Value *NewPtr ;
0 commit comments