@@ -661,6 +661,9 @@ static Instruction *unpackLoadToAggregate(InstCombiner &IC, LoadInst &LI) {
661
661
if (NumElements == 1 ) {
662
662
LoadInst *NewLoad = combineLoadToNewType (IC, LI, ST->getTypeAtIndex (0U ),
663
663
" .unpack" );
664
+ AAMDNodes AAMD;
665
+ LI.getAAMetadata (AAMD);
666
+ NewLoad->setAAMetadata (AAMD);
664
667
return IC.replaceInstUsesWith (LI, IC.Builder ->CreateInsertValue (
665
668
UndefValue::get (T), NewLoad, 0 , Name));
666
669
}
@@ -690,6 +693,10 @@ static Instruction *unpackLoadToAggregate(InstCombiner &IC, LoadInst &LI) {
690
693
Name + " .elt" );
691
694
auto EltAlign = MinAlign (Align, SL->getElementOffset (i));
692
695
auto *L = IC.Builder ->CreateAlignedLoad (Ptr, EltAlign, Name + " .unpack" );
696
+ // Propagate AA metadata. It'll still be valid on the narrowed load.
697
+ AAMDNodes AAMD;
698
+ LI.getAAMetadata (AAMD);
699
+ L->setAAMetadata (AAMD);
693
700
V = IC.Builder ->CreateInsertValue (V, L, i);
694
701
}
695
702
@@ -702,6 +709,9 @@ static Instruction *unpackLoadToAggregate(InstCombiner &IC, LoadInst &LI) {
702
709
auto NumElements = AT->getNumElements ();
703
710
if (NumElements == 1 ) {
704
711
LoadInst *NewLoad = combineLoadToNewType (IC, LI, ET, " .unpack" );
712
+ AAMDNodes AAMD;
713
+ LI.getAAMetadata (AAMD);
714
+ NewLoad->setAAMetadata (AAMD);
705
715
return IC.replaceInstUsesWith (LI, IC.Builder ->CreateInsertValue (
706
716
UndefValue::get (T), NewLoad, 0 , Name));
707
717
}
@@ -734,6 +744,9 @@ static Instruction *unpackLoadToAggregate(InstCombiner &IC, LoadInst &LI) {
734
744
Name + " .elt" );
735
745
auto *L = IC.Builder ->CreateAlignedLoad (Ptr, MinAlign (Align, Offset),
736
746
Name + " .unpack" );
747
+ AAMDNodes AAMD;
748
+ LI.getAAMetadata (AAMD);
749
+ L->setAAMetadata (AAMD);
737
750
V = IC.Builder ->CreateInsertValue (V, L, i);
738
751
Offset += EltSize;
739
752
}
@@ -1192,7 +1205,11 @@ static bool unpackStoreToAggregate(InstCombiner &IC, StoreInst &SI) {
1192
1205
AddrName);
1193
1206
auto *Val = IC.Builder ->CreateExtractValue (V, i, EltName);
1194
1207
auto EltAlign = MinAlign (Align, SL->getElementOffset (i));
1195
- IC.Builder ->CreateAlignedStore (Val, Ptr, EltAlign);
1208
+ llvm::Instruction *NS =
1209
+ IC.Builder ->CreateAlignedStore (Val, Ptr, EltAlign);
1210
+ AAMDNodes AAMD;
1211
+ SI.getAAMetadata (AAMD);
1212
+ NS->setAAMetadata (AAMD);
1196
1213
}
1197
1214
1198
1215
return true ;
@@ -1239,7 +1256,10 @@ static bool unpackStoreToAggregate(InstCombiner &IC, StoreInst &SI) {
1239
1256
AddrName);
1240
1257
auto *Val = IC.Builder ->CreateExtractValue (V, i, EltName);
1241
1258
auto EltAlign = MinAlign (Align, Offset);
1242
- IC.Builder ->CreateAlignedStore (Val, Ptr, EltAlign);
1259
+ Instruction *NS = IC.Builder ->CreateAlignedStore (Val, Ptr, EltAlign);
1260
+ AAMDNodes AAMD;
1261
+ SI.getAAMetadata (AAMD);
1262
+ NS->setAAMetadata (AAMD);
1243
1263
Offset += EltSize;
1244
1264
}
1245
1265
0 commit comments