You've already forked linux-packaging-mono
Imported Upstream version 6.4.0.137
Former-commit-id: 943baa9f16a098c33e129777827f3a9d20da00d6
This commit is contained in:
parent
e9207cf623
commit
ef583813eb
@@ -299,6 +299,11 @@ void AArch64AsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNum,
|
||||
printOffset(MO.getOffset(), O);
|
||||
break;
|
||||
}
|
||||
case MachineOperand::MO_BlockAddress: {
|
||||
MCSymbol *Sym = GetBlockAddressSymbol(MO.getBlockAddress());
|
||||
Sym->print(O, MAI);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "llvm/Pass.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/DebugCounter.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <cassert>
|
||||
#include <iterator>
|
||||
@@ -60,6 +61,8 @@ STATISTIC(NumCollisionsAvoided,
|
||||
"Number of HW prefetch tag collisions avoided");
|
||||
STATISTIC(NumCollisionsNotAvoided,
|
||||
"Number of HW prefetch tag collisions not avoided due to lack of regsiters");
|
||||
DEBUG_COUNTER(FixCounter, "falkor-hwpf",
|
||||
"Controls which tag collisions are avoided");
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -729,6 +732,21 @@ void FalkorHWPFFix::runOnLoop(MachineLoop &L, MachineFunction &Fn) {
|
||||
bool Fixed = false;
|
||||
DEBUG(dbgs() << "Attempting to fix tag collision: " << MI);
|
||||
|
||||
if (!DebugCounter::shouldExecute(FixCounter)) {
|
||||
DEBUG(dbgs() << "Skipping fix due to debug counter:\n " << MI);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Add the non-base registers of MI as live so we don't use them as
|
||||
// scratch registers.
|
||||
for (unsigned OpI = 0, OpE = MI.getNumOperands(); OpI < OpE; ++OpI) {
|
||||
if (OpI == static_cast<unsigned>(LdI.BaseRegIdx))
|
||||
continue;
|
||||
MachineOperand &MO = MI.getOperand(OpI);
|
||||
if (MO.isReg() && MO.readsReg())
|
||||
LR.addReg(MO.getReg());
|
||||
}
|
||||
|
||||
for (unsigned ScratchReg : AArch64::GPR64RegClass) {
|
||||
if (!LR.available(ScratchReg) || MRI.isReserved(ScratchReg))
|
||||
continue;
|
||||
|
||||
@@ -917,6 +917,8 @@ int AArch64FrameLowering::resolveFrameIndexReference(const MachineFunction &MF,
|
||||
int FPOffset = MFI.getObjectOffset(FI) + FixedObject + 16;
|
||||
int Offset = MFI.getObjectOffset(FI) + MFI.getStackSize();
|
||||
bool isFixed = MFI.isFixedObjectIndex(FI);
|
||||
bool isCSR = !isFixed && MFI.getObjectOffset(FI) >=
|
||||
-((int)AFI->getCalleeSavedStackSize());
|
||||
|
||||
// Use frame pointer to reference fixed objects. Use it for locals if
|
||||
// there are VLAs or a dynamically realigned SP (and thus the SP isn't
|
||||
@@ -930,6 +932,12 @@ int AArch64FrameLowering::resolveFrameIndexReference(const MachineFunction &MF,
|
||||
// Argument access should always use the FP.
|
||||
if (isFixed) {
|
||||
UseFP = hasFP(MF);
|
||||
} else if (isCSR && RegInfo->needsStackRealignment(MF)) {
|
||||
// References to the CSR area must use FP if we're re-aligning the stack
|
||||
// since the dynamically-sized alignment padding is between the SP/BP and
|
||||
// the CSR area.
|
||||
assert(hasFP(MF) && "Re-aligned stack must have frame pointer");
|
||||
UseFP = true;
|
||||
} else if (hasFP(MF) && !RegInfo->hasBasePointer(MF) &&
|
||||
!RegInfo->needsStackRealignment(MF)) {
|
||||
// Use SP or FP, whichever gives us the best chance of the offset
|
||||
@@ -947,9 +955,9 @@ int AArch64FrameLowering::resolveFrameIndexReference(const MachineFunction &MF,
|
||||
}
|
||||
}
|
||||
|
||||
assert((isFixed || !RegInfo->needsStackRealignment(MF) || !UseFP) &&
|
||||
assert(((isFixed || isCSR) || !RegInfo->needsStackRealignment(MF) || !UseFP) &&
|
||||
"In the presence of dynamic stack pointer realignment, "
|
||||
"non-argument objects cannot be accessed through the frame pointer");
|
||||
"non-argument/CSR objects cannot be accessed through the frame pointer");
|
||||
|
||||
if (UseFP) {
|
||||
FrameReg = RegInfo->getFrameRegister(MF);
|
||||
|
||||
@@ -1 +1 @@
|
||||
9a021c751eec90145bb1ee521df8e93258028de5
|
||||
3fa5457b4e0cd4affafb6c28aff7b0e1156bc74c
|
||||
@@ -1 +1 @@
|
||||
79826ca2ed8dc6f3d0f111508f3cb638fe2f4281
|
||||
040011d858e771021341f098d0f852310aba87f1
|
||||
Reference in New Issue
Block a user