HexagonInstrInfo.cpp revision 7517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71
131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- HexagonInstrInfo.cpp - Hexagon Instruction Information ------------===//
2b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
3b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//                     The LLVM Compiler Infrastructure
4b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
5b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file is distributed under the University of Illinois Open Source
6b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// License. See LICENSE.TXT for details.
7b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
8b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===//
9b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
10b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file contains the Hexagon implementation of the TargetInstrInfo class.
11b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
12b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===//
13b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
14b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "HexagonInstrInfo.h"
1579aa3417eb6f58d668aadfedf075240a41d35a26Craig Topper#include "HexagonRegisterInfo.h"
16b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "HexagonSubtarget.h"
1726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "Hexagon.h"
18b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/ADT/STLExtras.h"
19b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/ADT/SmallVector.h"
20f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer#include "llvm/CodeGen/DFAPacketizer.h"
21b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineInstrBuilder.h"
22b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineRegisterInfo.h"
23b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineFrameInfo.h"
24b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineMemOperand.h"
25b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/PseudoSourceValue.h"
26f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer#include "llvm/Support/MathExtras.h"
27b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define GET_INSTRINFO_CTOR
28b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "HexagonGenInstrInfo.inc"
29ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick#include "HexagonGenDFAPacketizer.inc"
30b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
31b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumusing namespace llvm;
32b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
33b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum///
34b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// Constants for Hexagon instructions.
35b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum///
36b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMW_OFFSET_MAX = 4095;
3726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMW_OFFSET_MIN = -4096;
38b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMD_OFFSET_MAX = 8191;
3926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMD_OFFSET_MIN = -8192;
40b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMH_OFFSET_MAX = 2047;
4126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMH_OFFSET_MIN = -2048;
42b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMB_OFFSET_MAX = 1023;
4326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMB_OFFSET_MIN = -1024;
44b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_ADDI_OFFSET_MAX = 32767;
4526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_ADDI_OFFSET_MIN = -32768;
46b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMD_AUTOINC_MAX = 56;
4726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMD_AUTOINC_MIN = -64;
48b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMW_AUTOINC_MAX = 28;
4926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMW_AUTOINC_MIN = -32;
50b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMH_AUTOINC_MAX = 14;
5126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMH_AUTOINC_MIN = -16;
52b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMB_AUTOINC_MAX = 7;
5326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMB_AUTOINC_MIN = -8;
54b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
55b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
56b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::HexagonInstrInfo(HexagonSubtarget &ST)
57b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  : HexagonGenInstrInfo(Hexagon::ADJCALLSTACKDOWN, Hexagon::ADJCALLSTACKUP),
58b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    RI(ST, *this), Subtarget(ST) {
59b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
60b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
61b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
62b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// isLoadFromStackSlot - If the specified machine instruction is a direct
63b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// load from a stack slot, return the virtual or physical register number of
64b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// the destination along with the FrameIndex of the loaded stack slot.  If
65b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// not, return 0.  This predicate must return 0 if the instruction has
66b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// any side effects other than loading from the stack slot.
67b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned HexagonInstrInfo::isLoadFromStackSlot(const MachineInstr *MI,
68b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                             int &FrameIndex) const {
69b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
70b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
71b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode()) {
7226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  default: break;
73b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
74b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
75b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
76b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
77b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
78b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MI->getOperand(2).isFI() &&
79b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MI->getOperand(1).isImm() && (MI->getOperand(1).getImm() == 0)) {
80b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      FrameIndex = MI->getOperand(2).getIndex();
81b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return MI->getOperand(0).getReg();
82b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
83b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    break;
84b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
85b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return 0;
86b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
87b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
88b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
89b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// isStoreToStackSlot - If the specified machine instruction is a direct
90b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// store to a stack slot, return the virtual or physical register number of
91b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// the source reg along with the FrameIndex of the loaded stack slot.  If
92b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// not, return 0.  This predicate must return 0 if the instruction has
93b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// any side effects other than storing to the stack slot.
94b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned HexagonInstrInfo::isStoreToStackSlot(const MachineInstr *MI,
95b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                            int &FrameIndex) const {
96b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode()) {
9726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  default: break;
98b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
99b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
100b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
101b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
102b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MI->getOperand(2).isFI() &&
103b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MI->getOperand(1).isImm() && (MI->getOperand(1).getImm() == 0)) {
104b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      FrameIndex = MI->getOperand(2).getIndex();
105b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return MI->getOperand(0).getReg();
106b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
107b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    break;
108b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
109b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return 0;
110b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
111b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
112b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
113b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned
114b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
115b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                             MachineBasicBlock *FBB,
116b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                             const SmallVectorImpl<MachineOperand> &Cond,
117b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                             DebugLoc DL) const{
118b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
119b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    int BOpc   = Hexagon::JMP;
120ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    int BccOpc = Hexagon::JMP_c;
121b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
122b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert(TBB && "InsertBranch must not be told to insert a fallthrough");
123b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
124b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    int regPos = 0;
125b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // Check if ReverseBranchCondition has asked to reverse this branch
126b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // If we want to reverse the branch an odd number of times, we want
127ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    // JMP_cNot.
128b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (!Cond.empty() && Cond[0].isImm() && Cond[0].getImm() == 0) {
129ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      BccOpc = Hexagon::JMP_cNot;
130b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      regPos = 1;
131b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
132b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
133b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (FBB == 0) {
134b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      if (Cond.empty()) {
135b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // Due to a bug in TailMerging/CFG Optimization, we need to add a
136b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // special case handling of a predicated jump followed by an
137b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // unconditional jump. If not, Tail Merging and CFG Optimization go
138b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // into an infinite loop.
139b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MachineBasicBlock *NewTBB, *NewFBB;
140b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        SmallVector<MachineOperand, 4> Cond;
141b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MachineInstr *Term = MBB.getFirstTerminator();
142b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        if (isPredicated(Term) && !AnalyzeBranch(MBB, NewTBB, NewFBB, Cond,
143b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                                 false)) {
144b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          MachineBasicBlock *NextBB =
145b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            llvm::next(MachineFunction::iterator(&MBB));
146b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          if (NewTBB == NextBB) {
147b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            ReverseBranchCondition(Cond);
148b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            RemoveBranch(MBB);
149b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            return InsertBranch(MBB, TBB, 0, Cond, DL);
150b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          }
151b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        }
152b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(&MBB, DL, get(BOpc)).addMBB(TBB);
153b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      } else {
154b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(&MBB, DL,
155b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                get(BccOpc)).addReg(Cond[regPos].getReg()).addMBB(TBB);
156b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      }
157b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return 1;
158b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
159b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
160b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(&MBB, DL, get(BccOpc)).addReg(Cond[regPos].getReg()).addMBB(TBB);
161b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(&MBB, DL, get(BOpc)).addMBB(FBB);
162b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
163b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return 2;
164b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
165b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
166b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
167b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,
168b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                     MachineBasicBlock *&TBB,
169b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 MachineBasicBlock *&FBB,
170b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineOperand> &Cond,
171b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 bool AllowModify) const {
172b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FBB = NULL;
173b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
174b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // If the block has no terminators, it just falls into the block after it.
175b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineBasicBlock::iterator I = MBB.end();
176b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I == MBB.begin())
177b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
178b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
179b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // A basic block may looks like this:
180b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //
181b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //  [   insn
182b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //     EH_LABEL
183b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //      insn
184b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //      insn
185b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //      insn
186b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //     EH_LABEL
187b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //      insn     ]
188b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //
189b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // It has two succs but does not have a terminator
190b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Don't know how to handle it.
191b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  do {
192b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    --I;
193b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (I->isEHLabel())
194b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return true;
195b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  } while (I != MBB.begin());
196b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
197b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  I = MBB.end();
198b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  --I;
199b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
200b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  while (I->isDebugValue()) {
201b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (I == MBB.begin())
202b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return false;
203b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    --I;
204b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
205b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (!isUnpredicatedTerminator(I))
206b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
207b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
208b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Get the last instruction in the block.
209b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineInstr *LastInst = I;
210b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
211b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // If there is only one terminator instruction, process it.
212b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I == MBB.begin() || !isUnpredicatedTerminator(--I)) {
213b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (LastInst->getOpcode() == Hexagon::JMP) {
214b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      TBB = LastInst->getOperand(0).getMBB();
215b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return false;
216b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
217ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    if (LastInst->getOpcode() == Hexagon::JMP_c) {
218b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      // Block ends with fall-through true condbranch.
219b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      TBB = LastInst->getOperand(1).getMBB();
220b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      Cond.push_back(LastInst->getOperand(0));
221b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return false;
222b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
223ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    if (LastInst->getOpcode() == Hexagon::JMP_cNot) {
224b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      // Block ends with fall-through false condbranch.
225b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      TBB = LastInst->getOperand(1).getMBB();
226b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      Cond.push_back(MachineOperand::CreateImm(0));
227b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      Cond.push_back(LastInst->getOperand(0));
228b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return false;
229b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
230b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // Otherwise, don't know what this is.
231b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return true;
232b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
233b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
234b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Get the instruction before it if it's a terminator.
235b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineInstr *SecondLastInst = I;
236b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
237b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // If there are three terminators, we don't know what sort of block this is.
238b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (SecondLastInst && I != MBB.begin() &&
239b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      isUnpredicatedTerminator(--I))
240b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return true;
241b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
242b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // If the block ends with Hexagon::BRCOND and Hexagon:JMP, handle it.
243b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (((SecondLastInst->getOpcode() == Hexagon::BRCOND) ||
244ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      (SecondLastInst->getOpcode() == Hexagon::JMP_c)) &&
245b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      LastInst->getOpcode() == Hexagon::JMP) {
246b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    TBB =  SecondLastInst->getOperand(1).getMBB();
247b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.push_back(SecondLastInst->getOperand(0));
248b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    FBB = LastInst->getOperand(0).getMBB();
249b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
250b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
251b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
252ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // If the block ends with Hexagon::JMP_cNot and Hexagon:JMP, handle it.
253ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  if ((SecondLastInst->getOpcode() == Hexagon::JMP_cNot) &&
254b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      LastInst->getOpcode() == Hexagon::JMP) {
255b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    TBB =  SecondLastInst->getOperand(1).getMBB();
256b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.push_back(MachineOperand::CreateImm(0));
257b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.push_back(SecondLastInst->getOperand(0));
258b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    FBB = LastInst->getOperand(0).getMBB();
259b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
260b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
261b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
262b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // If the block ends with two Hexagon:JMPs, handle it.  The second one is not
263b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // executed, so remove it.
264b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (SecondLastInst->getOpcode() == Hexagon::JMP &&
265b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      LastInst->getOpcode() == Hexagon::JMP) {
266b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    TBB = SecondLastInst->getOperand(0).getMBB();
267b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    I = LastInst;
268b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (AllowModify)
269b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      I->eraseFromParent();
270b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
271b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
272b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
273b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Otherwise, can't handle this.
274b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
275b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
276b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
277b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
278b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned HexagonInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
279b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  int BOpc   = Hexagon::JMP;
280ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  int BccOpc = Hexagon::JMP_c;
281ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  int BccOpcNot = Hexagon::JMP_cNot;
282b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
283b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineBasicBlock::iterator I = MBB.end();
284b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I == MBB.begin()) return 0;
285b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  --I;
286b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I->getOpcode() != BOpc && I->getOpcode() != BccOpc &&
287b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      I->getOpcode() != BccOpcNot)
288b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return 0;
289b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
290b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Remove the branch.
291b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  I->eraseFromParent();
292b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
293b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  I = MBB.end();
294b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
295b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I == MBB.begin()) return 1;
296b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  --I;
297b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I->getOpcode() != BccOpc && I->getOpcode() != BccOpcNot)
298b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return 1;
299b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
300b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Remove the branch.
301b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  I->eraseFromParent();
302b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return 2;
303b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
304b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
305b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
306b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
307b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 MachineBasicBlock::iterator I, DebugLoc DL,
308b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 unsigned DestReg, unsigned SrcReg,
309b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 bool KillSrc) const {
310b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (Hexagon::IntRegsRegClass.contains(SrcReg, DestReg)) {
311b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::TFR), DestReg).addReg(SrcReg);
312b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
313b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
314b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (Hexagon::DoubleRegsRegClass.contains(SrcReg, DestReg)) {
315b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::TFR_64), DestReg).addReg(SrcReg);
316b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
317b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
318b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (Hexagon::PredRegsRegClass.contains(SrcReg, DestReg)) {
319b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // Map Pd = Ps to Pd = or(Ps, Ps).
320b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::OR_pp),
321b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            DestReg).addReg(SrcReg).addReg(SrcReg);
322b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
323b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
324b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (Hexagon::DoubleRegsRegClass.contains(DestReg, SrcReg)) {
325b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // We can have an overlap between single and double reg: r1:0 = r0.
326b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if(SrcReg == RI.getSubReg(DestReg, Hexagon::subreg_loreg)) {
327b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // r1:0 = r0
328b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(MBB, I, DL, get(Hexagon::TFRI), (RI.getSubReg(DestReg,
329b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                Hexagon::subreg_hireg))).addImm(0);
330b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    } else {
331b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // r1:0 = r1 or no overlap.
332b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(MBB, I, DL, get(Hexagon::TFR), (RI.getSubReg(DestReg,
333b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                Hexagon::subreg_loreg))).addReg(SrcReg);
334b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(MBB, I, DL, get(Hexagon::TFRI), (RI.getSubReg(DestReg,
335b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                Hexagon::subreg_hireg))).addImm(0);
336b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
337b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
338b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
339b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (Hexagon::CRRegsRegClass.contains(DestReg, SrcReg)) {
340b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::TFCR), DestReg).addReg(SrcReg);
341b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
342ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  }
343ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
344ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  llvm_unreachable("Unimplemented");
345b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
346b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
347b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
348b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::
349b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumstoreRegToStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
350b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned SrcReg, bool isKill, int FI,
351b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const TargetRegisterClass *RC,
352b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const TargetRegisterInfo *TRI) const {
353b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
354b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  DebugLoc DL = MBB.findDebugLoc(I);
355b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFunction &MF = *MBB.getParent();
356b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFrameInfo &MFI = *MF.getFrameInfo();
357b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  unsigned Align = MFI.getObjectAlignment(FI);
358b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
359b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineMemOperand *MMO =
360b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MF.getMachineMemOperand(
361b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachinePointerInfo(PseudoSourceValue::getFixedStack(FI)),
362b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachineMemOperand::MOStore,
363b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MFI.getObjectSize(FI),
364b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      Align);
365b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
366420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  if (Hexagon::IntRegsRegClass.hasSubClassEq(RC)) {
367b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::STriw))
368b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0)
369b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
370420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (Hexagon::DoubleRegsRegClass.hasSubClassEq(RC)) {
371b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::STrid))
372b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0)
373b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
374420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (Hexagon::PredRegsRegClass.hasSubClassEq(RC)) {
375b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::STriw_pred))
376b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0)
377b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
378b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  } else {
379bc2198133a1836598b54b943420748e75d5dea94Craig Topper    llvm_unreachable("Unimplemented");
380b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
381b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
382b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
383b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
384b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::storeRegToAddr(
385b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 MachineFunction &MF, unsigned SrcReg,
386b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 bool isKill,
387b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineOperand> &Addr,
388b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 const TargetRegisterClass *RC,
389b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineInstr*> &NewMIs) const
390b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{
391bc2198133a1836598b54b943420748e75d5dea94Craig Topper  llvm_unreachable("Unimplemented");
392b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
393b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
394b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
395b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::
396b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumloadRegFromStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
397b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     unsigned DestReg, int FI,
398b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     const TargetRegisterClass *RC,
399b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     const TargetRegisterInfo *TRI) const {
400b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  DebugLoc DL = MBB.findDebugLoc(I);
401b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFunction &MF = *MBB.getParent();
402b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFrameInfo &MFI = *MF.getFrameInfo();
403b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  unsigned Align = MFI.getObjectAlignment(FI);
404b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
405b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineMemOperand *MMO =
406b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MF.getMachineMemOperand(
407b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachinePointerInfo(PseudoSourceValue::getFixedStack(FI)),
408b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachineMemOperand::MOLoad,
409b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MFI.getObjectSize(FI),
410b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      Align);
411420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  if (RC == &Hexagon::IntRegsRegClass) {
412b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::LDriw), DestReg)
413b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
414420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (RC == &Hexagon::DoubleRegsRegClass) {
415b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::LDrid), DestReg)
416b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
417420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (RC == &Hexagon::PredRegsRegClass) {
418b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::LDriw_pred), DestReg)
419b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
420b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  } else {
421bc2198133a1836598b54b943420748e75d5dea94Craig Topper    llvm_unreachable("Can't store this register to stack slot");
422b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
423b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
424b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
425b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
426b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::loadRegFromAddr(MachineFunction &MF, unsigned DestReg,
427b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                        SmallVectorImpl<MachineOperand> &Addr,
428b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                        const TargetRegisterClass *RC,
429b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineInstr*> &NewMIs) const {
430bc2198133a1836598b54b943420748e75d5dea94Craig Topper  llvm_unreachable("Unimplemented");
431b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
432b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
433b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
434b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumMachineInstr *HexagonInstrInfo::foldMemoryOperandImpl(MachineFunction &MF,
435b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                                    MachineInstr* MI,
436b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          const SmallVectorImpl<unsigned> &Ops,
437b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                                    int FI) const {
438b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Hexagon_TODO: Implement.
439b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return(0);
440b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
441b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
442b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
443b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned HexagonInstrInfo::createVR(MachineFunction* MF, MVT VT) const {
444b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
445b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineRegisterInfo &RegInfo = MF->getRegInfo();
446b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const TargetRegisterClass *TRC;
4477517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  if (VT == MVT::i1) {
448420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper    TRC = &Hexagon::PredRegsRegClass;
4497517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  } else if (VT == MVT::i32 || VT == MVT::f32) {
450420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper    TRC = &Hexagon::IntRegsRegClass;
4517517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  } else if (VT == MVT::i64 || VT == MVT::f64) {
452420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper    TRC = &Hexagon::DoubleRegsRegClass;
4537517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  } else {
45427baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer    llvm_unreachable("Cannot handle this register class");
4557517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  }
456b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
457b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  unsigned NewReg = RegInfo.createVirtualRegister(TRC);
458b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return NewReg;
459b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
460b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
46126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isExtendable(const MachineInstr *MI) const {
46226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch(MI->getOpcode()) {
46326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
46426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri
46526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_nv_V4:
46626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_nv_V4:
46726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
46826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
46926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
47026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri - with -1
47126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
47226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
47326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
47426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
47526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
47626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQrr
47726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_nv_V4:
47826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_nv_V4:
47926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
48026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
48126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
48226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri
48326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_nv_V4:
48426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_nv_V4:
48526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
48626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
48726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
48826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri - with -1
48926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
49026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
49126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
49226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
49326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
49426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrr
49526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_nv_V4:
49626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_nv_V4:
49726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
49826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
49926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
50026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrrdn
50126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_nv_V4:
50226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_nv_V4:
50326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
50426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
50526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
50626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUri
50726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_nv_V4:
50826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_nv_V4:
50926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
51026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
51126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
51226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrr
51326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_nv_V4:
51426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_nv_V4:
51526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
51626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
51726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
51826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrrdn
51926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_nv_V4:
52026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_nv_V4:
52126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
52226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
52326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
52426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // TFR_FI
52526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_FI:
52626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
52726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
52826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
52926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
53026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isExtended(const MachineInstr *MI) const {
53126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch(MI->getOpcode()) {
53226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
53326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri
53426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_ie_nv_V4:
53526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_ie_nv_V4:
53626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_ie_nv_V4:
53726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_ie_nv_V4:
53826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
53926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri - with -1
54026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_ie_nv_V4:
54126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_ie_nv_V4:
54226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_ie_nv_V4:
54326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_ie_nv_V4:
54426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
54526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQrr
54626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_ie_nv_V4:
54726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_ie_nv_V4:
54826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_ie_nv_V4:
54926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_ie_nv_V4:
55026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
55126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri
55226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_ie_nv_V4:
55326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_ie_nv_V4:
55426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_ie_nv_V4:
55526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_ie_nv_V4:
55626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
55726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri - with -1
55826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_ie_nv_V4:
55926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_ie_nv_V4:
56026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_ie_nv_V4:
56126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_ie_nv_V4:
56226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
56326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrr
56426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_ie_nv_V4:
56526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_ie_nv_V4:
56626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_ie_nv_V4:
56726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_ie_nv_V4:
56826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
56926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrrdn
57026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_ie_nv_V4:
57126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_ie_nv_V4:
57226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4:
57326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4:
57426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
57526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUri
57626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_ie_nv_V4:
57726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_ie_nv_V4:
57826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_ie_nv_V4:
57926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_ie_nv_V4:
58026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
58126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrr
58226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_ie_nv_V4:
58326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_ie_nv_V4:
58426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_ie_nv_V4:
58526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4:
58626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
58726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrrdn
58826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_ie_nv_V4:
58926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4:
59026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4:
59126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4:
59226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
59326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 absolute set addressing.
59426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrid_abs_setimm_V4:
59526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriw_abs_setimm_V4:
59626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrih_abs_setimm_V4:
59726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrib_abs_setimm_V4:
59826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriuh_abs_setimm_V4:
59926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriub_abs_setimm_V4:
60026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
60126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_abs_setimm_V4:
60226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_setimm_V4:
60326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_setimm_V4:
60426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_setimm_V4:
60526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
60626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 global address load.
60726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrid_GP_cPt_V4 :
60826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrid_GP_cNotPt_V4 :
60926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrid_GP_cdnPt_V4 :
61026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrid_GP_cdnNotPt_V4 :
61126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrib_GP_cPt_V4 :
61226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrib_GP_cNotPt_V4 :
61326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrib_GP_cdnPt_V4 :
61426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrib_GP_cdnNotPt_V4 :
61526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriub_GP_cPt_V4 :
61626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriub_GP_cNotPt_V4 :
61726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriub_GP_cdnPt_V4 :
61826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriub_GP_cdnNotPt_V4 :
61926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrih_GP_cPt_V4 :
62026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrih_GP_cNotPt_V4 :
62126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrih_GP_cdnPt_V4 :
62226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrih_GP_cdnNotPt_V4 :
62326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriuh_GP_cPt_V4 :
62426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriuh_GP_cNotPt_V4 :
62526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriuh_GP_cdnPt_V4 :
62626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriuh_GP_cdnNotPt_V4 :
62726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriw_GP_cPt_V4 :
62826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriw_GP_cNotPt_V4 :
62926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriw_GP_cdnPt_V4 :
63026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriw_GP_cdnNotPt_V4 :
63126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDd_GP_cPt_V4 :
63226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDd_GP_cNotPt_V4 :
63326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDd_GP_cdnPt_V4 :
63426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDd_GP_cdnNotPt_V4 :
63526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDb_GP_cPt_V4 :
63626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDb_GP_cNotPt_V4 :
63726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDb_GP_cdnPt_V4 :
63826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDb_GP_cdnNotPt_V4 :
63926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDub_GP_cPt_V4 :
64026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDub_GP_cNotPt_V4 :
64126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDub_GP_cdnPt_V4 :
64226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDub_GP_cdnNotPt_V4 :
64326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDh_GP_cPt_V4 :
64426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDh_GP_cNotPt_V4 :
64526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDh_GP_cdnPt_V4 :
64626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDh_GP_cdnNotPt_V4 :
64726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDuh_GP_cPt_V4 :
64826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDuh_GP_cNotPt_V4 :
64926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDuh_GP_cdnPt_V4 :
65026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDuh_GP_cdnNotPt_V4 :
65126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDw_GP_cPt_V4 :
65226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDw_GP_cNotPt_V4 :
65326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDw_GP_cdnPt_V4 :
65426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDw_GP_cdnNotPt_V4 :
65526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
65626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 global address store.
65726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cPt_V4 :
65826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cNotPt_V4 :
65926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cdnPt_V4 :
66026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cdnNotPt_V4 :
66126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cPt_V4 :
66226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cNotPt_V4 :
66326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnPt_V4 :
66426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnNotPt_V4 :
66526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cPt_V4 :
66626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cNotPt_V4 :
66726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnPt_V4 :
66826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnNotPt_V4 :
66926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cPt_V4 :
67026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cNotPt_V4 :
67126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnPt_V4 :
67226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnNotPt_V4 :
67326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cPt_V4 :
67426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cNotPt_V4 :
67526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cdnPt_V4 :
67626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cdnNotPt_V4 :
67726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cPt_V4 :
67826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cNotPt_V4 :
67926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnPt_V4 :
68026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnNotPt_V4 :
68126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cPt_V4 :
68226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cNotPt_V4 :
68326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnPt_V4 :
68426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnNotPt_V4 :
68526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cPt_V4 :
68626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cNotPt_V4 :
68726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnPt_V4 :
68826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnNotPt_V4 :
68926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
69026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 predicated global address new value store.
69126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cPt_nv_V4 :
69226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cNotPt_nv_V4 :
69326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnPt_nv_V4 :
69426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnNotPt_nv_V4 :
69526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cPt_nv_V4 :
69626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cNotPt_nv_V4 :
69726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnPt_nv_V4 :
69826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnNotPt_nv_V4 :
69926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cPt_nv_V4 :
70026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cNotPt_nv_V4 :
70126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnPt_nv_V4 :
70226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnNotPt_nv_V4 :
70326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cPt_nv_V4 :
70426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cNotPt_nv_V4 :
70526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnPt_nv_V4 :
70626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnNotPt_nv_V4 :
70726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cPt_nv_V4 :
70826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cNotPt_nv_V4 :
70926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnPt_nv_V4 :
71026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnNotPt_nv_V4 :
71126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cPt_nv_V4 :
71226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cNotPt_nv_V4 :
71326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnPt_nv_V4 :
71426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnNotPt_nv_V4 :
71526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
71626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // TFR_FI
71726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_FI_immext_V4:
71826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
7197517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    // TFRI_F
7207517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    case Hexagon::TFRI_f:
7217517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    case Hexagon::TFRI_cPt_f:
7227517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    case Hexagon::TFRI_cNotPt_f:
7237517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    case Hexagon::CONST64_Float_Real:
7247517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande      return true;
72526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
72626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
72726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
72826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isNewValueJump(const MachineInstr *MI) const {
72926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode()) {
73026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
73126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri
73226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_nv_V4:
73326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_nv_V4:
73426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
73526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
73626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_ie_nv_V4:
73726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_ie_nv_V4:
73826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_ie_nv_V4:
73926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_ie_nv_V4:
74026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
74126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri - with -1
74226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
74326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
74426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
74526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
74626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_ie_nv_V4:
74726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_ie_nv_V4:
74826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_ie_nv_V4:
74926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_ie_nv_V4:
75026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
75126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQrr
75226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_nv_V4:
75326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_nv_V4:
75426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
75526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
75626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_ie_nv_V4:
75726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_ie_nv_V4:
75826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_ie_nv_V4:
75926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_ie_nv_V4:
76026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
76126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri
76226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_nv_V4:
76326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_nv_V4:
76426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
76526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
76626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_ie_nv_V4:
76726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_ie_nv_V4:
76826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_ie_nv_V4:
76926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_ie_nv_V4:
77026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
77126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri - with -1
77226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
77326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
77426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
77526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
77626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_ie_nv_V4:
77726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_ie_nv_V4:
77826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_ie_nv_V4:
77926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_ie_nv_V4:
78026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
78126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrr
78226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_nv_V4:
78326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_nv_V4:
78426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
78526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
78626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_ie_nv_V4:
78726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_ie_nv_V4:
78826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_ie_nv_V4:
78926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_ie_nv_V4:
79026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
79126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrrdn
79226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_nv_V4:
79326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_nv_V4:
79426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
79526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
79626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_ie_nv_V4:
79726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_ie_nv_V4:
79826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4:
79926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4:
80026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
80126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUri
80226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_nv_V4:
80326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_nv_V4:
80426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
80526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
80626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_ie_nv_V4:
80726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_ie_nv_V4:
80826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_ie_nv_V4:
80926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_ie_nv_V4:
81026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
81126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrr
81226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_nv_V4:
81326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_nv_V4:
81426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
81526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
81626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_ie_nv_V4:
81726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_ie_nv_V4:
81826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_ie_nv_V4:
81926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4:
82026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
82126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrrdn
82226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_nv_V4:
82326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_nv_V4:
82426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
82526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
82626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_ie_nv_V4:
82726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4:
82826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4:
82926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4:
83026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
83126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
83226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
83326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
83426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeunsigned HexagonInstrInfo::getImmExtForm(const MachineInstr* MI) const {
83526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch(MI->getOpcode()) {
83626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: llvm_unreachable("Unknown type of instruction.");
83726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri
83826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_nv_V4:
83926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPt_ie_nv_V4;
84026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
84126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPt_ie_nv_V4;
84226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_nv_V4:
84326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPnt_ie_nv_V4;
84426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
84526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPnt_ie_nv_V4;
84626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
84726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri -- with -1
84826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
84926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPtneg_ie_nv_V4;
85026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
85126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPtneg_ie_nv_V4;
85226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
85326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPntneg_ie_nv_V4;
85426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
85526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPntneg_ie_nv_V4;
85626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
85726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQrr
85826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_nv_V4:
85926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrPt_ie_nv_V4;
86026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
86126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrNotPt_ie_nv_V4;
86226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_nv_V4:
86326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrPnt_ie_nv_V4;
86426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
86526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrNotPnt_ie_nv_V4;
86626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
86726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri
86826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_nv_V4:
86926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPt_ie_nv_V4;
87026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
87126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPt_ie_nv_V4;
87226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_nv_V4:
87326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPnt_ie_nv_V4;
87426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
87526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPnt_ie_nv_V4;
87626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
87726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri -- with -1
87826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
87926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPtneg_ie_nv_V4;
88026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
88126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPtneg_ie_nv_V4;
88226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
88326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPntneg_ie_nv_V4;
88426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
88526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPntneg_ie_nv_V4;
8860dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
88726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrr
88826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_nv_V4:
88926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrPt_ie_nv_V4;
89026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
89126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrNotPt_ie_nv_V4;
89226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_nv_V4:
89326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrPnt_ie_nv_V4;
89426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
89526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrNotPnt_ie_nv_V4;
89626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
89726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrrdn
89826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_nv_V4:
89926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnPt_ie_nv_V4;
90026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
90126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnNotPt_ie_nv_V4;
90226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_nv_V4:
90326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnPnt_ie_nv_V4;
90426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
90526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4;
90626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
90726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUri
90826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_nv_V4:
90926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriPt_ie_nv_V4;
91026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
91126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriNotPt_ie_nv_V4;
91226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_nv_V4:
91326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriPnt_ie_nv_V4;
91426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
91526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriNotPnt_ie_nv_V4;
91626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
91726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrr
91826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_nv_V4:
91926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrPt_ie_nv_V4;
92026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
92126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrNotPt_ie_nv_V4;
92226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_nv_V4:
92326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrPnt_ie_nv_V4;
92426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
92526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrNotPnt_ie_nv_V4;
92626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
92726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrrdn
92826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_nv_V4:
92926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnPt_ie_nv_V4;
93026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
93126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4;
93226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_nv_V4:
93326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnPnt_ie_nv_V4;
93426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
93526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4;
93626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
93726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_FI:
93826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande        return Hexagon::TFR_FI_immext_V4;
93926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
94026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 :
94126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDi_indexed_MEM_V4 :
94226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_SUBi_indexed_MEM_V4 :
94326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDr_indexed_MEM_V4 :
94426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_SUBr_indexed_MEM_V4 :
94526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ANDr_indexed_MEM_V4 :
94626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ORr_indexed_MEM_V4 :
94726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDSUBi_MEM_V4 :
94826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDi_MEM_V4 :
94926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_SUBi_MEM_V4 :
95026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDr_MEM_V4 :
95126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_SUBr_MEM_V4 :
95226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ANDr_MEM_V4 :
95326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ORr_MEM_V4 :
95426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 :
95526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDi_indexed_MEM_V4 :
95626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_SUBi_indexed_MEM_V4 :
95726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDr_indexed_MEM_V4 :
95826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_SUBr_indexed_MEM_V4 :
95926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ANDr_indexed_MEM_V4 :
96026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ORr_indexed_MEM_V4 :
96126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDSUBi_MEM_V4 :
96226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDi_MEM_V4 :
96326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_SUBi_MEM_V4 :
96426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDr_MEM_V4 :
96526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_SUBr_MEM_V4 :
96626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ANDr_MEM_V4 :
96726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ORr_MEM_V4 :
96826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 :
96926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDi_indexed_MEM_V4 :
97026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_SUBi_indexed_MEM_V4 :
97126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDr_indexed_MEM_V4 :
97226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_SUBr_indexed_MEM_V4 :
97326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ANDr_indexed_MEM_V4 :
97426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ORr_indexed_MEM_V4 :
97526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDSUBi_MEM_V4 :
97626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDi_MEM_V4 :
97726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_SUBi_MEM_V4 :
97826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDr_MEM_V4 :
97926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_SUBr_MEM_V4 :
98026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ANDr_MEM_V4 :
98126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ORr_MEM_V4 :
98226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      llvm_unreachable("Needs implementing.");
98326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
98426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
98526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
98626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeunsigned HexagonInstrInfo::getNormalBranchForm(const MachineInstr* MI) const {
98726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch(MI->getOpcode()) {
98826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: llvm_unreachable("Unknown type of jump instruction.");
98926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri
99026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_ie_nv_V4:
99126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPt_nv_V4;
99226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_ie_nv_V4:
99326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPt_nv_V4;
99426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_ie_nv_V4:
99526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPnt_nv_V4;
99626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_ie_nv_V4:
99726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPnt_nv_V4;
99826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
99926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri -- with -1
100026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_ie_nv_V4:
100126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPtneg_nv_V4;
100226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_ie_nv_V4:
100326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPtneg_nv_V4;
100426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_ie_nv_V4:
100526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPntneg_nv_V4;
100626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_ie_nv_V4:
100726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPntneg_nv_V4;
100826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
100926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQrr
101026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_ie_nv_V4:
101126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrPt_nv_V4;
101226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_ie_nv_V4:
101326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrNotPt_nv_V4;
101426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_ie_nv_V4:
101526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrPnt_nv_V4;
101626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_ie_nv_V4:
101726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrNotPnt_nv_V4;
101826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
101926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri
102026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_ie_nv_V4:
102126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPt_nv_V4;
102226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_ie_nv_V4:
102326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPt_nv_V4;
102426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_ie_nv_V4:
102526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPnt_nv_V4;
102626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_ie_nv_V4:
102726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPnt_nv_V4;
102826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
102926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri -- with -1
103026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_ie_nv_V4:
103126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPtneg_nv_V4;
103226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_ie_nv_V4:
103326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPtneg_nv_V4;
103426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_ie_nv_V4:
103526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPntneg_nv_V4;
103626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_ie_nv_V4:
103726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPntneg_nv_V4;
103826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
103926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrr
104026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_ie_nv_V4:
104126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrPt_nv_V4;
104226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_ie_nv_V4:
104326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrNotPt_nv_V4;
104426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_ie_nv_V4:
104526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrPnt_nv_V4;
104626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_ie_nv_V4:
104726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrNotPnt_nv_V4;
104826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
104926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrrdn
105026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_ie_nv_V4:
105126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnPt_nv_V4;
105226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4:
105326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnNotPt_nv_V4;
105426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_ie_nv_V4:
105526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnPnt_nv_V4;
105626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4:
105726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnNotPnt_nv_V4;
105826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
105926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUri
106026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_ie_nv_V4:
106126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriPt_nv_V4;
106226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_ie_nv_V4:
106326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriNotPt_nv_V4;
106426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_ie_nv_V4:
106526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriPnt_nv_V4;
106626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_ie_nv_V4:
106726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriNotPnt_nv_V4;
106826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
106926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrr
107026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_ie_nv_V4:
107126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrPt_nv_V4;
107226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_ie_nv_V4:
107326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrNotPt_nv_V4;
107426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_ie_nv_V4:
107526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrPnt_nv_V4;
107626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4:
107726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrNotPnt_nv_V4;
107826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
107926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrrdn
108026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_ie_nv_V4:
108126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnPt_nv_V4;
108226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4:
108326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnNotPt_nv_V4;
108426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4:
108526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnPnt_nv_V4;
108626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4:
108726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnNotPnt_nv_V4;
108826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
108926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
109026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
109126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
109226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isNewValueStore(const MachineInstr *MI) const {
109326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode()) {
109426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
109526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store Byte
109626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_nv_V4:
109726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_nv_V4:
109826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_nv_V4:
109926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_shl_nv_V4:
110026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_nv_V4:
110126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_nv_V4:
110226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_nv_V4:
110326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cPt_nv_V4:
110426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cdnPt_nv_V4:
110526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cNotPt_nv_V4:
110626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cdnNotPt_nv_V4:
110726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_cPt_nv_V4:
110826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_cdnPt_nv_V4:
110926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_cNotPt_nv_V4:
111026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_cdnNotPt_nv_V4:
111126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cPt_nv_V4:
111226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cdnPt_nv_V4:
111326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cNotPt_nv_V4:
111426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cdnNotPt_nv_V4:
111526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cPt_nv_V4:
111626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cdnPt_nv_V4:
111726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cNotPt_nv_V4:
111826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cdnNotPt_nv_V4:
111926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cPt_nv_V4:
112026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cNotPt_nv_V4:
112126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnPt_nv_V4:
112226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnNotPt_nv_V4:
112326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cPt_nv_V4:
112426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cNotPt_nv_V4:
112526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnPt_nv_V4:
112626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnNotPt_nv_V4:
112726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_nv_V4:
112826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_cPt_nv_V4:
112926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_cdnPt_nv_V4:
113026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_cNotPt_nv_V4:
113126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_cdnNotPt_nv_V4:
113226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_abs_nv_V4:
113326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_abs_cPt_nv_V4:
113426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_abs_cdnPt_nv_V4:
113526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_abs_cNotPt_nv_V4:
113626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_abs_cdnNotPt_nv_V4:
113726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
113826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store Halfword
113926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_nv_V4:
114026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_nv_V4:
114126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_nv_V4:
114226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_shl_nv_V4:
114326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_nv_V4:
114426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_nv_V4:
114526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_nv_V4:
114626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cPt_nv_V4:
114726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cdnPt_nv_V4:
114826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cNotPt_nv_V4:
114926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cdnNotPt_nv_V4:
115026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cPt_nv_V4:
115126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cdnPt_nv_V4:
115226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cNotPt_nv_V4:
115326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cdnNotPt_nv_V4:
115426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cPt_nv_V4:
115526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cdnPt_nv_V4:
115626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cNotPt_nv_V4:
115726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cdnNotPt_nv_V4:
115826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cPt_nv_V4:
115926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cdnPt_nv_V4:
116026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cNotPt_nv_V4:
116126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cdnNotPt_nv_V4:
116226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cPt_nv_V4:
116326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cNotPt_nv_V4:
116426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnPt_nv_V4:
116526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnNotPt_nv_V4:
116626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cPt_nv_V4:
116726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cNotPt_nv_V4:
116826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnPt_nv_V4:
116926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnNotPt_nv_V4:
117026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_nv_V4:
117126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_cPt_nv_V4:
117226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_cdnPt_nv_V4:
117326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_cNotPt_nv_V4:
117426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_cdnNotPt_nv_V4:
117526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_abs_nv_V4:
117626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_abs_cPt_nv_V4:
117726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_abs_cdnPt_nv_V4:
117826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_abs_cNotPt_nv_V4:
117926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_abs_cdnNotPt_nv_V4:
118026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
118126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store Word
118226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_nv_V4:
118326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_nv_V4:
118426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_nv_V4:
118526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_shl_nv_V4:
118626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_nv_V4:
118726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_nv_V4:
118826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_nv_V4:
118926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cPt_nv_V4:
119026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cdnPt_nv_V4:
119126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cNotPt_nv_V4:
119226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cdnNotPt_nv_V4:
119326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cPt_nv_V4:
119426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cdnPt_nv_V4:
119526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cNotPt_nv_V4:
119626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cdnNotPt_nv_V4:
119726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cPt_nv_V4:
119826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cdnPt_nv_V4:
119926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cNotPt_nv_V4:
120026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cdnNotPt_nv_V4:
120126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cPt_nv_V4:
120226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cdnPt_nv_V4:
120326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cNotPt_nv_V4:
120426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cdnNotPt_nv_V4:
120526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cPt_nv_V4:
120626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cNotPt_nv_V4:
120726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnPt_nv_V4:
120826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnNotPt_nv_V4:
120926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cPt_nv_V4:
121026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cNotPt_nv_V4:
121126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnPt_nv_V4:
121226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnNotPt_nv_V4:
121326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_nv_V4:
121426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_cPt_nv_V4:
121526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_cdnPt_nv_V4:
121626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_cNotPt_nv_V4:
121726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_cdnNotPt_nv_V4:
121826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_abs_nv_V4:
121926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_abs_cPt_nv_V4:
122026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_abs_cdnPt_nv_V4:
122126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_abs_cNotPt_nv_V4:
122226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_abs_cdnNotPt_nv_V4:
122326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
122426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
122526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
122626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
122726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isPostIncrement (const MachineInstr* MI) const {
122826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode())
122926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  {
123026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
123126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load Byte
123226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrib:
123326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrib_cPt:
123426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrib_cNotPt:
123526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrib_cdnPt_V4:
123626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrib_cdnNotPt_V4:
123726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
123826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load unsigned byte
123926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriub:
124026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriub_cPt:
124126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriub_cNotPt:
124226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriub_cdnPt_V4:
124326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriub_cdnNotPt_V4:
124426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
124526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load halfword
124626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrih:
124726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrih_cPt:
124826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrih_cNotPt:
124926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrih_cdnPt_V4:
125026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrih_cdnNotPt_V4:
125126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
125226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load unsigned halfword
125326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriuh:
125426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriuh_cPt:
125526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriuh_cNotPt:
125626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriuh_cdnPt_V4:
125726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriuh_cdnNotPt_V4:
125826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
125926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load word
126026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriw:
126126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriw_cPt:
126226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriw_cNotPt:
126326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriw_cdnPt_V4:
126426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriw_cdnNotPt_V4:
126526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
126626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load double word
126726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrid:
126826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrid_cPt:
126926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrid_cNotPt:
127026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrid_cdnPt_V4:
127126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrid_cdnNotPt_V4:
127226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
127326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store byte
127426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri:
127526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cPt:
127626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cNotPt:
127726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cdnPt_V4:
127826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cdnNotPt_V4:
127926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
128026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store halfword
128126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri:
128226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cPt:
128326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cNotPt:
128426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cdnPt_V4:
128526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cdnNotPt_V4:
128626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
128726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store word
128826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri:
128926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cPt:
129026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cNotPt:
129126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cdnPt_V4:
129226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cdnNotPt_V4:
129326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
129426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store double word
129526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri:
129626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cPt:
129726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cNotPt:
129826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cdnPt_V4:
129926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cdnNotPt_V4:
130026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
130126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
130226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
130326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
130426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isSaveCalleeSavedRegsCall(const MachineInstr *MI) const {
130526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  return MI->getOpcode() == Hexagon::SAVE_REGISTERS_CALL_V4;
130626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
1307ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
1308b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isPredicable(MachineInstr *MI) const {
1309b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  bool isPred = MI->getDesc().isPredicable();
1310b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1311b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (!isPred)
1312b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
1313b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1314b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const int Opc = MI->getOpcode();
1315b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1316b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch(Opc) {
1317b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFRI:
1318b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isInt<12>(MI->getOperand(1).getImm());
1319b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1320b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
1321b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid_indexed:
1322b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,3>(MI->getOperand(1).getImm());
1323b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1324b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
1325b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_indexed:
1326b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_nv_V4:
1327b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,2>(MI->getOperand(1).getImm());
1328b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1329b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
1330b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_indexed:
1331b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_nv_V4:
1332b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,1>(MI->getOperand(1).getImm());
1333b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1334b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
1335b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_indexed:
1336b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_nv_V4:
1337b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isUInt<6>(MI->getOperand(1).getImm());
1338b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1339b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
1340b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed:
1341b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,3>(MI->getOperand(2).getImm());
1342b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1343b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
1344b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed:
1345b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,2>(MI->getOperand(2).getImm());
1346b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1347b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
1348b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh:
1349b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed:
1350b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed:
1351b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,1>(MI->getOperand(2).getImm());
1352b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1353b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
1354b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
1355b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed:
1356b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed:
1357b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isUInt<6>(MI->getOperand(2).getImm());
1358b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1359b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrid:
1360b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedInt<4,3>(MI->getOperand(3).getImm());
1361b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1362b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriw:
1363b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedInt<4,2>(MI->getOperand(3).getImm());
1364b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1365b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrih:
1366b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriuh:
1367b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedInt<4,1>(MI->getOperand(3).getImm());
1368b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1369b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrib:
1370b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriub:
1371b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isInt<4>(MI->getOperand(3).getImm());
1372b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1373b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_imm_V4:
1374b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_imm_V4:
1375b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_imm_V4:
1376b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (isUInt<6>(MI->getOperand(1).getImm()) &&
1377b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            isInt<6>(MI->getOperand(2).getImm()));
1378b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1379b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_ri:
1380b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isInt<8>(MI->getOperand(2).getImm());
1381b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1382b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASLH:
1383b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASRH:
1384b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTB:
1385b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTH:
1386b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTB:
1387b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTH:
1388b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return Subtarget.getHexagonArchVersion() == HexagonSubtarget::V4;
1389b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1390b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::JMPR:
1391b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
1392b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
1393b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1394b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
1395b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
1396b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1397ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pandeunsigned HexagonInstrInfo::getInvertedPredicatedOpcode(const int Opc) const {
1398ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  switch(Opc) {
139926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: llvm_unreachable("Unexpected predicated instruction");
1400ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFR_cPt:
1401ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFR_cNotPt;
1402ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFR_cNotPt:
1403ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFR_cPt;
1404ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1405ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFRI_cPt:
1406ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFRI_cNotPt;
1407ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFRI_cNotPt:
1408ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFRI_cPt;
1409ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1410ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_c:
1411ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_cNot;
1412ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_cNot:
1413ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_c;
1414ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1415ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_ri_cPt:
1416ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_ri_cNotPt;
1417ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_ri_cNotPt:
1418ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_ri_cPt;
1419ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1420ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_rr_cPt:
1421ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_rr_cNotPt;
1422ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_rr_cNotPt:
1423ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_rr_cPt;
1424ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1425ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::XOR_rr_cPt:
1426ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::XOR_rr_cNotPt;
1427ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::XOR_rr_cNotPt:
1428ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::XOR_rr_cPt;
1429ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1430ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::AND_rr_cPt:
1431ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::AND_rr_cNotPt;
1432ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::AND_rr_cNotPt:
1433ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::AND_rr_cPt;
1434ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1435ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::OR_rr_cPt:
1436ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::OR_rr_cNotPt;
1437ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::OR_rr_cNotPt:
1438ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::OR_rr_cPt;
1439ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1440ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SUB_rr_cPt:
1441ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SUB_rr_cNotPt;
1442ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SUB_rr_cNotPt:
1443ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SUB_rr_cPt;
1444ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1445ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::COMBINE_rr_cPt:
1446ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::COMBINE_rr_cNotPt;
1447ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::COMBINE_rr_cNotPt:
1448ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::COMBINE_rr_cPt;
1449ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1450ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASLH_cPt_V4:
1451ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASLH_cNotPt_V4;
1452ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASLH_cNotPt_V4:
1453ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASLH_cPt_V4;
1454ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1455ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASRH_cPt_V4:
1456ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASRH_cNotPt_V4;
1457ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASRH_cNotPt_V4:
1458ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASRH_cPt_V4;
1459ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1460ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTB_cPt_V4:
1461ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTB_cNotPt_V4;
1462ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTB_cNotPt_V4:
1463ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTB_cPt_V4;
1464ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1465ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTH_cPt_V4:
1466ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTH_cNotPt_V4;
1467ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTH_cNotPt_V4:
1468ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTH_cPt_V4;
1469ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1470ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTB_cPt_V4:
1471ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTB_cNotPt_V4;
1472ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTB_cNotPt_V4:
1473ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTB_cPt_V4;
1474ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1475ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTH_cPt_V4:
1476ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTH_cNotPt_V4;
1477ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTH_cNotPt_V4:
1478ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTH_cPt_V4;
1479ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1480ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1481ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMPR_cPt:
1482ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMPR_cNotPt;
1483ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMPR_cNotPt:
1484ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMPR_cPt;
1485ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1486ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // V4 indexed+scaled load.
1487ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cPt_V4:
1488ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cNotPt_V4;
1489ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cNotPt_V4:
1490ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cPt_V4;
1491ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1492ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_shl_cPt_V4:
1493ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_shl_cNotPt_V4;
1494ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_shl_cNotPt_V4:
1495ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_shl_cPt_V4;
1496ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1497ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cPt_V4:
1498ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cNotPt_V4;
1499ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cNotPt_V4:
1500ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cPt_V4;
1501ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1502ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cPt_V4:
1503ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cNotPt_V4;
1504ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cNotPt_V4:
1505ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cPt_V4;
1506ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1507ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_shl_cPt_V4:
1508ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_shl_cNotPt_V4;
1509ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_shl_cNotPt_V4:
1510ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_shl_cPt_V4;
1511ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1512ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_shl_cPt_V4:
1513ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_shl_cNotPt_V4;
1514ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_shl_cNotPt_V4:
1515ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_shl_cPt_V4;
1516ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1517ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cPt_V4:
1518ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cNotPt_V4;
1519ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cNotPt_V4:
1520ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cPt_V4;
1521ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1522ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cPt_V4:
1523ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cNotPt_V4;
1524ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cNotPt_V4:
1525ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cPt_V4;
1526ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1527ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_shl_cPt_V4:
1528ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_shl_cNotPt_V4;
1529ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_shl_cNotPt_V4:
1530ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_shl_cPt_V4;
1531ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1532ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_shl_cPt_V4:
1533ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_shl_cNotPt_V4;
1534ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_shl_cNotPt_V4:
1535ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_shl_cPt_V4;
1536ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1537ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cPt_V4:
1538ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cNotPt_V4;
1539ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cNotPt_V4:
1540ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cPt_V4;
1541ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1542ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_shl_cPt_V4:
1543ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_shl_cNotPt_V4;
1544ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_shl_cNotPt_V4:
1545ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_shl_cPt_V4;
1546ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1547ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    // Byte.
1548ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STbri_cPt:
1549ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STbri_cNotPt;
1550ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STbri_cNotPt:
1551ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STbri_cPt;
1552ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1553ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_cPt:
1554ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_cNotPt;
1555ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_cNotPt:
1556ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_cPt;
1557ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1558ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_cPt:
1559ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_cNotPt;
1560ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_cNotPt:
1561ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_cPt;
1562ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1563ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_imm_cPt_V4:
1564ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_imm_cNotPt_V4;
1565ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_imm_cNotPt_V4:
1566ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_imm_cPt_V4;
1567ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1568ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_shl_cPt_V4:
1569ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_shl_cNotPt_V4;
1570ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_shl_cNotPt_V4:
1571ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_shl_cPt_V4;
1572ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1573ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Halfword.
1574ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_SThri_cPt:
1575ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_SThri_cNotPt;
1576ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_SThri_cNotPt:
1577ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_SThri_cPt;
1578ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1579ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_cPt:
1580ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_cNotPt;
1581ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_cNotPt:
1582ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_cPt;
1583ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1584ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_cPt:
1585ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_cNotPt;
1586ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_cNotPt:
1587ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_cPt;
1588ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1589ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_imm_cPt_V4:
1590ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_imm_cNotPt_V4;
1591ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_imm_cNotPt_V4:
1592ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_imm_cPt_V4;
1593ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1594ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_shl_cPt_V4:
1595ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_shl_cNotPt_V4;
1596ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_shl_cNotPt_V4:
1597ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_shl_cPt_V4;
1598ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1599ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Word.
1600ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STwri_cPt:
1601ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STwri_cNotPt;
1602ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STwri_cNotPt:
1603ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STwri_cPt;
1604ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1605ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_cPt:
1606ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_cNotPt;
1607ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_cNotPt:
1608ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_cPt;
1609ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1610ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_cPt:
1611ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_cNotPt;
1612ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_cNotPt:
1613ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_cPt;
1614ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1615ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_shl_cPt_V4:
1616ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_shl_cNotPt_V4;
1617ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_shl_cNotPt_V4:
1618ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_shl_cPt_V4;
1619ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1620ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_imm_cPt_V4:
1621ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_imm_cNotPt_V4;
1622ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_imm_cNotPt_V4:
1623ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_imm_cPt_V4;
1624ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1625ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Double word.
1626ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STdri_cPt:
1627ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STdri_cNotPt;
1628ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STdri_cNotPt:
1629ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STdri_cPt;
1630ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1631ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_cPt:
1632ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_cNotPt;
1633ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_cNotPt:
1634ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_cPt;
1635ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1636ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_cPt:
1637ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_cNotPt;
1638ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_cNotPt:
1639ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_cPt;
1640ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1641ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_shl_cPt_V4:
1642ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_shl_cNotPt_V4;
1643ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_shl_cNotPt_V4:
1644ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_shl_cPt_V4;
1645ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
164626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 Store to global address.
164726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cPt_V4:
164826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STd_GP_cNotPt_V4;
164926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cNotPt_V4:
165026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STd_GP_cPt_V4;
165126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
165226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cPt_V4:
165326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STb_GP_cNotPt_V4;
165426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cNotPt_V4:
165526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STb_GP_cPt_V4;
165626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
165726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cPt_V4:
165826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STh_GP_cNotPt_V4;
165926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cNotPt_V4:
166026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STh_GP_cPt_V4;
166126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
166226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cPt_V4:
166326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STw_GP_cNotPt_V4;
166426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cNotPt_V4:
166526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STw_GP_cPt_V4;
166626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
166726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cPt_V4:
166826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrid_GP_cNotPt_V4;
166926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cNotPt_V4:
167026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrid_GP_cPt_V4;
167126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
167226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cPt_V4:
167326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrib_GP_cNotPt_V4;
167426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cNotPt_V4:
167526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrib_GP_cPt_V4;
167626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
167726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cPt_V4:
167826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrih_GP_cNotPt_V4;
167926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cNotPt_V4:
168026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrih_GP_cPt_V4;
168126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
168226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cPt_V4:
168326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STriw_GP_cNotPt_V4;
168426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cNotPt_V4:
168526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STriw_GP_cPt_V4;
168626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
1687ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Load.
1688ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_cPt:
1689ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_cNotPt;
1690ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_cNotPt:
1691ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_cPt;
1692ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1693ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_cPt:
1694ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_cNotPt;
1695ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_cNotPt:
1696ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_cPt;
1697ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1698ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_cPt:
1699ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_cNotPt;
1700ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_cNotPt:
1701ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_cPt;
1702ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1703ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_cPt:
1704ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_cNotPt;
1705ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_cNotPt:
1706ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_cPt;
1707ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1708ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_cPt:
1709ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_cNotPt;
1710ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_cNotPt:
1711ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_cPt;
1712ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1713ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_cPt:
1714ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_cNotPt;
1715ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_cNotPt:
1716ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_cPt;
1717ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1718ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande // Load Indexed.
1719ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cPt:
1720ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cNotPt;
1721ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cNotPt:
1722ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cPt;
1723ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1724ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cPt:
1725ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cNotPt;
1726ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cNotPt:
1727ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cPt;
1728ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1729ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cPt:
1730ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cNotPt;
1731ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cNotPt:
1732ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cPt;
1733ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1734ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cPt:
1735ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cNotPt;
1736ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cNotPt:
1737ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cPt;
1738ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1739ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cPt:
1740ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cNotPt;
1741ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cNotPt:
1742ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cPt;
1743ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1744ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cPt:
1745ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cNotPt;
1746ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cNotPt:
1747ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cPt;
1748ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1749ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Post Inc Load.
1750ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrid_cPt:
1751ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrid_cNotPt;
1752ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriw_cNotPt:
1753ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriw_cPt;
1754ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1755ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrih_cPt:
1756ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrih_cNotPt;
1757ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrih_cNotPt:
1758ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrih_cPt;
1759ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1760ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriuh_cPt:
1761ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriuh_cNotPt;
1762ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriuh_cNotPt:
1763ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriuh_cPt;
1764ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1765ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrib_cPt:
1766ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrib_cNotPt;
1767ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrib_cNotPt:
1768ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrib_cPt;
1769ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1770ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriub_cPt:
1771ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriub_cNotPt;
1772ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriub_cNotPt:
1773ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriub_cPt;
1774ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1775ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Dealloc_return.
1776ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::DEALLOC_RET_cPt_V4:
1777ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::DEALLOC_RET_cNotPt_V4;
1778ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::DEALLOC_RET_cNotPt_V4:
1779ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::DEALLOC_RET_cPt_V4;
1780ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1781ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // New Value Jump.
1782ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPEQ_ri - with -1.
1783ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
1784ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPtneg_nv_V4;
1785ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
1786ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPtneg_nv_V4;
1787ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1788ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
1789ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPntneg_nv_V4;
1790ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
1791ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPntneg_nv_V4;
1792ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1793ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPEQ_ri.
1794ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQriPt_nv_V4:
1795ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPt_nv_V4;
1796ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
1797ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPt_nv_V4;
1798ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1799ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQriPnt_nv_V4:
1800ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPnt_nv_V4;
1801ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
1802ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPnt_nv_V4;
1803ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1804ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPEQ_rr.
1805ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQrrPt_nv_V4:
1806ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrNotPt_nv_V4;
1807ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
1808ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrPt_nv_V4;
1809ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1810ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQrrPnt_nv_V4:
1811ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrNotPnt_nv_V4;
1812ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
1813ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrPnt_nv_V4;
1814ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1815ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_ri - with -1.
1816ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
1817ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPtneg_nv_V4;
1818ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
1819ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPtneg_nv_V4;
1820ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1821ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
1822ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPntneg_nv_V4;
1823ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
1824ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPntneg_nv_V4;
1825ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1826ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_ri.
1827ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTriPt_nv_V4:
1828ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPt_nv_V4;
1829ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
1830ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPt_nv_V4;
1831ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1832ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTriPnt_nv_V4:
1833ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPnt_nv_V4;
1834ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
1835ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPnt_nv_V4;
1836ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1837ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_rr.
1838ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrPt_nv_V4:
1839ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrNotPt_nv_V4;
1840ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
1841ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrPt_nv_V4;
1842ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1843ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrPnt_nv_V4:
1844ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrNotPnt_nv_V4;
1845ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
1846ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrPnt_nv_V4;
1847ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1848ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_rrdn.
1849ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrdnPt_nv_V4:
1850ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnNotPt_nv_V4;
1851ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
1852ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnPt_nv_V4;
1853ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1854ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrdnPnt_nv_V4:
1855ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnNotPnt_nv_V4;
1856ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
1857ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnPnt_nv_V4;
1858ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1859ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGTU_ri.
1860ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUriPt_nv_V4:
1861ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriNotPt_nv_V4;
1862ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
1863ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriPt_nv_V4;
1864ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1865ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUriPnt_nv_V4:
1866ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriNotPnt_nv_V4;
1867ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
1868ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriPnt_nv_V4;
1869ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1870ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGTU_rr.
1871ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrPt_nv_V4:
1872ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrNotPt_nv_V4;
1873ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
1874ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrPt_nv_V4;
1875ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1876ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrPnt_nv_V4:
1877ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrNotPnt_nv_V4;
1878ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
1879ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrPnt_nv_V4;
1880ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1881ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGTU_rrdn.
1882ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrdnPt_nv_V4:
1883ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnNotPt_nv_V4;
1884ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
1885ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnPt_nv_V4;
1886ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1887ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrdnPnt_nv_V4:
1888ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnNotPnt_nv_V4;
1889ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
1890ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnPnt_nv_V4;
1891ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  }
1892ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande}
1893b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1894ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
1895b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumint HexagonInstrInfo::
1896b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumgetMatchingCondBranchOpcode(int Opc, bool invertPredicate) const {
1897b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch(Opc) {
1898b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFR:
1899b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::TFR_cPt :
1900b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::TFR_cNotPt;
19017517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  case Hexagon::TFRI_f:
19027517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    return !invertPredicate ? Hexagon::TFRI_cPt_f :
19037517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande                              Hexagon::TFRI_cNotPt_f;
1904b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFRI:
1905b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::TFRI_cPt :
1906b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::TFRI_cNotPt;
1907b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::JMP:
1908ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    return !invertPredicate ? Hexagon::JMP_c :
1909ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande                              Hexagon::JMP_cNot;
1910b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_ri:
1911b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ADD_ri_cPt :
1912b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ADD_ri_cNotPt;
1913b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_rr:
1914b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ADD_rr_cPt :
1915b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ADD_rr_cNotPt;
1916b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::XOR_rr:
1917b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::XOR_rr_cPt :
1918b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::XOR_rr_cNotPt;
1919b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::AND_rr:
1920b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::AND_rr_cPt :
1921b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::AND_rr_cNotPt;
1922b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::OR_rr:
1923b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::OR_rr_cPt :
1924b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::OR_rr_cNotPt;
1925b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SUB_rr:
1926b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::SUB_rr_cPt :
1927b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::SUB_rr_cNotPt;
1928b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::COMBINE_rr:
1929b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::COMBINE_rr_cPt :
1930b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::COMBINE_rr_cNotPt;
1931b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASLH:
1932b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ASLH_cPt_V4 :
1933b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ASLH_cNotPt_V4;
1934b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASRH:
1935b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ASRH_cPt_V4 :
1936b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ASRH_cNotPt_V4;
1937b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTB:
1938b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::SXTB_cPt_V4 :
1939b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::SXTB_cNotPt_V4;
1940b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTH:
1941b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::SXTH_cPt_V4 :
1942b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::SXTH_cNotPt_V4;
1943b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTB:
1944b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ZXTB_cPt_V4 :
1945b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ZXTB_cNotPt_V4;
1946b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTH:
1947b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ZXTH_cPt_V4 :
1948b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ZXTH_cNotPt_V4;
1949b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1950b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::JMPR:
1951b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::JMPR_cPt :
1952b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::JMPR_cNotPt;
1953b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1954b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // V4 indexed+scaled load.
1955b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed_V4:
1956b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_indexed_cPt_V4 :
1957b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_indexed_cNotPt_V4;
1958b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed_shl_V4:
1959b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_indexed_shl_cPt_V4 :
1960b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_indexed_shl_cNotPt_V4;
1961b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed_V4:
1962b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_indexed_cPt_V4 :
1963b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_indexed_cNotPt_V4;
1964b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed_V4:
1965b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_cPt_V4 :
1966b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_cNotPt_V4;
1967b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_ae_indexed_V4:
1968b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_cPt_V4 :
1969b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_cNotPt_V4;
1970b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed_shl_V4:
1971b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_indexed_shl_cPt_V4 :
1972b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_indexed_shl_cNotPt_V4;
1973b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed_shl_V4:
1974b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_shl_cPt_V4 :
1975b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_shl_cNotPt_V4;
1976b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_ae_indexed_shl_V4:
1977b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_shl_cPt_V4 :
1978b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_shl_cNotPt_V4;
1979b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed_V4:
1980b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_indexed_cPt_V4 :
1981b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_indexed_cNotPt_V4;
1982b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed_V4:
1983b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt_V4 :
1984b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_cNotPt_V4;
1985b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_ae_indexed_V4:
1986b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt_V4 :
1987b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_cNotPt_V4;
1988b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed_shl_V4:
1989b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_indexed_shl_cPt_V4 :
1990b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_indexed_shl_cNotPt_V4;
1991b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed_shl_V4:
1992b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_shl_cPt_V4 :
1993b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_shl_cNotPt_V4;
1994b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_ae_indexed_shl_V4:
1995b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_shl_cPt_V4 :
1996b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_shl_cNotPt_V4;
1997b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed_V4:
1998b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_indexed_cPt_V4 :
1999b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_indexed_cNotPt_V4;
2000b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed_shl_V4:
2001b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_indexed_shl_cPt_V4 :
2002b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_indexed_shl_cNotPt_V4;
200326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
200426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  // V4 Load from global address
200526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDrid_GP_V4:
200626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDrid_GP_cPt_V4 :
200726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDrid_GP_cNotPt_V4;
200826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDrib_GP_V4:
200926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDrib_GP_cPt_V4 :
201026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDrib_GP_cNotPt_V4;
201126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDriub_GP_V4:
201226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDriub_GP_cPt_V4 :
201326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDriub_GP_cNotPt_V4;
201426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDrih_GP_V4:
201526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDrih_GP_cPt_V4 :
201626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDrih_GP_cNotPt_V4;
201726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDriuh_GP_V4:
201826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDriuh_GP_cPt_V4 :
201926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDriuh_GP_cNotPt_V4;
202026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDriw_GP_V4:
202126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDriw_GP_cPt_V4 :
202226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDriw_GP_cNotPt_V4;
202326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
202426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDd_GP_V4:
202526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDd_GP_cPt_V4 :
202626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDd_GP_cNotPt_V4;
202726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDb_GP_V4:
202826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDb_GP_cPt_V4 :
202926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDb_GP_cNotPt_V4;
203026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDub_GP_V4:
203126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDub_GP_cPt_V4 :
203226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDub_GP_cNotPt_V4;
203326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDh_GP_V4:
203426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDh_GP_cPt_V4 :
203526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDh_GP_cNotPt_V4;
203626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDuh_GP_V4:
203726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDuh_GP_cPt_V4 :
203826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDuh_GP_cNotPt_V4;
203926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDw_GP_V4:
204026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDw_GP_cPt_V4 :
204126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDw_GP_cNotPt_V4;
204226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
2043b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // Byte.
2044b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_STbri:
2045b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_STbri_cPt :
2046b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_STbri_cNotPt;
2047b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
2048b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_cPt :
2049b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_cNotPt;
2050b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_indexed:
2051b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_indexed_cPt :
2052b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_indexed_cNotPt;
2053b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_imm_V4:
2054b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_imm_cPt_V4 :
2055b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_imm_cNotPt_V4;
2056b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_indexed_shl_V4:
2057b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_indexed_shl_cPt_V4 :
2058b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_indexed_shl_cNotPt_V4;
2059b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Halfword.
2060b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_SThri:
2061b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_SThri_cPt :
2062b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_SThri_cNotPt;
2063b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
2064b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_cPt :
2065b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_cNotPt;
2066b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_indexed:
2067b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_indexed_cPt :
2068b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_indexed_cNotPt;
2069b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_imm_V4:
2070b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_imm_cPt_V4 :
2071b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_imm_cNotPt_V4;
2072b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_indexed_shl_V4:
2073b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_indexed_shl_cPt_V4 :
2074b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_indexed_shl_cNotPt_V4;
2075b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Word.
2076b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_STwri:
2077b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_STwri_cPt :
2078b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_STwri_cNotPt;
2079b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
2080b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_cPt :
2081b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_cNotPt;
2082b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_indexed:
2083b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_indexed_cPt :
2084b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_indexed_cNotPt;
2085b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_indexed_shl_V4:
2086b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_indexed_shl_cPt_V4 :
2087b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_indexed_shl_cNotPt_V4;
2088b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_imm_V4:
2089b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_imm_cPt_V4 :
2090b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_imm_cNotPt_V4;
2091b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Double word.
2092b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_STdri:
2093b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_STdri_cPt :
2094b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_STdri_cNotPt;
2095b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
2096b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrid_cPt :
2097b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrid_cNotPt;
2098b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid_indexed:
2099b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrid_indexed_cPt :
2100b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrid_indexed_cNotPt;
2101b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid_indexed_shl_V4:
2102b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrid_indexed_shl_cPt_V4 :
2103b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrid_indexed_shl_cNotPt_V4;
210426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
210526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  // V4 Store to global address
210626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STrid_GP_V4:
210726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STrid_GP_cPt_V4 :
210826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STrid_GP_cNotPt_V4;
210926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STrib_GP_V4:
211026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STrib_GP_cPt_V4 :
211126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STrib_GP_cNotPt_V4;
211226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STrih_GP_V4:
211326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STrih_GP_cPt_V4 :
211426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STrih_GP_cNotPt_V4;
211526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STriw_GP_V4:
211626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STriw_GP_cPt_V4 :
211726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STriw_GP_cNotPt_V4;
211826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
211926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STd_GP_V4:
212026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STd_GP_cPt_V4 :
212126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STd_GP_cNotPt_V4;
212226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STb_GP_V4:
212326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STb_GP_cPt_V4 :
212426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STb_GP_cNotPt_V4;
212526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STh_GP_V4:
212626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STh_GP_cPt_V4 :
212726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STh_GP_cNotPt_V4;
212826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STw_GP_V4:
212926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STw_GP_cPt_V4 :
213026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STw_GP_cNotPt_V4;
213126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
2132b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Load.
2133b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
2134b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_cPt :
2135b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_cNotPt;
2136b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
2137b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_cPt :
2138b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_cNotPt;
2139b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
2140b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_cPt :
2141b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_cNotPt;
2142b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh:
2143b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_cPt :
2144b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_cNotPt;
2145b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
2146b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_cPt :
2147b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_cNotPt;
2148b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
2149b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_cPt :
2150b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_cNotPt;
2151b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // Load Indexed.
2152b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed:
2153b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_indexed_cPt :
2154b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_indexed_cNotPt;
2155b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed:
2156b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_indexed_cPt :
2157b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_indexed_cNotPt;
2158b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed:
2159b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_indexed_cPt :
2160b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_indexed_cNotPt;
2161b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed:
2162b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt :
2163b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_cNotPt;
2164b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed:
2165b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_indexed_cPt :
2166b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_indexed_cNotPt;
2167b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed:
2168b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_cPt :
2169b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_cNotPt;
2170b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Post Increment Load.
2171b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrid:
2172b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDrid_cPt :
2173b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDrid_cNotPt;
2174b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriw:
2175b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDriw_cPt :
2176b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDriw_cNotPt;
2177b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrih:
2178b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDrih_cPt :
2179b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDrih_cNotPt;
2180b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriuh:
2181b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDriuh_cPt :
2182b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDriuh_cNotPt;
2183b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrib:
2184b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDrib_cPt :
2185b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDrib_cNotPt;
2186b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriub:
2187b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDriub_cPt :
2188b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDriub_cNotPt;
2189b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // DEALLOC_RETURN.
2190b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_V4:
2191b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::DEALLOC_RET_cPt_V4 :
2192b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::DEALLOC_RET_cNotPt_V4;
2193b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
219427baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer  llvm_unreachable("Unexpected predicable instruction");
2195b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2196b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2197b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2198b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2199b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumPredicateInstruction(MachineInstr *MI,
2200b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     const SmallVectorImpl<MachineOperand> &Cond) const {
2201b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  int Opc = MI->getOpcode();
2202b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  assert (isPredicable(MI) && "Expected predicable instruction");
2203b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  bool invertJump = (!Cond.empty() && Cond[0].isImm() &&
2204b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     (Cond[0].getImm() == 0));
2205b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MI->setDesc(get(getMatchingCondBranchOpcode(Opc, invertJump)));
2206b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //
2207b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // This assumes that the predicate is always the first operand
2208b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // in the set of inputs.
2209b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //
2210b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MI->addOperand(MI->getOperand(MI->getNumOperands()-1));
2211b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  int oper;
2212b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  for (oper = MI->getNumOperands() - 3; oper >= 0; --oper) {
2213b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    MachineOperand MO = MI->getOperand(oper);
2214b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if ((MO.isReg() && !MO.isUse() && !MO.isImplicit())) {
2215b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      break;
2216b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
2217b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2218b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MO.isReg()) {
2219b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MI->getOperand(oper+1).ChangeToRegister(MO.getReg(), MO.isDef(),
2220b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                              MO.isImplicit(), MO.isKill(),
2221b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                              MO.isDead(), MO.isUndef(),
2222b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                              MO.isDebug());
2223b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    } else if (MO.isImm()) {
2224b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MI->getOperand(oper+1).ChangeToImmediate(MO.getImm());
2225b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    } else {
2226bc2198133a1836598b54b943420748e75d5dea94Craig Topper      llvm_unreachable("Unexpected operand type");
2227b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
2228b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2229b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2230b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  int regPos = invertJump ? 1 : 0;
2231b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineOperand PredMO = Cond[regPos];
2232b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MI->getOperand(oper+1).ChangeToRegister(PredMO.getReg(), PredMO.isDef(),
2233b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          PredMO.isImplicit(), PredMO.isKill(),
2234b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          PredMO.isDead(), PredMO.isUndef(),
2235b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          PredMO.isDebug());
2236b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2237b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
2238b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2239b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2240b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2241b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2242b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::
2243b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisProfitableToIfCvt(MachineBasicBlock &MBB,
2244b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned NumCyles,
2245b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned ExtraPredCycles,
2246b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const BranchProbability &Probability) const {
2247b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
2248b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2249b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2250b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2251b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2252b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::
2253b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisProfitableToIfCvt(MachineBasicBlock &TMBB,
2254b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned NumTCycles,
2255b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned ExtraTCycles,
2256b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    MachineBasicBlock &FMBB,
2257b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned NumFCycles,
2258b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned ExtraFCycles,
2259b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const BranchProbability &Probability) const {
2260b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
2261b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2262b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2263b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2264b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isPredicated(const MachineInstr *MI) const {
2265c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon  const uint64_t F = MI->getDesc().TSFlags;
2266b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2267c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon  return ((F >> HexagonII::PredicatedPos) & HexagonII::PredicatedMask);
2268b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2269b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2270b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2271b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::DefinesPredicate(MachineInstr *MI,
2272b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                   std::vector<MachineOperand> &Pred) const {
2273b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  for (unsigned oper = 0; oper < MI->getNumOperands(); ++oper) {
2274b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    MachineOperand MO = MI->getOperand(oper);
2275b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MO.isReg() && MO.isDef()) {
2276b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      const TargetRegisterClass* RC = RI.getMinimalPhysRegClass(MO.getReg());
2277420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper      if (RC == &Hexagon::PredRegsRegClass) {
2278b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        Pred.push_back(MO);
2279b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        return true;
2280b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      }
2281b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
2282b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2283b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return false;
2284b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2285b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2286b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2287b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2288b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::
2289b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumSubsumesPredicate(const SmallVectorImpl<MachineOperand> &Pred1,
2290b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                  const SmallVectorImpl<MachineOperand> &Pred2) const {
2291b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // TODO: Fix this
2292b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return false;
2293b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2294b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2295b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2296b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2297b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// We indicate that we want to reverse the branch by
2298b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// inserting a 0 at the beginning of the Cond vector.
2299b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2300b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2301b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumReverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const {
2302b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (!Cond.empty() && Cond[0].isImm() && Cond[0].getImm() == 0) {
2303b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.erase(Cond.begin());
2304b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  } else {
2305b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.insert(Cond.begin(), MachineOperand::CreateImm(0));
2306b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2307b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return false;
2308b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2309b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2310b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2311b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2312b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisProfitableToDupForIfCvt(MachineBasicBlock &MBB,unsigned NumInstrs,
2313b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                          const BranchProbability &Probability) const {
2314b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return (NumInstrs <= 4);
2315b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2316b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2317b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isDeallocRet(const MachineInstr *MI) const {
2318b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode()) {
231926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  default: return false;
2320b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_V4 :
2321b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cPt_V4 :
2322b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cNotPt_V4 :
2323b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cdnPnt_V4 :
2324b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cNotdnPnt_V4 :
2325b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cdnPt_V4 :
2326b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cNotdnPt_V4 :
2327b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum   return true;
2328b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2329b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2330b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2331b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2332b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2333b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisValidOffset(const int Opcode, const int Offset) const {
2334b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // This function is to check whether the "Offset" is in the correct range of
2335b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // the given "Opcode". If "Offset" is not in the correct range, "ADD_ri" is
2336b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // inserted to calculate the final address. Due to this reason, the function
2337b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // assumes that the "Offset" has correct alignment.
2338b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2339b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch(Opcode) {
2340b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2341b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
23427517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  case Hexagon::LDriw_f:
2343b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
23447517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  case Hexagon::STriw_f:
2345b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert((Offset % 4 == 0) && "Offset has incorrect alignment");
2346b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMW_OFFSET_MIN) &&
2347b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMW_OFFSET_MAX);
2348b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2349b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
23507517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  case Hexagon::LDrid_f:
2351b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
23527517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  case Hexagon::STrid_f:
2353b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert((Offset % 8 == 0) && "Offset has incorrect alignment");
2354b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMD_OFFSET_MIN) &&
2355b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMD_OFFSET_MAX);
2356b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2357b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
2358b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh:
2359b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
2360b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert((Offset % 2 == 0) && "Offset has incorrect alignment");
2361b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMH_OFFSET_MIN) &&
2362b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMH_OFFSET_MAX);
2363b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2364b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
2365b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
2366b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
2367b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMB_OFFSET_MIN) &&
2368b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMB_OFFSET_MAX);
2369b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2370b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_ri:
2371b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFR_FI:
2372b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_ADDI_OFFSET_MIN) &&
2373b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_ADDI_OFFSET_MAX);
2374b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2375b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 :
2376b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDi_indexed_MEM_V4 :
2377b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBi_indexed_MEM_V4 :
2378b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDr_indexed_MEM_V4 :
2379b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBr_indexed_MEM_V4 :
2380b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ANDr_indexed_MEM_V4 :
2381b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ORr_indexed_MEM_V4 :
2382b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDSUBi_MEM_V4 :
2383b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDi_MEM_V4 :
2384b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBi_MEM_V4 :
2385b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDr_MEM_V4 :
2386b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBr_MEM_V4 :
2387b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ANDr_MEM_V4 :
2388b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ORr_MEM_V4 :
2389b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert ((Offset % 4) == 0 && "MEMOPw offset is not aligned correctly." );
2390b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (0 <= Offset && Offset <= 255);
2391b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2392b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 :
2393b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDi_indexed_MEM_V4 :
2394b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBi_indexed_MEM_V4 :
2395b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDr_indexed_MEM_V4 :
2396b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBr_indexed_MEM_V4 :
2397b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ANDr_indexed_MEM_V4 :
2398b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ORr_indexed_MEM_V4 :
2399b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDSUBi_MEM_V4 :
2400b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDi_MEM_V4 :
2401b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBi_MEM_V4 :
2402b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDr_MEM_V4 :
2403b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBr_MEM_V4 :
2404b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ANDr_MEM_V4 :
2405b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ORr_MEM_V4 :
2406b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert ((Offset % 2) == 0 && "MEMOPh offset is not aligned correctly." );
2407b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (0 <= Offset && Offset <= 127);
2408b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2409b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 :
2410b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDi_indexed_MEM_V4 :
2411b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBi_indexed_MEM_V4 :
2412b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDr_indexed_MEM_V4 :
2413b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBr_indexed_MEM_V4 :
2414b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ANDr_indexed_MEM_V4 :
2415b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ORr_indexed_MEM_V4 :
2416b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDSUBi_MEM_V4 :
2417b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDi_MEM_V4 :
2418b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBi_MEM_V4 :
2419b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDr_MEM_V4 :
2420b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBr_MEM_V4 :
2421b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ANDr_MEM_V4 :
2422b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ORr_MEM_V4 :
2423b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (0 <= Offset && Offset <= 63);
2424b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2425b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // LDri_pred and STriw_pred are pseudo operations, so it has to take offset of
2426b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // any size. Later pass knows how to handle it.
2427b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_pred:
2428b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_pred:
2429b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return true;
2430b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2431b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // INLINEASM is very special.
2432b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::INLINEASM:
2433b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return true;
2434b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2435b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
243627baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer  llvm_unreachable("No offset range is defined for this opcode. "
243727baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer                   "Please define it in the above switch statement!");
2438b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2439b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2440b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2441b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2442b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// Check if the Offset is a valid auto-inc imm by Load/Store Type.
2443b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2444b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2445b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisValidAutoIncImm(const EVT VT, const int Offset) const {
2446b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2447b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i64) {
2448b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMD_AUTOINC_MIN &&
2449b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMD_AUTOINC_MAX &&
2450b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              (Offset & 0x7) == 0);
2451b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2452b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i32) {
2453b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMW_AUTOINC_MIN &&
2454b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMW_AUTOINC_MAX &&
2455b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              (Offset & 0x3) == 0);
2456b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2457b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i16) {
2458b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMH_AUTOINC_MIN &&
2459b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMH_AUTOINC_MAX &&
2460b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              (Offset & 0x1) == 0);
2461b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2462b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i8) {
2463b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMB_AUTOINC_MIN &&
2464b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMB_AUTOINC_MAX);
2465b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2466bc2198133a1836598b54b943420748e75d5dea94Craig Topper  llvm_unreachable("Not an auto-inc opc!");
2467b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2468b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2469b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2470b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2471b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisMemOp(const MachineInstr *MI) const {
2472b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode())
2473b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  {
247426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
2475b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 :
2476b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDi_indexed_MEM_V4 :
2477b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBi_indexed_MEM_V4 :
2478b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDr_indexed_MEM_V4 :
2479b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBr_indexed_MEM_V4 :
2480b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ANDr_indexed_MEM_V4 :
2481b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ORr_indexed_MEM_V4 :
2482b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDSUBi_MEM_V4 :
2483b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDi_MEM_V4 :
2484b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBi_MEM_V4 :
2485b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDr_MEM_V4 :
2486b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBr_MEM_V4 :
2487b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ANDr_MEM_V4 :
2488b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ORr_MEM_V4 :
2489b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 :
2490b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDi_indexed_MEM_V4 :
2491b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBi_indexed_MEM_V4 :
2492b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDr_indexed_MEM_V4 :
2493b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBr_indexed_MEM_V4 :
2494b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ANDr_indexed_MEM_V4 :
2495b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ORr_indexed_MEM_V4 :
2496b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDSUBi_MEM_V4 :
2497b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDi_MEM_V4 :
2498b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBi_MEM_V4 :
2499b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDr_MEM_V4 :
2500b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBr_MEM_V4 :
2501b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ANDr_MEM_V4 :
2502b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ORr_MEM_V4 :
2503b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 :
2504b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDi_indexed_MEM_V4 :
2505b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBi_indexed_MEM_V4 :
2506b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDr_indexed_MEM_V4 :
2507b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBr_indexed_MEM_V4 :
2508b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ANDr_indexed_MEM_V4 :
2509b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ORr_indexed_MEM_V4 :
2510b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDSUBi_MEM_V4 :
2511b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDi_MEM_V4 :
2512b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBi_MEM_V4 :
2513b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDr_MEM_V4 :
2514b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBr_MEM_V4 :
2515b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ANDr_MEM_V4 :
2516b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ORr_MEM_V4 :
251726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
2518b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2519b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2520b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2521b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2522b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2523b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisSpillPredRegOp(const MachineInstr *MI) const {
252426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode()) {
252526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
2526b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::STriw_pred :
2527b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_pred :
252826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
25291bfd24851ef35e754d9652551e1a7abb12fe6738Sirish Pande  }
25301bfd24851ef35e754d9652551e1a7abb12fe6738Sirish Pande  return false;
25311bfd24851ef35e754d9652551e1a7abb12fe6738Sirish Pande}
25321bfd24851ef35e754d9652551e1a7abb12fe6738Sirish Pande
253326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::
253426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish PandeisConditionalTransfer (const MachineInstr *MI) const {
253526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode()) {
253626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
253726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_cPt:
253826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_cNotPt:
253926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFRI_cPt:
254026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFRI_cNotPt:
254126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_cdnPt:
254226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_cdnNotPt:
254326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFRI_cdnPt:
254426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFRI_cdnNotPt:
254526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
254626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
254726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
2548b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2549b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isConditionalALU32 (const MachineInstr* MI) const {
2550b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const HexagonRegisterInfo& QRI = getRegisterInfo();
2551b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode())
2552b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  {
255326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
2554b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_ri_cPt:
2555b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_ri_cNotPt:
2556b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_rr_cPt:
2557b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_rr_cNotPt:
2558b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::XOR_rr_cPt:
2559b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::XOR_rr_cNotPt:
2560b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::AND_rr_cPt:
2561b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::AND_rr_cNotPt:
2562b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::OR_rr_cPt:
2563b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::OR_rr_cNotPt:
2564b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SUB_rr_cPt:
2565b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SUB_rr_cNotPt:
2566b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::COMBINE_rr_cPt:
2567b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::COMBINE_rr_cNotPt:
2568b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return true;
2569b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASLH_cPt_V4:
2570b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASLH_cNotPt_V4:
2571b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASRH_cPt_V4:
2572b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASRH_cNotPt_V4:
2573b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTB_cPt_V4:
2574b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTB_cNotPt_V4:
2575b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTH_cPt_V4:
2576b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTH_cNotPt_V4:
2577b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTB_cPt_V4:
2578b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTB_cNotPt_V4:
2579b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTH_cPt_V4:
2580b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTH_cNotPt_V4:
258126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return QRI.Subtarget.hasV4TOps();
2582b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2583b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2584b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2585b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2586b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisConditionalLoad (const MachineInstr* MI) const {
2587b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const HexagonRegisterInfo& QRI = getRegisterInfo();
2588b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode())
2589b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  {
259026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
2591b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_cPt :
2592b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_cNotPt :
2593b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cPt :
2594b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cNotPt :
2595b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_cPt :
2596b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_cNotPt :
2597b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cPt :
2598b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cNotPt :
2599b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_cPt :
2600b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_cNotPt :
2601b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cPt :
2602b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cNotPt :
2603b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_cPt :
2604b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_cNotPt :
2605b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cPt :
2606b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cNotPt :
2607b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_cPt :
2608b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_cNotPt :
2609b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cPt :
2610b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cNotPt :
2611b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_cPt :
2612b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_cNotPt :
2613b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cPt :
2614b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cNotPt :
2615b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return true;
2616b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrid_cPt :
2617b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrid_cNotPt :
2618b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriw_cPt :
2619b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriw_cNotPt :
2620b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrih_cPt :
2621b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrih_cNotPt :
2622b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrib_cPt :
2623b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrib_cNotPt :
2624b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriuh_cPt :
2625b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriuh_cNotPt :
2626b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriub_cPt :
2627b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriub_cNotPt :
262826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return QRI.Subtarget.hasV4TOps();
2629b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cPt_V4 :
2630b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cNotPt_V4 :
2631b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_shl_cPt_V4 :
2632b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_shl_cNotPt_V4 :
2633b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cPt_V4 :
2634b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cNotPt_V4 :
2635b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_shl_cPt_V4 :
2636b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_shl_cNotPt_V4 :
2637b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cPt_V4 :
2638b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cNotPt_V4 :
2639b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_shl_cPt_V4 :
2640b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_shl_cNotPt_V4 :
2641b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cPt_V4 :
2642b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cNotPt_V4 :
2643b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_shl_cPt_V4 :
2644b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_shl_cNotPt_V4 :
2645b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cPt_V4 :
2646b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cNotPt_V4 :
2647b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_shl_cPt_V4 :
2648b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_shl_cNotPt_V4 :
2649b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cPt_V4 :
2650b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cNotPt_V4 :
2651b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_shl_cPt_V4 :
2652b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_shl_cNotPt_V4 :
265326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return QRI.Subtarget.hasV4TOps();
265426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
265526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
265626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
265726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Returns true if an instruction is a conditional store.
265826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
265926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Note: It doesn't include conditional new-value stores as they can't be
266026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// converted to .new predicate.
266126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
266226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//               p.new NV store [ if(p0.new)memw(R0+#0)=R2.new ]
266326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//                ^           ^
266426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//               /             \ (not OK. it will cause new-value store to be
266526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//              /               X conditional on p0.new while R2 producer is
266626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//             /                 \ on p0)
266726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//            /                   \.
266826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//     p.new store                 p.old NV store
266926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// [if(p0.new)memw(R0+#0)=R2]    [if(p0)memw(R0+#0)=R2.new]
267026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//            ^                  ^
267126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//             \                /
267226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//              \              /
267326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//               \            /
267426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//                 p.old store
267526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//             [if (p0)memw(R0+#0)=R2]
267626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
267726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// The above diagram shows the steps involoved in the conversion of a predicated
267826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// store instruction to its .new predicated new-value form.
267926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
268026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// The following set of instructions further explains the scenario where
268126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// conditional new-value store becomes invalid when promoted to .new predicate
268226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// form.
268326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
268426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// { 1) if (p0) r0 = add(r1, r2)
268526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//   2) p0 = cmp.eq(r3, #0) }
268626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
268726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//   3) if (p0) memb(r1+#0) = r0  --> this instruction can't be grouped with
268826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// the first two instructions because in instr 1, r0 is conditional on old value
268926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// of p0 but its use in instr 3 is conditional on p0 modified by instr 2 which
269026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// is not valid for new-value stores.
269126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::
269226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish PandeisConditionalStore (const MachineInstr* MI) const {
269326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  const HexagonRegisterInfo& QRI = getRegisterInfo();
269426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode())
269526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  {
269626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
269726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_cPt_V4 :
269826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_cNotPt_V4 :
269926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cPt_V4 :
270026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cNotPt_V4 :
270126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cPt :
270226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cNotPt :
270326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cPt :
270426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cNotPt :
270526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_indexed_cPt :
270626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_indexed_cNotPt :
270726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_indexed_shl_cPt_V4 :
270826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cPt :
270926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cNotPt :
271026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cPt :
271126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cNotPt :
271226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cPt :
271326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cNotPt :
271426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_cPt_V4 :
271526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_cNotPt_V4 :
271626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cPt_V4 :
271726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cNotPt_V4 :
271826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cPt :
271926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cNotPt :
272026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cPt :
272126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cNotPt :
272226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cPt :
272326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cNotPt :
272426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_cPt_V4 :
272526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_cNotPt_V4 :
272626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cPt_V4 :
272726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cNotPt_V4 :
272826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cPt :
272926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cNotPt :
273026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return QRI.Subtarget.hasV4TOps();
273126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
273226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 global address store before promoting to dot new.
273326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cPt_V4 :
273426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cNotPt_V4 :
273526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cPt_V4 :
273626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cNotPt_V4 :
273726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cPt_V4 :
273826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cNotPt_V4 :
273926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cPt_V4 :
274026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cNotPt_V4 :
274126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cPt_V4 :
274226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cNotPt_V4 :
274326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cPt_V4 :
274426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cNotPt_V4 :
274526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cPt_V4 :
274626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cNotPt_V4 :
274726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cPt_V4 :
274826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cNotPt_V4 :
274926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return QRI.Subtarget.hasV4TOps();
275026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
275126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Predicated new value stores (i.e. if (p0) memw(..)=r0.new) are excluded
275226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // from the "Conditional Store" list. Because a predicated new value store
275326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // would NOT be promoted to a double dot new store. See diagram below:
275426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // This function returns yes for those stores that are predicated but not
275526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // yet promoted to predicate dot new instructions.
275626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //
275726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                          +---------------------+
275826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                    /-----| if (p0) memw(..)=r0 |---------\~
275926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                   ||     +---------------------+         ||
276026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //          promote  ||       /\       /\                   ||  promote
276126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                   ||      /||\     /||\                  ||
276226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                  \||/    demote     ||                  \||/
276326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                   \/       ||       ||                   \/
276426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //       +-------------------------+   ||   +-------------------------+
276526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //       | if (p0.new) memw(..)=r0 |   ||   | if (p0) memw(..)=r0.new |
276626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //       +-------------------------+   ||   +-------------------------+
276726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                        ||           ||         ||
276826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                        ||         demote      \||/
276926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                      promote        ||         \/ NOT possible
277026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                        ||           ||         /\~
277126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                       \||/          ||        /||\~
277226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                        \/           ||         ||
277326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                      +-----------------------------+
277426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                      | if (p0.new) memw(..)=r0.new |
277526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                      +-----------------------------+
277626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                           Double Dot New Store
277726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //
2778d1a87a68064e0b9af3b71b681286954f861bb1b3Sirish Pande  }
2779d1a87a68064e0b9af3b71b681286954f861bb1b3Sirish Pande}
2780d1a87a68064e0b9af3b71b681286954f861bb1b3Sirish Pande
278126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
278226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
2783ee498d3254b86bceb4f441741e9f442990647ce6Andrew TrickDFAPacketizer *HexagonInstrInfo::
2784ee498d3254b86bceb4f441741e9f442990647ce6Andrew TrickCreateTargetScheduleState(const TargetMachine *TM,
2785ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick                           const ScheduleDAG *DAG) const {
2786ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  const InstrItineraryData *II = TM->getInstrItineraryData();
2787ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  return TM->getSubtarget<HexagonGenSubtargetInfo>().createDFAPacketizer(II);
2788ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick}
2789ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
2790ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trickbool HexagonInstrInfo::isSchedulingBoundary(const MachineInstr *MI,
2791ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick                                            const MachineBasicBlock *MBB,
2792ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick                                            const MachineFunction &MF) const {
2793ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // Debug info is never a scheduling boundary. It's necessary to be explicit
2794ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // due to the special treatment of IT instructions below, otherwise a
2795ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // dbg_value followed by an IT will result in the IT instruction being
2796ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // considered a scheduling hazard, which is wrong. It should be the actual
2797ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // instruction preceding the dbg_value instruction(s), just like it is
2798ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // when debug info is not present.
2799ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  if (MI->isDebugValue())
2800ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick    return false;
2801ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
2802ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // Terminators and labels can't be scheduled around.
2803ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  if (MI->getDesc().isTerminator() || MI->isLabel() || MI->isInlineAsm())
2804ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick    return true;
2805ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
2806ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  return false;
2807ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick}
2808