Skip to content

Commit 01ba2ad

Browse files
committed
[Alignment][NFC] Provide tightened up functions in SelectionDAG, MachineFunction and MachineMemOperand
Summary: This is patch is part of a series to introduce an Alignment type. See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html See this patch for the introduction of the type: https://reviews.llvm.org/D64790 Reviewers: courbet Subscribers: hiraditya, jfb, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D77046
1 parent 6f428e0 commit 01ba2ad

File tree

6 files changed

+124
-36
lines changed

6 files changed

+124
-36
lines changed

llvm/include/llvm/CodeGen/MachineFunction.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -813,12 +813,22 @@ class MachineFunction {
813813
/// explicitly deallocated.
814814
MachineMemOperand *getMachineMemOperand(
815815
MachinePointerInfo PtrInfo, MachineMemOperand::Flags f, uint64_t s,
816-
unsigned base_alignment, const AAMDNodes &AAInfo = AAMDNodes(),
817-
const MDNode *Ranges = nullptr,
818-
SyncScope::ID SSID = SyncScope::System,
816+
Align base_alignment, const AAMDNodes &AAInfo = AAMDNodes(),
817+
const MDNode *Ranges = nullptr, SyncScope::ID SSID = SyncScope::System,
819818
AtomicOrdering Ordering = AtomicOrdering::NotAtomic,
820819
AtomicOrdering FailureOrdering = AtomicOrdering::NotAtomic);
821820

821+
/// FIXME: Remove once transition to Align is over.
822+
inline MachineMemOperand *getMachineMemOperand(
823+
MachinePointerInfo PtrInfo, MachineMemOperand::Flags f, uint64_t s,
824+
unsigned base_alignment, const AAMDNodes &AAInfo = AAMDNodes(),
825+
const MDNode *Ranges = nullptr, SyncScope::ID SSID = SyncScope::System,
826+
AtomicOrdering Ordering = AtomicOrdering::NotAtomic,
827+
AtomicOrdering FailureOrdering = AtomicOrdering::NotAtomic) {
828+
return getMachineMemOperand(PtrInfo, f, s, Align(base_alignment), AAInfo,
829+
Ranges, SSID, Ordering, FailureOrdering);
830+
}
831+
822832
/// getMachineMemOperand - Allocate a new MachineMemOperand by copying
823833
/// an existing one, adjusting by an offset and using the given size.
824834
/// MachineMemOperands are owned by the MachineFunction and need not be

llvm/include/llvm/CodeGen/MachineMemOperand.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,7 @@ class MachineMemOperand {
181181
/// atomic operations the atomic ordering requirements when store does not
182182
/// occur must also be specified.
183183
MachineMemOperand(MachinePointerInfo PtrInfo, Flags flags, uint64_t s,
184-
uint64_t a,
185-
const AAMDNodes &AAInfo = AAMDNodes(),
184+
Align a, const AAMDNodes &AAInfo = AAMDNodes(),
186185
const MDNode *Ranges = nullptr,
187186
SyncScope::ID SSID = SyncScope::System,
188187
AtomicOrdering Ordering = AtomicOrdering::NotAtomic,

llvm/include/llvm/CodeGen/SelectionDAG.h

Lines changed: 91 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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);

llvm/lib/CodeGen/MachineFunction.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ MachineFunction::DeleteMachineBasicBlock(MachineBasicBlock *MBB) {
471471

472472
MachineMemOperand *MachineFunction::getMachineMemOperand(
473473
MachinePointerInfo PtrInfo, MachineMemOperand::Flags f, uint64_t s,
474-
unsigned base_alignment, const AAMDNodes &AAInfo, const MDNode *Ranges,
474+
Align base_alignment, const AAMDNodes &AAInfo, const MDNode *Ranges,
475475
SyncScope::ID SSID, AtomicOrdering Ordering,
476476
AtomicOrdering FailureOrdering) {
477477
return new (Allocator)
@@ -490,10 +490,10 @@ MachineFunction::getMachineMemOperand(const MachineMemOperand *MMO,
490490
? commonAlignment(MMO->getBaseAlign(), Offset)
491491
: MMO->getBaseAlign();
492492

493-
return new (Allocator) MachineMemOperand(
494-
PtrInfo.getWithOffset(Offset), MMO->getFlags(), Size, Alignment.value(),
495-
AAMDNodes(), nullptr, MMO->getSyncScopeID(), MMO->getOrdering(),
496-
MMO->getFailureOrdering());
493+
return new (Allocator)
494+
MachineMemOperand(PtrInfo.getWithOffset(Offset), MMO->getFlags(), Size,
495+
Alignment, AAMDNodes(), nullptr, MMO->getSyncScopeID(),
496+
MMO->getOrdering(), MMO->getFailureOrdering());
497497
}
498498

499499
MachineMemOperand *
@@ -504,7 +504,7 @@ MachineFunction::getMachineMemOperand(const MachineMemOperand *MMO,
504504
MachinePointerInfo(MMO->getPseudoValue(), MMO->getOffset());
505505

506506
return new (Allocator) MachineMemOperand(
507-
MPI, MMO->getFlags(), MMO->getSize(), MMO->getBaseAlign().value(), AAInfo,
507+
MPI, MMO->getFlags(), MMO->getSize(), MMO->getBaseAlign(), AAInfo,
508508
MMO->getRanges(), MMO->getSyncScopeID(), MMO->getOrdering(),
509509
MMO->getFailureOrdering());
510510
}
@@ -513,7 +513,7 @@ MachineMemOperand *
513513
MachineFunction::getMachineMemOperand(const MachineMemOperand *MMO,
514514
MachineMemOperand::Flags Flags) {
515515
return new (Allocator) MachineMemOperand(
516-
MMO->getPointerInfo(), Flags, MMO->getSize(), MMO->getBaseAlign().value(),
516+
MMO->getPointerInfo(), Flags, MMO->getSize(), MMO->getBaseAlign(),
517517
MMO->getAAInfo(), MMO->getRanges(), MMO->getSyncScopeID(),
518518
MMO->getOrdering(), MMO->getFailureOrdering());
519519
}

llvm/lib/CodeGen/MachineOperand.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1004,7 +1004,7 @@ MachinePointerInfo MachinePointerInfo::getUnknownStack(MachineFunction &MF) {
10041004
}
10051005

10061006
MachineMemOperand::MachineMemOperand(MachinePointerInfo ptrinfo, Flags f,
1007-
uint64_t s, uint64_t a,
1007+
uint64_t s, Align a,
10081008
const AAMDNodes &AAInfo,
10091009
const MDNode *Ranges, SyncScope::ID SSID,
10101010
AtomicOrdering Ordering,

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,12 +1000,12 @@ SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, ArrayRef<SDValue> Ops,
10001000
return Node;
10011001
}
10021002

1003-
unsigned SelectionDAG::getEVTAlignment(EVT VT) const {
1003+
Align SelectionDAG::getEVTAlign(EVT VT) const {
10041004
Type *Ty = VT == MVT::iPTR ?
10051005
PointerType::get(Type::getInt8Ty(*getContext()), 0) :
10061006
VT.getTypeForEVT(*getContext());
10071007

1008-
return getDataLayout().getABITypeAlignment(Ty);
1008+
return getDataLayout().getABITypeAlign(Ty);
10091009
}
10101010

10111011
// EntryNode could meaningfully have debug info if we can find it...
@@ -6807,13 +6807,11 @@ SDValue SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
68076807
EVT VT, const SDLoc &dl, SDValue Chain,
68086808
SDValue Ptr, SDValue Offset,
68096809
MachinePointerInfo PtrInfo, EVT MemVT,
6810-
unsigned Alignment,
6810+
Align Alignment,
68116811
MachineMemOperand::Flags MMOFlags,
68126812
const AAMDNodes &AAInfo, const MDNode *Ranges) {
68136813
assert(Chain.getValueType() == MVT::Other &&
68146814
"Invalid chain type");
6815-
if (Alignment == 0) // Ensure that codegen never sees alignment 0
6816-
Alignment = getEVTAlignment(MemVT);
68176815

68186816
MMOFlags |= MachineMemOperand::MOLoad;
68196817
assert((MMOFlags & MachineMemOperand::MOStore) == 0);
@@ -6825,7 +6823,7 @@ SDValue SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
68256823
uint64_t Size = MemoryLocation::getSizeOrUnknown(MemVT.getStoreSize());
68266824
MachineFunction &MF = getMachineFunction();
68276825
MachineMemOperand *MMO = MF.getMachineMemOperand(
6828-
PtrInfo, MMOFlags, Size, Alignment, AAInfo, Ranges);
6826+
PtrInfo, MMOFlags, Size, Alignment.value(), AAInfo, Ranges);
68296827
return getLoad(AM, ExtType, VT, dl, Chain, Ptr, Offset, MemVT, MMO);
68306828
}
68316829

@@ -6880,7 +6878,7 @@ SDValue SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
68806878

68816879
SDValue SelectionDAG::getLoad(EVT VT, const SDLoc &dl, SDValue Chain,
68826880
SDValue Ptr, MachinePointerInfo PtrInfo,
6883-
unsigned Alignment,
6881+
MaybeAlign Alignment,
68846882
MachineMemOperand::Flags MMOFlags,
68856883
const AAMDNodes &AAInfo, const MDNode *Ranges) {
68866884
SDValue Undef = getUNDEF(Ptr.getValueType());
@@ -6898,7 +6896,7 @@ SDValue SelectionDAG::getLoad(EVT VT, const SDLoc &dl, SDValue Chain,
68986896
SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, const SDLoc &dl,
68996897
EVT VT, SDValue Chain, SDValue Ptr,
69006898
MachinePointerInfo PtrInfo, EVT MemVT,
6901-
unsigned Alignment,
6899+
MaybeAlign Alignment,
69026900
MachineMemOperand::Flags MMOFlags,
69036901
const AAMDNodes &AAInfo) {
69046902
SDValue Undef = getUNDEF(Ptr.getValueType());
@@ -6931,12 +6929,10 @@ SDValue SelectionDAG::getIndexedLoad(SDValue OrigLoad, const SDLoc &dl,
69316929

69326930
SDValue SelectionDAG::getStore(SDValue Chain, const SDLoc &dl, SDValue Val,
69336931
SDValue Ptr, MachinePointerInfo PtrInfo,
6934-
unsigned Alignment,
6932+
Align Alignment,
69356933
MachineMemOperand::Flags MMOFlags,
69366934
const AAMDNodes &AAInfo) {
69376935
assert(Chain.getValueType() == MVT::Other && "Invalid chain type");
6938-
if (Alignment == 0) // Ensure that codegen never sees alignment 0
6939-
Alignment = getEVTAlignment(Val.getValueType());
69406936

69416937
MMOFlags |= MachineMemOperand::MOStore;
69426938
assert((MMOFlags & MachineMemOperand::MOLoad) == 0);
@@ -6947,8 +6943,8 @@ SDValue SelectionDAG::getStore(SDValue Chain, const SDLoc &dl, SDValue Val,
69476943
MachineFunction &MF = getMachineFunction();
69486944
uint64_t Size =
69496945
MemoryLocation::getSizeOrUnknown(Val.getValueType().getStoreSize());
6950-
MachineMemOperand *MMO =
6951-
MF.getMachineMemOperand(PtrInfo, MMOFlags, Size, Alignment, AAInfo);
6946+
MachineMemOperand *MMO = MF.getMachineMemOperand(PtrInfo, MMOFlags, Size,
6947+
Alignment.value(), AAInfo);
69526948
return getStore(Chain, dl, Val, Ptr, MMO);
69536949
}
69546950

@@ -6984,13 +6980,11 @@ SDValue SelectionDAG::getStore(SDValue Chain, const SDLoc &dl, SDValue Val,
69846980

69856981
SDValue SelectionDAG::getTruncStore(SDValue Chain, const SDLoc &dl, SDValue Val,
69866982
SDValue Ptr, MachinePointerInfo PtrInfo,
6987-
EVT SVT, unsigned Alignment,
6983+
EVT SVT, Align Alignment,
69886984
MachineMemOperand::Flags MMOFlags,
69896985
const AAMDNodes &AAInfo) {
69906986
assert(Chain.getValueType() == MVT::Other &&
69916987
"Invalid chain type");
6992-
if (Alignment == 0) // Ensure that codegen never sees alignment 0
6993-
Alignment = getEVTAlignment(SVT);
69946988

69956989
MMOFlags |= MachineMemOperand::MOStore;
69966990
assert((MMOFlags & MachineMemOperand::MOLoad) == 0);
@@ -7000,7 +6994,7 @@ SDValue SelectionDAG::getTruncStore(SDValue Chain, const SDLoc &dl, SDValue Val,
70006994

70016995
MachineFunction &MF = getMachineFunction();
70026996
MachineMemOperand *MMO = MF.getMachineMemOperand(
7003-
PtrInfo, MMOFlags, SVT.getStoreSize(), Alignment, AAInfo);
6997+
PtrInfo, MMOFlags, SVT.getStoreSize(), Alignment.value(), AAInfo);
70046998
return getTruncStore(Chain, dl, Val, Ptr, SVT, MMO);
70056999
}
70067000

0 commit comments

Comments
 (0)