diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-01-31 01:49:58 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-01-31 01:49:58 +0000 |
commit | 8db2001d52444e8e24197dde160b8ad82ea1d7c9 (patch) | |
tree | 84e554961063632f7c0fbda091304687f421576a /llvm/lib/CodeGen/MachineFunction.cpp | |
parent | 025e03d62b24e580f1453c22acef41c218164a5b (diff) | |
download | llvm-8db2001d52444e8e24197dde160b8ad82ea1d7c9.zip llvm-8db2001d52444e8e24197dde160b8ad82ea1d7c9.tar.gz llvm-8db2001d52444e8e24197dde160b8ad82ea1d7c9.tar.bz2 |
GlobalISel: Use helper function for MMO splitting
Also fix an alignment bug getMachineMemOperand. If the
tracked value is null, the offset isn't tracked so the
base alignment needs to be reduced.
llvm-svn: 352716
Diffstat (limited to 'llvm/lib/CodeGen/MachineFunction.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineFunction.cpp | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp index e332396..84a2076 100644 --- a/llvm/lib/CodeGen/MachineFunction.cpp +++ b/llvm/lib/CodeGen/MachineFunction.cpp @@ -395,19 +395,18 @@ MachineMemOperand *MachineFunction::getMachineMemOperand( MachineMemOperand * MachineFunction::getMachineMemOperand(const MachineMemOperand *MMO, int64_t Offset, uint64_t Size) { - if (MMO->getValue()) - return new (Allocator) - MachineMemOperand(MachinePointerInfo(MMO->getValue(), - MMO->getOffset()+Offset), - MMO->getFlags(), Size, MMO->getBaseAlignment(), - AAMDNodes(), nullptr, MMO->getSyncScopeID(), - MMO->getOrdering(), MMO->getFailureOrdering()); + const MachinePointerInfo &PtrInfo = MMO->getPointerInfo(); + + // If there is no pointer value, the offset isn't tracked so we need to adjust + // the base alignment. + unsigned Align = PtrInfo.V.isNull() + ? MinAlign(MMO->getBaseAlignment(), Offset) + : MMO->getBaseAlignment(); + return new (Allocator) - MachineMemOperand(MachinePointerInfo(MMO->getPseudoValue(), - MMO->getOffset()+Offset), - MMO->getFlags(), Size, MMO->getBaseAlignment(), - AAMDNodes(), nullptr, MMO->getSyncScopeID(), - MMO->getOrdering(), MMO->getFailureOrdering()); + MachineMemOperand(PtrInfo.getWithOffset(Offset), MMO->getFlags(), Size, + Align, AAMDNodes(), nullptr, MMO->getSyncScopeID(), + MMO->getOrdering(), MMO->getFailureOrdering()); } MachineMemOperand * |