summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2010-10-26 02:08:50 +0000
committerEvan Cheng <evan.cheng@apple.com>2010-10-26 02:08:50 +0000
commite96b8d7ab66051f9fcbac5dfffd8dff7544a2909 (patch)
tree7368120864db587882d4c5781bee4bfed04c3e09 /llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
parentb45591979b34ecbfe74d6f9897c4fe40c671ee5d (diff)
downloadbcm5719-llvm-e96b8d7ab66051f9fcbac5dfffd8dff7544a2909.tar.gz
bcm5719-llvm-e96b8d7ab66051f9fcbac5dfffd8dff7544a2909.zip
Use instruction itinerary to determine what instructions are 'cheap'.
llvm-svn: 117348
Diffstat (limited to 'llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp')
-rw-r--r--llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
index 757ca13512c..8834ff3268f 100644
--- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
+++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
@@ -1951,3 +1951,18 @@ hasHighOperandLatency(const InstrItineraryData *ItinData,
return DDomain == ARMII::DomainVFP || DDomain == ARMII::DomainNEON ||
UDomain == ARMII::DomainVFP || UDomain == ARMII::DomainNEON;
}
+
+bool ARMBaseInstrInfo::
+hasLowDefLatency(const InstrItineraryData *ItinData,
+ const MachineInstr *DefMI, unsigned DefIdx) const {
+ if (!ItinData || ItinData->isEmpty())
+ return false;
+
+ unsigned DDomain = DefMI->getDesc().TSFlags & ARMII::DomainMask;
+ if (DDomain == ARMII::DomainGeneral) {
+ unsigned DefClass = DefMI->getDesc().getSchedClass();
+ int DefCycle = ItinData->getOperandCycle(DefClass, DefIdx);
+ return (DefCycle != -1 && DefCycle <= 2);
+ }
+ return false;
+}
OpenPOWER on IntegriCloud