mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-21 18:31:36 +00:00
ARM: teach LLVM that Cortex-A7 is very similar to A8.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205314 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
77d76519dc
commit
cb68a2e3ab
@ -2967,7 +2967,7 @@ ARMBaseInstrInfo::getNumMicroOps(const InstrItineraryData *ItinData,
|
||||
break;
|
||||
}
|
||||
return UOps;
|
||||
} else if (Subtarget.isCortexA8()) {
|
||||
} else if (Subtarget.isCortexA8() || Subtarget.isCortexA7()) {
|
||||
if (NumRegs < 4)
|
||||
return 2;
|
||||
// 4 registers would be issued: 2, 2.
|
||||
@ -3004,7 +3004,7 @@ ARMBaseInstrInfo::getVLDMDefCycle(const InstrItineraryData *ItinData,
|
||||
return ItinData->getOperandCycle(DefClass, DefIdx);
|
||||
|
||||
int DefCycle;
|
||||
if (Subtarget.isCortexA8()) {
|
||||
if (Subtarget.isCortexA8() || Subtarget.isCortexA7()) {
|
||||
// (regno / 2) + (regno % 2) + 1
|
||||
DefCycle = RegNo / 2 + 1;
|
||||
if (RegNo % 2)
|
||||
@ -3045,7 +3045,7 @@ ARMBaseInstrInfo::getLDMDefCycle(const InstrItineraryData *ItinData,
|
||||
return ItinData->getOperandCycle(DefClass, DefIdx);
|
||||
|
||||
int DefCycle;
|
||||
if (Subtarget.isCortexA8()) {
|
||||
if (Subtarget.isCortexA8() || Subtarget.isCortexA7()) {
|
||||
// 4 registers would be issued: 1, 2, 1.
|
||||
// 5 registers would be issued: 1, 2, 2.
|
||||
DefCycle = RegNo / 2;
|
||||
@ -3079,7 +3079,7 @@ ARMBaseInstrInfo::getVSTMUseCycle(const InstrItineraryData *ItinData,
|
||||
return ItinData->getOperandCycle(UseClass, UseIdx);
|
||||
|
||||
int UseCycle;
|
||||
if (Subtarget.isCortexA8()) {
|
||||
if (Subtarget.isCortexA8() || Subtarget.isCortexA7()) {
|
||||
// (regno / 2) + (regno % 2) + 1
|
||||
UseCycle = RegNo / 2 + 1;
|
||||
if (RegNo % 2)
|
||||
@ -3119,7 +3119,7 @@ ARMBaseInstrInfo::getSTMUseCycle(const InstrItineraryData *ItinData,
|
||||
return ItinData->getOperandCycle(UseClass, UseIdx);
|
||||
|
||||
int UseCycle;
|
||||
if (Subtarget.isCortexA8()) {
|
||||
if (Subtarget.isCortexA8() || Subtarget.isCortexA7()) {
|
||||
UseCycle = RegNo / 2;
|
||||
if (UseCycle < 2)
|
||||
UseCycle = 2;
|
||||
@ -3309,7 +3309,7 @@ static int adjustDefLatency(const ARMSubtarget &Subtarget,
|
||||
const MachineInstr *DefMI,
|
||||
const MCInstrDesc *DefMCID, unsigned DefAlign) {
|
||||
int Adjust = 0;
|
||||
if (Subtarget.isCortexA8() || Subtarget.isLikeA9()) {
|
||||
if (Subtarget.isCortexA8() || Subtarget.isLikeA9() || Subtarget.isCortexA7()) {
|
||||
// FIXME: Shifter op hack: no shift (i.e. [r +/- r]) or [r + r << 2]
|
||||
// variants are one cycle cheaper.
|
||||
switch (DefMCID->getOpcode()) {
|
||||
@ -3610,7 +3610,8 @@ ARMBaseInstrInfo::getOperandLatency(const InstrItineraryData *ItinData,
|
||||
UseMCID, UseIdx, UseAlign);
|
||||
|
||||
if (Latency > 1 &&
|
||||
(Subtarget.isCortexA8() || Subtarget.isLikeA9())) {
|
||||
(Subtarget.isCortexA8() || Subtarget.isLikeA9() ||
|
||||
Subtarget.isCortexA7())) {
|
||||
// FIXME: Shifter op hack: no shift (i.e. [r +/- r]) or [r + r << 2]
|
||||
// variants are one cycle cheaper.
|
||||
switch (DefMCID.getOpcode()) {
|
||||
|
@ -412,8 +412,8 @@ bool ARMDAGToDAGISel::hasNoVMLxHazardUse(SDNode *N) const {
|
||||
if (!CheckVMLxHazard)
|
||||
return true;
|
||||
|
||||
if (!Subtarget->isCortexA8() && !Subtarget->isCortexA9() &&
|
||||
!Subtarget->isSwift())
|
||||
if (!Subtarget->isCortexA7() && !Subtarget->isCortexA8() &&
|
||||
!Subtarget->isCortexA9() && !Subtarget->isSwift())
|
||||
return true;
|
||||
|
||||
if (!N->hasOneUse())
|
||||
|
@ -265,6 +265,7 @@ public:
|
||||
bool hasV8Ops() const { return HasV8Ops; }
|
||||
|
||||
bool isCortexA5() const { return ARMProcFamily == CortexA5; }
|
||||
bool isCortexA7() const { return ARMProcFamily == CortexA7; }
|
||||
bool isCortexA8() const { return ARMProcFamily == CortexA8; }
|
||||
bool isCortexA9() const { return ARMProcFamily == CortexA9; }
|
||||
bool isCortexA15() const { return ARMProcFamily == CortexA15; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user