@@ -1142,29 +1142,72 @@ class SelectionDAG {
11421142 // / This function will set the MOLoad flag on MMOFlags, but you can set it if
11431143 // / you want. The MOStore flag must not be set.
11441144 SDValue getLoad (EVT VT, const SDLoc &dl, SDValue Chain, SDValue Ptr,
1145- MachinePointerInfo PtrInfo, unsigned Alignment = 0 ,
1145+ MachinePointerInfo PtrInfo, MaybeAlign Alignment,
11461146 MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
11471147 const AAMDNodes &AAInfo = AAMDNodes(),
11481148 const MDNode *Ranges = nullptr);
1149+ // / FIXME: Remove once transition to Align is over.
1150+ inline SDValue
1151+ getLoad (EVT VT, const SDLoc &dl, SDValue Chain, SDValue Ptr,
1152+ MachinePointerInfo PtrInfo, unsigned Alignment = 0 ,
1153+ MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
1154+ const AAMDNodes &AAInfo = AAMDNodes(),
1155+ const MDNode *Ranges = nullptr) {
1156+ return getLoad (VT, dl, Chain, Ptr, PtrInfo, MaybeAlign (Alignment), MMOFlags,
1157+ AAInfo, Ranges);
1158+ }
11491159 SDValue getLoad (EVT VT, const SDLoc &dl, SDValue Chain, SDValue Ptr,
11501160 MachineMemOperand *MMO);
11511161 SDValue
11521162 getExtLoad (ISD::LoadExtType ExtType, const SDLoc &dl, EVT VT, SDValue Chain,
11531163 SDValue Ptr, MachinePointerInfo PtrInfo, EVT MemVT,
1154- unsigned Alignment = 0 ,
1164+ MaybeAlign Alignment,
11551165 MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
11561166 const AAMDNodes &AAInfo = AAMDNodes());
1167+ // / FIXME: Remove once transition to Align is over.
1168+ inline SDValue
1169+ getExtLoad (ISD::LoadExtType ExtType, const SDLoc &dl, EVT VT, SDValue Chain,
1170+ SDValue Ptr, MachinePointerInfo PtrInfo, EVT MemVT,
1171+ unsigned Alignment = 0 ,
1172+ MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
1173+ const AAMDNodes &AAInfo = AAMDNodes()) {
1174+ return getExtLoad (ExtType, dl, VT, Chain, Ptr, PtrInfo, MemVT,
1175+ MaybeAlign (Alignment), MMOFlags, AAInfo);
1176+ }
11571177 SDValue getExtLoad (ISD::LoadExtType ExtType, const SDLoc &dl, EVT VT,
11581178 SDValue Chain, SDValue Ptr, EVT MemVT,
11591179 MachineMemOperand *MMO);
11601180 SDValue getIndexedLoad (SDValue OrigLoad, const SDLoc &dl, SDValue Base,
11611181 SDValue Offset, ISD::MemIndexedMode AM);
11621182 SDValue getLoad (ISD::MemIndexedMode AM, ISD::LoadExtType ExtType, EVT VT,
11631183 const SDLoc &dl, SDValue Chain, SDValue Ptr, SDValue Offset,
1164- MachinePointerInfo PtrInfo, EVT MemVT, unsigned Alignment = 0 ,
1184+ MachinePointerInfo PtrInfo, EVT MemVT, Align Alignment,
11651185 MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
11661186 const AAMDNodes &AAInfo = AAMDNodes(),
11671187 const MDNode *Ranges = nullptr);
1188+ inline SDValue
1189+ getLoad (ISD::MemIndexedMode AM, ISD::LoadExtType ExtType, EVT VT,
1190+ const SDLoc &dl, SDValue Chain, SDValue Ptr, SDValue Offset,
1191+ MachinePointerInfo PtrInfo, EVT MemVT, MaybeAlign Alignment,
1192+ MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
1193+ const AAMDNodes &AAInfo = AAMDNodes(),
1194+ const MDNode *Ranges = nullptr) {
1195+ // Ensures that codegen never sees a None Alignment.
1196+ return getLoad (AM, ExtType, VT, dl, Chain, Ptr, Offset, PtrInfo, MemVT,
1197+ Alignment.getValueOr (getEVTAlign (MemVT)), MMOFlags, AAInfo,
1198+ Ranges);
1199+ }
1200+ // / FIXME: Remove once transition to Align is over.
1201+ inline SDValue
1202+ getLoad (ISD::MemIndexedMode AM, ISD::LoadExtType ExtType, EVT VT,
1203+ const SDLoc &dl, SDValue Chain, SDValue Ptr, SDValue Offset,
1204+ MachinePointerInfo PtrInfo, EVT MemVT, unsigned Alignment = 0 ,
1205+ MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
1206+ const AAMDNodes &AAInfo = AAMDNodes(),
1207+ const MDNode *Ranges = nullptr) {
1208+ return getLoad (AM, ExtType, VT, dl, Chain, Ptr, Offset, PtrInfo, MemVT,
1209+ MaybeAlign (Alignment), MMOFlags, AAInfo, Ranges);
1210+ }
11681211 SDValue getLoad (ISD::MemIndexedMode AM, ISD::LoadExtType ExtType, EVT VT,
11691212 const SDLoc &dl, SDValue Chain, SDValue Ptr, SDValue Offset,
11701213 EVT MemVT, MachineMemOperand *MMO);
@@ -1173,18 +1216,55 @@ class SelectionDAG {
11731216 // /
11741217 // / This function will set the MOStore flag on MMOFlags, but you can set it if
11751218 // / you want. The MOLoad and MOInvariant flags must not be set.
1219+
11761220 SDValue
11771221 getStore (SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
1178- MachinePointerInfo PtrInfo, unsigned Alignment = 0 ,
1222+ MachinePointerInfo PtrInfo, Align Alignment,
11791223 MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
11801224 const AAMDNodes &AAInfo = AAMDNodes());
1225+ inline SDValue
1226+ getStore (SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
1227+ MachinePointerInfo PtrInfo, MaybeAlign Alignment,
1228+ MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
1229+ const AAMDNodes &AAInfo = AAMDNodes()) {
1230+ return getStore (Chain, dl, Val, Ptr, PtrInfo,
1231+ Alignment.getValueOr (getEVTAlign (Val.getValueType ())),
1232+ MMOFlags, AAInfo);
1233+ }
1234+ // / FIXME: Remove once transition to Align is over.
1235+ inline SDValue
1236+ getStore (SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
1237+ MachinePointerInfo PtrInfo, unsigned Alignment = 0 ,
1238+ MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
1239+ const AAMDNodes &AAInfo = AAMDNodes()) {
1240+ return getStore (Chain, dl, Val, Ptr, PtrInfo, MaybeAlign (Alignment),
1241+ MMOFlags, AAInfo);
1242+ }
11811243 SDValue getStore (SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
11821244 MachineMemOperand *MMO);
11831245 SDValue
11841246 getTruncStore (SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
1185- MachinePointerInfo PtrInfo, EVT SVT, unsigned Alignment = 0 ,
1247+ MachinePointerInfo PtrInfo, EVT SVT, Align Alignment,
11861248 MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
11871249 const AAMDNodes &AAInfo = AAMDNodes());
1250+ inline SDValue
1251+ getTruncStore (SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
1252+ MachinePointerInfo PtrInfo, EVT SVT, MaybeAlign Alignment,
1253+ MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
1254+ const AAMDNodes &AAInfo = AAMDNodes()) {
1255+ return getTruncStore (Chain, dl, Val, Ptr, PtrInfo, SVT,
1256+ Alignment.getValueOr (getEVTAlign (SVT)), MMOFlags,
1257+ AAInfo);
1258+ }
1259+ // / FIXME: Remove once transition to Align is over.
1260+ inline SDValue
1261+ getTruncStore (SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
1262+ MachinePointerInfo PtrInfo, EVT SVT, unsigned Alignment = 0 ,
1263+ MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
1264+ const AAMDNodes &AAInfo = AAMDNodes()) {
1265+ return getTruncStore (Chain, dl, Val, Ptr, PtrInfo, SVT,
1266+ MaybeAlign (Alignment), MMOFlags, AAInfo);
1267+ }
11881268 SDValue getTruncStore (SDValue Chain, const SDLoc &dl, SDValue Val,
11891269 SDValue Ptr, EVT SVT, MachineMemOperand *MMO);
11901270 SDValue getIndexedStore (SDValue OrigStore, const SDLoc &dl, SDValue Base,
@@ -1752,7 +1832,12 @@ class SelectionDAG {
17521832 EVT EltVT = EVT());
17531833
17541834 // / Compute the default alignment value for the given type.
1755- unsigned getEVTAlignment (EVT MemoryVT) const ;
1835+ Align getEVTAlign (EVT MemoryVT) const ;
1836+ // / Compute the default alignment value for the given type.
1837+ // / FIXME: Remove once transition to Align is over.
1838+ inline unsigned getEVTAlignment (EVT MemoryVT) const {
1839+ return getEVTAlign (MemoryVT).value ();
1840+ }
17561841
17571842 // / Test whether the given value is a constant int or similar node.
17581843 SDNode *isConstantIntBuildVectorOrConstantInt (SDValue N);
0 commit comments