mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[Alignment][NFC] TargetLowering::allowsMemoryAccessForAlignment
First patch of a series to adapt TargetLowering::allowsXXX functions This 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 Differential Revision: https://reviews.llvm.org/D81372
This commit is contained in:
parent
22095a116e
commit
5415efc6ea
@ -1594,7 +1594,7 @@ public:
|
||||
/// (as defined by the target).
|
||||
bool allowsMemoryAccessForAlignment(
|
||||
LLVMContext &Context, const DataLayout &DL, EVT VT,
|
||||
unsigned AddrSpace = 0, unsigned Alignment = 1,
|
||||
unsigned AddrSpace = 0, Align Alignment = Align(1),
|
||||
MachineMemOperand::Flags Flags = MachineMemOperand::MONone,
|
||||
bool *Fast = nullptr) const;
|
||||
|
||||
|
@ -1573,14 +1573,14 @@ unsigned TargetLoweringBase::getByValTypeAlignment(Type *Ty,
|
||||
|
||||
bool TargetLoweringBase::allowsMemoryAccessForAlignment(
|
||||
LLVMContext &Context, const DataLayout &DL, EVT VT, unsigned AddrSpace,
|
||||
unsigned Alignment, MachineMemOperand::Flags Flags, bool *Fast) const {
|
||||
Align Alignment, MachineMemOperand::Flags Flags, bool *Fast) const {
|
||||
// Check if the specified alignment is sufficient based on the data layout.
|
||||
// TODO: While using the data layout works in practice, a better solution
|
||||
// would be to implement this check directly (make this a virtual function).
|
||||
// For example, the ABI alignment may change based on software platform while
|
||||
// this function should only be affected by hardware implementation.
|
||||
Type *Ty = VT.getTypeForEVT(Context);
|
||||
if (Alignment >= DL.getABITypeAlign(Ty).value()) {
|
||||
if (Alignment >= DL.getABITypeAlign(Ty)) {
|
||||
// Assume that an access that meets the ABI-specified alignment is fast.
|
||||
if (Fast != nullptr)
|
||||
*Fast = true;
|
||||
@ -1588,15 +1588,15 @@ bool TargetLoweringBase::allowsMemoryAccessForAlignment(
|
||||
}
|
||||
|
||||
// This is a misaligned access.
|
||||
return allowsMisalignedMemoryAccesses(VT, AddrSpace, Alignment, Flags, Fast);
|
||||
return allowsMisalignedMemoryAccesses(VT, AddrSpace, Alignment.value(), Flags,
|
||||
Fast);
|
||||
}
|
||||
|
||||
bool TargetLoweringBase::allowsMemoryAccessForAlignment(
|
||||
LLVMContext &Context, const DataLayout &DL, EVT VT,
|
||||
const MachineMemOperand &MMO, bool *Fast) const {
|
||||
return allowsMemoryAccessForAlignment(Context, DL, VT, MMO.getAddrSpace(),
|
||||
MMO.getAlign().value(), MMO.getFlags(),
|
||||
Fast);
|
||||
MMO.getAlign(), MMO.getFlags(), Fast);
|
||||
}
|
||||
|
||||
bool TargetLoweringBase::allowsMemoryAccess(LLVMContext &Context,
|
||||
@ -1604,8 +1604,8 @@ bool TargetLoweringBase::allowsMemoryAccess(LLVMContext &Context,
|
||||
unsigned AddrSpace, Align Alignment,
|
||||
MachineMemOperand::Flags Flags,
|
||||
bool *Fast) const {
|
||||
return allowsMemoryAccessForAlignment(Context, DL, VT, AddrSpace,
|
||||
Alignment.value(), Flags, Fast);
|
||||
return allowsMemoryAccessForAlignment(Context, DL, VT, AddrSpace, Alignment,
|
||||
Flags, Fast);
|
||||
}
|
||||
|
||||
bool TargetLoweringBase::allowsMemoryAccess(LLVMContext &Context,
|
||||
|
Loading…
Reference in New Issue
Block a user