IfConverter: Use TargetSchedule for instruction latencies
authorArnold Schwaighofer <aschwaighofer@apple.com>
Mon, 30 Sep 2013 15:28:56 +0000 (15:28 +0000)
committerArnold Schwaighofer <aschwaighofer@apple.com>
Mon, 30 Sep 2013 15:28:56 +0000 (15:28 +0000)
commitd42730dc712026cbfb1322a979e0ac72cd31a19e
tree191050f59933595fe9aeb6b77193c74686c694e3
parenta5b9cd1c68eda914ffcf133228824ca58e1ba518
IfConverter: Use TargetSchedule for instruction latencies

For targets that have instruction itineraries this means no change. Targets
that move over to the new schedule model will use be able the new schedule
module for instruction latencies in the if-converter (the logic is such that if
there is no itineary we will use the new sched model for the latencies).

Before, we queried "TTI->getInstructionLatency()" for the instruction latency
and the extra prediction cost. Now, we query the TargetSchedule abstraction for
the instruction latency and TargetInstrInfo for the extra predictation cost. The
TargetSchedule abstraction will internally call "TTI->getInstructionLatency" if
an itinerary exists, otherwise it will use the new schedule model.

ATTENTION: Out of tree targets!

(I will also send out an email later to LLVMDev)

This means, if your target implements

 unsigned getInstrLatency(const InstrItineraryData *ItinData,
                          const MachineInstr *MI,
                          unsigned *PredCost);

and returns a value for "PredCost", you now also need to implement

 unsigned getPredictationCost(const MachineInstr *MI);

(if your target uses the IfConversion.cpp pass)

radar://15077010

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191671 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/TargetSchedule.h
include/llvm/Target/TargetInstrInfo.h
lib/CodeGen/IfConversion.cpp
lib/CodeGen/TargetInstrInfo.cpp
lib/CodeGen/TargetSchedule.cpp
lib/Target/ARM/ARMBaseInstrInfo.cpp
lib/Target/ARM/ARMBaseInstrInfo.h
lib/Target/R600/R600InstrInfo.cpp
lib/Target/R600/R600InstrInfo.h