HexagonInstrInfo.cpp revision 31d157ae1ac2cd9c787dc3c1d28e64c682803844
13e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner//===-- HexagonInstrInfo.cpp - Hexagon Instruction Information ------------===//
2edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman//
33e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner//                     The LLVM Compiler Infrastructure
43e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner//
53e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner// This file is distributed under the University of Illinois Open Source
63e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner// License. See LICENSE.TXT for details.
7edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman//
83e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner//===----------------------------------------------------------------------===//
93e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner//
103e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner// This file contains the Hexagon implementation of the TargetInstrInfo class.
113e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner//
123e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner//===----------------------------------------------------------------------===//
133e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
143e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "HexagonRegisterInfo.h"
153e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "HexagonInstrInfo.h"
1645b8caf1c5a1fd8337038d64c6da8fba2d299fdfChris Lattner#include "HexagonSubtarget.h"
1702659d23637f69f90640bfa3e66919517103c57aJim Laskey#include "Hexagon.h"
183e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "llvm/ADT/STLExtras.h"
19e1bd822ddb0099406d9f280535461033dfeeb190Chris Lattner#include "llvm/ADT/SmallVector.h"
200f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner#include "llvm/CodeGen/DFAPacketizer.h"
21adf6a965a321372c640845407195594835921eb4Chris Lattner#include "llvm/CodeGen/MachineInstrBuilder.h"
223e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "llvm/CodeGen/MachineRegisterInfo.h"
233e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "llvm/CodeGen/MachineFrameInfo.h"
24033e6816668da71ff0866a61f5c0a7e7e795d069Evan Cheng#include "llvm/CodeGen/MachineMemOperand.h"
253e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "llvm/CodeGen/PseudoSourceValue.h"
263e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "llvm/Support/MathExtras.h"
273e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#define GET_INSTRINFO_CTOR
283e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "HexagonGenInstrInfo.inc"
293e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "HexagonGenDFAPacketizer.inc"
303e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
313e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerusing namespace llvm;
323e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
333e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner///
343e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// Constants for Hexagon instructions.
353e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner///
363e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMW_OFFSET_MAX = 4095;
373e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMW_OFFSET_MIN = 4096;
383e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMD_OFFSET_MAX = 8191;
393e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMD_OFFSET_MIN = 8192;
403e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMH_OFFSET_MAX = 2047;
413e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMH_OFFSET_MIN = 2048;
423e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMB_OFFSET_MAX = 1023;
433e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMB_OFFSET_MIN = 1024;
446831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_ADDI_OFFSET_MAX = 32767;
456831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_ADDI_OFFSET_MIN = 32768;
466831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMD_AUTOINC_MAX = 56;
476831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMD_AUTOINC_MIN = 64;
486831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMW_AUTOINC_MAX = 28;
496831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMW_AUTOINC_MIN = 32;
506831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMH_AUTOINC_MAX = 14;
516831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMH_AUTOINC_MIN = 16;
526831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMB_AUTOINC_MAX = 7;
536831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMB_AUTOINC_MIN = 8;
546831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
556831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
563e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
5768a17febc70d9beb5353454e0c6d136ca1e87605Chris LattnerHexagonInstrInfo::HexagonInstrInfo(HexagonSubtarget &ST)
5868a17febc70d9beb5353454e0c6d136ca1e87605Chris Lattner  : HexagonGenInstrInfo(Hexagon::ADJCALLSTACKDOWN, Hexagon::ADJCALLSTACKUP),
5968a17febc70d9beb5353454e0c6d136ca1e87605Chris Lattner    RI(ST, *this), Subtarget(ST) {
603e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner}
616831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
623e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
633e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// isLoadFromStackSlot - If the specified machine instruction is a direct
643e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// load from a stack slot, return the virtual or physical register number of
6568a17febc70d9beb5353454e0c6d136ca1e87605Chris Lattner/// the destination along with the FrameIndex of the loaded stack slot.  If
663e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// not, return 0.  This predicate must return 0 if the instruction has
673e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// any side effects other than loading from the stack slot.
683e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerunsigned HexagonInstrInfo::isLoadFromStackSlot(const MachineInstr *MI,
693e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                                             int &FrameIndex) const {
703e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
713e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
7203c8546ec57523970874917854a2fb77b1ff598eChris Lattner  switch (MI->getOpcode()) {
7303c8546ec57523970874917854a2fb77b1ff598eChris Lattner  case Hexagon::LDriw:
7403c8546ec57523970874917854a2fb77b1ff598eChris Lattner  case Hexagon::LDrid:
7503c8546ec57523970874917854a2fb77b1ff598eChris Lattner  case Hexagon::LDrih:
7603c8546ec57523970874917854a2fb77b1ff598eChris Lattner  case Hexagon::LDrib:
77c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::LDriub:
78c7029805ef35ce9805931067b841e6af11db382eChris Lattner    if (MI->getOperand(2).isFI() &&
79c7029805ef35ce9805931067b841e6af11db382eChris Lattner        MI->getOperand(1).isImm() && (MI->getOperand(1).getImm() == 0)) {
803e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      FrameIndex = MI->getOperand(2).getIndex();
813e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return MI->getOperand(0).getReg();
82c7029805ef35ce9805931067b841e6af11db382eChris Lattner    }
83c7029805ef35ce9805931067b841e6af11db382eChris Lattner    break;
84c7029805ef35ce9805931067b841e6af11db382eChris Lattner
85c7029805ef35ce9805931067b841e6af11db382eChris Lattner  default:
86c7029805ef35ce9805931067b841e6af11db382eChris Lattner    break;
87c7029805ef35ce9805931067b841e6af11db382eChris Lattner  }
88c7029805ef35ce9805931067b841e6af11db382eChris Lattner
89c7029805ef35ce9805931067b841e6af11db382eChris Lattner  return 0;
90c7029805ef35ce9805931067b841e6af11db382eChris Lattner}
91c7029805ef35ce9805931067b841e6af11db382eChris Lattner
928afc48e44ad8868c1d41511db645e2ba1a4b894eChris Lattner
9369a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner/// isStoreToStackSlot - If the specified machine instruction is a direct
9469a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner/// store to a stack slot, return the virtual or physical register number of
9569a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner/// the source reg along with the FrameIndex of the loaded stack slot.  If
9669a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner/// not, return 0.  This predicate must return 0 if the instruction has
978afc48e44ad8868c1d41511db645e2ba1a4b894eChris Lattner/// any side effects other than storing to the stack slot.
9803c8546ec57523970874917854a2fb77b1ff598eChris Lattnerunsigned HexagonInstrInfo::isStoreToStackSlot(const MachineInstr *MI,
9903c8546ec57523970874917854a2fb77b1ff598eChris Lattner                                            int &FrameIndex) const {
10003c8546ec57523970874917854a2fb77b1ff598eChris Lattner  switch (MI->getOpcode()) {
10169a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner  case Hexagon::STriw:
10269a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner  case Hexagon::STrid:
10303c8546ec57523970874917854a2fb77b1ff598eChris Lattner  case Hexagon::STrih:
1048afc48e44ad8868c1d41511db645e2ba1a4b894eChris Lattner  case Hexagon::STrib:
1053e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    if (MI->getOperand(2).isFI() &&
1063e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner        MI->getOperand(1).isImm() && (MI->getOperand(1).getImm() == 0)) {
1079c32d3b798dc6caeebe6cea2effe80ca5e84e66eChris Lattner      FrameIndex = MI->getOperand(2).getIndex();
1083e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return MI->getOperand(0).getReg();
1093e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    }
1103e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    break;
1113e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
1123e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  default:
11368a17febc70d9beb5353454e0c6d136ca1e87605Chris Lattner    break;
1143e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  }
1153e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
1163e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  return 0;
1173e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner}
1183e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
1193e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
1203e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerunsigned
1213e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerHexagonInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
1223e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                             MachineBasicBlock *FBB,
1233e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                             const SmallVectorImpl<MachineOperand> &Cond,
124456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner                             DebugLoc DL) const{
125c7029805ef35ce9805931067b841e6af11db382eChris Lattner
126c7029805ef35ce9805931067b841e6af11db382eChris Lattner    int BOpc   = Hexagon::JMP;
127c7029805ef35ce9805931067b841e6af11db382eChris Lattner    int BccOpc = Hexagon::JMP_c;
128c7029805ef35ce9805931067b841e6af11db382eChris Lattner
129c7029805ef35ce9805931067b841e6af11db382eChris Lattner    assert(TBB && "InsertBranch must not be told to insert a fallthrough");
130c7029805ef35ce9805931067b841e6af11db382eChris Lattner
131c7029805ef35ce9805931067b841e6af11db382eChris Lattner    int regPos = 0;
1323e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    // Check if ReverseBranchCondition has asked to reverse this branch
133c7029805ef35ce9805931067b841e6af11db382eChris Lattner    // If we want to reverse the branch an odd number of times, we want
134c7029805ef35ce9805931067b841e6af11db382eChris Lattner    // JMP_cNot.
135c7029805ef35ce9805931067b841e6af11db382eChris Lattner    if (!Cond.empty() && Cond[0].isImm() && Cond[0].getImm() == 0) {
136c7029805ef35ce9805931067b841e6af11db382eChris Lattner      BccOpc = Hexagon::JMP_cNot;
137c7029805ef35ce9805931067b841e6af11db382eChris Lattner      regPos = 1;
138c7029805ef35ce9805931067b841e6af11db382eChris Lattner    }
13903c8546ec57523970874917854a2fb77b1ff598eChris Lattner
1403e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    if (FBB == 0) {
141c7029805ef35ce9805931067b841e6af11db382eChris Lattner      if (Cond.empty()) {
142c7029805ef35ce9805931067b841e6af11db382eChris Lattner        // Due to a bug in TailMerging/CFG Optimization, we need to add a
143c7029805ef35ce9805931067b841e6af11db382eChris Lattner        // special case handling of a predicated jump followed by an
144c7029805ef35ce9805931067b841e6af11db382eChris Lattner        // unconditional jump. If not, Tail Merging and CFG Optimization go
145c7029805ef35ce9805931067b841e6af11db382eChris Lattner        // into an infinite loop.
146c7029805ef35ce9805931067b841e6af11db382eChris Lattner        MachineBasicBlock *NewTBB, *NewFBB;
147c7029805ef35ce9805931067b841e6af11db382eChris Lattner        SmallVector<MachineOperand, 4> Cond;
148c7029805ef35ce9805931067b841e6af11db382eChris Lattner        MachineInstr *Term = MBB.getFirstTerminator();
149c7029805ef35ce9805931067b841e6af11db382eChris Lattner        if (isPredicated(Term) && !AnalyzeBranch(MBB, NewTBB, NewFBB, Cond,
150c7029805ef35ce9805931067b841e6af11db382eChris Lattner                                                 false)) {
151c7029805ef35ce9805931067b841e6af11db382eChris Lattner          MachineBasicBlock *NextBB =
152c7029805ef35ce9805931067b841e6af11db382eChris Lattner            llvm::next(MachineFunction::iterator(&MBB));
153c7029805ef35ce9805931067b841e6af11db382eChris Lattner          if (NewTBB == NextBB) {
154c7029805ef35ce9805931067b841e6af11db382eChris Lattner            ReverseBranchCondition(Cond);
155c7029805ef35ce9805931067b841e6af11db382eChris Lattner            RemoveBranch(MBB);
156c7029805ef35ce9805931067b841e6af11db382eChris Lattner            return InsertBranch(MBB, TBB, 0, Cond, DL);
157c7029805ef35ce9805931067b841e6af11db382eChris Lattner          }
158c7029805ef35ce9805931067b841e6af11db382eChris Lattner        }
1596831a815999dde4cf801e2076e66b4943964daf2Chris Lattner        BuildMI(&MBB, DL, get(BOpc)).addMBB(TBB);
1606831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      } else {
161750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman        BuildMI(&MBB, DL,
162750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman                get(BccOpc)).addReg(Cond[regPos].getReg()).addMBB(TBB);
163ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner      }
164ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner      return 1;
16577e77a6aa0ab25a812947aed477220dd11220a18Chris Lattner    }
16677e77a6aa0ab25a812947aed477220dd11220a18Chris Lattner
16777e77a6aa0ab25a812947aed477220dd11220a18Chris Lattner    BuildMI(&MBB, DL, get(BccOpc)).addReg(Cond[regPos].getReg()).addMBB(TBB);
16877e77a6aa0ab25a812947aed477220dd11220a18Chris Lattner    BuildMI(&MBB, DL, get(BOpc)).addMBB(FBB);
169cad063f1a8ecda4fd556a733dc5eaa8a96acb80dChris Lattner
17035481892da1e5634bf497c8a0cabb1bb5a8b8fefChris Lattner    return 2;
171ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner}
1726269ed125fc492d81dc5e3f48482816fc9d47f49Jim Laskey
1736269ed125fc492d81dc5e3f48482816fc9d47f49Jim Laskey
1746269ed125fc492d81dc5e3f48482816fc9d47f49Jim Laskeybool HexagonInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,
1755a8441ea3fc145393d6274156bd05c4a006099eaNate Begeman                                     MachineBasicBlock *&TBB,
1765a8441ea3fc145393d6274156bd05c4a006099eaNate Begeman                                 MachineBasicBlock *&FBB,
1771618bebcf6f9cd19c4e05de3bfffda28c246bb12Chris Lattner                                 SmallVectorImpl<MachineOperand> &Cond,
1781618bebcf6f9cd19c4e05de3bfffda28c246bb12Chris Lattner                                 bool AllowModify) const {
17900b16889ab461b7ecef1c91ade101186b7f1fce2Jeff Cohen  FBB = NULL;
180456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner
181456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  // If the block has no terminators, it just falls into the block after it.
182e34b396ab7d28469bf3d9679a748b643d8e30458Chris Lattner  MachineBasicBlock::iterator I = MBB.end();
183e34b396ab7d28469bf3d9679a748b643d8e30458Chris Lattner  if (I == MBB.begin())
1845b359c6c4f052e41579ad7da9af37db4f54207d9Chris Lattner    return false;
1855b359c6c4f052e41579ad7da9af37db4f54207d9Chris Lattner
186b9fa3bc8f39bf1e8df48b85eae4563032dd20bfcChris Lattner  // A basic block may looks like this:
1873e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  //
1883e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  //  [   insn
1893e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  //     EH_LABEL
1903e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  //      insn
1913e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  //      insn
1923e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  //      insn
193c7029805ef35ce9805931067b841e6af11db382eChris Lattner  //     EH_LABEL
194c7029805ef35ce9805931067b841e6af11db382eChris Lattner  //      insn     ]
195b89175feffa7148c05d1d30a8e382b8d321edae5Chris Lattner  //
1965fbb5d2459a5410590f285250faa604576308a93Nate Begeman  // It has two succs but does not have a terminator
1975fbb5d2459a5410590f285250faa604576308a93Nate Begeman  // Don't know how to handle it.
1983e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng  do {
1993e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng    --I;
2003e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng    if (I->isEHLabel())
2013e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng      return true;
2023e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng  } while (I != MBB.begin());
2033e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng
2043e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng  I = MBB.end();
2053e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng  --I;
2065fbb5d2459a5410590f285250faa604576308a93Nate Begeman
2075fbb5d2459a5410590f285250faa604576308a93Nate Begeman  while (I->isDebugValue()) {
2083e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    if (I == MBB.begin())
2099c32d3b798dc6caeebe6cea2effe80ca5e84e66eChris Lattner      return false;
2109c32d3b798dc6caeebe6cea2effe80ca5e84e66eChris Lattner    --I;
2119c32d3b798dc6caeebe6cea2effe80ca5e84e66eChris Lattner  }
2126a648614e88586e85a36ceb5c1d3b84e4f55b458Nate Begeman  if (!isUnpredicatedTerminator(I))
2133e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    return false;
2143e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
2153e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  // Get the last instruction in the block.
21632fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner  MachineInstr *LastInst = I;
21732fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner
21832fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner  // If there is only one terminator instruction, process it.
21932fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner  if (I == MBB.begin() || !isUnpredicatedTerminator(--I)) {
22032fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner    if (LastInst->getOpcode() == Hexagon::JMP) {
22132fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      TBB = LastInst->getOperand(0).getMBB();
22232fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      return false;
22332fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner    }
22432fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner    if (LastInst->getOpcode() == Hexagon::JMP_c) {
22532fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      // Block ends with fall-through true condbranch.
22632fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      TBB = LastInst->getOperand(1).getMBB();
22732fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      Cond.push_back(LastInst->getOperand(0));
22832fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      return false;
22932fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner    }
23032fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner    if (LastInst->getOpcode() == Hexagon::JMP_cNot) {
23132fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      // Block ends with fall-through false condbranch.
23232fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      TBB = LastInst->getOperand(1).getMBB();
23332fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      Cond.push_back(MachineOperand::CreateImm(0));
23432fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      Cond.push_back(LastInst->getOperand(0));
23532fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      return false;
2361618bebcf6f9cd19c4e05de3bfffda28c246bb12Chris Lattner    }
2373e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    // Otherwise, don't know what this is.
2386831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return true;
2396831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  }
2406831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
241ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner  // Get the instruction before it if it's a terminator.
242ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner  MachineInstr *SecondLastInst = I;
243ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner
244ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner  // If there are three terminators, we don't know what sort of block this is.
24532fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner  if (SecondLastInst && I != MBB.begin() &&
24632fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      isUnpredicatedTerminator(--I))
24732fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner    return true;
24832fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner
249ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner  // If the block ends with Hexagon::BRCOND and Hexagon:JMP, handle it.
25032fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner  if (((SecondLastInst->getOpcode() == Hexagon::BRCOND) ||
25132fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      (SecondLastInst->getOpcode() == Hexagon::JMP_c)) &&
25232fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      LastInst->getOpcode() == Hexagon::JMP) {
25332fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner    TBB =  SecondLastInst->getOperand(1).getMBB();
254de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner    Cond.push_back(SecondLastInst->getOperand(0));
255de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner    FBB = LastInst->getOperand(0).getMBB();
256de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner    return false;
257ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner  }
258ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner
259ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner  // If the block ends with Hexagon::JMP_cNot and Hexagon:JMP, handle it.
260de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner  if ((SecondLastInst->getOpcode() == Hexagon::JMP_cNot) &&
261de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner      LastInst->getOpcode() == Hexagon::JMP) {
262de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner    TBB =  SecondLastInst->getOperand(1).getMBB();
26332fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner    Cond.push_back(MachineOperand::CreateImm(0));
26432fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner    Cond.push_back(SecondLastInst->getOperand(0));
265ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner    FBB = LastInst->getOperand(0).getMBB();
266c7029805ef35ce9805931067b841e6af11db382eChris Lattner    return false;
267c7029805ef35ce9805931067b841e6af11db382eChris Lattner  }
26832fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner
26932fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner  // If the block ends with two Hexagon:JMPs, handle it.  The second one is not
2703e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  // executed, so remove it.
27132fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner  if (SecondLastInst->getOpcode() == Hexagon::JMP &&
27232fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner      LastInst->getOpcode() == Hexagon::JMP) {
2733e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    TBB = SecondLastInst->getOperand(0).getMBB();
2743e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    I = LastInst;
2753e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    if (AllowModify)
27671c42a0190300a8903aaea80467b88f15f327ea9Chris Lattner      I->eraseFromParent();
277c7029805ef35ce9805931067b841e6af11db382eChris Lattner    return false;
278c7029805ef35ce9805931067b841e6af11db382eChris Lattner  }
2793e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
2803e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  // Otherwise, can't handle this.
28162fd269c146d9023efe32644e44cd97b88631d4fChris Lattner  return true;
2823e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner}
2833e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
2846831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
2856831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerunsigned HexagonInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
2866831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  int BOpc   = Hexagon::JMP;
2876831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  int BccOpc = Hexagon::JMP_c;
2886831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  int BccOpcNot = Hexagon::JMP_cNot;
2896831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
2906831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  MachineBasicBlock::iterator I = MBB.end();
2916831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  if (I == MBB.begin()) return 0;
2926831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  --I;
2936831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  if (I->getOpcode() != BOpc && I->getOpcode() != BccOpc &&
2946831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      I->getOpcode() != BccOpcNot)
2956831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return 0;
2966831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
2976831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  // Remove the branch.
2986831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  I->eraseFromParent();
2996831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
3006831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  I = MBB.end();
3016831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
3026831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  if (I == MBB.begin()) return 1;
3036831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  --I;
3046831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  if (I->getOpcode() != BccOpc && I->getOpcode() != BccOpcNot)
3056831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return 1;
3066831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
3076831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  // Remove the branch.
3086831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  I->eraseFromParent();
3096831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  return 2;
3106831a815999dde4cf801e2076e66b4943964daf2Chris Lattner}
3116831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
3126831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
3136831a815999dde4cf801e2076e66b4943964daf2Chris Lattnervoid HexagonInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
3146831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                                 MachineBasicBlock::iterator I, DebugLoc DL,
3156831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                                 unsigned DestReg, unsigned SrcReg,
3166831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                                 bool KillSrc) const {
3176831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  if (Hexagon::IntRegsRegClass.contains(SrcReg, DestReg)) {
3186831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    BuildMI(MBB, I, DL, get(Hexagon::TFR), DestReg).addReg(SrcReg);
3196831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return;
3206831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  }
3216831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  if (Hexagon::DoubleRegsRegClass.contains(SrcReg, DestReg)) {
3226831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    BuildMI(MBB, I, DL, get(Hexagon::TFR_64), DestReg).addReg(SrcReg);
3236831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return;
3246831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  }
3256831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  if (Hexagon::PredRegsRegClass.contains(SrcReg, DestReg)) {
3266831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    // Map Pd = Ps to Pd = or(Ps, Ps).
3276831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    BuildMI(MBB, I, DL, get(Hexagon::OR_pp),
3286831a815999dde4cf801e2076e66b4943964daf2Chris Lattner            DestReg).addReg(SrcReg).addReg(SrcReg);
3296831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return;
3306831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  }
3316831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  if (Hexagon::DoubleRegsRegClass.contains(DestReg, SrcReg)) {
3326831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    // We can have an overlap between single and double reg: r1:0 = r0.
3336831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    if(SrcReg == RI.getSubReg(DestReg, Hexagon::subreg_loreg)) {
3346831a815999dde4cf801e2076e66b4943964daf2Chris Lattner        // r1:0 = r0
3356831a815999dde4cf801e2076e66b4943964daf2Chris Lattner        BuildMI(MBB, I, DL, get(Hexagon::TFRI), (RI.getSubReg(DestReg,
3366831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                Hexagon::subreg_hireg))).addImm(0);
3376831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    } else {
3386831a815999dde4cf801e2076e66b4943964daf2Chris Lattner        // r1:0 = r1 or no overlap.
3396831a815999dde4cf801e2076e66b4943964daf2Chris Lattner        BuildMI(MBB, I, DL, get(Hexagon::TFR), (RI.getSubReg(DestReg,
3406831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                Hexagon::subreg_loreg))).addReg(SrcReg);
3416831a815999dde4cf801e2076e66b4943964daf2Chris Lattner        BuildMI(MBB, I, DL, get(Hexagon::TFRI), (RI.getSubReg(DestReg,
3426831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                Hexagon::subreg_hireg))).addImm(0);
3436831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    }
3446831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return;
3456831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  }
3466831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  if (Hexagon::CRRegsRegClass.contains(DestReg, SrcReg)) {
3476831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    BuildMI(MBB, I, DL, get(Hexagon::TFCR), DestReg).addReg(SrcReg);
3486831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return;
3496831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  }
3506831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
3516831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  llvm_unreachable("Unimplemented");
3526831a815999dde4cf801e2076e66b4943964daf2Chris Lattner}
3536831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
3546831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
3556831a815999dde4cf801e2076e66b4943964daf2Chris Lattnervoid HexagonInstrInfo::
3566831a815999dde4cf801e2076e66b4943964daf2Chris LattnerstoreRegToStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
3576831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                    unsigned SrcReg, bool isKill, int FI,
3586831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                    const TargetRegisterClass *RC,
3596831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                    const TargetRegisterInfo *TRI) const {
3606831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
3616831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  DebugLoc DL = MBB.findDebugLoc(I);
3626831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  MachineFunction &MF = *MBB.getParent();
3636831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  MachineFrameInfo &MFI = *MF.getFrameInfo();
3646831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  unsigned Align = MFI.getObjectAlignment(FI);
3656831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
3666831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  MachineMemOperand *MMO =
3676831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      MF.getMachineMemOperand(
3686831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                      MachinePointerInfo(PseudoSourceValue::getFixedStack(FI)),
3696831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                      MachineMemOperand::MOStore,
3706831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                      MFI.getObjectSize(FI),
3716831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                      Align);
3726831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
3736831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  if (Hexagon::IntRegsRegisterClass->hasSubClassEq(RC)) {
3746831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    BuildMI(MBB, I, DL, get(Hexagon::STriw))
3756831a815999dde4cf801e2076e66b4943964daf2Chris Lattner          .addFrameIndex(FI).addImm(0)
3766831a815999dde4cf801e2076e66b4943964daf2Chris Lattner          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
3776831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  } else if (Hexagon::DoubleRegsRegisterClass->hasSubClassEq(RC)) {
3786831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    BuildMI(MBB, I, DL, get(Hexagon::STrid))
3796831a815999dde4cf801e2076e66b4943964daf2Chris Lattner          .addFrameIndex(FI).addImm(0)
3806831a815999dde4cf801e2076e66b4943964daf2Chris Lattner          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
3816831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  } else if (Hexagon::PredRegsRegisterClass->hasSubClassEq(RC)) {
3826831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    BuildMI(MBB, I, DL, get(Hexagon::STriw_pred))
383c7029805ef35ce9805931067b841e6af11db382eChris Lattner          .addFrameIndex(FI).addImm(0)
384c7029805ef35ce9805931067b841e6af11db382eChris Lattner          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
385c7029805ef35ce9805931067b841e6af11db382eChris Lattner  } else {
386c7029805ef35ce9805931067b841e6af11db382eChris Lattner    llvm_unreachable("Unimplemented");
387c7029805ef35ce9805931067b841e6af11db382eChris Lattner  }
388c7029805ef35ce9805931067b841e6af11db382eChris Lattner}
389c7029805ef35ce9805931067b841e6af11db382eChris Lattner
390c7029805ef35ce9805931067b841e6af11db382eChris Lattner
391c7029805ef35ce9805931067b841e6af11db382eChris Lattnervoid HexagonInstrInfo::storeRegToAddr(
392c7029805ef35ce9805931067b841e6af11db382eChris Lattner                                 MachineFunction &MF, unsigned SrcReg,
393c7029805ef35ce9805931067b841e6af11db382eChris Lattner                                 bool isKill,
394c7029805ef35ce9805931067b841e6af11db382eChris Lattner                                 SmallVectorImpl<MachineOperand> &Addr,
395c7029805ef35ce9805931067b841e6af11db382eChris Lattner                                 const TargetRegisterClass *RC,
396c7029805ef35ce9805931067b841e6af11db382eChris Lattner                                 SmallVectorImpl<MachineInstr*> &NewMIs) const
397c7029805ef35ce9805931067b841e6af11db382eChris Lattner{
398c7029805ef35ce9805931067b841e6af11db382eChris Lattner  llvm_unreachable("Unimplemented");
399c7029805ef35ce9805931067b841e6af11db382eChris Lattner}
400c7029805ef35ce9805931067b841e6af11db382eChris Lattner
401c7029805ef35ce9805931067b841e6af11db382eChris Lattner
402c7029805ef35ce9805931067b841e6af11db382eChris Lattnervoid HexagonInstrInfo::
403c7029805ef35ce9805931067b841e6af11db382eChris LattnerloadRegFromStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
404c7029805ef35ce9805931067b841e6af11db382eChris Lattner                     unsigned DestReg, int FI,
405c7029805ef35ce9805931067b841e6af11db382eChris Lattner                     const TargetRegisterClass *RC,
406c7029805ef35ce9805931067b841e6af11db382eChris Lattner                     const TargetRegisterInfo *TRI) const {
407c7029805ef35ce9805931067b841e6af11db382eChris Lattner  DebugLoc DL = MBB.findDebugLoc(I);
408c7029805ef35ce9805931067b841e6af11db382eChris Lattner  MachineFunction &MF = *MBB.getParent();
409c7029805ef35ce9805931067b841e6af11db382eChris Lattner  MachineFrameInfo &MFI = *MF.getFrameInfo();
410c7029805ef35ce9805931067b841e6af11db382eChris Lattner  unsigned Align = MFI.getObjectAlignment(FI);
411c7029805ef35ce9805931067b841e6af11db382eChris Lattner
412c7029805ef35ce9805931067b841e6af11db382eChris Lattner  MachineMemOperand *MMO =
4134794a6b6a09e3440438cd653ec09cf0c2e45be1cChris Lattner      MF.getMachineMemOperand(
414c7029805ef35ce9805931067b841e6af11db382eChris Lattner                      MachinePointerInfo(PseudoSourceValue::getFixedStack(FI)),
415c7029805ef35ce9805931067b841e6af11db382eChris Lattner                      MachineMemOperand::MOLoad,
416c7029805ef35ce9805931067b841e6af11db382eChris Lattner                      MFI.getObjectSize(FI),
417c7029805ef35ce9805931067b841e6af11db382eChris Lattner                      Align);
418c7029805ef35ce9805931067b841e6af11db382eChris Lattner
4196831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  if (RC == Hexagon::IntRegsRegisterClass) {
4206831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    BuildMI(MBB, I, DL, get(Hexagon::LDriw), DestReg)
421c7029805ef35ce9805931067b841e6af11db382eChris Lattner          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
422c7029805ef35ce9805931067b841e6af11db382eChris Lattner  } else if (RC == Hexagon::DoubleRegsRegisterClass) {
423c7029805ef35ce9805931067b841e6af11db382eChris Lattner    BuildMI(MBB, I, DL, get(Hexagon::LDrid), DestReg)
4243e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
425c9c60f6429416d362c2131b14d097ce0a9ac9599Chris Lattner  } else if (RC == Hexagon::PredRegsRegisterClass) {
426e3304a3d24afc952d3cb415d1b504d973573c5c5Chris Lattner    BuildMI(MBB, I, DL, get(Hexagon::LDriw_pred), DestReg)
42745982dad53cd184fe8947a1b0206b0b16964f359Chris Lattner          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
428e3304a3d24afc952d3cb415d1b504d973573c5c5Chris Lattner  } else {
4293e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    llvm_unreachable("Can't store this register to stack slot");
430e3304a3d24afc952d3cb415d1b504d973573c5c5Chris Lattner  }
43145982dad53cd184fe8947a1b0206b0b16964f359Chris Lattner}
43245982dad53cd184fe8947a1b0206b0b16964f359Chris Lattner
433c7029805ef35ce9805931067b841e6af11db382eChris Lattner
434c7029805ef35ce9805931067b841e6af11db382eChris Lattnervoid HexagonInstrInfo::loadRegFromAddr(MachineFunction &MF, unsigned DestReg,
4353e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                                        SmallVectorImpl<MachineOperand> &Addr,
436c7029805ef35ce9805931067b841e6af11db382eChris Lattner                                        const TargetRegisterClass *RC,
43703c8546ec57523970874917854a2fb77b1ff598eChris Lattner                                 SmallVectorImpl<MachineInstr*> &NewMIs) const {
4383e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  llvm_unreachable("Unimplemented");
4393e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner}
4403e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
44145982dad53cd184fe8947a1b0206b0b16964f359Chris Lattner
44245982dad53cd184fe8947a1b0206b0b16964f359Chris LattnerMachineInstr *HexagonInstrInfo::foldMemoryOperandImpl(MachineFunction &MF,
443e1bd822ddb0099406d9f280535461033dfeeb190Chris Lattner                                                    MachineInstr* MI,
444e1bd822ddb0099406d9f280535461033dfeeb190Chris Lattner                                          const SmallVectorImpl<unsigned> &Ops,
4453e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                                                    int FI) const {
4469373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman  // Hexagon_TODO: Implement.
4473e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  return(0);
448456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner}
449456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner
4503e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
451948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattnerunsigned HexagonInstrInfo::createVR(MachineFunction* MF, MVT VT) const {
452948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner
453948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner  MachineRegisterInfo &RegInfo = MF->getRegInfo();
454948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner  const TargetRegisterClass *TRC;
455948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner  if (VT == MVT::i1) {
456948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner    TRC =  Hexagon::PredRegsRegisterClass;
4573181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner  } else if (VT == MVT::i32) {
458948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner    TRC =  Hexagon::IntRegsRegisterClass;
459948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner  } else if (VT == MVT::i64) {
460948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner    TRC =  Hexagon::DoubleRegsRegisterClass;
461948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner  } else {
462948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner    llvm_unreachable("Cannot handle this register class");
463948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner  }
464948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner
465948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner  unsigned NewReg = RegInfo.createVirtualRegister(TRC);
466948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner  return NewReg;
467948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner}
468948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner
4693e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
470d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner
471d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattnerbool HexagonInstrInfo::isPredicable(MachineInstr *MI) const {
472d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner  bool isPred = MI->getDesc().isPredicable();
473d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner
474d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner  if (!isPred)
475d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner    return false;
476d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner
477d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner  const int Opc = MI->getOpcode();
478d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner
479d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner  switch(Opc) {
480d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner  case Hexagon::TFRI:
481d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner    return isInt<12>(MI->getOperand(1).getImm());
482d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner
483d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner  case Hexagon::STrid:
484d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner  case Hexagon::STrid_indexed:
485d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner    return isShiftedUInt<6,3>(MI->getOperand(1).getImm());
486d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner
487d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner  case Hexagon::STriw:
488d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner  case Hexagon::STriw_indexed:
489d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner  case Hexagon::STriw_nv_V4:
490d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner    return isShiftedUInt<6,2>(MI->getOperand(1).getImm());
491d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner
492d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner  case Hexagon::STrih:
4933e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  case Hexagon::STrih_indexed:
4943e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  case Hexagon::STrih_nv_V4:
4953e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    return isShiftedUInt<6,1>(MI->getOperand(1).getImm());
4963e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
49703c0cf822e9a57109d1b4e6a2705d68852c93e1dChris Lattner  case Hexagon::STrib:
49869a52155d2eff066b49dbac385113002fd9dba14Chris Lattner  case Hexagon::STrib_indexed:
4990c8fbe33a4bdf7c60e0cfd5a9c86499c817d9f1aChris Lattner  case Hexagon::STrib_nv_V4:
5000c8fbe33a4bdf7c60e0cfd5a9c86499c817d9f1aChris Lattner    return isUInt<6>(MI->getOperand(1).getImm());
501948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner
502948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner  case Hexagon::LDrid:
503948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner  case Hexagon::LDrid_indexed:
504948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner    return isShiftedUInt<6,3>(MI->getOperand(2).getImm());
5050c8fbe33a4bdf7c60e0cfd5a9c86499c817d9f1aChris Lattner
5060c8fbe33a4bdf7c60e0cfd5a9c86499c817d9f1aChris Lattner  case Hexagon::LDriw:
5070c8fbe33a4bdf7c60e0cfd5a9c86499c817d9f1aChris Lattner  case Hexagon::LDriw_indexed:
5083e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    return isShiftedUInt<6,2>(MI->getOperand(2).getImm());
50908951a32fbc1de3ec3746e14109a74ca506ca251Chris Lattner
51008951a32fbc1de3ec3746e14109a74ca506ca251Chris Lattner  case Hexagon::LDrih:
51108951a32fbc1de3ec3746e14109a74ca506ca251Chris Lattner  case Hexagon::LDriuh:
512c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::LDrih_indexed:
51308951a32fbc1de3ec3746e14109a74ca506ca251Chris Lattner  case Hexagon::LDriuh_indexed:
514308575be66ec3870d27b19df044fda18448feb41Chris Lattner    return isShiftedUInt<6,1>(MI->getOperand(2).getImm());
515c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner
516456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::LDrib:
517456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::LDriub:
51869a52155d2eff066b49dbac385113002fd9dba14Chris Lattner  case Hexagon::LDrib_indexed:
51969a52155d2eff066b49dbac385113002fd9dba14Chris Lattner  case Hexagon::LDriub_indexed:
5207310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner    return isUInt<6>(MI->getOperand(2).getImm());
521f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner
522c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::POST_LDrid:
5237310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner    return isShiftedInt<4,3>(MI->getOperand(3).getImm());
524f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner
525c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::POST_LDriw:
526f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner    return isShiftedInt<4,2>(MI->getOperand(3).getImm());
527c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner
528c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::POST_LDrih:
529c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::POST_LDriuh:
530c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return isShiftedInt<4,1>(MI->getOperand(3).getImm());
5317310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner
5327310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner  case Hexagon::POST_LDrib:
53313c184de29c09294ed63b01ac43e1b46c049278eChris Lattner  case Hexagon::POST_LDriub:
53413c184de29c09294ed63b01ac43e1b46c049278eChris Lattner    return isInt<4>(MI->getOperand(3).getImm());
53513c184de29c09294ed63b01ac43e1b46c049278eChris Lattner
53613c184de29c09294ed63b01ac43e1b46c049278eChris Lattner  case Hexagon::STrib_imm_V4:
53713c184de29c09294ed63b01ac43e1b46c049278eChris Lattner  case Hexagon::STrih_imm_V4:
538fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman  case Hexagon::STriw_imm_V4:
539fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman    return (isUInt<6>(MI->getOperand(1).getImm()) &&
540fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman            isInt<6>(MI->getOperand(2).getImm()));
541ea19cd51aaf87c5cc19e7cdc2c32ddbefcac7b8fNate Begeman
542ea19cd51aaf87c5cc19e7cdc2c32ddbefcac7b8fNate Begeman  case Hexagon::ADD_ri:
543fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman    return isInt<8>(MI->getOperand(2).getImm());
544fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman
545fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman  case Hexagon::ASLH:
546fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman  case Hexagon::ASRH:
547fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman  case Hexagon::SXTB:
548fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman  case Hexagon::SXTH:
549fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman  case Hexagon::ZXTB:
550ea19cd51aaf87c5cc19e7cdc2c32ddbefcac7b8fNate Begeman  case Hexagon::ZXTH:
551fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman    return Subtarget.getHexagonArchVersion() == HexagonSubtarget::V4;
552fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman
553fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman  case Hexagon::JMPR:
554fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman    return false;
555d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner  }
556d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner
557d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner  return true;
558d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner}
559d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner
560d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattnerunsigned HexagonInstrInfo::getInvertedPredicatedOpcode(const int Opc) const {
561d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner  switch(Opc) {
562d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner    case Hexagon::TFR_cPt:
56336ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner      return Hexagon::TFR_cNotPt;
56436ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner    case Hexagon::TFR_cNotPt:
56536ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner      return Hexagon::TFR_cPt;
56636ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner
56736ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner    case Hexagon::TFRI_cPt:
56836ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner      return Hexagon::TFRI_cNotPt;
56936ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner    case Hexagon::TFRI_cNotPt:
57036ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner      return Hexagon::TFRI_cPt;
571f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey
572b2efb853f00d45b1c8d57f92acd0028fbdeffda6Jim Laskey    case Hexagon::JMP_c:
573abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::JMP_cNot;
574abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::JMP_cNot:
575abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::JMP_c;
576abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey
577abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::ADD_ri_cPt:
578e81aecbae69d4b3bd24523ec87673632d3b0beecJim Laskey      return Hexagon::ADD_ri_cNotPt;
579abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::ADD_ri_cNotPt:
580e81aecbae69d4b3bd24523ec87673632d3b0beecJim Laskey      return Hexagon::ADD_ri_cPt;
581063e765345fd49df0f53b807e57ada7c2ded7e16Jim Laskey
582abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::ADD_rr_cPt:
583abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::ADD_rr_cNotPt;
584abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::ADD_rr_cNotPt:
585abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::ADD_rr_cPt;
586abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey
587abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::XOR_rr_cPt:
588abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::XOR_rr_cNotPt;
589abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::XOR_rr_cNotPt:
590abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::XOR_rr_cPt;
591abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey
592abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::AND_rr_cPt:
593abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::AND_rr_cNotPt;
594d0e58e36a9857c45ecdc910ec8db04c21e143db5Jim Laskey    case Hexagon::AND_rr_cNotPt:
595d0e58e36a9857c45ecdc910ec8db04c21e143db5Jim Laskey      return Hexagon::AND_rr_cPt;
596abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey
597abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::OR_rr_cPt:
598abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::OR_rr_cNotPt;
599abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::OR_rr_cNotPt:
600e81aecbae69d4b3bd24523ec87673632d3b0beecJim Laskey      return Hexagon::OR_rr_cPt;
601e81aecbae69d4b3bd24523ec87673632d3b0beecJim Laskey
602e81aecbae69d4b3bd24523ec87673632d3b0beecJim Laskey    case Hexagon::SUB_rr_cPt:
60336ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner      return Hexagon::SUB_rr_cNotPt;
604e773673d8e0094bbff2f9ab2f2da9ecb5c4d0909Chris Lattner    case Hexagon::SUB_rr_cNotPt:
60536ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner      return Hexagon::SUB_rr_cPt;
6069ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner
6079ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner    case Hexagon::COMBINE_rr_cPt:
60836ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner      return Hexagon::COMBINE_rr_cNotPt;
60936ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner    case Hexagon::COMBINE_rr_cNotPt:
6109ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner      return Hexagon::COMBINE_rr_cPt;
6119ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner
6129ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner    case Hexagon::ASLH_cPt_V4:
6139ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner      return Hexagon::ASLH_cNotPt_V4;
6149ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner    case Hexagon::ASLH_cNotPt_V4:
6159ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner      return Hexagon::ASLH_cPt_V4;
6169ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner
6179ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner    case Hexagon::ASRH_cPt_V4:
61836ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner      return Hexagon::ASRH_cNotPt_V4;
61936ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner    case Hexagon::ASRH_cNotPt_V4:
620c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner      return Hexagon::ASRH_cPt_V4;
62136ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner
62236ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner    case Hexagon::SXTB_cPt_V4:
62336ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner      return Hexagon::SXTB_cNotPt_V4;
62436ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner    case Hexagon::SXTB_cNotPt_V4:
625f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey      return Hexagon::SXTB_cPt_V4;
626f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey
627abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::SXTH_cPt_V4:
628f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey      return Hexagon::SXTH_cNotPt_V4;
629f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey    case Hexagon::SXTH_cNotPt_V4:
630abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::SXTH_cPt_V4;
631abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey
632abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::ZXTB_cPt_V4:
633abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::ZXTB_cNotPt_V4;
634abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::ZXTB_cNotPt_V4:
635c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner      return Hexagon::ZXTB_cPt_V4;
636abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey
637abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::ZXTH_cPt_V4:
638abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::ZXTH_cNotPt_V4;
639abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::ZXTH_cNotPt_V4:
640abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::ZXTH_cPt_V4;
641abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey
642abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey
643abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::JMPR_cPt:
644abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::JMPR_cNotPt;
645abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey    case Hexagon::JMPR_cNotPt:
646abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey      return Hexagon::JMPR_cPt;
647c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner
648f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey  // V4 indexed+scaled load.
649f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey    case Hexagon::LDrid_indexed_cPt_V4:
650551bf3f80058a026b6a128dffd5530019e1df1b9Nate Begeman      return Hexagon::LDrid_indexed_cNotPt_V4;
65136ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner    case Hexagon::LDrid_indexed_cNotPt_V4:
6523e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDrid_indexed_cPt_V4;
6533e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
6543e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDrid_indexed_shl_cPt_V4:
6553e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDrid_indexed_shl_cNotPt_V4;
6563e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDrid_indexed_shl_cNotPt_V4:
6573e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDrid_indexed_shl_cPt_V4;
6583e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
6593e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDrib_indexed_cPt_V4:
6603e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDrib_indexed_cNotPt_V4;
6613e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDrib_indexed_cNotPt_V4:
6623e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDrib_indexed_cPt_V4;
6633e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
6643e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDriub_indexed_cPt_V4:
6653e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDriub_indexed_cNotPt_V4;
6663e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDriub_indexed_cNotPt_V4:
6673e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDriub_indexed_cPt_V4;
6683e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
6693e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDrib_indexed_shl_cPt_V4:
6703e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDrib_indexed_shl_cNotPt_V4;
6713e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDrib_indexed_shl_cNotPt_V4:
6723e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDrib_indexed_shl_cPt_V4;
6733e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
6743e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDriub_indexed_shl_cPt_V4:
6753181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner      return Hexagon::LDriub_indexed_shl_cNotPt_V4;
6763181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner    case Hexagon::LDriub_indexed_shl_cNotPt_V4:
6773181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner      return Hexagon::LDriub_indexed_shl_cPt_V4;
6783181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner
6793181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner    case Hexagon::LDrih_indexed_cPt_V4:
6803181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner      return Hexagon::LDrih_indexed_cNotPt_V4;
6813181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner    case Hexagon::LDrih_indexed_cNotPt_V4:
6823181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner      return Hexagon::LDrih_indexed_cPt_V4;
6833181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner
6843181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner    case Hexagon::LDriuh_indexed_cPt_V4:
6853181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner      return Hexagon::LDriuh_indexed_cNotPt_V4;
6863181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner    case Hexagon::LDriuh_indexed_cNotPt_V4:
6873181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner      return Hexagon::LDriuh_indexed_cPt_V4;
6883181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner
6893181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner    case Hexagon::LDrih_indexed_shl_cPt_V4:
6903181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner      return Hexagon::LDrih_indexed_shl_cNotPt_V4;
6913e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDrih_indexed_shl_cNotPt_V4:
6923e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDrih_indexed_shl_cPt_V4;
6933e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
694456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::LDriuh_indexed_shl_cPt_V4:
695456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner      return Hexagon::LDriuh_indexed_shl_cNotPt_V4;
696456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::LDriuh_indexed_shl_cNotPt_V4:
697456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner      return Hexagon::LDriuh_indexed_shl_cPt_V4;
6983e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
6993e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDriw_indexed_cPt_V4:
7003e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDriw_indexed_cNotPt_V4;
7013e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDriw_indexed_cNotPt_V4:
70299939d39c9555ebecbcd24c1b607eae52804ea37Chris Lattner      return Hexagon::LDriw_indexed_cPt_V4;
70399939d39c9555ebecbcd24c1b607eae52804ea37Chris Lattner
70499939d39c9555ebecbcd24c1b607eae52804ea37Chris Lattner    case Hexagon::LDriw_indexed_shl_cPt_V4:
705c9c60f6429416d362c2131b14d097ce0a9ac9599Chris Lattner      return Hexagon::LDriw_indexed_shl_cNotPt_V4;
7063e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDriw_indexed_shl_cNotPt_V4:
7073e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::LDriw_indexed_shl_cPt_V4;
7083e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
7093e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    // Byte.
710edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman    case Hexagon::POST_STbri_cPt:
711456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner      return Hexagon::POST_STbri_cNotPt;
712f8161d83f0201a32a33a0c875eb43df81d8586abChris Lattner    case Hexagon::POST_STbri_cNotPt:
7135f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner      return Hexagon::POST_STbri_cPt;
7145f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner
715f8161d83f0201a32a33a0c875eb43df81d8586abChris Lattner    case Hexagon::STrib_cPt:
71652d08bd9d8a8dcc06148525c7fad6f2ebcad0a42Chris Lattner      return Hexagon::STrib_cNotPt;
71752d08bd9d8a8dcc06148525c7fad6f2ebcad0a42Chris Lattner    case Hexagon::STrib_cNotPt:
718f8161d83f0201a32a33a0c875eb43df81d8586abChris Lattner      return Hexagon::STrib_cPt;
7193e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
7203e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::STrib_indexed_cPt:
7213e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      return Hexagon::STrib_indexed_cNotPt;
722040c11c24e9f6c172eaf680e135d9bb466c284b2Chris Lattner    case Hexagon::STrib_indexed_cNotPt:
723040c11c24e9f6c172eaf680e135d9bb466c284b2Chris Lattner      return Hexagon::STrib_indexed_cPt;
724c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner
725c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    case Hexagon::STrib_imm_cPt_V4:
726c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner      return Hexagon::STrib_imm_cNotPt_V4;
727c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    case Hexagon::STrib_imm_cNotPt_V4:
728c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner      return Hexagon::STrib_imm_cPt_V4;
729c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner
730c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    case Hexagon::STrib_indexed_shl_cPt_V4:
731c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner      return Hexagon::STrib_indexed_shl_cNotPt_V4;
732040c11c24e9f6c172eaf680e135d9bb466c284b2Chris Lattner    case Hexagon::STrib_indexed_shl_cNotPt_V4:
733040c11c24e9f6c172eaf680e135d9bb466c284b2Chris Lattner      return Hexagon::STrib_indexed_shl_cPt_V4;
734040c11c24e9f6c172eaf680e135d9bb466c284b2Chris Lattner
735c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  // Halfword.
736c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    case Hexagon::POST_SThri_cPt:
737c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner      return Hexagon::POST_SThri_cNotPt;
738a385e9b20fa7d37d3842ce15afd412f617d83a27Chris Lattner    case Hexagon::POST_SThri_cNotPt:
739a385e9b20fa7d37d3842ce15afd412f617d83a27Chris Lattner      return Hexagon::POST_SThri_cPt;
740a385e9b20fa7d37d3842ce15afd412f617d83a27Chris Lattner
741b2827b0901162169bb2692b77a839c9767849134Chris Lattner    case Hexagon::STrih_cPt:
742b2827b0901162169bb2692b77a839c9767849134Chris Lattner      return Hexagon::STrih_cNotPt;
7432332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STrih_cNotPt:
7442332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STrih_cPt;
7452332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner
7462332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STrih_indexed_cPt:
7472332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STrih_indexed_cNotPt;
7482332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STrih_indexed_cNotPt:
7492332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STrih_indexed_cPt;
7502332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner
751ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner    case Hexagon::STrih_imm_cPt_V4:
752ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner      return Hexagon::STrih_imm_cNotPt_V4;
753b2827b0901162169bb2692b77a839c9767849134Chris Lattner    case Hexagon::STrih_imm_cNotPt_V4:
7542332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STrih_imm_cPt_V4;
7552332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner
7562332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STrih_indexed_shl_cPt_V4:
7572332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STrih_indexed_shl_cNotPt_V4;
7582332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STrih_indexed_shl_cNotPt_V4:
7592332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STrih_indexed_shl_cPt_V4;
7602332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner
7612332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner  // Word.
7622332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::POST_STwri_cPt:
7632332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::POST_STwri_cNotPt;
7642332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::POST_STwri_cNotPt:
7652332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::POST_STwri_cPt;
7662332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner
7672332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STriw_cPt:
7682332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STriw_cNotPt;
7692332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STriw_cNotPt:
7702332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STriw_cPt;
7712332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner
7722332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STriw_indexed_cPt:
7732332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STriw_indexed_cNotPt;
7742332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STriw_indexed_cNotPt:
7752332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STriw_indexed_cPt;
7762332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner
7772332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STriw_indexed_shl_cPt_V4:
7782332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STriw_indexed_shl_cNotPt_V4;
7792332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STriw_indexed_shl_cNotPt_V4:
7802332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STriw_indexed_shl_cPt_V4;
7812332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner
7822332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STriw_imm_cPt_V4:
7832332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STriw_imm_cNotPt_V4;
7842332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner    case Hexagon::STriw_imm_cNotPt_V4:
7852332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner      return Hexagon::STriw_imm_cPt_V4;
786ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner
787ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner  // Double word.
788ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner    case Hexagon::POST_STdri_cPt:
789ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner      return Hexagon::POST_STdri_cNotPt;
790ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner    case Hexagon::POST_STdri_cNotPt:
791ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner      return Hexagon::POST_STdri_cPt;
792ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner
793ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner    case Hexagon::STrid_cPt:
7944d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner      return Hexagon::STrid_cNotPt;
7954d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner    case Hexagon::STrid_cNotPt:
7964d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner      return Hexagon::STrid_cPt;
7974d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner
7984d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner    case Hexagon::STrid_indexed_cPt:
7994d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner      return Hexagon::STrid_indexed_cNotPt;
8004d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner    case Hexagon::STrid_indexed_cNotPt:
801ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner      return Hexagon::STrid_indexed_cPt;
802ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner
803ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner    case Hexagon::STrid_indexed_shl_cPt_V4:
8044d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner      return Hexagon::STrid_indexed_shl_cNotPt_V4;
8054d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner    case Hexagon::STrid_indexed_shl_cNotPt_V4:
806ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner      return Hexagon::STrid_indexed_shl_cPt_V4;
807ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner
808ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner  // Load.
809ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner    case Hexagon::LDrid_cPt:
810ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner      return Hexagon::LDrid_cNotPt;
811ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner    case Hexagon::LDrid_cNotPt:
812ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner      return Hexagon::LDrid_cPt;
813ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner
814ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner    case Hexagon::LDriw_cPt:
815ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner      return Hexagon::LDriw_cNotPt;
816ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner    case Hexagon::LDriw_cNotPt:
817ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner      return Hexagon::LDriw_cPt;
81887100e0b83b808757bf44dabecd1d1048255d1adChris Lattner
81987100e0b83b808757bf44dabecd1d1048255d1adChris Lattner    case Hexagon::LDrih_cPt:
82087100e0b83b808757bf44dabecd1d1048255d1adChris Lattner      return Hexagon::LDrih_cNotPt;
82187100e0b83b808757bf44dabecd1d1048255d1adChris Lattner    case Hexagon::LDrih_cNotPt:
82287100e0b83b808757bf44dabecd1d1048255d1adChris Lattner      return Hexagon::LDrih_cPt;
82387100e0b83b808757bf44dabecd1d1048255d1adChris Lattner
82487100e0b83b808757bf44dabecd1d1048255d1adChris Lattner    case Hexagon::LDriuh_cPt:
82587100e0b83b808757bf44dabecd1d1048255d1adChris Lattner      return Hexagon::LDriuh_cNotPt;
82687100e0b83b808757bf44dabecd1d1048255d1adChris Lattner    case Hexagon::LDriuh_cNotPt:
82787100e0b83b808757bf44dabecd1d1048255d1adChris Lattner      return Hexagon::LDriuh_cPt;
82887100e0b83b808757bf44dabecd1d1048255d1adChris Lattner
82987100e0b83b808757bf44dabecd1d1048255d1adChris Lattner    case Hexagon::LDrib_cPt:
83087100e0b83b808757bf44dabecd1d1048255d1adChris Lattner      return Hexagon::LDrib_cNotPt;
83187100e0b83b808757bf44dabecd1d1048255d1adChris Lattner    case Hexagon::LDrib_cNotPt:
832384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::LDrib_cPt;
833384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner
834384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::LDriub_cPt:
835384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::LDriub_cNotPt;
836384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::LDriub_cNotPt:
837e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDriub_cPt;
838e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner
839e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner // Load Indexed.
840e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDrid_indexed_cPt:
841e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDrid_indexed_cNotPt;
842e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDrid_indexed_cNotPt:
843e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDrid_indexed_cPt;
844e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner
845e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDriw_indexed_cPt:
846e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDriw_indexed_cNotPt;
847e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDriw_indexed_cNotPt:
848e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDriw_indexed_cPt;
849e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner
850e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDrih_indexed_cPt:
851e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDrih_indexed_cNotPt;
852e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDrih_indexed_cNotPt:
853e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDrih_indexed_cPt;
854e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner
855e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDriuh_indexed_cPt:
856e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDriuh_indexed_cNotPt;
857e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDriuh_indexed_cNotPt:
858e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDriuh_indexed_cPt;
859e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner
860e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDrib_indexed_cPt:
861e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDrib_indexed_cNotPt;
862e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDrib_indexed_cNotPt:
863e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDrib_indexed_cPt;
864e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner
865e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDriub_indexed_cPt:
866e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner      return Hexagon::LDriub_indexed_cNotPt;
867e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner    case Hexagon::LDriub_indexed_cNotPt:
868384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::LDriub_indexed_cPt;
869384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner
8703b9fa89fcaf3eb08397c4c68b60c72fc73f8ab44Chris Lattner  // Post Inc Load.
871384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::POST_LDrid_cPt:
872384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::POST_LDrid_cNotPt;
873384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::POST_LDriw_cNotPt:
874384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::POST_LDriw_cPt;
875384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner
876384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::POST_LDrih_cPt:
877384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::POST_LDrih_cNotPt;
878384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::POST_LDrih_cNotPt:
879384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::POST_LDrih_cPt;
880384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner
881384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::POST_LDriuh_cPt:
882384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::POST_LDriuh_cNotPt;
883384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::POST_LDriuh_cNotPt:
884384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::POST_LDriuh_cPt;
885384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner
886384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::POST_LDrib_cPt:
887384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::POST_LDrib_cNotPt;
888384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::POST_LDrib_cNotPt:
889384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::POST_LDrib_cPt;
890384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner
891384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::POST_LDriub_cPt:
892384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::POST_LDriub_cNotPt;
893384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::POST_LDriub_cNotPt:
894384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::POST_LDriub_cPt;
895384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner
896384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner  // Dealloc_return.
897384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::DEALLOC_RET_cPt_V4:
898384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::DEALLOC_RET_cNotPt_V4;
899384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::DEALLOC_RET_cNotPt_V4:
900384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::DEALLOC_RET_cPt_V4;
901384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner
902384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner   // New Value Jump.
903384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner   // JMPEQ_ri - with -1.
904384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::JMP_EQriPtneg_nv_V4:
905384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::JMP_EQriNotPtneg_nv_V4;
906384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::JMP_EQriNotPtneg_nv_V4:
907384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::JMP_EQriPtneg_nv_V4;
9083b9fa89fcaf3eb08397c4c68b60c72fc73f8ab44Chris Lattner
909384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::JMP_EQriPntneg_nv_V4:
910384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner      return Hexagon::JMP_EQriNotPntneg_nv_V4;
911384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner    case Hexagon::JMP_EQriNotPntneg_nv_V4:
9123b9fa89fcaf3eb08397c4c68b60c72fc73f8ab44Chris Lattner      return Hexagon::JMP_EQriPntneg_nv_V4;
91387100e0b83b808757bf44dabecd1d1048255d1adChris Lattner
9146831a815999dde4cf801e2076e66b4943964daf2Chris Lattner   // JMPEQ_ri.
9156831a815999dde4cf801e2076e66b4943964daf2Chris Lattner     case Hexagon::JMP_EQriPt_nv_V4:
9166831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_EQriNotPt_nv_V4;
9176831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    case Hexagon::JMP_EQriNotPt_nv_V4:
9186831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_EQriPt_nv_V4;
9196831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
9206831a815999dde4cf801e2076e66b4943964daf2Chris Lattner     case Hexagon::JMP_EQriPnt_nv_V4:
9216831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_EQriNotPnt_nv_V4;
9226831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    case Hexagon::JMP_EQriNotPnt_nv_V4:
9236831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_EQriPnt_nv_V4;
9246831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
9256831a815999dde4cf801e2076e66b4943964daf2Chris Lattner   // JMPEQ_rr.
9266831a815999dde4cf801e2076e66b4943964daf2Chris Lattner     case Hexagon::JMP_EQrrPt_nv_V4:
9276831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_EQrrNotPt_nv_V4;
9286831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    case Hexagon::JMP_EQrrNotPt_nv_V4:
9296831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_EQrrPt_nv_V4;
9306831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
9316831a815999dde4cf801e2076e66b4943964daf2Chris Lattner     case Hexagon::JMP_EQrrPnt_nv_V4:
9326831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_EQrrNotPnt_nv_V4;
9336831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    case Hexagon::JMP_EQrrNotPnt_nv_V4:
9346831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_EQrrPnt_nv_V4;
9356831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
9366831a815999dde4cf801e2076e66b4943964daf2Chris Lattner   // JMPGT_ri - with -1.
9376831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    case Hexagon::JMP_GTriPtneg_nv_V4:
9386831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTriNotPtneg_nv_V4;
9396831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    case Hexagon::JMP_GTriNotPtneg_nv_V4:
9404b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner      return Hexagon::JMP_GTriPtneg_nv_V4;
9414b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner
9424b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner    case Hexagon::JMP_GTriPntneg_nv_V4:
9434b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner      return Hexagon::JMP_GTriNotPntneg_nv_V4;
9446831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    case Hexagon::JMP_GTriNotPntneg_nv_V4:
9456831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTriPntneg_nv_V4;
9466831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
9476831a815999dde4cf801e2076e66b4943964daf2Chris Lattner   // JMPGT_ri.
9486831a815999dde4cf801e2076e66b4943964daf2Chris Lattner     case Hexagon::JMP_GTriPt_nv_V4:
9496831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTriNotPt_nv_V4;
9506831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    case Hexagon::JMP_GTriNotPt_nv_V4:
9516831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTriPt_nv_V4;
9526831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
9536831a815999dde4cf801e2076e66b4943964daf2Chris Lattner     case Hexagon::JMP_GTriPnt_nv_V4:
9546831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTriNotPnt_nv_V4;
9556831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    case Hexagon::JMP_GTriNotPnt_nv_V4:
9566831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTriPnt_nv_V4;
9576831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
9586831a815999dde4cf801e2076e66b4943964daf2Chris Lattner   // JMPGT_rr.
95916cd04d26c53c6f81313cafb85f6c0e7a07cdff6Chris Lattner     case Hexagon::JMP_GTrrPt_nv_V4:
9606831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTrrNotPt_nv_V4;
9616831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    case Hexagon::JMP_GTrrNotPt_nv_V4:
9626831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTrrPt_nv_V4;
9636831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
9646831a815999dde4cf801e2076e66b4943964daf2Chris Lattner     case Hexagon::JMP_GTrrPnt_nv_V4:
9656831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTrrNotPnt_nv_V4;
9666831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    case Hexagon::JMP_GTrrNotPnt_nv_V4:
9676831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTrrPnt_nv_V4;
9686831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
9696831a815999dde4cf801e2076e66b4943964daf2Chris Lattner   // JMPGT_rrdn.
9706831a815999dde4cf801e2076e66b4943964daf2Chris Lattner     case Hexagon::JMP_GTrrdnPt_nv_V4:
9716831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTrrdnNotPt_nv_V4;
9723e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
97370814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner      return Hexagon::JMP_GTrrdnPt_nv_V4;
97470814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner
97570814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner     case Hexagon::JMP_GTrrdnPnt_nv_V4:
97670814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner      return Hexagon::JMP_GTrrdnNotPnt_nv_V4;
97770814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
97870814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner      return Hexagon::JMP_GTrrdnPnt_nv_V4;
97970814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner
98070814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner   // JMPGTU_ri.
98170814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner     case Hexagon::JMP_GTUriPt_nv_V4:
98270814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner      return Hexagon::JMP_GTUriNotPt_nv_V4;
98370814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner    case Hexagon::JMP_GTUriNotPt_nv_V4:
98470814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner      return Hexagon::JMP_GTUriPt_nv_V4;
98570814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner
98670814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner     case Hexagon::JMP_GTUriPnt_nv_V4:
98770814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner      return Hexagon::JMP_GTUriNotPnt_nv_V4;
98870814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner    case Hexagon::JMP_GTUriNotPnt_nv_V4:
98970814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner      return Hexagon::JMP_GTUriPnt_nv_V4;
9906a5428934ba6159c1acc541944332e51a6cfa59aChris Lattner
9914b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner   // JMPGTU_rr.
9926831a815999dde4cf801e2076e66b4943964daf2Chris Lattner     case Hexagon::JMP_GTUrrPt_nv_V4:
9936831a815999dde4cf801e2076e66b4943964daf2Chris Lattner      return Hexagon::JMP_GTUrrNotPt_nv_V4;
9944b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner    case Hexagon::JMP_GTUrrNotPt_nv_V4:
9954b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner      return Hexagon::JMP_GTUrrPt_nv_V4;
9964b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner
9974b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner     case Hexagon::JMP_GTUrrPnt_nv_V4:
9984b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner      return Hexagon::JMP_GTUrrNotPnt_nv_V4;
9994b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
1000a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng      return Hexagon::JMP_GTUrrPnt_nv_V4;
1001fa404e8a76abfdafefb8806b35f596d288609496Chris Lattner
1002fa404e8a76abfdafefb8806b35f596d288609496Chris Lattner   // JMPGTU_rrdn.
1003fa404e8a76abfdafefb8806b35f596d288609496Chris Lattner     case Hexagon::JMP_GTUrrdnPt_nv_V4:
1004c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner      return Hexagon::JMP_GTUrrdnNotPt_nv_V4;
1005fa404e8a76abfdafefb8806b35f596d288609496Chris Lattner    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
1006c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner      return Hexagon::JMP_GTUrrdnPt_nv_V4;
10075f652295c27826f26547cf5eb4096a59d86b56b8Chris Lattner
1008a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng     case Hexagon::JMP_GTUrrdnPnt_nv_V4:
1009a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng      return Hexagon::JMP_GTUrrdnNotPnt_nv_V4;
1010a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
1011903d278a9b7398d8905c90832e587e0556c52789Chris Lattner      return Hexagon::JMP_GTUrrdnPnt_nv_V4;
1012903d278a9b7398d8905c90832e587e0556c52789Chris Lattner
1013903d278a9b7398d8905c90832e587e0556c52789Chris Lattner  default:
1014903d278a9b7398d8905c90832e587e0556c52789Chris Lattner    llvm_unreachable("Unexpected predicated instruction");
1015903d278a9b7398d8905c90832e587e0556c52789Chris Lattner  }
1016903d278a9b7398d8905c90832e587e0556c52789Chris Lattner}
1017903d278a9b7398d8905c90832e587e0556c52789Chris Lattner
1018903d278a9b7398d8905c90832e587e0556c52789Chris Lattner
1019903d278a9b7398d8905c90832e587e0556c52789Chris Lattnerint HexagonInstrInfo::
1020c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris LattnergetMatchingCondBranchOpcode(int Opc, bool invertPredicate) const {
1021c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  switch(Opc) {
1022903d278a9b7398d8905c90832e587e0556c52789Chris Lattner  case Hexagon::TFR:
1023903d278a9b7398d8905c90832e587e0556c52789Chris Lattner    return !invertPredicate ? Hexagon::TFR_cPt :
1024903d278a9b7398d8905c90832e587e0556c52789Chris Lattner                              Hexagon::TFR_cNotPt;
10255f652295c27826f26547cf5eb4096a59d86b56b8Chris Lattner  case Hexagon::TFRI:
10265f652295c27826f26547cf5eb4096a59d86b56b8Chris Lattner    return !invertPredicate ? Hexagon::TFRI_cPt :
1027c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::TFRI_cNotPt;
1028c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::JMP:
1029a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng    return !invertPredicate ? Hexagon::JMP_c :
1030903d278a9b7398d8905c90832e587e0556c52789Chris Lattner                              Hexagon::JMP_cNot;
1031a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng  case Hexagon::ADD_ri:
1032903d278a9b7398d8905c90832e587e0556c52789Chris Lattner    return !invertPredicate ? Hexagon::ADD_ri_cPt :
1033a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng                              Hexagon::ADD_ri_cNotPt;
1034903d278a9b7398d8905c90832e587e0556c52789Chris Lattner  case Hexagon::ADD_rr:
1035903d278a9b7398d8905c90832e587e0556c52789Chris Lattner    return !invertPredicate ? Hexagon::ADD_rr_cPt :
1036c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::ADD_rr_cNotPt;
1037c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::XOR_rr:
1038903d278a9b7398d8905c90832e587e0556c52789Chris Lattner    return !invertPredicate ? Hexagon::XOR_rr_cPt :
1039a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng                              Hexagon::XOR_rr_cNotPt;
1040ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner  case Hexagon::AND_rr:
1041ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner    return !invertPredicate ? Hexagon::AND_rr_cPt :
1042ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner                              Hexagon::AND_rr_cNotPt;
1043c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::OR_rr:
1044ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner    return !invertPredicate ? Hexagon::OR_rr_cPt :
1045ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner                              Hexagon::OR_rr_cNotPt;
1046ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner  case Hexagon::SUB_rr:
1047ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner    return !invertPredicate ? Hexagon::SUB_rr_cPt :
1048ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner                              Hexagon::SUB_rr_cNotPt;
1049ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner  case Hexagon::COMBINE_rr:
1050ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner    return !invertPredicate ? Hexagon::COMBINE_rr_cPt :
1051c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::COMBINE_rr_cNotPt;
1052c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::ASLH:
1053ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner    return !invertPredicate ? Hexagon::ASLH_cPt_V4 :
1054ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner                              Hexagon::ASLH_cNotPt_V4;
1055ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner  case Hexagon::ASRH:
1056c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::ASRH_cPt_V4 :
1057ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner                              Hexagon::ASRH_cNotPt_V4;
1058ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner  case Hexagon::SXTB:
1059c7af17923e3bb6053f529679ef0be5399d3519edChris Lattner    return !invertPredicate ? Hexagon::SXTB_cPt_V4 :
1060c7af17923e3bb6053f529679ef0be5399d3519edChris Lattner                              Hexagon::SXTB_cNotPt_V4;
10616831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  case Hexagon::SXTH:
10626831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return !invertPredicate ? Hexagon::SXTH_cPt_V4 :
10636831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                              Hexagon::SXTH_cNotPt_V4;
10646831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  case Hexagon::ZXTB:
10656831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return !invertPredicate ? Hexagon::ZXTB_cPt_V4 :
1066c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::ZXTB_cNotPt_V4;
1067c7af17923e3bb6053f529679ef0be5399d3519edChris Lattner  case Hexagon::ZXTH:
1068c7af17923e3bb6053f529679ef0be5399d3519edChris Lattner    return !invertPredicate ? Hexagon::ZXTH_cPt_V4 :
1069c18ae4cb6a263cf31283c0ef51ace24350f8d72bChris Lattner                              Hexagon::ZXTH_cNotPt_V4;
1070c18ae4cb6a263cf31283c0ef51ace24350f8d72bChris Lattner
10716831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  case Hexagon::JMPR:
10726831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return !invertPredicate ? Hexagon::JMPR_cPt :
10736831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                              Hexagon::JMPR_cNotPt;
10746831a815999dde4cf801e2076e66b4943964daf2Chris Lattner
10756831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  // V4 indexed+scaled load.
107647e9223e06390897c3834f8c527001df392570ffChris Lattner  case Hexagon::LDrid_indexed_V4:
107747e9223e06390897c3834f8c527001df392570ffChris Lattner    return !invertPredicate ? Hexagon::LDrid_indexed_cPt_V4 :
107847e9223e06390897c3834f8c527001df392570ffChris Lattner                              Hexagon::LDrid_indexed_cNotPt_V4;
107947e9223e06390897c3834f8c527001df392570ffChris Lattner  case Hexagon::LDrid_indexed_shl_V4:
108047e9223e06390897c3834f8c527001df392570ffChris Lattner    return !invertPredicate ? Hexagon::LDrid_indexed_shl_cPt_V4 :
108147e9223e06390897c3834f8c527001df392570ffChris Lattner                              Hexagon::LDrid_indexed_shl_cNotPt_V4;
108247e9223e06390897c3834f8c527001df392570ffChris Lattner  case Hexagon::LDrib_indexed_V4:
108347e9223e06390897c3834f8c527001df392570ffChris Lattner    return !invertPredicate ? Hexagon::LDrib_indexed_cPt_V4 :
108447e9223e06390897c3834f8c527001df392570ffChris Lattner                              Hexagon::LDrib_indexed_cNotPt_V4;
1085456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::LDriub_indexed_V4:
1086456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    return !invertPredicate ? Hexagon::LDriub_indexed_cPt_V4 :
1087c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::LDriub_indexed_cNotPt_V4;
10887cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman  case Hexagon::LDriub_ae_indexed_V4:
10897cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    return !invertPredicate ? Hexagon::LDriub_indexed_cPt_V4 :
10907cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman                              Hexagon::LDriub_indexed_cNotPt_V4;
1091456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::LDrib_indexed_shl_V4:
1092456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    return !invertPredicate ? Hexagon::LDrib_indexed_shl_cPt_V4 :
1093456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner                              Hexagon::LDrib_indexed_shl_cNotPt_V4;
1094456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::LDriub_indexed_shl_V4:
1095456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    return !invertPredicate ? Hexagon::LDriub_indexed_shl_cPt_V4 :
10967cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman                              Hexagon::LDriub_indexed_shl_cNotPt_V4;
10977cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman  case Hexagon::LDriub_ae_indexed_shl_V4:
10987cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    return !invertPredicate ? Hexagon::LDriub_indexed_shl_cPt_V4 :
10997cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman                              Hexagon::LDriub_indexed_shl_cNotPt_V4;
11007cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman  case Hexagon::LDrih_indexed_V4:
11017cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    return !invertPredicate ? Hexagon::LDrih_indexed_cPt_V4 :
11027cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman                              Hexagon::LDrih_indexed_cNotPt_V4;
11037cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman  case Hexagon::LDriuh_indexed_V4:
1104550b1e59c4eb5db020766012b1406fc56833251dChris Lattner    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt_V4 :
1105550b1e59c4eb5db020766012b1406fc56833251dChris Lattner                              Hexagon::LDriuh_indexed_cNotPt_V4;
110619c5c4cca9edd0e1e2961879d3da164325af6d63Chris Lattner  case Hexagon::LDriuh_ae_indexed_V4:
110719c5c4cca9edd0e1e2961879d3da164325af6d63Chris Lattner    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt_V4 :
110819c5c4cca9edd0e1e2961879d3da164325af6d63Chris Lattner                              Hexagon::LDriuh_indexed_cNotPt_V4;
1109550b1e59c4eb5db020766012b1406fc56833251dChris Lattner  case Hexagon::LDrih_indexed_shl_V4:
11107cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    return !invertPredicate ? Hexagon::LDrih_indexed_shl_cPt_V4 :
11117cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman                              Hexagon::LDrih_indexed_shl_cNotPt_V4;
11127cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman  case Hexagon::LDriuh_indexed_shl_V4:
11137cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    return !invertPredicate ? Hexagon::LDriuh_indexed_shl_cPt_V4 :
11147cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman                              Hexagon::LDriuh_indexed_shl_cNotPt_V4;
11157cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman  case Hexagon::LDriuh_ae_indexed_shl_V4:
11167cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    return !invertPredicate ? Hexagon::LDriuh_indexed_shl_cPt_V4 :
11177cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman                              Hexagon::LDriuh_indexed_shl_cNotPt_V4;
11187cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman  case Hexagon::LDriw_indexed_V4:
11197cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman    return !invertPredicate ? Hexagon::LDriw_indexed_cPt_V4 :
11206831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                              Hexagon::LDriw_indexed_cNotPt_V4;
11216831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  case Hexagon::LDriw_indexed_shl_V4:
11226831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    return !invertPredicate ? Hexagon::LDriw_indexed_shl_cPt_V4 :
11236831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                              Hexagon::LDriw_indexed_shl_cNotPt_V4;
11246831a815999dde4cf801e2076e66b4943964daf2Chris Lattner    // Byte.
1125750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman  case Hexagon::POST_STbri:
1126750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    return !invertPredicate ? Hexagon::POST_STbri_cPt :
1127750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman                              Hexagon::POST_STbri_cNotPt;
1128181b7a382fbdd3d03ce373a6ffac2204e763f9c3Chris Lattner  case Hexagon::STrib:
1129750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    return !invertPredicate ? Hexagon::STrib_cPt :
1130750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman                              Hexagon::STrib_cNotPt;
1131750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman  case Hexagon::STrib_indexed:
1132750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    return !invertPredicate ? Hexagon::STrib_indexed_cPt :
1133750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman                              Hexagon::STrib_indexed_cNotPt;
1134750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman  case Hexagon::STrib_imm_V4:
1135750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    return !invertPredicate ? Hexagon::STrib_imm_cPt_V4 :
1136750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman                              Hexagon::STrib_imm_cNotPt_V4;
1137750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman  case Hexagon::STrib_indexed_shl_V4:
1138750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    return !invertPredicate ? Hexagon::STrib_indexed_shl_cPt_V4 :
1139750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman                              Hexagon::STrib_indexed_shl_cNotPt_V4;
1140750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman  // Halfword.
1141456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::POST_SThri:
1142181b7a382fbdd3d03ce373a6ffac2204e763f9c3Chris Lattner    return !invertPredicate ? Hexagon::POST_SThri_cPt :
1143181b7a382fbdd3d03ce373a6ffac2204e763f9c3Chris Lattner                              Hexagon::POST_SThri_cNotPt;
1144456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::STrih:
1145456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    return !invertPredicate ? Hexagon::STrih_cPt :
1146456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner                              Hexagon::STrih_cNotPt;
1147456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::STrih_indexed:
1148181b7a382fbdd3d03ce373a6ffac2204e763f9c3Chris Lattner    return !invertPredicate ? Hexagon::STrih_indexed_cPt :
11497cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman                              Hexagon::STrih_indexed_cNotPt;
1150c18ae4cb6a263cf31283c0ef51ace24350f8d72bChris Lattner  case Hexagon::STrih_imm_V4:
1151f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng    return !invertPredicate ? Hexagon::STrih_imm_cPt_V4 :
11523e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                              Hexagon::STrih_imm_cNotPt_V4;
11533e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  case Hexagon::STrih_indexed_shl_V4:
11542d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth    return !invertPredicate ? Hexagon::STrih_indexed_shl_cPt_V4 :
1155f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng                              Hexagon::STrih_indexed_shl_cNotPt_V4;
1156c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  // Word.
1157c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::POST_STwri:
1158c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::POST_STwri_cPt :
1159456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner                              Hexagon::POST_STwri_cNotPt;
1160f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng  case Hexagon::STriw:
1161f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng    return !invertPredicate ? Hexagon::STriw_cPt :
1162c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::STriw_cNotPt;
1163456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::STriw_indexed:
1164c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::STriw_indexed_cPt :
1165456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner                              Hexagon::STriw_indexed_cNotPt;
1166c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::STriw_indexed_shl_V4:
1167c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::STriw_indexed_shl_cPt_V4 :
1168f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng                              Hexagon::STriw_indexed_shl_cNotPt_V4;
1169c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::STriw_imm_V4:
1170f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng    return !invertPredicate ? Hexagon::STriw_imm_cPt_V4 :
1171c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::STriw_imm_cNotPt_V4;
1172c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  // Double word.
1173c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::POST_STdri:
1174c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::POST_STdri_cPt :
1175c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::POST_STdri_cNotPt;
1176f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng  case Hexagon::STrid:
11770f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner    return !invertPredicate ? Hexagon::STrid_cPt :
11780f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner                              Hexagon::STrid_cNotPt;
117901ff7216dd7829d4094754086baf28aa2d7149acChris Lattner  case Hexagon::STrid_indexed:
11800f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner    return !invertPredicate ? Hexagon::STrid_indexed_cPt :
11810f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner                              Hexagon::STrid_indexed_cNotPt;
11820f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner  case Hexagon::STrid_indexed_shl_V4:
11835f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner    return !invertPredicate ? Hexagon::STrid_indexed_shl_cPt_V4 :
118401ff7216dd7829d4094754086baf28aa2d7149acChris Lattner                              Hexagon::STrid_indexed_shl_cNotPt_V4;
118501ff7216dd7829d4094754086baf28aa2d7149acChris Lattner  // Load.
11861c51c6ac13b5e68b099605021784c7f552dcce3cChris Lattner  case Hexagon::LDrid:
11871c51c6ac13b5e68b099605021784c7f552dcce3cChris Lattner    return !invertPredicate ? Hexagon::LDrid_cPt :
1188c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::LDrid_cNotPt;
1189c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::LDriw:
1190c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::LDriw_cPt :
1191c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::LDriw_cNotPt;
1192c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::LDrih:
1193456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    return !invertPredicate ? Hexagon::LDrih_cPt :
1194456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner                              Hexagon::LDrih_cNotPt;
1195456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::LDriuh:
119601ff7216dd7829d4094754086baf28aa2d7149acChris Lattner    return !invertPredicate ? Hexagon::LDriuh_cPt :
1197c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::LDriuh_cNotPt;
1198c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::LDrib:
1199c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::LDrib_cPt :
1200c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::LDrib_cNotPt;
1201456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::LDriub:
1202456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    return !invertPredicate ? Hexagon::LDriub_cPt :
1203456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner                              Hexagon::LDriub_cNotPt;
1204456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::LDriubit:
1205c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::LDriub_cPt :
1206c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::LDriub_cNotPt;
1207456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner // Load Indexed.
1208456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::LDrid_indexed:
1209c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::LDrid_indexed_cPt :
121001ff7216dd7829d4094754086baf28aa2d7149acChris Lattner                              Hexagon::LDrid_indexed_cNotPt;
121169a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner  case Hexagon::LDriw_indexed:
12129d416f713e8b9e4f0c0c2b3f6f57ce2dd8993209Andrew Lenharth    return !invertPredicate ? Hexagon::LDriw_indexed_cPt :
12139d416f713e8b9e4f0c0c2b3f6f57ce2dd8993209Andrew Lenharth                              Hexagon::LDriw_indexed_cNotPt;
121431559081a4285f4b7282e765aea4ec8a8e1d396cAndrew Lenharth  case Hexagon::LDrih_indexed:
1215c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::LDrih_indexed_cPt :
1216c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::LDrih_indexed_cNotPt;
1217c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::LDriuh_indexed:
12189d416f713e8b9e4f0c0c2b3f6f57ce2dd8993209Andrew Lenharth    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt :
121901ff7216dd7829d4094754086baf28aa2d7149acChris Lattner                              Hexagon::LDriuh_indexed_cNotPt;
122001ff7216dd7829d4094754086baf28aa2d7149acChris Lattner  case Hexagon::LDrib_indexed:
122101ff7216dd7829d4094754086baf28aa2d7149acChris Lattner    return !invertPredicate ? Hexagon::LDrib_indexed_cPt :
122201ff7216dd7829d4094754086baf28aa2d7149acChris Lattner                              Hexagon::LDrib_indexed_cNotPt;
12235f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner  case Hexagon::LDriub_indexed:
12245f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner    return !invertPredicate ? Hexagon::LDriub_indexed_cPt :
122523993561e24b2a6eaf0e036062522ab825c30d3fChris Lattner                              Hexagon::LDriub_indexed_cNotPt;
122623993561e24b2a6eaf0e036062522ab825c30d3fChris Lattner  // Post Increment Load.
122723993561e24b2a6eaf0e036062522ab825c30d3fChris Lattner  case Hexagon::POST_LDrid:
122815e4b01920d6a0ffbe35d3e5aa88a4b42970b6a7Chris Lattner    return !invertPredicate ? Hexagon::POST_LDrid_cPt :
122923993561e24b2a6eaf0e036062522ab825c30d3fChris Lattner                              Hexagon::POST_LDrid_cNotPt;
123023993561e24b2a6eaf0e036062522ab825c30d3fChris Lattner  case Hexagon::POST_LDriw:
1231c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::POST_LDriw_cPt :
1232c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::POST_LDriw_cNotPt;
1233c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::POST_LDrih:
123401ff7216dd7829d4094754086baf28aa2d7149acChris Lattner    return !invertPredicate ? Hexagon::POST_LDrih_cPt :
1235c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::POST_LDrih_cNotPt;
1236c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::POST_LDriuh:
1237c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return !invertPredicate ? Hexagon::POST_LDriuh_cPt :
1238c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::POST_LDriuh_cNotPt;
1239c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::POST_LDrib:
124001ff7216dd7829d4094754086baf28aa2d7149acChris Lattner    return !invertPredicate ? Hexagon::POST_LDrib_cPt :
12415dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman                              Hexagon::POST_LDrib_cNotPt;
12425dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  case Hexagon::POST_LDriub:
12435dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman    return !invertPredicate ? Hexagon::POST_LDriub_cPt :
1244c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                              Hexagon::POST_LDriub_cNotPt;
12455dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  // DEALLOC_RETURN.
12465dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  case Hexagon::DEALLOC_RET_V4:
12475dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman    return !invertPredicate ? Hexagon::DEALLOC_RET_cPt_V4 :
12485dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman                              Hexagon::DEALLOC_RET_cNotPt_V4;
12495dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  }
12505dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  llvm_unreachable("Unexpected predicable instruction");
12515dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman}
12525dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman
12535dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman
12545dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begemanbool HexagonInstrInfo::
12555dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate BegemanPredicateInstruction(MachineInstr *MI,
12565dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman                     const SmallVectorImpl<MachineOperand> &Cond) const {
12575dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  int Opc = MI->getOpcode();
12585dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  assert (isPredicable(MI) && "Expected predicable instruction");
12595dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  bool invertJump = (!Cond.empty() && Cond[0].isImm() &&
12605dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman                     (Cond[0].getImm() == 0));
12615dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  MI->setDesc(get(getMatchingCondBranchOpcode(Opc, invertJump)));
12625dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  //
12635dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  // This assumes that the predicate is always the first operand
12645dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  // in the set of inputs.
12655dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  //
12665dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  MI->addOperand(MI->getOperand(MI->getNumOperands()-1));
12673e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  int oper;
12685dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman  for (oper = MI->getNumOperands() - 3; oper >= 0; --oper) {
12693e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    MachineOperand MO = MI->getOperand(oper);
12703e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    if ((MO.isReg() && !MO.isUse() && !MO.isImplicit())) {
12713e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      break;
1272edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman    }
1273c9c60f6429416d362c2131b14d097ce0a9ac9599Chris Lattner
1274d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner    if (MO.isReg()) {
12757310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner      MI->getOperand(oper+1).ChangeToRegister(MO.getReg(), MO.isDef(),
1276d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner                                              MO.isImplicit(), MO.isKill(),
1277f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner                                              MO.isDead(), MO.isUndef(),
1278c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                                              MO.isDebug());
12797310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner    } else if (MO.isImm()) {
1280f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner      MI->getOperand(oper+1).ChangeToImmediate(MO.getImm());
1281c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    } else {
1282f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner      llvm_unreachable("Unexpected operand type");
1283c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    }
1284c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  }
1285c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner
1286c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  int regPos = invertJump ? 1 : 0;
12877310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner  MachineOperand PredMO = Cond[regPos];
12887310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner  MI->getOperand(oper+1).ChangeToRegister(PredMO.getReg(), PredMO.isDef(),
12897310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner                                          PredMO.isImplicit(), PredMO.isKill(),
12907310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner                                          PredMO.isDead(), PredMO.isUndef(),
1291c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                                          PredMO.isDebug());
12927310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner
1293c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  return true;
12947310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner}
12953e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
12963e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
12973e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerbool
12983e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerHexagonInstrInfo::
12996831a815999dde4cf801e2076e66b4943964daf2Chris LattnerisProfitableToIfCvt(MachineBasicBlock &MBB,
13006831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                    unsigned NumCyles,
13016831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                    unsigned ExtraPredCycles,
13026831a815999dde4cf801e2076e66b4943964daf2Chris Lattner                    const BranchProbability &Probability) const {
13036831a815999dde4cf801e2076e66b4943964daf2Chris Lattner  return true;
13046831a815999dde4cf801e2076e66b4943964daf2Chris Lattner}
13053e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
13063e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
13073e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerbool
13083e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerHexagonInstrInfo::
13093e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerisProfitableToIfCvt(MachineBasicBlock &TMBB,
1310c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                    unsigned NumTCycles,
13113e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                    unsigned ExtraTCycles,
13123e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                    MachineBasicBlock &FMBB,
13133e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                    unsigned NumFCycles,
13143e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                    unsigned ExtraFCycles,
13153e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                    const BranchProbability &Probability) const {
1316edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman  return true;
13173e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner}
13183e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
13198b6fa22e722e1de7522aae51d6cdd0f552d489daChris Lattner
1320c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattnerbool HexagonInstrInfo::isPredicated(const MachineInstr *MI) const {
1321c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  const uint64_t F = MI->getDesc().TSFlags;
13228b6fa22e722e1de7522aae51d6cdd0f552d489daChris Lattner
13233e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  return ((F >> HexagonII::PredicatedPos) & HexagonII::PredicatedMask);
13243e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner}
13253e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
1326c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner
13273e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerbool
13283e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerHexagonInstrInfo::DefinesPredicate(MachineInstr *MI,
13293e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner                                   std::vector<MachineOperand> &Pred) const {
13303e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  for (unsigned oper = 0; oper < MI->getNumOperands(); ++oper) {
13313e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    MachineOperand MO = MI->getOperand(oper);
13323e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    if (MO.isReg() && MO.isDef()) {
13333e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      const TargetRegisterClass* RC = RI.getMinimalPhysRegClass(MO.getReg());
13344e6c74689944be1de80c99dc0688ec0bcbd743aaChris Lattner      if (RC == Hexagon::PredRegsRegisterClass) {
13353e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner        Pred.push_back(MO);
13363e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner        return true;
13373e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner      }
13383e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    }
13393e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  }
13403e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  return false;
1341edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman}
13423e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
13433e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
13448b6fa22e722e1de7522aae51d6cdd0f552d489daChris Lattnerbool
13453e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerHexagonInstrInfo::
1346c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris LattnerSubsumesPredicate(const SmallVectorImpl<MachineOperand> &Pred1,
1347c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner                  const SmallVectorImpl<MachineOperand> &Pred2) const {
1348c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  // TODO: Fix this
1349c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  return false;
1350c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner}
13513e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
13523e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
13533e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner//
135417c428e23dbeac1f985d725905ce6be1c725491fEvan Cheng// We indicate that we want to reverse the branch by
13556862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner// inserting a 0 at the beginning of the Cond vector.
13566862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner//
13576862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattnerbool HexagonInstrInfo::
13586862dbc446f2f633f6f4905d07a3bafd96741da2Chris LattnerReverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const {
13596862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner  if (!Cond.empty() && Cond[0].isImm() && Cond[0].getImm() == 0) {
13606862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner    Cond.erase(Cond.begin());
13616862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner  } else {
13626862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner    Cond.insert(Cond.begin(), MachineOperand::CreateImm(0));
13636862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner  }
136417c428e23dbeac1f985d725905ce6be1c725491fEvan Cheng  return false;
13653e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner}
1366f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng
13673e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
13683e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerbool HexagonInstrInfo::
13693e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerisProfitableToDupForIfCvt(MachineBasicBlock &MBB,unsigned NumInstrs,
13705d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner                          const BranchProbability &Probability) const {
1371456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  return (NumInstrs <= 4);
137206ac6ab938cf54596202de851da4b20aa61fe64eChris Lattner}
137303c8546ec57523970874917854a2fb77b1ff598eChris Lattner
13745d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattnerbool HexagonInstrInfo::isDeallocRet(const MachineInstr *MI) const {
1375c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  switch (MI->getOpcode()) {
13765d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner  case Hexagon::DEALLOC_RET_V4 :
13775d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner  case Hexagon::DEALLOC_RET_cPt_V4 :
1378c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::DEALLOC_RET_cNotPt_V4 :
13795d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner  case Hexagon::DEALLOC_RET_cdnPnt_V4 :
1380c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::DEALLOC_RET_cNotdnPnt_V4 :
1381c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::DEALLOC_RET_cdnPt_V4 :
13826a5428934ba6159c1acc541944332e51a6cfa59aChris Lattner  case Hexagon::DEALLOC_RET_cNotdnPt_V4 :
13835d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner   return true;
13845d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner  }
13853e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  return false;
13863e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner}
1387c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner
1388c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner
1389c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattnerbool HexagonInstrInfo::
1390f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan ChengisValidOffset(const int Opcode, const int Offset) const {
1391c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  // This function is to check whether the "Offset" is in the correct range of
1392456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  // the given "Opcode". If "Offset" is not in the correct range, "ADD_ri" is
1393456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  // inserted to calculate the final address. Due to this reason, the function
1394456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  // assumes that the "Offset" has correct alignment.
1395456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner
1396456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  switch(Opcode) {
1397456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner
1398456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::LDriw:
1399f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng  case Hexagon::STriw:
14003e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  case Hexagon::STriwt:
14013e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    assert((Offset % 4 == 0) && "Offset has incorrect alignment");
14023e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    return (Offset >= Hexagon_MEMW_OFFSET_MIN) &&
140303c8546ec57523970874917854a2fb77b1ff598eChris Lattner      (Offset <= Hexagon_MEMW_OFFSET_MAX);
140403c8546ec57523970874917854a2fb77b1ff598eChris Lattner
140503c8546ec57523970874917854a2fb77b1ff598eChris Lattner  case Hexagon::LDrid:
14062d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth  case Hexagon::STrid:
14079fadb4c1c0a6d223aa468f9f72f8c2562dc66839Chris Lattner    assert((Offset % 8 == 0) && "Offset has incorrect alignment");
140803c8546ec57523970874917854a2fb77b1ff598eChris Lattner    return (Offset >= Hexagon_MEMD_OFFSET_MIN) &&
140903c8546ec57523970874917854a2fb77b1ff598eChris Lattner      (Offset <= Hexagon_MEMD_OFFSET_MAX);
14103e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner
1411c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::LDrih:
14123e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  case Hexagon::LDriuh:
1413c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::STrih:
1414ab48be377298bd509427a29e174cf4e305138819Nate Begeman  case Hexagon::LDrih_ae:
1415ab48be377298bd509427a29e174cf4e305138819Nate Begeman    assert((Offset % 2 == 0) && "Offset has incorrect alignment");
1416ab48be377298bd509427a29e174cf4e305138819Nate Begeman    return (Offset >= Hexagon_MEMH_OFFSET_MIN) &&
1417c7029805ef35ce9805931067b841e6af11db382eChris Lattner      (Offset <= Hexagon_MEMH_OFFSET_MAX);
1418c7029805ef35ce9805931067b841e6af11db382eChris Lattner
1419c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::LDrib:
1420c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::STrib:
1421c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::LDriub:
1422c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::LDriubit:
1423c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::LDrib_ae:
1424c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::LDriub_ae:
1425c7029805ef35ce9805931067b841e6af11db382eChris Lattner    return (Offset >= Hexagon_MEMB_OFFSET_MIN) &&
1426c7029805ef35ce9805931067b841e6af11db382eChris Lattner      (Offset <= Hexagon_MEMB_OFFSET_MAX);
1427c7029805ef35ce9805931067b841e6af11db382eChris Lattner
1428c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::ADD_ri:
1429c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::TFR_FI:
1430c7029805ef35ce9805931067b841e6af11db382eChris Lattner    return (Offset >= Hexagon_ADDI_OFFSET_MIN) &&
1431c7029805ef35ce9805931067b841e6af11db382eChris Lattner      (Offset <= Hexagon_ADDI_OFFSET_MAX);
1432c7029805ef35ce9805931067b841e6af11db382eChris Lattner
1433c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 :
1434c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMw_ADDi_indexed_MEM_V4 :
1435c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMw_SUBi_indexed_MEM_V4 :
1436c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMw_ADDr_indexed_MEM_V4 :
1437c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMw_SUBr_indexed_MEM_V4 :
1438c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMw_ANDr_indexed_MEM_V4 :
1439c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMw_ORr_indexed_MEM_V4 :
1440c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMw_ADDSUBi_MEM_V4 :
1441c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMw_ADDi_MEM_V4 :
1442ab48be377298bd509427a29e174cf4e305138819Nate Begeman  case Hexagon::MEMw_SUBi_MEM_V4 :
1443c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMw_ADDr_MEM_V4 :
1444ab48be377298bd509427a29e174cf4e305138819Nate Begeman  case Hexagon::MEMw_SUBr_MEM_V4 :
1445ab48be377298bd509427a29e174cf4e305138819Nate Begeman  case Hexagon::MEMw_ANDr_MEM_V4 :
1446c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMw_ORr_MEM_V4 :
1447c7029805ef35ce9805931067b841e6af11db382eChris Lattner    assert ((Offset % 4) == 0 && "MEMOPw offset is not aligned correctly." );
1448c7029805ef35ce9805931067b841e6af11db382eChris Lattner    return (0 <= Offset && Offset <= 255);
1449c7029805ef35ce9805931067b841e6af11db382eChris Lattner
1450c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 :
1451c7029805ef35ce9805931067b841e6af11db382eChris Lattner  case Hexagon::MEMh_ADDi_indexed_MEM_V4 :
14523e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  case Hexagon::MEMh_SUBi_indexed_MEM_V4 :
14533e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  case Hexagon::MEMh_ADDr_indexed_MEM_V4 :
14543e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  case Hexagon::MEMh_SUBr_indexed_MEM_V4 :
14553e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  case Hexagon::MEMh_ANDr_indexed_MEM_V4 :
1456456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::MEMh_ORr_indexed_MEM_V4 :
1457456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::MEMh_ADDSUBi_MEM_V4 :
1458edb1add9a093efa266c94b6d0a34c26f5b2d5d7bChris Lattner  case Hexagon::MEMh_ADDi_MEM_V4 :
1459edb1add9a093efa266c94b6d0a34c26f5b2d5d7bChris Lattner  case Hexagon::MEMh_SUBi_MEM_V4 :
1460ec39a45bdb1eca0cfe77be6a05cc43e16f2338ebChris Lattner  case Hexagon::MEMh_ADDr_MEM_V4 :
1461ec39a45bdb1eca0cfe77be6a05cc43e16f2338ebChris Lattner  case Hexagon::MEMh_SUBr_MEM_V4 :
14623e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  case Hexagon::MEMh_ANDr_MEM_V4 :
14633e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  case Hexagon::MEMh_ORr_MEM_V4 :
1464f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng    assert ((Offset % 2) == 0 && "MEMOPh offset is not aligned correctly." );
146595762124a1d781cc0f8cbc4c22e9c5c1358d7ea0Andrew Lenharth    return (0 <= Offset && Offset <= 127);
146695762124a1d781cc0f8cbc4c22e9c5c1358d7ea0Andrew Lenharth
1467c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 :
146895762124a1d781cc0f8cbc4c22e9c5c1358d7ea0Andrew Lenharth  case Hexagon::MEMb_ADDi_indexed_MEM_V4 :
1469140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner  case Hexagon::MEMb_SUBi_indexed_MEM_V4 :
1470140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner  case Hexagon::MEMb_ADDr_indexed_MEM_V4 :
1471c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::MEMb_SUBr_indexed_MEM_V4 :
1472c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::MEMb_ANDr_indexed_MEM_V4 :
1473c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::MEMb_ORr_indexed_MEM_V4 :
1474456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::MEMb_ADDSUBi_MEM_V4 :
1475140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner  case Hexagon::MEMb_ADDi_MEM_V4 :
1476140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner  case Hexagon::MEMb_SUBi_MEM_V4 :
1477456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::MEMb_ADDr_MEM_V4 :
1478456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  case Hexagon::MEMb_SUBr_MEM_V4 :
1479c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::MEMb_ANDr_MEM_V4 :
1480c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  case Hexagon::MEMb_ORr_MEM_V4 :
1481c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return (0 <= Offset && Offset <= 63);
1482c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner
1483140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner  // LDri_pred and STriw_pred are pseudo operations, so it has to take offset of
1484456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  // any size. Later pass knows how to handle it.
1485140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner  case Hexagon::STriw_pred:
14864f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner  case Hexagon::LDriw_pred:
14874f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner    return true;
14884f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner
1489c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  // INLINEASM is very special.
14904f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner  case Hexagon::INLINEASM:
1491c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    return true;
14924f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner  }
1493c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner
1494c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  llvm_unreachable("No offset range is defined for this opcode. "
14954f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner                   "Please define it in the above switch statement!");
1496456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner}
1497140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner
1498456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner
1499456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner//
1500456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner// Check if the Offset is a valid auto-inc imm by Load/Store Type.
1501c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner//
1502c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattnerbool HexagonInstrInfo::
1503c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris LattnerisValidAutoIncImm(const EVT VT, const int Offset) const {
1504456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner
1505140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner  if (VT == MVT::i64) {
1506140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner      return (Offset >= Hexagon_MEMD_AUTOINC_MIN &&
1507140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner              Offset <= Hexagon_MEMD_AUTOINC_MAX &&
1508c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner              (Offset & 0x7) == 0);
1509140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner  }
1510140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner  if (VT == MVT::i32) {
1511140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner      return (Offset >= Hexagon_MEMW_AUTOINC_MIN &&
1512456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner              Offset <= Hexagon_MEMW_AUTOINC_MAX &&
1513456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner              (Offset & 0x3) == 0);
1514456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  }
1515456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  if (VT == MVT::i16) {
1516140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner      return (Offset >= Hexagon_MEMH_AUTOINC_MIN &&
1517140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner              Offset <= Hexagon_MEMH_AUTOINC_MAX &&
15184f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner              (Offset & 0x1) == 0);
15194f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner  }
15204f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner  if (VT == MVT::i8) {
15214f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner      return (Offset >= Hexagon_MEMB_AUTOINC_MIN &&
15224f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner              Offset <= Hexagon_MEMB_AUTOINC_MAX);
15234f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner  }
15244f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner  llvm_unreachable("Not an auto-inc opc!");
1525140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner}
1526140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner
1527140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner
1528140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattnerbool HexagonInstrInfo::
152951b8d54922350b7e1c2cd5a5183ef2c5f5d1b1d5Andrew LenharthisMemOp(const MachineInstr *MI) const {
153051b8d54922350b7e1c2cd5a5183ef2c5f5d1b1d5Andrew Lenharth  switch (MI->getOpcode())
1531c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  {
153249c709f891a3e49db58b56ca94eafa98cbb12c4dAndrew Lenharth    case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 :
153349c709f891a3e49db58b56ca94eafa98cbb12c4dAndrew Lenharth    case Hexagon::MEMw_ADDi_indexed_MEM_V4 :
153449c709f891a3e49db58b56ca94eafa98cbb12c4dAndrew Lenharth    case Hexagon::MEMw_SUBi_indexed_MEM_V4 :
1535c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    case Hexagon::MEMw_ADDr_indexed_MEM_V4 :
153649c709f891a3e49db58b56ca94eafa98cbb12c4dAndrew Lenharth    case Hexagon::MEMw_SUBr_indexed_MEM_V4 :
1537c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    case Hexagon::MEMw_ANDr_indexed_MEM_V4 :
1538f70e30b41dc6a92733681dcea2c06d8b3dd488dbAndrew Lenharth    case Hexagon::MEMw_ORr_indexed_MEM_V4 :
1539f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng    case Hexagon::MEMw_ADDSUBi_MEM_V4 :
15400f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner    case Hexagon::MEMw_ADDi_MEM_V4 :
15410f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner    case Hexagon::MEMw_SUBi_MEM_V4 :
15420f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner    case Hexagon::MEMw_ADDr_MEM_V4 :
1543456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMw_SUBr_MEM_V4 :
1544456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMw_ANDr_MEM_V4 :
1545456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMw_ORr_MEM_V4 :
1546456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 :
1547456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_ADDi_indexed_MEM_V4 :
1548456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_SUBi_indexed_MEM_V4 :
1549456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_ADDr_indexed_MEM_V4 :
1550456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_SUBr_indexed_MEM_V4 :
1551456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_ANDr_indexed_MEM_V4 :
1552456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_ORr_indexed_MEM_V4 :
1553456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_ADDSUBi_MEM_V4 :
1554456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_ADDi_MEM_V4 :
1555456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_SUBi_MEM_V4 :
1556456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_ADDr_MEM_V4 :
1557456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_SUBr_MEM_V4 :
1558456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_ANDr_MEM_V4 :
1559456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMh_ORr_MEM_V4 :
1560c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 :
1561c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    case Hexagon::MEMb_ADDi_indexed_MEM_V4 :
1562456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMb_SUBi_indexed_MEM_V4 :
1563456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMb_ADDr_indexed_MEM_V4 :
1564456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMb_SUBr_indexed_MEM_V4 :
1565456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMb_ANDr_indexed_MEM_V4 :
1566456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMb_ORr_indexed_MEM_V4 :
1567456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMb_ADDSUBi_MEM_V4 :
1568456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMb_ADDi_MEM_V4 :
1569456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMb_SUBi_MEM_V4 :
1570456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::MEMb_ADDr_MEM_V4 :
15710f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner    case Hexagon::MEMb_SUBr_MEM_V4 :
15720f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner    case Hexagon::MEMb_ANDr_MEM_V4 :
15730f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner    case Hexagon::MEMb_ORr_MEM_V4 :
1574f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng    return true;
15752ee743ff9be43c350075a2fa15d11a79bff36775Chris Lattner  }
157647e9223e06390897c3834f8c527001df392570ffChris Lattner  return false;
157747e9223e06390897c3834f8c527001df392570ffChris Lattner}
157847e9223e06390897c3834f8c527001df392570ffChris Lattner
157947e9223e06390897c3834f8c527001df392570ffChris Lattner
158047e9223e06390897c3834f8c527001df392570ffChris Lattnerbool HexagonInstrInfo::
158147e9223e06390897c3834f8c527001df392570ffChris LattnerisSpillPredRegOp(const MachineInstr *MI) const {
158247e9223e06390897c3834f8c527001df392570ffChris Lattner  switch (MI->getOpcode())
158347e9223e06390897c3834f8c527001df392570ffChris Lattner  {
158447e9223e06390897c3834f8c527001df392570ffChris Lattner    case Hexagon::STriw_pred :
15853e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDriw_pred :
15862ee743ff9be43c350075a2fa15d11a79bff36775Chris Lattner    return true;
158755ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner  }
1588c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  return false;
1589456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner}
1590b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman
159155ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner
1592456a93afcec7740c45cafa8354317f7b17987a6dChris Lattnerbool HexagonInstrInfo::isConditionalALU32 (const MachineInstr* MI) const {
1593456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  const HexagonRegisterInfo& QRI = getRegisterInfo();
1594456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  switch (MI->getOpcode())
1595456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner  {
1596456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::ADD_ri_cPt:
1597456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::ADD_ri_cNotPt:
15989373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::ADD_rr_cPt:
15999373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::ADD_rr_cNotPt:
16009373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::XOR_rr_cPt:
16019373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::XOR_rr_cNotPt:
16029373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::AND_rr_cPt:
16039373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::AND_rr_cNotPt:
1604550b1e59c4eb5db020766012b1406fc56833251dChris Lattner    case Hexagon::OR_rr_cPt:
1605550b1e59c4eb5db020766012b1406fc56833251dChris Lattner    case Hexagon::OR_rr_cNotPt:
16060e753d617be1ff6a9ac0f894da9d2544e2489850Chris Lattner    case Hexagon::SUB_rr_cPt:
16070e753d617be1ff6a9ac0f894da9d2544e2489850Chris Lattner    case Hexagon::SUB_rr_cNotPt:
16080e753d617be1ff6a9ac0f894da9d2544e2489850Chris Lattner    case Hexagon::COMBINE_rr_cPt:
16099373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::COMBINE_rr_cNotPt:
16109373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman      return true;
16119373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::ASLH_cPt_V4:
16129373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::ASLH_cNotPt_V4:
161355ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner    case Hexagon::ASRH_cPt_V4:
161455ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner    case Hexagon::ASRH_cNotPt_V4:
161555ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner    case Hexagon::SXTB_cPt_V4:
161655ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner    case Hexagon::SXTB_cNotPt_V4:
161755ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner    case Hexagon::SXTH_cPt_V4:
161855ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner    case Hexagon::SXTH_cNotPt_V4:
1619456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::ZXTB_cPt_V4:
1620456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::ZXTB_cNotPt_V4:
162155ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner    case Hexagon::ZXTH_cPt_V4:
1622456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::ZXTH_cNotPt_V4:
1623456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner      return QRI.Subtarget.getHexagonArchVersion() == HexagonSubtarget::V4;
162455ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner
162555ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner    default:
162655ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner      return false;
162755ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner  }
162855ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner}
162955ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner
163055ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner
163155ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattnerbool HexagonInstrInfo::
163255ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris LattnerisConditionalLoad (const MachineInstr* MI) const {
163355ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner  const HexagonRegisterInfo& QRI = getRegisterInfo();
16343e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner  switch (MI->getOpcode())
1635750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman  {
1636750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDrid_cPt :
1637750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDrid_cNotPt :
16389373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::LDrid_indexed_cPt :
16399373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::LDrid_indexed_cNotPt :
1640750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDriw_cPt :
16419373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::LDriw_cNotPt :
1642750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDriw_indexed_cPt :
1643750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDriw_indexed_cNotPt :
1644750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDrih_cPt :
1645750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDrih_cNotPt :
1646750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDrih_indexed_cPt :
1647750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDrih_indexed_cNotPt :
1648750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDrib_cPt :
1649750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDrib_cNotPt :
1650750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDrib_indexed_cPt :
1651750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDrib_indexed_cNotPt :
1652750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDriuh_cPt :
1653750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDriuh_cNotPt :
1654750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDriuh_indexed_cPt :
1655750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDriuh_indexed_cNotPt :
1656750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDriub_cPt :
1657750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDriub_cNotPt :
1658750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDriub_indexed_cPt :
1659750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDriub_indexed_cNotPt :
16609373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman      return true;
16619373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::POST_LDrid_cPt :
16629373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman    case Hexagon::POST_LDrid_cNotPt :
1663750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::POST_LDriw_cPt :
16643e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::POST_LDriw_cNotPt :
1665750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::POST_LDrih_cPt :
1666750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::POST_LDrih_cNotPt :
1667750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::POST_LDrib_cPt :
1668750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::POST_LDrib_cNotPt :
1669750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::POST_LDriuh_cPt :
1670750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::POST_LDriuh_cNotPt :
1671750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::POST_LDriub_cPt :
1672750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::POST_LDriub_cNotPt :
1673750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman      return QRI.Subtarget.getHexagonArchVersion() == HexagonSubtarget::V4;
1674750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman    case Hexagon::LDrid_indexed_cPt_V4 :
16753e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDrid_indexed_cNotPt_V4 :
16763e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner    case Hexagon::LDrid_indexed_shl_cPt_V4 :
1677b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman    case Hexagon::LDrid_indexed_shl_cNotPt_V4 :
167873e142f2b6a3b5223de2d557d646f319ca8168cfChris Lattner    case Hexagon::LDrib_indexed_cPt_V4 :
1679456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::LDrib_indexed_cNotPt_V4 :
1680456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::LDrib_indexed_shl_cPt_V4 :
1681456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::LDrib_indexed_shl_cNotPt_V4 :
1682456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::LDriub_indexed_cPt_V4 :
1683456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::LDriub_indexed_cNotPt_V4 :
1684c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner    case Hexagon::LDriub_indexed_shl_cPt_V4 :
1685456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::LDriub_indexed_shl_cNotPt_V4 :
1686456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::LDrih_indexed_cPt_V4 :
1687456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::LDrih_indexed_cNotPt_V4 :
1688456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner    case Hexagon::LDrih_indexed_shl_cPt_V4 :
1689b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman    case Hexagon::LDrih_indexed_shl_cNotPt_V4 :
1690ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth    case Hexagon::LDriuh_indexed_cPt_V4 :
1691ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth    case Hexagon::LDriuh_indexed_cNotPt_V4 :
1692ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth    case Hexagon::LDriuh_indexed_shl_cPt_V4 :
1693ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth    case Hexagon::LDriuh_indexed_shl_cNotPt_V4 :
1694ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth    case Hexagon::LDriw_indexed_cPt_V4 :
1695ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth    case Hexagon::LDriw_indexed_cNotPt_V4 :
1696ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth    case Hexagon::LDriw_indexed_shl_cPt_V4 :
1697ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth    case Hexagon::LDriw_indexed_shl_cNotPt_V4 :
1698ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth      return QRI.Subtarget.getHexagonArchVersion() == HexagonSubtarget::V4;
1699ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth    default:
1700ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth      return false;
1701ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth  }
1702ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth}
1703ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth
1704ae35575957a3ab446e2766aa05d03020ced27d14Andrew LenharthDFAPacketizer *HexagonInstrInfo::
1705ae35575957a3ab446e2766aa05d03020ced27d14Andrew LenharthCreateTargetScheduleState(const TargetMachine *TM,
1706ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth                           const ScheduleDAG *DAG) const {
17071ccf26a6392034a11827aeaa0d58d025ecb2b85aChris Lattner  const InstrItineraryData *II = TM->getInstrItineraryData();
1708ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth  return TM->getSubtarget<HexagonGenSubtargetInfo>().createDFAPacketizer(II);
1709ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth}
1710ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth
1711ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharthbool HexagonInstrInfo::isSchedulingBoundary(const MachineInstr *MI,
1712ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth                                            const MachineBasicBlock *MBB,
1713ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth                                            const MachineFunction &MF) const {
1714ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth  // Debug info is never a scheduling boundary. It's necessary to be explicit
1715ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth  // due to the special treatment of IT instructions below, otherwise a
1716c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  // dbg_value followed by an IT will result in the IT instruction being
1717c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  // considered a scheduling hazard, which is wrong. It should be the actual
1718c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner  // instruction preceding the dbg_value instruction(s), just like it is
1719433f8acefb78f1c8a2cf79c12b101ce7c4b20202Evan Cheng  // when debug info is not present.
17205e3efbc2ca459621400211f7370d7f121d4827d9Andrew Lenharth  if (MI->isDebugValue())
1721ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth    return false;
1722b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman
1723b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman  // Terminators and labels can't be scheduled around.
1724b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman  if (MI->getDesc().isTerminator() || MI->isLabel() || MI->isInlineAsm())
1725b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman    return true;
1726b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman
1727b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman  return false;
1728b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman}
1729b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman