HexagonInstrInfo.cpp revision 0dac3919e52e28308deba555bbcb6286674d5495
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"
170dac3919e52e28308deba555bbcb6286674d5495Sirish 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;
370dac3919e52e28308deba555bbcb6286674d5495Sirish Pandeconst int Hexagon_MEMW_OFFSET_MIN = -4096;
38b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMD_OFFSET_MAX = 8191;
390dac3919e52e28308deba555bbcb6286674d5495Sirish Pandeconst int Hexagon_MEMD_OFFSET_MIN = -8192;
40b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMH_OFFSET_MAX = 2047;
410dac3919e52e28308deba555bbcb6286674d5495Sirish Pandeconst int Hexagon_MEMH_OFFSET_MIN = -2048;
42b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMB_OFFSET_MAX = 1023;
430dac3919e52e28308deba555bbcb6286674d5495Sirish Pandeconst int Hexagon_MEMB_OFFSET_MIN = -1024;
44b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_ADDI_OFFSET_MAX = 32767;
450dac3919e52e28308deba555bbcb6286674d5495Sirish Pandeconst int Hexagon_ADDI_OFFSET_MIN = -32768;
46b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMD_AUTOINC_MAX = 56;
470dac3919e52e28308deba555bbcb6286674d5495Sirish Pandeconst int Hexagon_MEMD_AUTOINC_MIN = -64;
48b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMW_AUTOINC_MAX = 28;
490dac3919e52e28308deba555bbcb6286674d5495Sirish Pandeconst int Hexagon_MEMW_AUTOINC_MIN = -32;
50b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMH_AUTOINC_MAX = 14;
510dac3919e52e28308deba555bbcb6286674d5495Sirish Pandeconst int Hexagon_MEMH_AUTOINC_MIN = -16;
52b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMB_AUTOINC_MAX = 7;
530dac3919e52e28308deba555bbcb6286674d5495Sirish Pandeconst int Hexagon_MEMB_AUTOINC_MIN = -8;
54b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
55b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
56b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
57b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::HexagonInstrInfo(HexagonSubtarget &ST)
58b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  : HexagonGenInstrInfo(Hexagon::ADJCALLSTACKDOWN, Hexagon::ADJCALLSTACKUP),
59b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    RI(ST, *this), Subtarget(ST) {
60b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
61b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
62b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
63b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// isLoadFromStackSlot - If the specified machine instruction is a direct
64b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// load from a stack slot, return the virtual or physical register number of
65b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// the destination along with the FrameIndex of the loaded stack slot.  If
66b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// not, return 0.  This predicate must return 0 if the instruction has
67b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// any side effects other than loading from the stack slot.
68b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned HexagonInstrInfo::isLoadFromStackSlot(const MachineInstr *MI,
69b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                             int &FrameIndex) const {
70b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
71b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
72b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode()) {
730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  default: break;
74b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
75b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
76b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
77b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
78b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
79b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MI->getOperand(2).isFI() &&
80b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MI->getOperand(1).isImm() && (MI->getOperand(1).getImm() == 0)) {
81b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      FrameIndex = MI->getOperand(2).getIndex();
82b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return MI->getOperand(0).getReg();
83b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
84b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    break;
85b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
86b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return 0;
87b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
88b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
89b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
90b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// isStoreToStackSlot - If the specified machine instruction is a direct
91b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// store to a stack slot, return the virtual or physical register number of
92b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// the source reg along with the FrameIndex of the loaded stack slot.  If
93b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// not, return 0.  This predicate must return 0 if the instruction has
94b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// any side effects other than storing to the stack slot.
95b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned HexagonInstrInfo::isStoreToStackSlot(const MachineInstr *MI,
96b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                            int &FrameIndex) const {
97b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode()) {
980dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  default: break;
99b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
100b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
101b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
102b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
103b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MI->getOperand(2).isFI() &&
104b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MI->getOperand(1).isImm() && (MI->getOperand(1).getImm() == 0)) {
105b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      FrameIndex = MI->getOperand(2).getIndex();
106b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return MI->getOperand(0).getReg();
107b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
108b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    break;
109b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
110b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return 0;
111b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
112b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
113b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
114b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned
115b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
116b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                             MachineBasicBlock *FBB,
117b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                             const SmallVectorImpl<MachineOperand> &Cond,
118b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                             DebugLoc DL) const{
119b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
120b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    int BOpc   = Hexagon::JMP;
121ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    int BccOpc = Hexagon::JMP_c;
122b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
123b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert(TBB && "InsertBranch must not be told to insert a fallthrough");
124b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
125b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    int regPos = 0;
126b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // Check if ReverseBranchCondition has asked to reverse this branch
127b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // If we want to reverse the branch an odd number of times, we want
128ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    // JMP_cNot.
129b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (!Cond.empty() && Cond[0].isImm() && Cond[0].getImm() == 0) {
130ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      BccOpc = Hexagon::JMP_cNot;
131b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      regPos = 1;
132b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
133b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
134b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (FBB == 0) {
135b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      if (Cond.empty()) {
136b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // Due to a bug in TailMerging/CFG Optimization, we need to add a
137b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // special case handling of a predicated jump followed by an
138b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // unconditional jump. If not, Tail Merging and CFG Optimization go
139b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // into an infinite loop.
140b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MachineBasicBlock *NewTBB, *NewFBB;
141b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        SmallVector<MachineOperand, 4> Cond;
142b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MachineInstr *Term = MBB.getFirstTerminator();
143b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        if (isPredicated(Term) && !AnalyzeBranch(MBB, NewTBB, NewFBB, Cond,
144b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                                 false)) {
145b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          MachineBasicBlock *NextBB =
146b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            llvm::next(MachineFunction::iterator(&MBB));
147b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          if (NewTBB == NextBB) {
148b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            ReverseBranchCondition(Cond);
149b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            RemoveBranch(MBB);
150b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            return InsertBranch(MBB, TBB, 0, Cond, DL);
151b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          }
152b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        }
153b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(&MBB, DL, get(BOpc)).addMBB(TBB);
154b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      } else {
155b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(&MBB, DL,
156b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                get(BccOpc)).addReg(Cond[regPos].getReg()).addMBB(TBB);
157b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      }
158b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return 1;
159b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
160b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
161b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(&MBB, DL, get(BccOpc)).addReg(Cond[regPos].getReg()).addMBB(TBB);
162b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(&MBB, DL, get(BOpc)).addMBB(FBB);
163b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
164b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return 2;
165b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
166b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
167b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
168b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,
169b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                     MachineBasicBlock *&TBB,
170b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 MachineBasicBlock *&FBB,
171b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineOperand> &Cond,
172b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 bool AllowModify) const {
173b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  FBB = NULL;
174b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
175b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // If the block has no terminators, it just falls into the block after it.
176b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineBasicBlock::iterator I = MBB.end();
177b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I == MBB.begin())
178b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
179b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
180b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // A basic block may looks like this:
181b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //
182b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //  [   insn
183b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //     EH_LABEL
184b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //      insn
185b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //      insn
186b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //      insn
187b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //     EH_LABEL
188b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //      insn     ]
189b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //
190b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // It has two succs but does not have a terminator
191b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Don't know how to handle it.
192b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  do {
193b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    --I;
194b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (I->isEHLabel())
195b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return true;
196b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  } while (I != MBB.begin());
197b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
198b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  I = MBB.end();
199b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  --I;
200b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
201b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  while (I->isDebugValue()) {
202b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (I == MBB.begin())
203b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return false;
204b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    --I;
205b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
206b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (!isUnpredicatedTerminator(I))
207b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
208b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
209b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Get the last instruction in the block.
210b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineInstr *LastInst = I;
211b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
212b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // If there is only one terminator instruction, process it.
213b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I == MBB.begin() || !isUnpredicatedTerminator(--I)) {
214b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (LastInst->getOpcode() == Hexagon::JMP) {
215b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      TBB = LastInst->getOperand(0).getMBB();
216b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return false;
217b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
218ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    if (LastInst->getOpcode() == Hexagon::JMP_c) {
219b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      // Block ends with fall-through true condbranch.
220b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      TBB = LastInst->getOperand(1).getMBB();
221b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      Cond.push_back(LastInst->getOperand(0));
222b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return false;
223b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
224ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    if (LastInst->getOpcode() == Hexagon::JMP_cNot) {
225b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      // Block ends with fall-through false condbranch.
226b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      TBB = LastInst->getOperand(1).getMBB();
227b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      Cond.push_back(MachineOperand::CreateImm(0));
228b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      Cond.push_back(LastInst->getOperand(0));
229b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return false;
230b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
231b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // Otherwise, don't know what this is.
232b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return true;
233b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
234b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
235b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Get the instruction before it if it's a terminator.
236b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineInstr *SecondLastInst = I;
237b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
238b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // If there are three terminators, we don't know what sort of block this is.
239b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (SecondLastInst && I != MBB.begin() &&
240b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      isUnpredicatedTerminator(--I))
241b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return true;
242b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
243b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // If the block ends with Hexagon::BRCOND and Hexagon:JMP, handle it.
244b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (((SecondLastInst->getOpcode() == Hexagon::BRCOND) ||
245ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      (SecondLastInst->getOpcode() == Hexagon::JMP_c)) &&
246b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      LastInst->getOpcode() == Hexagon::JMP) {
247b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    TBB =  SecondLastInst->getOperand(1).getMBB();
248b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.push_back(SecondLastInst->getOperand(0));
249b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    FBB = LastInst->getOperand(0).getMBB();
250b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
251b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
252b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
253ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // If the block ends with Hexagon::JMP_cNot and Hexagon:JMP, handle it.
254ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  if ((SecondLastInst->getOpcode() == Hexagon::JMP_cNot) &&
255b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      LastInst->getOpcode() == Hexagon::JMP) {
256b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    TBB =  SecondLastInst->getOperand(1).getMBB();
257b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.push_back(MachineOperand::CreateImm(0));
258b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.push_back(SecondLastInst->getOperand(0));
259b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    FBB = LastInst->getOperand(0).getMBB();
260b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
261b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
262b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
263b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // If the block ends with two Hexagon:JMPs, handle it.  The second one is not
264b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // executed, so remove it.
265b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (SecondLastInst->getOpcode() == Hexagon::JMP &&
266b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      LastInst->getOpcode() == Hexagon::JMP) {
267b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    TBB = SecondLastInst->getOperand(0).getMBB();
268b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    I = LastInst;
269b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (AllowModify)
270b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      I->eraseFromParent();
271b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
272b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
273b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
274b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Otherwise, can't handle this.
275b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
276b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
277b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
278b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
279b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned HexagonInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const {
280b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  int BOpc   = Hexagon::JMP;
281ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  int BccOpc = Hexagon::JMP_c;
282ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  int BccOpcNot = Hexagon::JMP_cNot;
283b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
284b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineBasicBlock::iterator I = MBB.end();
285b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I == MBB.begin()) return 0;
286b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  --I;
287b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I->getOpcode() != BOpc && I->getOpcode() != BccOpc &&
288b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      I->getOpcode() != BccOpcNot)
289b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return 0;
290b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
291b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Remove the branch.
292b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  I->eraseFromParent();
293b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
294b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  I = MBB.end();
295b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
296b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I == MBB.begin()) return 1;
297b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  --I;
298b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (I->getOpcode() != BccOpc && I->getOpcode() != BccOpcNot)
299b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return 1;
300b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
301b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Remove the branch.
302b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  I->eraseFromParent();
303b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return 2;
304b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
305b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
306b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
307b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
308b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 MachineBasicBlock::iterator I, DebugLoc DL,
309b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 unsigned DestReg, unsigned SrcReg,
310b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 bool KillSrc) const {
311b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (Hexagon::IntRegsRegClass.contains(SrcReg, DestReg)) {
312b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::TFR), DestReg).addReg(SrcReg);
313b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
314b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
315b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (Hexagon::DoubleRegsRegClass.contains(SrcReg, DestReg)) {
316b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::TFR_64), DestReg).addReg(SrcReg);
317b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
318b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
319b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (Hexagon::PredRegsRegClass.contains(SrcReg, DestReg)) {
320b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // Map Pd = Ps to Pd = or(Ps, Ps).
321b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::OR_pp),
322b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            DestReg).addReg(SrcReg).addReg(SrcReg);
323b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
324b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
325b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (Hexagon::DoubleRegsRegClass.contains(DestReg, SrcReg)) {
326b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // We can have an overlap between single and double reg: r1:0 = r0.
327b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if(SrcReg == RI.getSubReg(DestReg, Hexagon::subreg_loreg)) {
328b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // r1:0 = r0
329b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(MBB, I, DL, get(Hexagon::TFRI), (RI.getSubReg(DestReg,
330b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                Hexagon::subreg_hireg))).addImm(0);
331b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    } else {
332b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // r1:0 = r1 or no overlap.
333b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(MBB, I, DL, get(Hexagon::TFR), (RI.getSubReg(DestReg,
334b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                Hexagon::subreg_loreg))).addReg(SrcReg);
335b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(MBB, I, DL, get(Hexagon::TFRI), (RI.getSubReg(DestReg,
336b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                Hexagon::subreg_hireg))).addImm(0);
337b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
338b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
339b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
340b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (Hexagon::CRRegsRegClass.contains(DestReg, SrcReg)) {
341b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::TFCR), DestReg).addReg(SrcReg);
342b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
343ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  }
344ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
345ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  llvm_unreachable("Unimplemented");
346b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
347b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
348b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
349b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::
350b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumstoreRegToStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
351b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned SrcReg, bool isKill, int FI,
352b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const TargetRegisterClass *RC,
353b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const TargetRegisterInfo *TRI) const {
354b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
355b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  DebugLoc DL = MBB.findDebugLoc(I);
356b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFunction &MF = *MBB.getParent();
357b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFrameInfo &MFI = *MF.getFrameInfo();
358b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  unsigned Align = MFI.getObjectAlignment(FI);
359b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
360b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineMemOperand *MMO =
361b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MF.getMachineMemOperand(
362b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachinePointerInfo(PseudoSourceValue::getFixedStack(FI)),
363b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachineMemOperand::MOStore,
364b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MFI.getObjectSize(FI),
365b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      Align);
366b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
367420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  if (Hexagon::IntRegsRegClass.hasSubClassEq(RC)) {
368b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::STriw))
369b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0)
370b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
371420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (Hexagon::DoubleRegsRegClass.hasSubClassEq(RC)) {
372b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::STrid))
373b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0)
374b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
375420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (Hexagon::PredRegsRegClass.hasSubClassEq(RC)) {
376b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::STriw_pred))
377b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0)
378b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
379b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  } else {
380bc2198133a1836598b54b943420748e75d5dea94Craig Topper    llvm_unreachable("Unimplemented");
381b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
382b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
383b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
384b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
385b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::storeRegToAddr(
386b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 MachineFunction &MF, unsigned SrcReg,
387b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 bool isKill,
388b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineOperand> &Addr,
389b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 const TargetRegisterClass *RC,
390b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineInstr*> &NewMIs) const
391b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{
392bc2198133a1836598b54b943420748e75d5dea94Craig Topper  llvm_unreachable("Unimplemented");
393b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
394b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
395b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
396b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::
397b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumloadRegFromStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
398b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     unsigned DestReg, int FI,
399b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     const TargetRegisterClass *RC,
400b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     const TargetRegisterInfo *TRI) const {
401b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  DebugLoc DL = MBB.findDebugLoc(I);
402b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFunction &MF = *MBB.getParent();
403b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFrameInfo &MFI = *MF.getFrameInfo();
404b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  unsigned Align = MFI.getObjectAlignment(FI);
405b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
406b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineMemOperand *MMO =
407b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MF.getMachineMemOperand(
408b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachinePointerInfo(PseudoSourceValue::getFixedStack(FI)),
409b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachineMemOperand::MOLoad,
410b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MFI.getObjectSize(FI),
411b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      Align);
412420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  if (RC == &Hexagon::IntRegsRegClass) {
413b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::LDriw), DestReg)
414b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
415420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (RC == &Hexagon::DoubleRegsRegClass) {
416b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::LDrid), DestReg)
417b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
418420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (RC == &Hexagon::PredRegsRegClass) {
419b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::LDriw_pred), DestReg)
420b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
421b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  } else {
422bc2198133a1836598b54b943420748e75d5dea94Craig Topper    llvm_unreachable("Can't store this register to stack slot");
423b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
424b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
425b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
426b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
427b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::loadRegFromAddr(MachineFunction &MF, unsigned DestReg,
428b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                        SmallVectorImpl<MachineOperand> &Addr,
429b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                        const TargetRegisterClass *RC,
430b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineInstr*> &NewMIs) const {
431bc2198133a1836598b54b943420748e75d5dea94Craig Topper  llvm_unreachable("Unimplemented");
432b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
433b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
434b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
435b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumMachineInstr *HexagonInstrInfo::foldMemoryOperandImpl(MachineFunction &MF,
436b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                                    MachineInstr* MI,
437b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          const SmallVectorImpl<unsigned> &Ops,
438b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                                    int FI) const {
439b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Hexagon_TODO: Implement.
440b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return(0);
441b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
442b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
443b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
444b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned HexagonInstrInfo::createVR(MachineFunction* MF, MVT VT) const {
445b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
446b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineRegisterInfo &RegInfo = MF->getRegInfo();
447b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const TargetRegisterClass *TRC;
4480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  if (VT == MVT::i1) {
449420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper    TRC = &Hexagon::PredRegsRegClass;
4500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  } else if (VT == MVT::i32 || VT == MVT::f32) {
451420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper    TRC = &Hexagon::IntRegsRegClass;
4520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  } else if (VT == MVT::i64 || VT == MVT::f64) {
453420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper    TRC = &Hexagon::DoubleRegsRegClass;
4540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  } else {
45527baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer    llvm_unreachable("Cannot handle this register class");
4560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  }
457b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
458b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  unsigned NewReg = RegInfo.createVirtualRegister(TRC);
459b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return NewReg;
460b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
461b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
4620dac3919e52e28308deba555bbcb6286674d5495Sirish Pandebool HexagonInstrInfo::isExtendable(const MachineInstr *MI) const {
4630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  switch(MI->getOpcode()) {
4640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: return false;
4650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQri
4660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPt_nv_V4:
4670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPnt_nv_V4:
4680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
4690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
4700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
4710dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQri - with -1
4720dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
4730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
4740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
4750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
4760dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
4770dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQrr
4780dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPt_nv_V4:
4790dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPnt_nv_V4:
4800dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
4810dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
4820dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
4830dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTri
4840dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPt_nv_V4:
4850dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPnt_nv_V4:
4860dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
4870dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
4880dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
4890dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTri - with -1
4900dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
4910dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
4920dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
4930dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
4940dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
4950dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTrr
4960dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPt_nv_V4:
4970dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPnt_nv_V4:
4980dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
4990dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
5000dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5010dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTrrdn
5020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPt_nv_V4:
5030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPnt_nv_V4:
5040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
5050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
5060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUri
5080dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPt_nv_V4:
5090dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPnt_nv_V4:
5100dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
5110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
5120dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5130dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUrr
5140dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPt_nv_V4:
5150dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPnt_nv_V4:
5160dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
5170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
5180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUrrdn
5200dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPt_nv_V4:
5210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPnt_nv_V4:
5220dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
5230dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
5240dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5250dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // TFR_FI
5260dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::TFR_FI:
5270dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return true;
5280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  }
5290dac3919e52e28308deba555bbcb6286674d5495Sirish Pande}
5300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5310dac3919e52e28308deba555bbcb6286674d5495Sirish Pandebool HexagonInstrInfo::isExtended(const MachineInstr *MI) const {
5320dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  switch(MI->getOpcode()) {
5330dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: return false;
5340dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQri
5350dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPt_ie_nv_V4:
5360dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPnt_ie_nv_V4:
5370dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPt_ie_nv_V4:
5380dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPnt_ie_nv_V4:
5390dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5400dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQri - with -1
5410dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPtneg_ie_nv_V4:
5420dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPntneg_ie_nv_V4:
5430dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPtneg_ie_nv_V4:
5440dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPntneg_ie_nv_V4:
5450dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQrr
5470dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPt_ie_nv_V4:
5480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPnt_ie_nv_V4:
5490dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPt_ie_nv_V4:
5500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPnt_ie_nv_V4:
5510dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTri
5530dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPt_ie_nv_V4:
5540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPnt_ie_nv_V4:
5550dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPt_ie_nv_V4:
5560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPnt_ie_nv_V4:
5570dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5580dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTri - with -1
5590dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPtneg_ie_nv_V4:
5600dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPntneg_ie_nv_V4:
5610dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPtneg_ie_nv_V4:
5620dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPntneg_ie_nv_V4:
5630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTrr
5650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPt_ie_nv_V4:
5660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPnt_ie_nv_V4:
5670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPt_ie_nv_V4:
5680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPnt_ie_nv_V4:
5690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTrrdn
5710dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPt_ie_nv_V4:
5720dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPnt_ie_nv_V4:
5730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4:
5740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4:
5750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5760dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUri
5770dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPt_ie_nv_V4:
5780dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPnt_ie_nv_V4:
5790dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPt_ie_nv_V4:
5800dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPnt_ie_nv_V4:
5810dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5820dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUrr
5830dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPt_ie_nv_V4:
5840dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPnt_ie_nv_V4:
5850dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPt_ie_nv_V4:
5860dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4:
5870dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5880dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUrrdn
5890dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPt_ie_nv_V4:
5900dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4:
5910dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4:
5920dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4:
5930dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
5940dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // V4 absolute set addressing.
5950dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrid_abs_setimm_V4:
5960dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriw_abs_setimm_V4:
5970dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrih_abs_setimm_V4:
5980dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrib_abs_setimm_V4:
5990dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriuh_abs_setimm_V4:
6000dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriub_abs_setimm_V4:
6010dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
6020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_abs_setimm_V4:
6030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_abs_setimm_V4:
6040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_abs_setimm_V4:
6050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_abs_setimm_V4:
6060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
6070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // V4 global address load.
6080dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrid_GP_cPt_V4 :
6090dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrid_GP_cNotPt_V4 :
6100dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrid_GP_cdnPt_V4 :
6110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrid_GP_cdnNotPt_V4 :
6120dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrib_GP_cPt_V4 :
6130dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrib_GP_cNotPt_V4 :
6140dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrib_GP_cdnPt_V4 :
6150dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrib_GP_cdnNotPt_V4 :
6160dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriub_GP_cPt_V4 :
6170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriub_GP_cNotPt_V4 :
6180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriub_GP_cdnPt_V4 :
6190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriub_GP_cdnNotPt_V4 :
6200dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrih_GP_cPt_V4 :
6210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrih_GP_cNotPt_V4 :
6220dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrih_GP_cdnPt_V4 :
6230dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDrih_GP_cdnNotPt_V4 :
6240dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriuh_GP_cPt_V4 :
6250dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriuh_GP_cNotPt_V4 :
6260dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriuh_GP_cdnPt_V4 :
6270dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriuh_GP_cdnNotPt_V4 :
6280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriw_GP_cPt_V4 :
6290dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriw_GP_cNotPt_V4 :
6300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriw_GP_cdnPt_V4 :
6310dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDriw_GP_cdnNotPt_V4 :
6320dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDd_GP_cPt_V4 :
6330dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDd_GP_cNotPt_V4 :
6340dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDd_GP_cdnPt_V4 :
6350dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDd_GP_cdnNotPt_V4 :
6360dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDb_GP_cPt_V4 :
6370dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDb_GP_cNotPt_V4 :
6380dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDb_GP_cdnPt_V4 :
6390dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDb_GP_cdnNotPt_V4 :
6400dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDub_GP_cPt_V4 :
6410dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDub_GP_cNotPt_V4 :
6420dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDub_GP_cdnPt_V4 :
6430dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDub_GP_cdnNotPt_V4 :
6440dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDh_GP_cPt_V4 :
6450dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDh_GP_cNotPt_V4 :
6460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDh_GP_cdnPt_V4 :
6470dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDh_GP_cdnNotPt_V4 :
6480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDuh_GP_cPt_V4 :
6490dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDuh_GP_cNotPt_V4 :
6500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDuh_GP_cdnPt_V4 :
6510dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDuh_GP_cdnNotPt_V4 :
6520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDw_GP_cPt_V4 :
6530dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDw_GP_cNotPt_V4 :
6540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDw_GP_cdnPt_V4 :
6550dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::LDw_GP_cdnNotPt_V4 :
6560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
6570dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // V4 global address store.
6580dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_GP_cPt_V4 :
6590dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_GP_cNotPt_V4 :
6600dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_GP_cdnPt_V4 :
6610dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_GP_cdnNotPt_V4 :
6620dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cPt_V4 :
6630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cNotPt_V4 :
6640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cdnPt_V4 :
6650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cdnNotPt_V4 :
6660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cPt_V4 :
6670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cNotPt_V4 :
6680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cdnPt_V4 :
6690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cdnNotPt_V4 :
6700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cPt_V4 :
6710dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cNotPt_V4 :
6720dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cdnPt_V4 :
6730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cdnNotPt_V4 :
6740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STd_GP_cPt_V4 :
6750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STd_GP_cNotPt_V4 :
6760dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STd_GP_cdnPt_V4 :
6770dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STd_GP_cdnNotPt_V4 :
6780dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cPt_V4 :
6790dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cNotPt_V4 :
6800dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cdnPt_V4 :
6810dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cdnNotPt_V4 :
6820dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cPt_V4 :
6830dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cNotPt_V4 :
6840dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cdnPt_V4 :
6850dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cdnNotPt_V4 :
6860dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cPt_V4 :
6870dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cNotPt_V4 :
6880dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cdnPt_V4 :
6890dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cdnNotPt_V4 :
6900dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
6910dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // V4 predicated global address new value store.
6920dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cPt_nv_V4 :
6930dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cNotPt_nv_V4 :
6940dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cdnPt_nv_V4 :
6950dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cdnNotPt_nv_V4 :
6960dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cPt_nv_V4 :
6970dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cNotPt_nv_V4 :
6980dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cdnPt_nv_V4 :
6990dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cdnNotPt_nv_V4 :
7000dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cPt_nv_V4 :
7010dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cNotPt_nv_V4 :
7020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cdnPt_nv_V4 :
7030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cdnNotPt_nv_V4 :
7040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cPt_nv_V4 :
7050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cNotPt_nv_V4 :
7060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cdnPt_nv_V4 :
7070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cdnNotPt_nv_V4 :
7080dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cPt_nv_V4 :
7090dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cNotPt_nv_V4 :
7100dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cdnPt_nv_V4 :
7110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cdnNotPt_nv_V4 :
7120dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cPt_nv_V4 :
7130dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cNotPt_nv_V4 :
7140dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cdnPt_nv_V4 :
7150dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cdnNotPt_nv_V4 :
7160dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
7170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // TFR_FI
7180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::TFR_FI_immext_V4:
7190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return true;
7200dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  }
7210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande}
7220dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
7230dac3919e52e28308deba555bbcb6286674d5495Sirish Pandebool HexagonInstrInfo::isNewValueJump(const MachineInstr *MI) const {
7240dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  switch (MI->getOpcode()) {
7250dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: return false;
7260dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQri
7270dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPt_nv_V4:
7280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPnt_nv_V4:
7290dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
7300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
7310dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPt_ie_nv_V4:
7320dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPnt_ie_nv_V4:
7330dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPt_ie_nv_V4:
7340dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPnt_ie_nv_V4:
7350dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
7360dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQri - with -1
7370dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
7380dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
7390dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
7400dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
7410dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPtneg_ie_nv_V4:
7420dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPntneg_ie_nv_V4:
7430dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPtneg_ie_nv_V4:
7440dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPntneg_ie_nv_V4:
7450dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
7460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQrr
7470dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPt_nv_V4:
7480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPnt_nv_V4:
7490dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
7500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
7510dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPt_ie_nv_V4:
7520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPnt_ie_nv_V4:
7530dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPt_ie_nv_V4:
7540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPnt_ie_nv_V4:
7550dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
7560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTri
7570dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPt_nv_V4:
7580dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPnt_nv_V4:
7590dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
7600dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
7610dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPt_ie_nv_V4:
7620dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPnt_ie_nv_V4:
7630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPt_ie_nv_V4:
7640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPnt_ie_nv_V4:
7650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
7660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTri - with -1
7670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
7680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
7690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
7700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
7710dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPtneg_ie_nv_V4:
7720dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPntneg_ie_nv_V4:
7730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPtneg_ie_nv_V4:
7740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPntneg_ie_nv_V4:
7750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
7760dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTrr
7770dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPt_nv_V4:
7780dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPnt_nv_V4:
7790dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
7800dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
7810dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPt_ie_nv_V4:
7820dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPnt_ie_nv_V4:
7830dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPt_ie_nv_V4:
7840dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPnt_ie_nv_V4:
7850dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
7860dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTrrdn
7870dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPt_nv_V4:
7880dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPnt_nv_V4:
7890dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
7900dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
7910dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPt_ie_nv_V4:
7920dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPnt_ie_nv_V4:
7930dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4:
7940dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4:
7950dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
7960dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUri
7970dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPt_nv_V4:
7980dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPnt_nv_V4:
7990dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
8000dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
8010dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPt_ie_nv_V4:
8020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPnt_ie_nv_V4:
8030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPt_ie_nv_V4:
8040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPnt_ie_nv_V4:
8050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
8060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUrr
8070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPt_nv_V4:
8080dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPnt_nv_V4:
8090dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
8100dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
8110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPt_ie_nv_V4:
8120dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPnt_ie_nv_V4:
8130dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPt_ie_nv_V4:
8140dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4:
8150dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
8160dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUrrdn
8170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPt_nv_V4:
8180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPnt_nv_V4:
8190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
8200dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
8210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPt_ie_nv_V4:
8220dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4:
8230dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4:
8240dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4:
8250dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return true;
8260dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  }
8270dac3919e52e28308deba555bbcb6286674d5495Sirish Pande}
8280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
8290dac3919e52e28308deba555bbcb6286674d5495Sirish Pandeunsigned HexagonInstrInfo::getImmExtForm(const MachineInstr* MI) const {
8300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  switch(MI->getOpcode()) {
8310dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: llvm_unreachable("Unknown type of instruction.");
8320dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQri
8330dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPt_nv_V4:
8340dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriPt_ie_nv_V4;
8350dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
8360dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriNotPt_ie_nv_V4;
8370dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPnt_nv_V4:
8380dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriPnt_ie_nv_V4;
8390dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
8400dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriNotPnt_ie_nv_V4;
8410dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
8420dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQri -- with -1
8430dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
8440dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriPtneg_ie_nv_V4;
8450dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
8460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriNotPtneg_ie_nv_V4;
8470dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
8480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriPntneg_ie_nv_V4;
8490dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
8500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriNotPntneg_ie_nv_V4;
8510dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
8520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQrr
8530dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPt_nv_V4:
8540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQrrPt_ie_nv_V4;
8550dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
8560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQrrNotPt_ie_nv_V4;
8570dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPnt_nv_V4:
8580dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQrrPnt_ie_nv_V4;
8590dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
8600dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQrrNotPnt_ie_nv_V4;
8610dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
8620dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTri
8630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPt_nv_V4:
8640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriPt_ie_nv_V4;
8650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
8660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriNotPt_ie_nv_V4;
8670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPnt_nv_V4:
8680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriPnt_ie_nv_V4;
8690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
8700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriNotPnt_ie_nv_V4;
8710dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
8720dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTri -- with -1
8730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
8740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriPtneg_ie_nv_V4;
8750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
8760dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriNotPtneg_ie_nv_V4;
8770dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
8780dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriPntneg_ie_nv_V4;
8790dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
8800dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriNotPntneg_ie_nv_V4;
8810dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
8820dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTrr
8830dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPt_nv_V4:
8840dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrPt_ie_nv_V4;
8850dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
8860dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrNotPt_ie_nv_V4;
8870dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPnt_nv_V4:
8880dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrPnt_ie_nv_V4;
8890dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
8900dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrNotPnt_ie_nv_V4;
8910dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
8920dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTrrdn
8930dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPt_nv_V4:
8940dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrdnPt_ie_nv_V4;
8950dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
8960dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrdnNotPt_ie_nv_V4;
8970dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPnt_nv_V4:
8980dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrdnPnt_ie_nv_V4;
8990dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
9000dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4;
9010dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
9020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUri
9030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPt_nv_V4:
9040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUriPt_ie_nv_V4;
9050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
9060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUriNotPt_ie_nv_V4;
9070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPnt_nv_V4:
9080dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUriPnt_ie_nv_V4;
9090dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
9100dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUriNotPnt_ie_nv_V4;
9110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
9120dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUrr
9130dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPt_nv_V4:
9140dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrPt_ie_nv_V4;
9150dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
9160dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrNotPt_ie_nv_V4;
9170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPnt_nv_V4:
9180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrPnt_ie_nv_V4;
9190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
9200dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrNotPnt_ie_nv_V4;
9210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
9220dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUrrdn
9230dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPt_nv_V4:
9240dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrdnPt_ie_nv_V4;
9250dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
9260dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4;
9270dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPnt_nv_V4:
9280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrdnPnt_ie_nv_V4;
9290dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
9300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4;
9310dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
9320dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::TFR_FI:
9330dac3919e52e28308deba555bbcb6286674d5495Sirish Pande        return Hexagon::TFR_FI_immext_V4;
9340dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
9350dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 :
9360dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_ADDi_indexed_MEM_V4 :
9370dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_SUBi_indexed_MEM_V4 :
9380dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_ADDr_indexed_MEM_V4 :
9390dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_SUBr_indexed_MEM_V4 :
9400dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_ANDr_indexed_MEM_V4 :
9410dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_ORr_indexed_MEM_V4 :
9420dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_ADDSUBi_MEM_V4 :
9430dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_ADDi_MEM_V4 :
9440dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_SUBi_MEM_V4 :
9450dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_ADDr_MEM_V4 :
9460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_SUBr_MEM_V4 :
9470dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_ANDr_MEM_V4 :
9480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMw_ORr_MEM_V4 :
9490dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 :
9500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_ADDi_indexed_MEM_V4 :
9510dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_SUBi_indexed_MEM_V4 :
9520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_ADDr_indexed_MEM_V4 :
9530dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_SUBr_indexed_MEM_V4 :
9540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_ANDr_indexed_MEM_V4 :
9550dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_ORr_indexed_MEM_V4 :
9560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_ADDSUBi_MEM_V4 :
9570dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_ADDi_MEM_V4 :
9580dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_SUBi_MEM_V4 :
9590dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_ADDr_MEM_V4 :
9600dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_SUBr_MEM_V4 :
9610dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_ANDr_MEM_V4 :
9620dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMh_ORr_MEM_V4 :
9630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 :
9640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_ADDi_indexed_MEM_V4 :
9650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_SUBi_indexed_MEM_V4 :
9660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_ADDr_indexed_MEM_V4 :
9670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_SUBr_indexed_MEM_V4 :
9680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_ANDr_indexed_MEM_V4 :
9690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_ORr_indexed_MEM_V4 :
9700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_ADDSUBi_MEM_V4 :
9710dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_ADDi_MEM_V4 :
9720dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_SUBi_MEM_V4 :
9730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_ADDr_MEM_V4 :
9740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_SUBr_MEM_V4 :
9750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_ANDr_MEM_V4 :
9760dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::MEMb_ORr_MEM_V4 :
9770dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      llvm_unreachable("Needs implementing");
9780dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  }
9790dac3919e52e28308deba555bbcb6286674d5495Sirish Pande}
9800dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
9810dac3919e52e28308deba555bbcb6286674d5495Sirish Pandeunsigned HexagonInstrInfo::getNormalBranchForm(const MachineInstr* MI) const {
9820dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  switch(MI->getOpcode()) {
9830dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: llvm_unreachable("Unknown type of jump instruction.");
9840dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQri
9850dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPt_ie_nv_V4:
9860dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriPt_nv_V4;
9870dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPt_ie_nv_V4:
9880dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriNotPt_nv_V4;
9890dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPnt_ie_nv_V4:
9900dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriPnt_nv_V4;
9910dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPnt_ie_nv_V4:
9920dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriNotPnt_nv_V4;
9930dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
9940dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQri -- with -1
9950dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPtneg_ie_nv_V4:
9960dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriPtneg_nv_V4;
9970dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPtneg_ie_nv_V4:
9980dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriNotPtneg_nv_V4;
9990dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriPntneg_ie_nv_V4:
10000dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriPntneg_nv_V4;
10010dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQriNotPntneg_ie_nv_V4:
10020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQriNotPntneg_nv_V4;
10030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
10040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_EQrr
10050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPt_ie_nv_V4:
10060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQrrPt_nv_V4;
10070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPt_ie_nv_V4:
10080dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQrrNotPt_nv_V4;
10090dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrPnt_ie_nv_V4:
10100dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQrrPnt_nv_V4;
10110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_EQrrNotPnt_ie_nv_V4:
10120dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_EQrrNotPnt_nv_V4;
10130dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
10140dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTri
10150dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPt_ie_nv_V4:
10160dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriPt_nv_V4;
10170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPt_ie_nv_V4:
10180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriNotPt_nv_V4;
10190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPnt_ie_nv_V4:
10200dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriPnt_nv_V4;
10210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPnt_ie_nv_V4:
10220dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriNotPnt_nv_V4;
10230dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
10240dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTri -- with -1
10250dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPtneg_ie_nv_V4:
10260dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriPtneg_nv_V4;
10270dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPtneg_ie_nv_V4:
10280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriNotPtneg_nv_V4;
10290dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriPntneg_ie_nv_V4:
10300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriPntneg_nv_V4;
10310dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTriNotPntneg_ie_nv_V4:
10320dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTriNotPntneg_nv_V4;
10330dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
10340dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTrr
10350dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPt_ie_nv_V4:
10360dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrPt_nv_V4;
10370dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPt_ie_nv_V4:
10380dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrNotPt_nv_V4;
10390dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrPnt_ie_nv_V4:
10400dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrPnt_nv_V4;
10410dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrNotPnt_ie_nv_V4:
10420dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrNotPnt_nv_V4;
10430dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
10440dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTrrdn
10450dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPt_ie_nv_V4:
10460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrdnPt_nv_V4;
10470dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4:
10480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrdnNotPt_nv_V4;
10490dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnPnt_ie_nv_V4:
10500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrdnPnt_nv_V4;
10510dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4:
10520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTrrdnNotPnt_nv_V4;
10530dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
10540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUri
10550dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPt_ie_nv_V4:
10560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUriPt_nv_V4;
10570dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPt_ie_nv_V4:
10580dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUriNotPt_nv_V4;
10590dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriPnt_ie_nv_V4:
10600dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUriPnt_nv_V4;
10610dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUriNotPnt_ie_nv_V4:
10620dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUriNotPnt_nv_V4;
10630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
10640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUrr
10650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPt_ie_nv_V4:
10660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrPt_nv_V4;
10670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPt_ie_nv_V4:
10680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrNotPt_nv_V4;
10690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrPnt_ie_nv_V4:
10700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrPnt_nv_V4;
10710dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4:
10720dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrNotPnt_nv_V4;
10730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
10740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // JMP_GTUrrdn
10750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPt_ie_nv_V4:
10760dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrdnPt_nv_V4;
10770dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4:
10780dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrdnNotPt_nv_V4;
10790dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4:
10800dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrdnPnt_nv_V4;
10810dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4:
10820dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::JMP_GTUrrdnNotPnt_nv_V4;
10830dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  }
10840dac3919e52e28308deba555bbcb6286674d5495Sirish Pande}
10850dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
1086d1a87a68064e0b9af3b71b681286954f861bb1b3Sirish Pande
10870dac3919e52e28308deba555bbcb6286674d5495Sirish Pandebool HexagonInstrInfo::isNewValueStore(const MachineInstr *MI) const {
10880dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  switch (MI->getOpcode()) {
10890dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: return false;
10900dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Store Byte
10910dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_nv_V4:
10920dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_nv_V4:
10930dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_shl_nv_V4:
10940dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_shl_nv_V4:
10950dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_nv_V4:
10960dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_nv_V4:
10970dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri_nv_V4:
10980dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_cPt_nv_V4:
10990dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_cdnPt_nv_V4:
11000dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_cNotPt_nv_V4:
11010dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_cdnNotPt_nv_V4:
11020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_cPt_nv_V4:
11030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_cdnPt_nv_V4:
11040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_cNotPt_nv_V4:
11050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_cdnNotPt_nv_V4:
11060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_shl_cPt_nv_V4:
11070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_shl_cdnPt_nv_V4:
11080dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_shl_cNotPt_nv_V4:
11090dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_shl_cdnNotPt_nv_V4:
11100dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri_cPt_nv_V4:
11110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri_cdnPt_nv_V4:
11120dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri_cNotPt_nv_V4:
11130dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri_cdnNotPt_nv_V4:
11140dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cPt_nv_V4:
11150dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cNotPt_nv_V4:
11160dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cdnPt_nv_V4:
11170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cdnNotPt_nv_V4:
11180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cPt_nv_V4:
11190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cNotPt_nv_V4:
11200dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cdnPt_nv_V4:
11210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cdnNotPt_nv_V4:
11220dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_abs_nv_V4:
11230dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_abs_cPt_nv_V4:
11240dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_abs_cdnPt_nv_V4:
11250dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_abs_cNotPt_nv_V4:
11260dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_abs_cdnNotPt_nv_V4:
11270dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_imm_abs_nv_V4:
11280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_imm_abs_cPt_nv_V4:
11290dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_imm_abs_cdnPt_nv_V4:
11300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_imm_abs_cNotPt_nv_V4:
11310dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_imm_abs_cdnNotPt_nv_V4:
11320dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
11330dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Store Halfword
11340dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_nv_V4:
11350dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_nv_V4:
11360dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_shl_nv_V4:
11370dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_shl_nv_V4:
11380dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_nv_V4:
11390dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_nv_V4:
11400dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri_nv_V4:
11410dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_cPt_nv_V4:
11420dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_cdnPt_nv_V4:
11430dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_cNotPt_nv_V4:
11440dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_cdnNotPt_nv_V4:
11450dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_cPt_nv_V4:
11460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_cdnPt_nv_V4:
11470dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_cNotPt_nv_V4:
11480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_cdnNotPt_nv_V4:
11490dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_shl_cPt_nv_V4:
11500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_shl_cdnPt_nv_V4:
11510dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_shl_cNotPt_nv_V4:
11520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_shl_cdnNotPt_nv_V4:
11530dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri_cPt_nv_V4:
11540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri_cdnPt_nv_V4:
11550dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri_cNotPt_nv_V4:
11560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri_cdnNotPt_nv_V4:
11570dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cPt_nv_V4:
11580dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cNotPt_nv_V4:
11590dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cdnPt_nv_V4:
11600dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cdnNotPt_nv_V4:
11610dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cPt_nv_V4:
11620dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cNotPt_nv_V4:
11630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cdnPt_nv_V4:
11640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cdnNotPt_nv_V4:
11650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_abs_nv_V4:
11660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_abs_cPt_nv_V4:
11670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_abs_cdnPt_nv_V4:
11680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_abs_cNotPt_nv_V4:
11690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_abs_cdnNotPt_nv_V4:
11700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_imm_abs_nv_V4:
11710dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_imm_abs_cPt_nv_V4:
11720dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_imm_abs_cdnPt_nv_V4:
11730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_imm_abs_cNotPt_nv_V4:
11740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_imm_abs_cdnNotPt_nv_V4:
11750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
11760dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Store Word
11770dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_nv_V4:
11780dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_nv_V4:
11790dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_shl_nv_V4:
11800dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_shl_nv_V4:
11810dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_nv_V4:
11820dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_nv_V4:
11830dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri_nv_V4:
11840dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_cPt_nv_V4:
11850dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_cdnPt_nv_V4:
11860dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_cNotPt_nv_V4:
11870dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_cdnNotPt_nv_V4:
11880dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_cPt_nv_V4:
11890dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_cdnPt_nv_V4:
11900dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_cNotPt_nv_V4:
11910dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_cdnNotPt_nv_V4:
11920dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_shl_cPt_nv_V4:
11930dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_shl_cdnPt_nv_V4:
11940dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_shl_cNotPt_nv_V4:
11950dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_shl_cdnNotPt_nv_V4:
11960dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri_cPt_nv_V4:
11970dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri_cdnPt_nv_V4:
11980dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri_cNotPt_nv_V4:
11990dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri_cdnNotPt_nv_V4:
12000dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cPt_nv_V4:
12010dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cNotPt_nv_V4:
12020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cdnPt_nv_V4:
12030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cdnNotPt_nv_V4:
12040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cPt_nv_V4:
12050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cNotPt_nv_V4:
12060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cdnPt_nv_V4:
12070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cdnNotPt_nv_V4:
12080dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_abs_nv_V4:
12090dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_abs_cPt_nv_V4:
12100dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_abs_cdnPt_nv_V4:
12110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_abs_cNotPt_nv_V4:
12120dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_abs_cdnNotPt_nv_V4:
12130dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_imm_abs_nv_V4:
12140dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_imm_abs_cPt_nv_V4:
12150dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_imm_abs_cdnPt_nv_V4:
12160dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_imm_abs_cNotPt_nv_V4:
12170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_imm_abs_cdnNotPt_nv_V4:
12180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return true;
12190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  }
12200dac3919e52e28308deba555bbcb6286674d5495Sirish Pande}
12210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
12220dac3919e52e28308deba555bbcb6286674d5495Sirish Pandebool HexagonInstrInfo::isPostIncrement (const MachineInstr* MI) const {
12230dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  switch (MI->getOpcode())
12240dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  {
12250dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: return false;
12260dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Load Byte
12270dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrib:
12280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrib_cPt:
12290dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrib_cNotPt:
12300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrib_cdnPt_V4:
12310dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrib_cdnNotPt_V4:
12320dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
12330dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Load unsigned byte
12340dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriub:
12350dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriub_cPt:
12360dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriub_cNotPt:
12370dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriub_cdnPt_V4:
12380dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriub_cdnNotPt_V4:
12390dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
12400dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Load halfword
12410dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrih:
12420dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrih_cPt:
12430dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrih_cNotPt:
12440dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrih_cdnPt_V4:
12450dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrih_cdnNotPt_V4:
12460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
12470dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Load unsigned halfword
12480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriuh:
12490dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriuh_cPt:
12500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriuh_cNotPt:
12510dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriuh_cdnPt_V4:
12520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriuh_cdnNotPt_V4:
12530dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
12540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Load word
12550dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriw:
12560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriw_cPt:
12570dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriw_cNotPt:
12580dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriw_cdnPt_V4:
12590dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDriw_cdnNotPt_V4:
12600dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
12610dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Load double word
12620dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrid:
12630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrid_cPt:
12640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrid_cNotPt:
12650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrid_cdnPt_V4:
12660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_LDrid_cdnNotPt_V4:
12670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
12680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Store byte
12690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri:
12700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri_cPt:
12710dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri_cNotPt:
12720dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri_cdnPt_V4:
12730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri_cdnNotPt_V4:
12740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
12750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Store halfword
12760dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri:
12770dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri_cPt:
12780dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri_cNotPt:
12790dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri_cdnPt_V4:
12800dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri_cdnNotPt_V4:
12810dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
12820dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Store word
12830dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri:
12840dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri_cPt:
12850dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri_cNotPt:
12860dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri_cdnPt_V4:
12870dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri_cdnNotPt_V4:
12880dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
12890dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Store double word
12900dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STdri:
12910dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STdri_cPt:
12920dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STdri_cNotPt:
12930dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STdri_cdnPt_V4:
12940dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STdri_cdnNotPt_V4:
12950dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return true;
12960dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  }
12970dac3919e52e28308deba555bbcb6286674d5495Sirish Pande}
12980dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
12990dac3919e52e28308deba555bbcb6286674d5495Sirish Pandebool HexagonInstrInfo::isSaveCalleeSavedRegsCall(const MachineInstr *MI) const {
13000dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  return MI->getOpcode() == Hexagon::SAVE_REGISTERS_CALL_V4;
13010dac3919e52e28308deba555bbcb6286674d5495Sirish Pande}
1302ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
1303b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isPredicable(MachineInstr *MI) const {
1304b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  bool isPred = MI->getDesc().isPredicable();
1305b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1306b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (!isPred)
1307b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
1308b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1309b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const int Opc = MI->getOpcode();
1310b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1311b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch(Opc) {
1312b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFRI:
1313b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isInt<12>(MI->getOperand(1).getImm());
1314b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1315b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
1316b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid_indexed:
1317b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,3>(MI->getOperand(1).getImm());
1318b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1319b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
1320b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_indexed:
1321b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_nv_V4:
1322b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,2>(MI->getOperand(1).getImm());
1323b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1324b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
1325b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_indexed:
1326b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_nv_V4:
1327b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,1>(MI->getOperand(1).getImm());
1328b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1329b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
1330b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_indexed:
1331b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_nv_V4:
1332b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isUInt<6>(MI->getOperand(1).getImm());
1333b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1334b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
1335b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed:
1336b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,3>(MI->getOperand(2).getImm());
1337b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1338b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
1339b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed:
1340b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,2>(MI->getOperand(2).getImm());
1341b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1342b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
1343b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh:
1344b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed:
1345b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed:
1346b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedUInt<6,1>(MI->getOperand(2).getImm());
1347b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1348b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
1349b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
1350b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed:
1351b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed:
1352b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isUInt<6>(MI->getOperand(2).getImm());
1353b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1354b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrid:
1355b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedInt<4,3>(MI->getOperand(3).getImm());
1356b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1357b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriw:
1358b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedInt<4,2>(MI->getOperand(3).getImm());
1359b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1360b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrih:
1361b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriuh:
1362b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isShiftedInt<4,1>(MI->getOperand(3).getImm());
1363b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1364b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrib:
1365b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriub:
1366b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isInt<4>(MI->getOperand(3).getImm());
1367b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1368b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_imm_V4:
1369b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_imm_V4:
1370b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_imm_V4:
1371b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (isUInt<6>(MI->getOperand(1).getImm()) &&
1372b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            isInt<6>(MI->getOperand(2).getImm()));
1373b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1374b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_ri:
1375b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return isInt<8>(MI->getOperand(2).getImm());
1376b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1377b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASLH:
1378b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASRH:
1379b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTB:
1380b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTH:
1381b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTB:
1382b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTH:
1383b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return Subtarget.getHexagonArchVersion() == HexagonSubtarget::V4;
1384b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1385b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::JMPR:
1386b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
1387b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
1388b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1389b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
1390b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
1391b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1392ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pandeunsigned HexagonInstrInfo::getInvertedPredicatedOpcode(const int Opc) const {
1393ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  switch(Opc) {
13940dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: llvm_unreachable("Unexpected predicated instruction");
1395ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFR_cPt:
1396ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFR_cNotPt;
1397ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFR_cNotPt:
1398ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFR_cPt;
1399ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1400ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFRI_cPt:
1401ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFRI_cNotPt;
1402ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFRI_cNotPt:
1403ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFRI_cPt;
1404ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1405ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_c:
1406ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_cNot;
1407ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_cNot:
1408ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_c;
1409ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1410ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_ri_cPt:
1411ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_ri_cNotPt;
1412ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_ri_cNotPt:
1413ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_ri_cPt;
1414ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1415ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_rr_cPt:
1416ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_rr_cNotPt;
1417ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_rr_cNotPt:
1418ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_rr_cPt;
1419ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1420ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::XOR_rr_cPt:
1421ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::XOR_rr_cNotPt;
1422ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::XOR_rr_cNotPt:
1423ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::XOR_rr_cPt;
1424ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1425ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::AND_rr_cPt:
1426ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::AND_rr_cNotPt;
1427ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::AND_rr_cNotPt:
1428ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::AND_rr_cPt;
1429ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1430ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::OR_rr_cPt:
1431ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::OR_rr_cNotPt;
1432ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::OR_rr_cNotPt:
1433ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::OR_rr_cPt;
1434ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1435ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SUB_rr_cPt:
1436ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SUB_rr_cNotPt;
1437ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SUB_rr_cNotPt:
1438ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SUB_rr_cPt;
1439ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1440ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::COMBINE_rr_cPt:
1441ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::COMBINE_rr_cNotPt;
1442ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::COMBINE_rr_cNotPt:
1443ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::COMBINE_rr_cPt;
1444ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1445ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASLH_cPt_V4:
1446ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASLH_cNotPt_V4;
1447ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASLH_cNotPt_V4:
1448ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASLH_cPt_V4;
1449ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1450ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASRH_cPt_V4:
1451ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASRH_cNotPt_V4;
1452ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASRH_cNotPt_V4:
1453ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASRH_cPt_V4;
1454ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1455ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTB_cPt_V4:
1456ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTB_cNotPt_V4;
1457ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTB_cNotPt_V4:
1458ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTB_cPt_V4;
1459ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1460ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTH_cPt_V4:
1461ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTH_cNotPt_V4;
1462ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTH_cNotPt_V4:
1463ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTH_cPt_V4;
1464ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1465ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTB_cPt_V4:
1466ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTB_cNotPt_V4;
1467ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTB_cNotPt_V4:
1468ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTB_cPt_V4;
1469ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1470ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTH_cPt_V4:
1471ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTH_cNotPt_V4;
1472ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTH_cNotPt_V4:
1473ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTH_cPt_V4;
1474ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1475ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1476ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMPR_cPt:
1477ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMPR_cNotPt;
1478ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMPR_cNotPt:
1479ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMPR_cPt;
1480ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1481ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // V4 indexed+scaled load.
1482ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cPt_V4:
1483ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cNotPt_V4;
1484ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cNotPt_V4:
1485ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cPt_V4;
1486ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1487ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_shl_cPt_V4:
1488ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_shl_cNotPt_V4;
1489ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_shl_cNotPt_V4:
1490ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_shl_cPt_V4;
1491ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1492ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cPt_V4:
1493ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cNotPt_V4;
1494ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cNotPt_V4:
1495ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cPt_V4;
1496ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1497ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cPt_V4:
1498ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cNotPt_V4;
1499ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cNotPt_V4:
1500ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cPt_V4;
1501ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1502ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_shl_cPt_V4:
1503ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_shl_cNotPt_V4;
1504ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_shl_cNotPt_V4:
1505ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_shl_cPt_V4;
1506ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1507ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_shl_cPt_V4:
1508ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_shl_cNotPt_V4;
1509ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_shl_cNotPt_V4:
1510ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_shl_cPt_V4;
1511ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1512ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cPt_V4:
1513ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cNotPt_V4;
1514ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cNotPt_V4:
1515ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cPt_V4;
1516ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1517ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cPt_V4:
1518ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cNotPt_V4;
1519ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cNotPt_V4:
1520ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cPt_V4;
1521ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1522ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_shl_cPt_V4:
1523ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_shl_cNotPt_V4;
1524ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_shl_cNotPt_V4:
1525ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_shl_cPt_V4;
1526ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1527ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_shl_cPt_V4:
1528ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_shl_cNotPt_V4;
1529ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_shl_cNotPt_V4:
1530ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_shl_cPt_V4;
1531ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1532ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cPt_V4:
1533ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cNotPt_V4;
1534ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cNotPt_V4:
1535ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cPt_V4;
1536ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1537ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_shl_cPt_V4:
1538ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_shl_cNotPt_V4;
1539ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_shl_cNotPt_V4:
1540ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_shl_cPt_V4;
1541ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1542ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    // Byte.
1543ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STbri_cPt:
1544ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STbri_cNotPt;
1545ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STbri_cNotPt:
1546ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STbri_cPt;
1547ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1548ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_cPt:
1549ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_cNotPt;
1550ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_cNotPt:
1551ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_cPt;
1552ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1553ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_cPt:
1554ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_cNotPt;
1555ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_cNotPt:
1556ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_cPt;
1557ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1558ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_imm_cPt_V4:
1559ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_imm_cNotPt_V4;
1560ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_imm_cNotPt_V4:
1561ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_imm_cPt_V4;
1562ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1563ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_shl_cPt_V4:
1564ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_shl_cNotPt_V4;
1565ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_shl_cNotPt_V4:
1566ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_shl_cPt_V4;
1567ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1568ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Halfword.
1569ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_SThri_cPt:
1570ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_SThri_cNotPt;
1571ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_SThri_cNotPt:
1572ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_SThri_cPt;
1573ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1574ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_cPt:
1575ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_cNotPt;
1576ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_cNotPt:
1577ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_cPt;
1578ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1579ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_cPt:
1580ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_cNotPt;
1581ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_cNotPt:
1582ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_cPt;
1583ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1584ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_imm_cPt_V4:
1585ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_imm_cNotPt_V4;
1586ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_imm_cNotPt_V4:
1587ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_imm_cPt_V4;
1588ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1589ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_shl_cPt_V4:
1590ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_shl_cNotPt_V4;
1591ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_shl_cNotPt_V4:
1592ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_shl_cPt_V4;
1593ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1594ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Word.
1595ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STwri_cPt:
1596ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STwri_cNotPt;
1597ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STwri_cNotPt:
1598ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STwri_cPt;
1599ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1600ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_cPt:
1601ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_cNotPt;
1602ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_cNotPt:
1603ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_cPt;
1604ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1605ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_cPt:
1606ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_cNotPt;
1607ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_cNotPt:
1608ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_cPt;
1609ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1610ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_shl_cPt_V4:
1611ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_shl_cNotPt_V4;
1612ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_shl_cNotPt_V4:
1613ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_shl_cPt_V4;
1614ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1615ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_imm_cPt_V4:
1616ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_imm_cNotPt_V4;
1617ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_imm_cNotPt_V4:
1618ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_imm_cPt_V4;
1619ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1620ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Double word.
1621ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STdri_cPt:
1622ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STdri_cNotPt;
1623ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STdri_cNotPt:
1624ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STdri_cPt;
1625ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1626ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_cPt:
1627ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_cNotPt;
1628ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_cNotPt:
1629ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_cPt;
1630ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1631ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_cPt:
1632ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_cNotPt;
1633ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_cNotPt:
1634ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_cPt;
1635ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1636ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_shl_cPt_V4:
1637ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_shl_cNotPt_V4;
1638ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_shl_cNotPt_V4:
1639ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_shl_cPt_V4;
1640ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
16410dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // V4 Store to global address.
16420dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STd_GP_cPt_V4:
16430dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STd_GP_cNotPt_V4;
16440dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STd_GP_cNotPt_V4:
16450dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STd_GP_cPt_V4;
16460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
16470dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cPt_V4:
16480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STb_GP_cNotPt_V4;
16490dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cNotPt_V4:
16500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STb_GP_cPt_V4;
16510dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
16520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cPt_V4:
16530dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STh_GP_cNotPt_V4;
16540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cNotPt_V4:
16550dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STh_GP_cPt_V4;
16560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
16570dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cPt_V4:
16580dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STw_GP_cNotPt_V4;
16590dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cNotPt_V4:
16600dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STw_GP_cPt_V4;
16610dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
16620dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_GP_cPt_V4:
16630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STrid_GP_cNotPt_V4;
16640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_GP_cNotPt_V4:
16650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STrid_GP_cPt_V4;
16660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
16670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cPt_V4:
16680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STrib_GP_cNotPt_V4;
16690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cNotPt_V4:
16700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STrib_GP_cPt_V4;
16710dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
16720dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cPt_V4:
16730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STrih_GP_cNotPt_V4;
16740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cNotPt_V4:
16750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STrih_GP_cPt_V4;
16760dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
16770dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cPt_V4:
16780dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STriw_GP_cNotPt_V4;
16790dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cNotPt_V4:
16800dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return Hexagon::STriw_GP_cPt_V4;
16810dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
1682ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Load.
1683ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_cPt:
1684ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_cNotPt;
1685ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_cNotPt:
1686ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_cPt;
1687ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1688ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_cPt:
1689ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_cNotPt;
1690ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_cNotPt:
1691ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_cPt;
1692ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1693ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_cPt:
1694ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_cNotPt;
1695ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_cNotPt:
1696ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_cPt;
1697ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1698ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_cPt:
1699ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_cNotPt;
1700ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_cNotPt:
1701ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_cPt;
1702ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1703ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_cPt:
1704ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_cNotPt;
1705ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_cNotPt:
1706ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_cPt;
1707ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1708ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_cPt:
1709ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_cNotPt;
1710ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_cNotPt:
1711ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_cPt;
1712ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1713ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande // Load Indexed.
1714ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cPt:
1715ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cNotPt;
1716ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cNotPt:
1717ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cPt;
1718ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1719ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cPt:
1720ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cNotPt;
1721ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cNotPt:
1722ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cPt;
1723ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1724ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cPt:
1725ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cNotPt;
1726ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cNotPt:
1727ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cPt;
1728ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1729ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cPt:
1730ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cNotPt;
1731ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cNotPt:
1732ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cPt;
1733ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1734ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cPt:
1735ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cNotPt;
1736ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cNotPt:
1737ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cPt;
1738ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1739ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cPt:
1740ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cNotPt;
1741ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cNotPt:
1742ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cPt;
1743ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1744ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Post Inc Load.
1745ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrid_cPt:
1746ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrid_cNotPt;
1747ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriw_cNotPt:
1748ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriw_cPt;
1749ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1750ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrih_cPt:
1751ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrih_cNotPt;
1752ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrih_cNotPt:
1753ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrih_cPt;
1754ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1755ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriuh_cPt:
1756ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriuh_cNotPt;
1757ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriuh_cNotPt:
1758ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriuh_cPt;
1759ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1760ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrib_cPt:
1761ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrib_cNotPt;
1762ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrib_cNotPt:
1763ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrib_cPt;
1764ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1765ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriub_cPt:
1766ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriub_cNotPt;
1767ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriub_cNotPt:
1768ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriub_cPt;
1769ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1770ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Dealloc_return.
1771ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::DEALLOC_RET_cPt_V4:
1772ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::DEALLOC_RET_cNotPt_V4;
1773ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::DEALLOC_RET_cNotPt_V4:
1774ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::DEALLOC_RET_cPt_V4;
1775ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1776ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // New Value Jump.
1777ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPEQ_ri - with -1.
1778ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
1779ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPtneg_nv_V4;
1780ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
1781ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPtneg_nv_V4;
1782ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1783ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
1784ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPntneg_nv_V4;
1785ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
1786ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPntneg_nv_V4;
1787ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1788ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPEQ_ri.
1789ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQriPt_nv_V4:
1790ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPt_nv_V4;
1791ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
1792ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPt_nv_V4;
1793ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1794ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQriPnt_nv_V4:
1795ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPnt_nv_V4;
1796ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
1797ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPnt_nv_V4;
1798ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1799ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPEQ_rr.
1800ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQrrPt_nv_V4:
1801ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrNotPt_nv_V4;
1802ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
1803ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrPt_nv_V4;
1804ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1805ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQrrPnt_nv_V4:
1806ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrNotPnt_nv_V4;
1807ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
1808ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrPnt_nv_V4;
1809ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1810ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_ri - with -1.
1811ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
1812ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPtneg_nv_V4;
1813ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
1814ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPtneg_nv_V4;
1815ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1816ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
1817ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPntneg_nv_V4;
1818ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
1819ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPntneg_nv_V4;
1820ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1821ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_ri.
1822ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTriPt_nv_V4:
1823ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPt_nv_V4;
1824ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
1825ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPt_nv_V4;
1826ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1827ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTriPnt_nv_V4:
1828ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPnt_nv_V4;
1829ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
1830ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPnt_nv_V4;
1831ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1832ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_rr.
1833ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrPt_nv_V4:
1834ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrNotPt_nv_V4;
1835ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
1836ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrPt_nv_V4;
1837ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1838ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrPnt_nv_V4:
1839ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrNotPnt_nv_V4;
1840ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
1841ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrPnt_nv_V4;
1842ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1843ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_rrdn.
1844ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrdnPt_nv_V4:
1845ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnNotPt_nv_V4;
1846ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
1847ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnPt_nv_V4;
1848ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1849ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrdnPnt_nv_V4:
1850ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnNotPnt_nv_V4;
1851ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
1852ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnPnt_nv_V4;
1853ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1854ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGTU_ri.
1855ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUriPt_nv_V4:
1856ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriNotPt_nv_V4;
1857ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
1858ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriPt_nv_V4;
1859ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1860ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUriPnt_nv_V4:
1861ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriNotPnt_nv_V4;
1862ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
1863ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriPnt_nv_V4;
1864ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1865ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGTU_rr.
1866ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrPt_nv_V4:
1867ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrNotPt_nv_V4;
1868ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
1869ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrPt_nv_V4;
1870ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1871ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrPnt_nv_V4:
1872ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrNotPnt_nv_V4;
1873ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
1874ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrPnt_nv_V4;
1875ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1876ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGTU_rrdn.
1877ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrdnPt_nv_V4:
1878ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnNotPt_nv_V4;
1879ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
1880ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnPt_nv_V4;
1881ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1882ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrdnPnt_nv_V4:
1883ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnNotPnt_nv_V4;
1884ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
1885ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnPnt_nv_V4;
1886ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  }
1887ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande}
1888b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1889ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
1890b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumint HexagonInstrInfo::
1891b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumgetMatchingCondBranchOpcode(int Opc, bool invertPredicate) const {
1892b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch(Opc) {
1893b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFR:
1894b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::TFR_cPt :
1895b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::TFR_cNotPt;
1896b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFRI:
1897b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::TFRI_cPt :
1898b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::TFRI_cNotPt;
1899b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::JMP:
1900ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    return !invertPredicate ? Hexagon::JMP_c :
1901ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande                              Hexagon::JMP_cNot;
19020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::JMP_EQrrPt_nv_V4:
19030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::JMP_EQrrPt_nv_V4 :
19040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::JMP_EQrrNotPt_nv_V4;
19050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::JMP_EQriPt_nv_V4:
19060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::JMP_EQriPt_nv_V4 :
19070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::JMP_EQriNotPt_nv_V4;
1908b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_ri:
1909b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ADD_ri_cPt :
1910b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ADD_ri_cNotPt;
1911b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_rr:
1912b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ADD_rr_cPt :
1913b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ADD_rr_cNotPt;
1914b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::XOR_rr:
1915b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::XOR_rr_cPt :
1916b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::XOR_rr_cNotPt;
1917b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::AND_rr:
1918b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::AND_rr_cPt :
1919b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::AND_rr_cNotPt;
1920b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::OR_rr:
1921b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::OR_rr_cPt :
1922b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::OR_rr_cNotPt;
1923b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SUB_rr:
1924b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::SUB_rr_cPt :
1925b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::SUB_rr_cNotPt;
1926b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::COMBINE_rr:
1927b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::COMBINE_rr_cPt :
1928b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::COMBINE_rr_cNotPt;
1929b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASLH:
1930b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ASLH_cPt_V4 :
1931b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ASLH_cNotPt_V4;
1932b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASRH:
1933b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ASRH_cPt_V4 :
1934b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ASRH_cNotPt_V4;
1935b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTB:
1936b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::SXTB_cPt_V4 :
1937b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::SXTB_cNotPt_V4;
1938b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTH:
1939b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::SXTH_cPt_V4 :
1940b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::SXTH_cNotPt_V4;
1941b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTB:
1942b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ZXTB_cPt_V4 :
1943b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ZXTB_cNotPt_V4;
1944b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTH:
1945b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ZXTH_cPt_V4 :
1946b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ZXTH_cNotPt_V4;
1947b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1948b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::JMPR:
1949b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::JMPR_cPt :
1950b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::JMPR_cNotPt;
1951b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1952b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // V4 indexed+scaled load.
1953b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed_V4:
1954b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_indexed_cPt_V4 :
1955b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_indexed_cNotPt_V4;
1956b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed_shl_V4:
1957b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_indexed_shl_cPt_V4 :
1958b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_indexed_shl_cNotPt_V4;
1959b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed_V4:
1960b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_indexed_cPt_V4 :
1961b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_indexed_cNotPt_V4;
1962b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed_V4:
1963b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_cPt_V4 :
1964b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_cNotPt_V4;
1965b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_ae_indexed_V4:
1966b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_cPt_V4 :
1967b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_cNotPt_V4;
1968b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed_shl_V4:
1969b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_indexed_shl_cPt_V4 :
1970b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_indexed_shl_cNotPt_V4;
1971b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed_shl_V4:
1972b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_shl_cPt_V4 :
1973b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_shl_cNotPt_V4;
1974b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_ae_indexed_shl_V4:
1975b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_shl_cPt_V4 :
1976b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_shl_cNotPt_V4;
1977b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed_V4:
1978b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_indexed_cPt_V4 :
1979b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_indexed_cNotPt_V4;
1980b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed_V4:
1981b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt_V4 :
1982b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_cNotPt_V4;
1983b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_ae_indexed_V4:
1984b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt_V4 :
1985b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_cNotPt_V4;
1986b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed_shl_V4:
1987b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_indexed_shl_cPt_V4 :
1988b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_indexed_shl_cNotPt_V4;
1989b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed_shl_V4:
1990b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_shl_cPt_V4 :
1991b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_shl_cNotPt_V4;
1992b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_ae_indexed_shl_V4:
1993b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_shl_cPt_V4 :
1994b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_shl_cNotPt_V4;
1995b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed_V4:
1996b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_indexed_cPt_V4 :
1997b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_indexed_cNotPt_V4;
1998b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed_shl_V4:
1999b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_indexed_shl_cPt_V4 :
2000b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_indexed_shl_cNotPt_V4;
20010dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
20020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  // V4 Load from global address
20030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDrid_GP_V4:
20040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDrid_GP_cPt_V4 :
20050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDrid_GP_cNotPt_V4;
20060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDrib_GP_V4:
20070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDrib_GP_cPt_V4 :
20080dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDrib_GP_cNotPt_V4;
20090dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDriub_GP_V4:
20100dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDriub_GP_cPt_V4 :
20110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDriub_GP_cNotPt_V4;
20120dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDrih_GP_V4:
20130dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDrih_GP_cPt_V4 :
20140dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDrih_GP_cNotPt_V4;
20150dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDriuh_GP_V4:
20160dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDriuh_GP_cPt_V4 :
20170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDriuh_GP_cNotPt_V4;
20180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDriw_GP_V4:
20190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDriw_GP_cPt_V4 :
20200dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDriw_GP_cNotPt_V4;
20210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
20220dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDd_GP_V4:
20230dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDd_GP_cPt_V4 :
20240dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDd_GP_cNotPt_V4;
20250dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDb_GP_V4:
20260dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDb_GP_cPt_V4 :
20270dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDb_GP_cNotPt_V4;
20280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDub_GP_V4:
20290dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDub_GP_cPt_V4 :
20300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDub_GP_cNotPt_V4;
20310dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDh_GP_V4:
20320dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDh_GP_cPt_V4 :
20330dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDh_GP_cNotPt_V4;
20340dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDuh_GP_V4:
20350dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDuh_GP_cPt_V4 :
20360dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDuh_GP_cNotPt_V4;
20370dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::LDw_GP_V4:
20380dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::LDw_GP_cPt_V4 :
20390dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::LDw_GP_cNotPt_V4;
20400dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
2041b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // Byte.
2042b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_STbri:
2043b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_STbri_cPt :
2044b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_STbri_cNotPt;
2045b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
2046b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_cPt :
2047b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_cNotPt;
2048b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_indexed:
2049b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_indexed_cPt :
2050b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_indexed_cNotPt;
2051b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_imm_V4:
2052b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_imm_cPt_V4 :
2053b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_imm_cNotPt_V4;
2054b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_indexed_shl_V4:
2055b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_indexed_shl_cPt_V4 :
2056b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_indexed_shl_cNotPt_V4;
2057b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Halfword.
2058b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_SThri:
2059b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_SThri_cPt :
2060b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_SThri_cNotPt;
2061b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
2062b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_cPt :
2063b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_cNotPt;
2064b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_indexed:
2065b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_indexed_cPt :
2066b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_indexed_cNotPt;
2067b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_imm_V4:
2068b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_imm_cPt_V4 :
2069b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_imm_cNotPt_V4;
2070b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_indexed_shl_V4:
2071b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_indexed_shl_cPt_V4 :
2072b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_indexed_shl_cNotPt_V4;
2073b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Word.
2074b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_STwri:
2075b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_STwri_cPt :
2076b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_STwri_cNotPt;
2077b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
2078b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_cPt :
2079b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_cNotPt;
2080b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_indexed:
2081b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_indexed_cPt :
2082b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_indexed_cNotPt;
2083b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_indexed_shl_V4:
2084b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_indexed_shl_cPt_V4 :
2085b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_indexed_shl_cNotPt_V4;
2086b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_imm_V4:
2087b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_imm_cPt_V4 :
2088b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_imm_cNotPt_V4;
2089b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Double word.
2090b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_STdri:
2091b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_STdri_cPt :
2092b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_STdri_cNotPt;
2093b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
2094b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrid_cPt :
2095b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrid_cNotPt;
2096b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid_indexed:
2097b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrid_indexed_cPt :
2098b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrid_indexed_cNotPt;
2099b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid_indexed_shl_V4:
2100b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrid_indexed_shl_cPt_V4 :
2101b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrid_indexed_shl_cNotPt_V4;
21020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
21030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  // V4 Store to global address
21040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::STrid_GP_V4:
21050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::STrid_GP_cPt_V4 :
21060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::STrid_GP_cNotPt_V4;
21070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::STrib_GP_V4:
21080dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::STrib_GP_cPt_V4 :
21090dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::STrib_GP_cNotPt_V4;
21100dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::STrih_GP_V4:
21110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::STrih_GP_cPt_V4 :
21120dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::STrih_GP_cNotPt_V4;
21130dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::STriw_GP_V4:
21140dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::STriw_GP_cPt_V4 :
21150dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::STriw_GP_cNotPt_V4;
21160dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
21170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::STd_GP_V4:
21180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::STd_GP_cPt_V4 :
21190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::STd_GP_cNotPt_V4;
21200dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::STb_GP_V4:
21210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::STb_GP_cPt_V4 :
21220dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::STb_GP_cNotPt_V4;
21230dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::STh_GP_V4:
21240dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::STh_GP_cPt_V4 :
21250dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::STh_GP_cNotPt_V4;
21260dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  case Hexagon::STw_GP_V4:
21270dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    return !invertPredicate ? Hexagon::STw_GP_cPt_V4 :
21280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande                              Hexagon::STw_GP_cNotPt_V4;
21290dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
2130b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Load.
2131b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
2132b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_cPt :
2133b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_cNotPt;
2134b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
2135b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_cPt :
2136b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_cNotPt;
2137b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
2138b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_cPt :
2139b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_cNotPt;
2140b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh:
2141b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_cPt :
2142b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_cNotPt;
2143b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
2144b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_cPt :
2145b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_cNotPt;
2146b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
2147b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_cPt :
2148b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_cNotPt;
2149b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // Load Indexed.
2150b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed:
2151b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_indexed_cPt :
2152b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_indexed_cNotPt;
2153b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed:
2154b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_indexed_cPt :
2155b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_indexed_cNotPt;
2156b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed:
2157b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_indexed_cPt :
2158b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_indexed_cNotPt;
2159b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed:
2160b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt :
2161b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_cNotPt;
2162b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed:
2163b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_indexed_cPt :
2164b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_indexed_cNotPt;
2165b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed:
2166b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_cPt :
2167b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_cNotPt;
2168b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Post Increment Load.
2169b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrid:
2170b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDrid_cPt :
2171b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDrid_cNotPt;
2172b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriw:
2173b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDriw_cPt :
2174b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDriw_cNotPt;
2175b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrih:
2176b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDrih_cPt :
2177b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDrih_cNotPt;
2178b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriuh:
2179b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDriuh_cPt :
2180b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDriuh_cNotPt;
2181b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrib:
2182b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDrib_cPt :
2183b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDrib_cNotPt;
2184b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriub:
2185b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDriub_cPt :
2186b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDriub_cNotPt;
2187b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // DEALLOC_RETURN.
2188b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_V4:
2189b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::DEALLOC_RET_cPt_V4 :
2190b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::DEALLOC_RET_cNotPt_V4;
2191b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
219227baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer  llvm_unreachable("Unexpected predicable instruction");
2193b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2194b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2195b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2196b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2197b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumPredicateInstruction(MachineInstr *MI,
2198b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     const SmallVectorImpl<MachineOperand> &Cond) const {
2199b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  int Opc = MI->getOpcode();
2200b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  assert (isPredicable(MI) && "Expected predicable instruction");
2201b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  bool invertJump = (!Cond.empty() && Cond[0].isImm() &&
2202b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     (Cond[0].getImm() == 0));
2203b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MI->setDesc(get(getMatchingCondBranchOpcode(Opc, invertJump)));
2204b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //
2205b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // This assumes that the predicate is always the first operand
2206b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // in the set of inputs.
2207b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //
2208b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MI->addOperand(MI->getOperand(MI->getNumOperands()-1));
2209b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  int oper;
2210b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  for (oper = MI->getNumOperands() - 3; oper >= 0; --oper) {
2211b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    MachineOperand MO = MI->getOperand(oper);
2212b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if ((MO.isReg() && !MO.isUse() && !MO.isImplicit())) {
2213b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      break;
2214b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
2215b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2216b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MO.isReg()) {
2217b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MI->getOperand(oper+1).ChangeToRegister(MO.getReg(), MO.isDef(),
2218b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                              MO.isImplicit(), MO.isKill(),
2219b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                              MO.isDead(), MO.isUndef(),
2220b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                              MO.isDebug());
2221b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    } else if (MO.isImm()) {
2222b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MI->getOperand(oper+1).ChangeToImmediate(MO.getImm());
2223b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    } else {
2224bc2198133a1836598b54b943420748e75d5dea94Craig Topper      llvm_unreachable("Unexpected operand type");
2225b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
2226b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2227b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2228b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  int regPos = invertJump ? 1 : 0;
2229b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineOperand PredMO = Cond[regPos];
2230b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MI->getOperand(oper+1).ChangeToRegister(PredMO.getReg(), PredMO.isDef(),
2231b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          PredMO.isImplicit(), PredMO.isKill(),
2232b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          PredMO.isDead(), PredMO.isUndef(),
2233b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          PredMO.isDebug());
2234b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2235b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
2236b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2237b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2238b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2239b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2240b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::
2241b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisProfitableToIfCvt(MachineBasicBlock &MBB,
2242b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned NumCyles,
2243b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned ExtraPredCycles,
2244b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const BranchProbability &Probability) const {
2245b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
2246b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2247b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2248b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2249b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2250b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::
2251b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisProfitableToIfCvt(MachineBasicBlock &TMBB,
2252b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned NumTCycles,
2253b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned ExtraTCycles,
2254b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    MachineBasicBlock &FMBB,
2255b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned NumFCycles,
2256b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned ExtraFCycles,
2257b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const BranchProbability &Probability) const {
2258b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
2259b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2260b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2261b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2262b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isPredicated(const MachineInstr *MI) const {
2263c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon  const uint64_t F = MI->getDesc().TSFlags;
2264b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2265c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon  return ((F >> HexagonII::PredicatedPos) & HexagonII::PredicatedMask);
2266b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2267b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2268b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2269b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::DefinesPredicate(MachineInstr *MI,
2270b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                   std::vector<MachineOperand> &Pred) const {
2271b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  for (unsigned oper = 0; oper < MI->getNumOperands(); ++oper) {
2272b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    MachineOperand MO = MI->getOperand(oper);
2273b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MO.isReg() && MO.isDef()) {
2274b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      const TargetRegisterClass* RC = RI.getMinimalPhysRegClass(MO.getReg());
2275420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper      if (RC == &Hexagon::PredRegsRegClass) {
2276b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        Pred.push_back(MO);
2277b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        return true;
2278b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      }
2279b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
2280b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2281b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return false;
2282b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2283b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2284b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2285b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2286b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::
2287b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumSubsumesPredicate(const SmallVectorImpl<MachineOperand> &Pred1,
2288b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                  const SmallVectorImpl<MachineOperand> &Pred2) const {
2289b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // TODO: Fix this
2290b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return false;
2291b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2292b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2293b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2294b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2295b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// We indicate that we want to reverse the branch by
2296b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// inserting a 0 at the beginning of the Cond vector.
2297b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2298b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2299b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumReverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const {
2300b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (!Cond.empty() && Cond[0].isImm() && Cond[0].getImm() == 0) {
2301b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.erase(Cond.begin());
2302b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  } else {
2303b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.insert(Cond.begin(), MachineOperand::CreateImm(0));
2304b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2305b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return false;
2306b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2307b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2308b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2309b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2310b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisProfitableToDupForIfCvt(MachineBasicBlock &MBB,unsigned NumInstrs,
2311b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                          const BranchProbability &Probability) const {
2312b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return (NumInstrs <= 4);
2313b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2314b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2315b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isDeallocRet(const MachineInstr *MI) const {
2316b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode()) {
23170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  default: return false;
2318b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_V4 :
2319b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cPt_V4 :
2320b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cNotPt_V4 :
2321b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cdnPnt_V4 :
2322b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cNotdnPnt_V4 :
2323b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cdnPt_V4 :
2324b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cNotdnPt_V4 :
2325b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum   return true;
2326b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2327b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2328b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2329b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2330b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2331b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisValidOffset(const int Opcode, const int Offset) const {
2332b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // This function is to check whether the "Offset" is in the correct range of
2333b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // the given "Opcode". If "Offset" is not in the correct range, "ADD_ri" is
2334b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // inserted to calculate the final address. Due to this reason, the function
2335b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // assumes that the "Offset" has correct alignment.
2336b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2337b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch(Opcode) {
2338b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2339b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
2340b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
2341b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert((Offset % 4 == 0) && "Offset has incorrect alignment");
2342b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMW_OFFSET_MIN) &&
2343b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMW_OFFSET_MAX);
2344b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2345b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
2346b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
2347b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert((Offset % 8 == 0) && "Offset has incorrect alignment");
2348b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMD_OFFSET_MIN) &&
2349b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMD_OFFSET_MAX);
2350b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2351b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
2352b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh:
2353b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
2354b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert((Offset % 2 == 0) && "Offset has incorrect alignment");
2355b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMH_OFFSET_MIN) &&
2356b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMH_OFFSET_MAX);
2357b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2358b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
2359b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
2360b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
2361b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMB_OFFSET_MIN) &&
2362b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMB_OFFSET_MAX);
2363b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2364b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_ri:
2365b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFR_FI:
2366b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_ADDI_OFFSET_MIN) &&
2367b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_ADDI_OFFSET_MAX);
2368b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2369b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 :
2370b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDi_indexed_MEM_V4 :
2371b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBi_indexed_MEM_V4 :
2372b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDr_indexed_MEM_V4 :
2373b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBr_indexed_MEM_V4 :
2374b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ANDr_indexed_MEM_V4 :
2375b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ORr_indexed_MEM_V4 :
2376b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDSUBi_MEM_V4 :
2377b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDi_MEM_V4 :
2378b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBi_MEM_V4 :
2379b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDr_MEM_V4 :
2380b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBr_MEM_V4 :
2381b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ANDr_MEM_V4 :
2382b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ORr_MEM_V4 :
2383b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert ((Offset % 4) == 0 && "MEMOPw offset is not aligned correctly." );
2384b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (0 <= Offset && Offset <= 255);
2385b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2386b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 :
2387b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDi_indexed_MEM_V4 :
2388b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBi_indexed_MEM_V4 :
2389b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDr_indexed_MEM_V4 :
2390b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBr_indexed_MEM_V4 :
2391b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ANDr_indexed_MEM_V4 :
2392b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ORr_indexed_MEM_V4 :
2393b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDSUBi_MEM_V4 :
2394b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDi_MEM_V4 :
2395b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBi_MEM_V4 :
2396b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDr_MEM_V4 :
2397b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBr_MEM_V4 :
2398b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ANDr_MEM_V4 :
2399b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ORr_MEM_V4 :
2400b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert ((Offset % 2) == 0 && "MEMOPh offset is not aligned correctly." );
2401b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (0 <= Offset && Offset <= 127);
2402b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2403b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 :
2404b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDi_indexed_MEM_V4 :
2405b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBi_indexed_MEM_V4 :
2406b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDr_indexed_MEM_V4 :
2407b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBr_indexed_MEM_V4 :
2408b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ANDr_indexed_MEM_V4 :
2409b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ORr_indexed_MEM_V4 :
2410b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDSUBi_MEM_V4 :
2411b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDi_MEM_V4 :
2412b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBi_MEM_V4 :
2413b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDr_MEM_V4 :
2414b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBr_MEM_V4 :
2415b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ANDr_MEM_V4 :
2416b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ORr_MEM_V4 :
2417b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (0 <= Offset && Offset <= 63);
2418b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2419b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // LDri_pred and STriw_pred are pseudo operations, so it has to take offset of
2420b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // any size. Later pass knows how to handle it.
2421b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_pred:
2422b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_pred:
2423b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return true;
2424b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2425b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // INLINEASM is very special.
2426b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::INLINEASM:
2427b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return true;
2428b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2429b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
243027baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer  llvm_unreachable("No offset range is defined for this opcode. "
243127baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer                   "Please define it in the above switch statement!");
2432b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2433b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2434b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2435b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2436b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// Check if the Offset is a valid auto-inc imm by Load/Store Type.
2437b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2438b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2439b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisValidAutoIncImm(const EVT VT, const int Offset) const {
2440b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2441b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i64) {
2442b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMD_AUTOINC_MIN &&
2443b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMD_AUTOINC_MAX &&
2444b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              (Offset & 0x7) == 0);
2445b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2446b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i32) {
2447b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMW_AUTOINC_MIN &&
2448b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMW_AUTOINC_MAX &&
2449b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              (Offset & 0x3) == 0);
2450b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2451b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i16) {
2452b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMH_AUTOINC_MIN &&
2453b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMH_AUTOINC_MAX &&
2454b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              (Offset & 0x1) == 0);
2455b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2456b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i8) {
2457b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMB_AUTOINC_MIN &&
2458b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMB_AUTOINC_MAX);
2459b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2460bc2198133a1836598b54b943420748e75d5dea94Craig Topper  llvm_unreachable("Not an auto-inc opc!");
2461b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2462b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2463b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2464b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2465b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisMemOp(const MachineInstr *MI) const {
2466b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode())
2467b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  {
24680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: return false;
2469b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 :
2470b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDi_indexed_MEM_V4 :
2471b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBi_indexed_MEM_V4 :
2472b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDr_indexed_MEM_V4 :
2473b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBr_indexed_MEM_V4 :
2474b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ANDr_indexed_MEM_V4 :
2475b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ORr_indexed_MEM_V4 :
2476b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDSUBi_MEM_V4 :
2477b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDi_MEM_V4 :
2478b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBi_MEM_V4 :
2479b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDr_MEM_V4 :
2480b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBr_MEM_V4 :
2481b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ANDr_MEM_V4 :
2482b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ORr_MEM_V4 :
2483b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 :
2484b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDi_indexed_MEM_V4 :
2485b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBi_indexed_MEM_V4 :
2486b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDr_indexed_MEM_V4 :
2487b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBr_indexed_MEM_V4 :
2488b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ANDr_indexed_MEM_V4 :
2489b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ORr_indexed_MEM_V4 :
2490b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDSUBi_MEM_V4 :
2491b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDi_MEM_V4 :
2492b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBi_MEM_V4 :
2493b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDr_MEM_V4 :
2494b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBr_MEM_V4 :
2495b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ANDr_MEM_V4 :
2496b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ORr_MEM_V4 :
2497b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 :
2498b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDi_indexed_MEM_V4 :
2499b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBi_indexed_MEM_V4 :
2500b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDr_indexed_MEM_V4 :
2501b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBr_indexed_MEM_V4 :
2502b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ANDr_indexed_MEM_V4 :
2503b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ORr_indexed_MEM_V4 :
2504b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDSUBi_MEM_V4 :
2505b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDi_MEM_V4 :
2506b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBi_MEM_V4 :
2507b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDr_MEM_V4 :
2508b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBr_MEM_V4 :
2509b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ANDr_MEM_V4 :
2510b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ORr_MEM_V4 :
25110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return true;
2512b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2513b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2514b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2515b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2516b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2517b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisSpillPredRegOp(const MachineInstr *MI) const {
25180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  switch (MI->getOpcode()) {
25190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: return false;
2520b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::STriw_pred :
2521b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_pred :
25220dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return true;
2523b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2524b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2525b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
25260dac3919e52e28308deba555bbcb6286674d5495Sirish Pandebool HexagonInstrInfo::
25270dac3919e52e28308deba555bbcb6286674d5495Sirish PandeisConditionalTransfer (const MachineInstr *MI) const {
25280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  switch (MI->getOpcode()) {
25290dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: return false;
25300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::TFR_cPt:
25310dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::TFR_cNotPt:
25320dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::TFRI_cPt:
25330dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::TFRI_cNotPt:
25340dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::TFR_cdnPt:
25350dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::TFR_cdnNotPt:
25360dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::TFRI_cdnPt:
25370dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::TFRI_cdnNotPt:
25380dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return true;
25390dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  }
25400dac3919e52e28308deba555bbcb6286674d5495Sirish Pande}
2541b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2542b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isConditionalALU32 (const MachineInstr* MI) const {
2543b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const HexagonRegisterInfo& QRI = getRegisterInfo();
2544b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode())
2545b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  {
25460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: return false;
2547b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_ri_cPt:
2548b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_ri_cNotPt:
2549b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_rr_cPt:
2550b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_rr_cNotPt:
2551b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::XOR_rr_cPt:
2552b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::XOR_rr_cNotPt:
2553b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::AND_rr_cPt:
2554b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::AND_rr_cNotPt:
2555b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::OR_rr_cPt:
2556b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::OR_rr_cNotPt:
2557b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SUB_rr_cPt:
2558b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SUB_rr_cNotPt:
2559b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::COMBINE_rr_cPt:
2560b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::COMBINE_rr_cNotPt:
2561b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return true;
2562b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASLH_cPt_V4:
2563b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASLH_cNotPt_V4:
2564b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASRH_cPt_V4:
2565b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASRH_cNotPt_V4:
2566b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTB_cPt_V4:
2567b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTB_cNotPt_V4:
2568b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTH_cPt_V4:
2569b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTH_cNotPt_V4:
2570b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTB_cPt_V4:
2571b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTB_cNotPt_V4:
2572b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTH_cPt_V4:
2573b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTH_cNotPt_V4:
25740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return QRI.Subtarget.hasV4TOps();
2575b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2576b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2577b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2578b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2579b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisConditionalLoad (const MachineInstr* MI) const {
2580b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const HexagonRegisterInfo& QRI = getRegisterInfo();
2581b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode())
2582b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  {
25830dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: return false;
2584b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_cPt :
2585b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_cNotPt :
2586b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cPt :
2587b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cNotPt :
2588b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_cPt :
2589b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_cNotPt :
2590b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cPt :
2591b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cNotPt :
2592b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_cPt :
2593b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_cNotPt :
2594b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cPt :
2595b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cNotPt :
2596b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_cPt :
2597b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_cNotPt :
2598b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cPt :
2599b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cNotPt :
2600b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_cPt :
2601b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_cNotPt :
2602b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cPt :
2603b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cNotPt :
2604b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_cPt :
2605b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_cNotPt :
2606b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cPt :
2607b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cNotPt :
2608b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return true;
2609b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrid_cPt :
2610b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrid_cNotPt :
2611b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriw_cPt :
2612b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriw_cNotPt :
2613b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrih_cPt :
2614b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrih_cNotPt :
2615b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrib_cPt :
2616b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrib_cNotPt :
2617b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriuh_cPt :
2618b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriuh_cNotPt :
2619b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriub_cPt :
2620b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriub_cNotPt :
26210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return QRI.Subtarget.hasV4TOps();
2622b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cPt_V4 :
2623b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cNotPt_V4 :
2624b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_shl_cPt_V4 :
2625b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_shl_cNotPt_V4 :
2626b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cPt_V4 :
2627b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cNotPt_V4 :
2628b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_shl_cPt_V4 :
2629b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_shl_cNotPt_V4 :
2630b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cPt_V4 :
2631b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cNotPt_V4 :
2632b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_shl_cPt_V4 :
2633b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_shl_cNotPt_V4 :
2634b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cPt_V4 :
2635b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cNotPt_V4 :
2636b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_shl_cPt_V4 :
2637b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_shl_cNotPt_V4 :
2638b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cPt_V4 :
2639b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cNotPt_V4 :
2640b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_shl_cPt_V4 :
2641b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_shl_cNotPt_V4 :
2642b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cPt_V4 :
2643b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cNotPt_V4 :
2644b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_shl_cPt_V4 :
2645b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_shl_cNotPt_V4 :
26460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return QRI.Subtarget.hasV4TOps();
26470dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  }
26480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande}
26490dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
26500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// Returns true if an instruction is a conditional store.
26510dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//
26520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// Note: It doesn't include conditional new-value stores as they can't be
26530dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// converted to .new predicate.
26540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//
26550dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//               p.new NV store [ if(p0.new)memw(R0+#0)=R2.new ]
26560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//                ^           ^
26570dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//               /             \ (not OK. it will cause new-value store to be
26580dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//              /               X conditional on p0.new while R2 producer is
26590dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//             /                 \ on p0)
26600dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//            /                   \.
26610dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//     p.new store                 p.old NV store
26620dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// [if(p0.new)memw(R0+#0)=R2]    [if(p0)memw(R0+#0)=R2.new]
26630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//            ^                  ^
26640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//             \                /
26650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//              \              /
26660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//               \            /
26670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//                 p.old store
26680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//             [if (p0)memw(R0+#0)=R2]
26690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//
26700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// The above diagram shows the steps involoved in the conversion of a predicated
26710dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// store instruction to its .new predicated new-value form.
26720dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//
26730dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// The following set of instructions further explains the scenario where
26740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// conditional new-value store becomes invalid when promoted to .new predicate
26750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// form.
26760dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//
26770dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// { 1) if (p0) r0 = add(r1, r2)
26780dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//   2) p0 = cmp.eq(r3, #0) }
26790dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//
26800dac3919e52e28308deba555bbcb6286674d5495Sirish Pande//   3) if (p0) memb(r1+#0) = r0  --> this instruction can't be grouped with
26810dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// the first two instructions because in instr 1, r0 is conditional on old value
26820dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// of p0 but its use in instr 3 is conditional on p0 modified by instr 2 which
26830dac3919e52e28308deba555bbcb6286674d5495Sirish Pande// is not valid for new-value stores.
26840dac3919e52e28308deba555bbcb6286674d5495Sirish Pandebool HexagonInstrInfo::
26850dac3919e52e28308deba555bbcb6286674d5495Sirish PandeisConditionalStore (const MachineInstr* MI) const {
26860dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  const HexagonRegisterInfo& QRI = getRegisterInfo();
26870dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  switch (MI->getOpcode())
26880dac3919e52e28308deba555bbcb6286674d5495Sirish Pande  {
26890dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    default: return false;
26900dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_imm_cPt_V4 :
26910dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_imm_cNotPt_V4 :
26920dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_shl_cPt_V4 :
26930dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_indexed_shl_cNotPt_V4 :
26940dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_cPt :
26950dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_cNotPt :
26960dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri_cPt :
26970dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STbri_cNotPt :
26980dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_indexed_cPt :
26990dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_indexed_cNotPt :
27000dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_indexed_shl_cPt_V4 :
27010dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STdri_cPt :
27020dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STdri_cNotPt :
27030dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_cPt :
27040dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_cNotPt :
27050dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_cPt :
27060dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_cNotPt :
27070dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_imm_cPt_V4 :
27080dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_imm_cNotPt_V4 :
27090dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_shl_cPt_V4 :
27100dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_indexed_shl_cNotPt_V4 :
27110dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri_cPt :
27120dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_SThri_cNotPt :
27130dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_cPt :
27140dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_cNotPt :
27150dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_cPt :
27160dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_cNotPt :
27170dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_imm_cPt_V4 :
27180dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_imm_cNotPt_V4 :
27190dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_shl_cPt_V4 :
27200dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_indexed_shl_cNotPt_V4 :
27210dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri_cPt :
27220dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::POST_STwri_cNotPt :
27230dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return QRI.Subtarget.hasV4TOps();
27240dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
27250dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // V4 global address store before promoting to dot new.
27260dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_GP_cPt_V4 :
27270dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrid_GP_cNotPt_V4 :
27280dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cPt_V4 :
27290dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrib_GP_cNotPt_V4 :
27300dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cPt_V4 :
27310dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STrih_GP_cNotPt_V4 :
27320dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cPt_V4 :
27330dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STriw_GP_cNotPt_V4 :
27340dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STd_GP_cPt_V4 :
27350dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STd_GP_cNotPt_V4 :
27360dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cPt_V4 :
27370dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STb_GP_cNotPt_V4 :
27380dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cPt_V4 :
27390dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STh_GP_cNotPt_V4 :
27400dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cPt_V4 :
27410dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    case Hexagon::STw_GP_cNotPt_V4 :
27420dac3919e52e28308deba555bbcb6286674d5495Sirish Pande      return QRI.Subtarget.hasV4TOps();
27430dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
27440dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // Predicated new value stores (i.e. if (p0) memw(..)=r0.new) are excluded
27450dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // from the "Conditional Store" list. Because a predicated new value store
27460dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // would NOT be promoted to a double dot new store. See diagram below:
27470dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // This function returns yes for those stores that are predicated but not
27480dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    // yet promoted to predicate dot new instructions.
27490dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //
27500dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                          +---------------------+
27510dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                    /-----| if (p0) memw(..)=r0 |---------\~
27520dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                   ||     +---------------------+         ||
27530dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //          promote  ||       /\       /\                   ||  promote
27540dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                   ||      /||\     /||\                  ||
27550dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                  \||/    demote     ||                  \||/
27560dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                   \/       ||       ||                   \/
27570dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //       +-------------------------+   ||   +-------------------------+
27580dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //       | if (p0.new) memw(..)=r0 |   ||   | if (p0) memw(..)=r0.new |
27590dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //       +-------------------------+   ||   +-------------------------+
27600dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                        ||           ||         ||
27610dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                        ||         demote      \||/
27620dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                      promote        ||         \/ NOT possible
27630dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                        ||           ||         /\~
27640dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                       \||/          ||        /||\~
27650dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                        \/           ||         ||
27660dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                      +-----------------------------+
27670dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                      | if (p0.new) memw(..)=r0.new |
27680dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                      +-----------------------------+
27690dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //                           Double Dot New Store
27700dac3919e52e28308deba555bbcb6286674d5495Sirish Pande    //
2771d1a87a68064e0b9af3b71b681286954f861bb1b3Sirish Pande  }
2772d1a87a68064e0b9af3b71b681286954f861bb1b3Sirish Pande}
2773d1a87a68064e0b9af3b71b681286954f861bb1b3Sirish Pande
27740dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
27750dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
2776ee498d3254b86bceb4f441741e9f442990647ce6Andrew TrickDFAPacketizer *HexagonInstrInfo::
2777ee498d3254b86bceb4f441741e9f442990647ce6Andrew TrickCreateTargetScheduleState(const TargetMachine *TM,
2778ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick                           const ScheduleDAG *DAG) const {
2779ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  const InstrItineraryData *II = TM->getInstrItineraryData();
2780ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  return TM->getSubtarget<HexagonGenSubtargetInfo>().createDFAPacketizer(II);
2781ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick}
2782ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
2783ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trickbool HexagonInstrInfo::isSchedulingBoundary(const MachineInstr *MI,
2784ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick                                            const MachineBasicBlock *MBB,
2785ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick                                            const MachineFunction &MF) const {
2786ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // Debug info is never a scheduling boundary. It's necessary to be explicit
2787ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // due to the special treatment of IT instructions below, otherwise a
2788ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // dbg_value followed by an IT will result in the IT instruction being
2789ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // considered a scheduling hazard, which is wrong. It should be the actual
2790ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // instruction preceding the dbg_value instruction(s), just like it is
2791ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // when debug info is not present.
2792ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  if (MI->isDebugValue())
2793ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick    return false;
2794ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
2795ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // Terminators and labels can't be scheduled around.
2796ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  if (MI->getDesc().isTerminator() || MI->isLabel() || MI->isInlineAsm())
2797ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick    return true;
2798ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
2799ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  return false;
2800ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick}
2801