summaryrefslogtreecommitdiff
path: root/lib/Target/Hexagon/HexagonInstrInfo.cpp
diff options
context:
space:
mode:
authorSirish Pande <spande@codeaurora.org>2012-05-10 20:20:25 +0000
committerSirish Pande <spande@codeaurora.org>2012-05-10 20:20:25 +0000
commit7517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71 (patch)
tree8a348ecf53f5f593b3198b96ffa4df264eadbe43 /lib/Target/Hexagon/HexagonInstrInfo.cpp
parent55ba5dff3c1a723adf302f1124aafde797dbf31a (diff)
downloadllvm-7517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71.tar.gz
llvm-7517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71.tar.bz2
llvm-7517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71.tar.xz
Hexagon V5 FP Support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156568 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Hexagon/HexagonInstrInfo.cpp')
-rw-r--r--lib/Target/Hexagon/HexagonInstrInfo.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/lib/Target/Hexagon/HexagonInstrInfo.cpp b/lib/Target/Hexagon/HexagonInstrInfo.cpp
index 655ddbce8f..8286ca93f2 100644
--- a/lib/Target/Hexagon/HexagonInstrInfo.cpp
+++ b/lib/Target/Hexagon/HexagonInstrInfo.cpp
@@ -444,14 +444,15 @@ unsigned HexagonInstrInfo::createVR(MachineFunction* MF, MVT VT) const {
MachineRegisterInfo &RegInfo = MF->getRegInfo();
const TargetRegisterClass *TRC;
- if (VT == MVT::i1)
+ if (VT == MVT::i1) {
TRC = &Hexagon::PredRegsRegClass;
- else if (VT == MVT::i32)
+ } else if (VT == MVT::i32 || VT == MVT::f32) {
TRC = &Hexagon::IntRegsRegClass;
- else if (VT == MVT::i64)
+ } else if (VT == MVT::i64 || VT == MVT::f64) {
TRC = &Hexagon::DoubleRegsRegClass;
- else
+ } else {
llvm_unreachable("Cannot handle this register class");
+ }
unsigned NewReg = RegInfo.createVirtualRegister(TRC);
return NewReg;
@@ -714,8 +715,13 @@ bool HexagonInstrInfo::isExtended(const MachineInstr *MI) const {
// TFR_FI
case Hexagon::TFR_FI_immext_V4:
- return true;
+ // TFRI_F
+ case Hexagon::TFRI_f:
+ case Hexagon::TFRI_cPt_f:
+ case Hexagon::TFRI_cNotPt_f:
+ case Hexagon::CONST64_Float_Real:
+ return true;
}
}
@@ -1892,6 +1898,9 @@ getMatchingCondBranchOpcode(int Opc, bool invertPredicate) const {
case Hexagon::TFR:
return !invertPredicate ? Hexagon::TFR_cPt :
Hexagon::TFR_cNotPt;
+ case Hexagon::TFRI_f:
+ return !invertPredicate ? Hexagon::TFRI_cPt_f :
+ Hexagon::TFRI_cNotPt_f;
case Hexagon::TFRI:
return !invertPredicate ? Hexagon::TFRI_cPt :
Hexagon::TFRI_cNotPt;
@@ -2330,13 +2339,17 @@ isValidOffset(const int Opcode, const int Offset) const {
switch(Opcode) {
case Hexagon::LDriw:
+ case Hexagon::LDriw_f:
case Hexagon::STriw:
+ case Hexagon::STriw_f:
assert((Offset % 4 == 0) && "Offset has incorrect alignment");
return (Offset >= Hexagon_MEMW_OFFSET_MIN) &&
(Offset <= Hexagon_MEMW_OFFSET_MAX);
case Hexagon::LDrid:
+ case Hexagon::LDrid_f:
case Hexagon::STrid:
+ case Hexagon::STrid_f:
assert((Offset % 8 == 0) && "Offset has incorrect alignment");
return (Offset >= Hexagon_MEMD_OFFSET_MIN) &&
(Offset <= Hexagon_MEMD_OFFSET_MAX);