131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- HexagonInstrInfo.cpp - Hexagon Instruction Information ------------===//
2b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
3b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//                     The LLVM Compiler Infrastructure
4b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
5b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file is distributed under the University of Illinois Open Source
6b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// License. See LICENSE.TXT for details.
7b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
8b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===//
9b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
10b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file contains the Hexagon implementation of the TargetInstrInfo class.
11b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
12b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===//
13b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
14b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "HexagonInstrInfo.h"
1579aa3417eb6f58d668aadfedf075240a41d35a26Craig Topper#include "HexagonRegisterInfo.h"
16b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "HexagonSubtarget.h"
1726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "Hexagon.h"
18b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/ADT/STLExtras.h"
19b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/ADT/SmallVector.h"
20f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer#include "llvm/CodeGen/DFAPacketizer.h"
21b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineInstrBuilder.h"
22b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineRegisterInfo.h"
23b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineFrameInfo.h"
24b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineMemOperand.h"
25b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/PseudoSourceValue.h"
26f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer#include "llvm/Support/MathExtras.h"
27b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define GET_INSTRINFO_CTOR
28b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "HexagonGenInstrInfo.inc"
29ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick#include "HexagonGenDFAPacketizer.inc"
30b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
31b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumusing namespace llvm;
32b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
33b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum///
34b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// Constants for Hexagon instructions.
35b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum///
36b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMW_OFFSET_MAX = 4095;
3726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMW_OFFSET_MIN = -4096;
38b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMD_OFFSET_MAX = 8191;
3926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMD_OFFSET_MIN = -8192;
40b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMH_OFFSET_MAX = 2047;
4126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMH_OFFSET_MIN = -2048;
42b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMB_OFFSET_MAX = 1023;
4326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMB_OFFSET_MIN = -1024;
44b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_ADDI_OFFSET_MAX = 32767;
4526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_ADDI_OFFSET_MIN = -32768;
46b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMD_AUTOINC_MAX = 56;
4726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMD_AUTOINC_MIN = -64;
48b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMW_AUTOINC_MAX = 28;
4926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMW_AUTOINC_MIN = -32;
50b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMH_AUTOINC_MAX = 14;
5126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMH_AUTOINC_MIN = -16;
52b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumconst int Hexagon_MEMB_AUTOINC_MAX = 7;
5326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeconst int Hexagon_MEMB_AUTOINC_MIN = -8;
54b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
55b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
56b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::HexagonInstrInfo(HexagonSubtarget &ST)
57b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  : HexagonGenInstrInfo(Hexagon::ADJCALLSTACKDOWN, Hexagon::ADJCALLSTACKUP),
58b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    RI(ST, *this), Subtarget(ST) {
59b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
60b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
61b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
62b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// isLoadFromStackSlot - If the specified machine instruction is a direct
63b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// load from a stack slot, return the virtual or physical register number of
64b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// the destination along with the FrameIndex of the loaded stack slot.  If
65b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// not, return 0.  This predicate must return 0 if the instruction has
66b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// any side effects other than loading from the stack slot.
67b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned HexagonInstrInfo::isLoadFromStackSlot(const MachineInstr *MI,
68b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                             int &FrameIndex) const {
69b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
70b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
71b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode()) {
7226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  default: break;
73b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
74b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
75b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
76b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
77b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
78b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MI->getOperand(2).isFI() &&
79b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MI->getOperand(1).isImm() && (MI->getOperand(1).getImm() == 0)) {
80b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      FrameIndex = MI->getOperand(2).getIndex();
81b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return MI->getOperand(0).getReg();
82b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
83b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    break;
84b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
85b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return 0;
86b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
87b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
88b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
89b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// isStoreToStackSlot - If the specified machine instruction is a direct
90b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// store to a stack slot, return the virtual or physical register number of
91b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// the source reg along with the FrameIndex of the loaded stack slot.  If
92b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// not, return 0.  This predicate must return 0 if the instruction has
93b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum/// any side effects other than storing to the stack slot.
94b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned HexagonInstrInfo::isStoreToStackSlot(const MachineInstr *MI,
95b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                            int &FrameIndex) const {
96b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode()) {
9726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  default: break;
98b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
99b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
100b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
101b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
102b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MI->getOperand(2).isFI() &&
103b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MI->getOperand(1).isImm() && (MI->getOperand(1).getImm() == 0)) {
1042b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande      FrameIndex = MI->getOperand(0).getIndex();
1052b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande      return MI->getOperand(2).getReg();
106b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
107b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    break;
108b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
109b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return 0;
110b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
111b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
112b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
113b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned
114b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB,
115b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                             MachineBasicBlock *FBB,
116b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                             const SmallVectorImpl<MachineOperand> &Cond,
117b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                             DebugLoc DL) const{
118b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
119b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    int BOpc   = Hexagon::JMP;
120ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    int BccOpc = Hexagon::JMP_c;
121b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
122b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert(TBB && "InsertBranch must not be told to insert a fallthrough");
123b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
124b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    int regPos = 0;
125b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // Check if ReverseBranchCondition has asked to reverse this branch
126b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // If we want to reverse the branch an odd number of times, we want
127ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    // JMP_cNot.
128b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (!Cond.empty() && Cond[0].isImm() && Cond[0].getImm() == 0) {
129ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      BccOpc = Hexagon::JMP_cNot;
130b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      regPos = 1;
131b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
132b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
133b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (FBB == 0) {
134b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      if (Cond.empty()) {
135b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // Due to a bug in TailMerging/CFG Optimization, we need to add a
136b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // special case handling of a predicated jump followed by an
137b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // unconditional jump. If not, Tail Merging and CFG Optimization go
138b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // into an infinite loop.
139b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MachineBasicBlock *NewTBB, *NewFBB;
140b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        SmallVector<MachineOperand, 4> Cond;
141b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        MachineInstr *Term = MBB.getFirstTerminator();
142b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        if (isPredicated(Term) && !AnalyzeBranch(MBB, NewTBB, NewFBB, Cond,
143b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                                 false)) {
144b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          MachineBasicBlock *NextBB =
145b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            llvm::next(MachineFunction::iterator(&MBB));
146b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          if (NewTBB == NextBB) {
147b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            ReverseBranchCondition(Cond);
148b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            RemoveBranch(MBB);
149b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum            return InsertBranch(MBB, TBB, 0, Cond, DL);
150b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          }
151b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        }
152b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(&MBB, DL, get(BOpc)).addMBB(TBB);
153b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      } else {
154b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(&MBB, DL,
155b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                get(BccOpc)).addReg(Cond[regPos].getReg()).addMBB(TBB);
156b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      }
157b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return 1;
158b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
159b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
160b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(&MBB, DL, get(BccOpc)).addReg(Cond[regPos].getReg()).addMBB(TBB);
161b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(&MBB, DL, get(BOpc)).addMBB(FBB);
162b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
163b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return 2;
164b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
165b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
166b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
167b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,
168b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                     MachineBasicBlock *&TBB,
169b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 MachineBasicBlock *&FBB,
170b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineOperand> &Cond,
171b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 bool AllowModify) const {
17251b49c52926d65e6fe84e32894f1a8dd32223babBenjamin Kramer  TBB = NULL;
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  }
3252b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande  if (Hexagon::DoubleRegsRegClass.contains(DestReg) &&
3262b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande      Hexagon::IntRegsRegClass.contains(SrcReg)) {
327b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // We can have an overlap between single and double reg: r1:0 = r0.
328b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if(SrcReg == RI.getSubReg(DestReg, Hexagon::subreg_loreg)) {
329b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // r1:0 = r0
330b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(MBB, I, DL, get(Hexagon::TFRI), (RI.getSubReg(DestReg,
331b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                Hexagon::subreg_hireg))).addImm(0);
332b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    } else {
333b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        // r1:0 = r1 or no overlap.
334b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(MBB, I, DL, get(Hexagon::TFR), (RI.getSubReg(DestReg,
335b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                Hexagon::subreg_loreg))).addReg(SrcReg);
336b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        BuildMI(MBB, I, DL, get(Hexagon::TFRI), (RI.getSubReg(DestReg,
337b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                Hexagon::subreg_hireg))).addImm(0);
338b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
339b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
340b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
3412b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande  if (Hexagon::CRRegsRegClass.contains(DestReg) &&
3422b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande      Hexagon::IntRegsRegClass.contains(SrcReg)) {
343b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::TFCR), DestReg).addReg(SrcReg);
344b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return;
345ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  }
346ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
347ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  llvm_unreachable("Unimplemented");
348b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
349b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
350b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
351b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::
352b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumstoreRegToStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
353b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned SrcReg, bool isKill, int FI,
354b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const TargetRegisterClass *RC,
355b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const TargetRegisterInfo *TRI) const {
356b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
357b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  DebugLoc DL = MBB.findDebugLoc(I);
358b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFunction &MF = *MBB.getParent();
359b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFrameInfo &MFI = *MF.getFrameInfo();
360b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  unsigned Align = MFI.getObjectAlignment(FI);
361b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
362b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineMemOperand *MMO =
363b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MF.getMachineMemOperand(
364b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachinePointerInfo(PseudoSourceValue::getFixedStack(FI)),
365b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachineMemOperand::MOStore,
366b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MFI.getObjectSize(FI),
367b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      Align);
368b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
369420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  if (Hexagon::IntRegsRegClass.hasSubClassEq(RC)) {
3705262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    BuildMI(MBB, I, DL, get(Hexagon::STriw))
371b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0)
372b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
373420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (Hexagon::DoubleRegsRegClass.hasSubClassEq(RC)) {
374b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::STrid))
375b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0)
376b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
377420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (Hexagon::PredRegsRegClass.hasSubClassEq(RC)) {
378b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::STriw_pred))
379b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0)
380b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO);
381b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  } else {
382bc2198133a1836598b54b943420748e75d5dea94Craig Topper    llvm_unreachable("Unimplemented");
383b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
384b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
385b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
386b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
387b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::storeRegToAddr(
388b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 MachineFunction &MF, unsigned SrcReg,
389b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 bool isKill,
390b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineOperand> &Addr,
391b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 const TargetRegisterClass *RC,
392b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineInstr*> &NewMIs) const
393b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{
394bc2198133a1836598b54b943420748e75d5dea94Craig Topper  llvm_unreachable("Unimplemented");
395b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
396b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
397b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
398b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::
399b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumloadRegFromStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
400b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     unsigned DestReg, int FI,
401b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     const TargetRegisterClass *RC,
402b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     const TargetRegisterInfo *TRI) const {
403b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  DebugLoc DL = MBB.findDebugLoc(I);
404b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFunction &MF = *MBB.getParent();
405b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineFrameInfo &MFI = *MF.getFrameInfo();
406b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  unsigned Align = MFI.getObjectAlignment(FI);
407b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
408b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineMemOperand *MMO =
409b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MF.getMachineMemOperand(
410b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachinePointerInfo(PseudoSourceValue::getFixedStack(FI)),
411b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MachineMemOperand::MOLoad,
412b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      MFI.getObjectSize(FI),
413b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                      Align);
414420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  if (RC == &Hexagon::IntRegsRegClass) {
415b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::LDriw), DestReg)
416b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
417420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (RC == &Hexagon::DoubleRegsRegClass) {
418b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::LDrid), DestReg)
419b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
420420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper  } else if (RC == &Hexagon::PredRegsRegClass) {
421b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    BuildMI(MBB, I, DL, get(Hexagon::LDriw_pred), DestReg)
422b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum          .addFrameIndex(FI).addImm(0).addMemOperand(MMO);
423b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  } else {
424bc2198133a1836598b54b943420748e75d5dea94Craig Topper    llvm_unreachable("Can't store this register to stack slot");
425b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
426b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
427b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
428b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
429b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumvoid HexagonInstrInfo::loadRegFromAddr(MachineFunction &MF, unsigned DestReg,
430b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                        SmallVectorImpl<MachineOperand> &Addr,
431b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                        const TargetRegisterClass *RC,
432b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                 SmallVectorImpl<MachineInstr*> &NewMIs) const {
433bc2198133a1836598b54b943420748e75d5dea94Craig Topper  llvm_unreachable("Unimplemented");
434b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
435b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
436b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
437b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumMachineInstr *HexagonInstrInfo::foldMemoryOperandImpl(MachineFunction &MF,
438b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                                    MachineInstr* MI,
439b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          const SmallVectorImpl<unsigned> &Ops,
440b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                                    int FI) const {
441b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Hexagon_TODO: Implement.
442b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return(0);
443b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
444b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
445b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
446b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumunsigned HexagonInstrInfo::createVR(MachineFunction* MF, MVT VT) const {
447b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
448b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineRegisterInfo &RegInfo = MF->getRegInfo();
449b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const TargetRegisterClass *TRC;
4507517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  if (VT == MVT::i1) {
451420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper    TRC = &Hexagon::PredRegsRegClass;
4527517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  } else if (VT == MVT::i32 || VT == MVT::f32) {
453420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper    TRC = &Hexagon::IntRegsRegClass;
4547517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  } else if (VT == MVT::i64 || VT == MVT::f64) {
455420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper    TRC = &Hexagon::DoubleRegsRegClass;
4567517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  } else {
45727baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer    llvm_unreachable("Cannot handle this register class");
4587517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  }
459b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
460b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  unsigned NewReg = RegInfo.createVirtualRegister(TRC);
461b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return NewReg;
462b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
463b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
46426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isExtendable(const MachineInstr *MI) const {
46526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch(MI->getOpcode()) {
46626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
46726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri
46826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_nv_V4:
46926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_nv_V4:
47026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
47126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
47226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
47326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri - with -1
47426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
47526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
47626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
47726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
47826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
47926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQrr
48026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_nv_V4:
48126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_nv_V4:
48226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
48326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
48426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
48526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri
48626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_nv_V4:
48726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_nv_V4:
48826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
48926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
49026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
49126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri - with -1
49226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
49326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
49426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
49526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
49626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
49726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrr
49826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_nv_V4:
49926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_nv_V4:
50026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
50126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
50226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
50326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrrdn
50426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_nv_V4:
50526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_nv_V4:
50626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
50726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
50826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
50926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUri
51026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_nv_V4:
51126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_nv_V4:
51226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
51326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
51426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
51526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrr
51626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_nv_V4:
51726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_nv_V4:
51826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
51926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
52026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
52126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrrdn
52226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_nv_V4:
52326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_nv_V4:
52426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
52526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
52626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
52726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // TFR_FI
52826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_FI:
52926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
53026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
53126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
53226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
53326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isExtended(const MachineInstr *MI) const {
53426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch(MI->getOpcode()) {
53526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
53626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri
53726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_ie_nv_V4:
53826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_ie_nv_V4:
53926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_ie_nv_V4:
54026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_ie_nv_V4:
54126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
54226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri - with -1
54326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_ie_nv_V4:
54426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_ie_nv_V4:
54526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_ie_nv_V4:
54626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_ie_nv_V4:
54726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
54826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQrr
54926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_ie_nv_V4:
55026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_ie_nv_V4:
55126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_ie_nv_V4:
55226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_ie_nv_V4:
55326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
55426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri
55526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_ie_nv_V4:
55626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_ie_nv_V4:
55726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_ie_nv_V4:
55826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_ie_nv_V4:
55926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
56026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri - with -1
56126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_ie_nv_V4:
56226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_ie_nv_V4:
56326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_ie_nv_V4:
56426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_ie_nv_V4:
56526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
56626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrr
56726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_ie_nv_V4:
56826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_ie_nv_V4:
56926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_ie_nv_V4:
57026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_ie_nv_V4:
57126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
57226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrrdn
57326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_ie_nv_V4:
57426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_ie_nv_V4:
57526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4:
57626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4:
57726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
57826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUri
57926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_ie_nv_V4:
58026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_ie_nv_V4:
58126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_ie_nv_V4:
58226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_ie_nv_V4:
58326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
58426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrr
58526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_ie_nv_V4:
58626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_ie_nv_V4:
58726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_ie_nv_V4:
58826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4:
58926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
59026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrrdn
59126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_ie_nv_V4:
59226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4:
59326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4:
59426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4:
59526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
59626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 absolute set addressing.
59726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrid_abs_setimm_V4:
59826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriw_abs_setimm_V4:
59926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrih_abs_setimm_V4:
60026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrib_abs_setimm_V4:
60126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriuh_abs_setimm_V4:
60226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriub_abs_setimm_V4:
60326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
60426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_abs_setimm_V4:
60526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_setimm_V4:
60626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_setimm_V4:
60726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_setimm_V4:
60826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
60926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 global address load.
61026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrid_GP_cPt_V4 :
61126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrid_GP_cNotPt_V4 :
61226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrid_GP_cdnPt_V4 :
61326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrid_GP_cdnNotPt_V4 :
61426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrib_GP_cPt_V4 :
61526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrib_GP_cNotPt_V4 :
61626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrib_GP_cdnPt_V4 :
61726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrib_GP_cdnNotPt_V4 :
61826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriub_GP_cPt_V4 :
61926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriub_GP_cNotPt_V4 :
62026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriub_GP_cdnPt_V4 :
62126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriub_GP_cdnNotPt_V4 :
62226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrih_GP_cPt_V4 :
62326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrih_GP_cNotPt_V4 :
62426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrih_GP_cdnPt_V4 :
62526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDrih_GP_cdnNotPt_V4 :
62626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriuh_GP_cPt_V4 :
62726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriuh_GP_cNotPt_V4 :
62826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriuh_GP_cdnPt_V4 :
62926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriuh_GP_cdnNotPt_V4 :
63026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriw_GP_cPt_V4 :
63126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriw_GP_cNotPt_V4 :
63226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriw_GP_cdnPt_V4 :
63326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDriw_GP_cdnNotPt_V4 :
63426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDd_GP_cPt_V4 :
63526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDd_GP_cNotPt_V4 :
63626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDd_GP_cdnPt_V4 :
63726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDd_GP_cdnNotPt_V4 :
63826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDb_GP_cPt_V4 :
63926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDb_GP_cNotPt_V4 :
64026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDb_GP_cdnPt_V4 :
64126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDb_GP_cdnNotPt_V4 :
64226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDub_GP_cPt_V4 :
64326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDub_GP_cNotPt_V4 :
64426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDub_GP_cdnPt_V4 :
64526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDub_GP_cdnNotPt_V4 :
64626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDh_GP_cPt_V4 :
64726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDh_GP_cNotPt_V4 :
64826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDh_GP_cdnPt_V4 :
64926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDh_GP_cdnNotPt_V4 :
65026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDuh_GP_cPt_V4 :
65126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDuh_GP_cNotPt_V4 :
65226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDuh_GP_cdnPt_V4 :
65326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDuh_GP_cdnNotPt_V4 :
65426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDw_GP_cPt_V4 :
65526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDw_GP_cNotPt_V4 :
65626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDw_GP_cdnPt_V4 :
65726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::LDw_GP_cdnNotPt_V4 :
65826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
65926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 global address store.
66026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cPt_V4 :
66126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cNotPt_V4 :
66226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cdnPt_V4 :
66326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cdnNotPt_V4 :
66426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cPt_V4 :
66526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cNotPt_V4 :
66626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnPt_V4 :
66726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnNotPt_V4 :
66826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cPt_V4 :
66926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cNotPt_V4 :
67026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnPt_V4 :
67126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnNotPt_V4 :
67226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cPt_V4 :
67326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cNotPt_V4 :
67426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnPt_V4 :
67526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnNotPt_V4 :
67626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cPt_V4 :
67726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cNotPt_V4 :
67826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cdnPt_V4 :
67926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cdnNotPt_V4 :
68026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cPt_V4 :
68126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cNotPt_V4 :
68226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnPt_V4 :
68326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnNotPt_V4 :
68426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cPt_V4 :
68526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cNotPt_V4 :
68626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnPt_V4 :
68726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnNotPt_V4 :
68826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cPt_V4 :
68926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cNotPt_V4 :
69026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnPt_V4 :
69126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnNotPt_V4 :
69226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
69326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 predicated global address new value store.
69426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cPt_nv_V4 :
69526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cNotPt_nv_V4 :
69626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnPt_nv_V4 :
69726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnNotPt_nv_V4 :
69826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cPt_nv_V4 :
69926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cNotPt_nv_V4 :
70026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnPt_nv_V4 :
70126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnNotPt_nv_V4 :
70226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cPt_nv_V4 :
70326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cNotPt_nv_V4 :
70426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnPt_nv_V4 :
70526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnNotPt_nv_V4 :
70626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cPt_nv_V4 :
70726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cNotPt_nv_V4 :
70826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnPt_nv_V4 :
70926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnNotPt_nv_V4 :
71026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cPt_nv_V4 :
71126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cNotPt_nv_V4 :
71226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnPt_nv_V4 :
71326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnNotPt_nv_V4 :
71426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cPt_nv_V4 :
71526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cNotPt_nv_V4 :
71626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnPt_nv_V4 :
71726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnNotPt_nv_V4 :
71826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
71926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // TFR_FI
72026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_FI_immext_V4:
72126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
7227517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    // TFRI_F
7237517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    case Hexagon::TFRI_f:
7247517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    case Hexagon::TFRI_cPt_f:
7257517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    case Hexagon::TFRI_cNotPt_f:
7267517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    case Hexagon::CONST64_Float_Real:
7277517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande      return true;
72826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
72926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
73026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
73126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isNewValueJump(const MachineInstr *MI) const {
73226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode()) {
73326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
73426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri
73526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_nv_V4:
73626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_nv_V4:
73726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
73826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
73926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_ie_nv_V4:
74026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_ie_nv_V4:
74126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_ie_nv_V4:
74226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_ie_nv_V4:
74326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
74426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri - with -1
74526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
74626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
74726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
74826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
74926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_ie_nv_V4:
75026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_ie_nv_V4:
75126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_ie_nv_V4:
75226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_ie_nv_V4:
75326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
75426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQrr
75526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_nv_V4:
75626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_nv_V4:
75726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
75826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
75926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_ie_nv_V4:
76026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_ie_nv_V4:
76126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_ie_nv_V4:
76226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_ie_nv_V4:
76326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
76426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri
76526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_nv_V4:
76626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_nv_V4:
76726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
76826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
76926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_ie_nv_V4:
77026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_ie_nv_V4:
77126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_ie_nv_V4:
77226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_ie_nv_V4:
77326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
77426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri - with -1
77526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
77626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
77726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
77826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
77926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_ie_nv_V4:
78026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_ie_nv_V4:
78126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_ie_nv_V4:
78226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_ie_nv_V4:
78326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
78426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrr
78526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_nv_V4:
78626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_nv_V4:
78726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
78826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
78926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_ie_nv_V4:
79026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_ie_nv_V4:
79126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_ie_nv_V4:
79226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_ie_nv_V4:
79326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
79426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrrdn
79526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_nv_V4:
79626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_nv_V4:
79726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
79826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
79926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_ie_nv_V4:
80026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_ie_nv_V4:
80126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4:
80226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4:
80326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
80426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUri
80526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_nv_V4:
80626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_nv_V4:
80726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
80826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
80926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_ie_nv_V4:
81026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_ie_nv_V4:
81126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_ie_nv_V4:
81226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_ie_nv_V4:
81326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
81426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrr
81526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_nv_V4:
81626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_nv_V4:
81726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
81826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
81926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_ie_nv_V4:
82026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_ie_nv_V4:
82126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_ie_nv_V4:
82226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4:
82326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
82426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrrdn
82526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_nv_V4:
82626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_nv_V4:
82726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
82826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
82926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_ie_nv_V4:
83026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4:
83126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4:
83226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4:
83326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
83426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
83526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
83626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
83726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeunsigned HexagonInstrInfo::getImmExtForm(const MachineInstr* MI) const {
83826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch(MI->getOpcode()) {
83926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: llvm_unreachable("Unknown type of instruction.");
84026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri
84126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_nv_V4:
84226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPt_ie_nv_V4;
84326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
84426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPt_ie_nv_V4;
84526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_nv_V4:
84626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPnt_ie_nv_V4;
84726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
84826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPnt_ie_nv_V4;
84926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
85026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri -- with -1
85126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
85226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPtneg_ie_nv_V4;
85326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
85426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPtneg_ie_nv_V4;
85526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
85626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPntneg_ie_nv_V4;
85726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
85826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPntneg_ie_nv_V4;
85926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
86026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQrr
86126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_nv_V4:
86226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrPt_ie_nv_V4;
86326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
86426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrNotPt_ie_nv_V4;
86526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_nv_V4:
86626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrPnt_ie_nv_V4;
86726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
86826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrNotPnt_ie_nv_V4;
86926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
87026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri
87126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_nv_V4:
87226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPt_ie_nv_V4;
87326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
87426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPt_ie_nv_V4;
87526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_nv_V4:
87626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPnt_ie_nv_V4;
87726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
87826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPnt_ie_nv_V4;
87926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
88026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri -- with -1
88126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
88226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPtneg_ie_nv_V4;
88326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
88426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPtneg_ie_nv_V4;
88526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
88626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPntneg_ie_nv_V4;
88726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
88826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPntneg_ie_nv_V4;
8890dac3919e52e28308deba555bbcb6286674d5495Sirish Pande
89026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrr
89126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_nv_V4:
89226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrPt_ie_nv_V4;
89326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
89426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrNotPt_ie_nv_V4;
89526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_nv_V4:
89626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrPnt_ie_nv_V4;
89726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
89826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrNotPnt_ie_nv_V4;
89926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
90026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrrdn
90126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_nv_V4:
90226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnPt_ie_nv_V4;
90326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
90426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnNotPt_ie_nv_V4;
90526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_nv_V4:
90626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnPnt_ie_nv_V4;
90726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
90826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4;
90926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
91026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUri
91126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_nv_V4:
91226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriPt_ie_nv_V4;
91326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
91426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriNotPt_ie_nv_V4;
91526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_nv_V4:
91626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriPnt_ie_nv_V4;
91726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
91826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriNotPnt_ie_nv_V4;
91926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
92026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrr
92126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_nv_V4:
92226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrPt_ie_nv_V4;
92326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
92426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrNotPt_ie_nv_V4;
92526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_nv_V4:
92626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrPnt_ie_nv_V4;
92726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
92826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrNotPnt_ie_nv_V4;
92926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
93026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrrdn
93126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_nv_V4:
93226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnPt_ie_nv_V4;
93326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
93426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4;
93526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_nv_V4:
93626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnPnt_ie_nv_V4;
93726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
93826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4;
93926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
94026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_FI:
94126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande        return Hexagon::TFR_FI_immext_V4;
94226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
94326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 :
94426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDi_indexed_MEM_V4 :
94526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_SUBi_indexed_MEM_V4 :
94626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDr_indexed_MEM_V4 :
94726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_SUBr_indexed_MEM_V4 :
94826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ANDr_indexed_MEM_V4 :
94926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ORr_indexed_MEM_V4 :
95026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDSUBi_MEM_V4 :
95126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDi_MEM_V4 :
95226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_SUBi_MEM_V4 :
95326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ADDr_MEM_V4 :
95426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_SUBr_MEM_V4 :
95526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ANDr_MEM_V4 :
95626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMw_ORr_MEM_V4 :
95726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 :
95826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDi_indexed_MEM_V4 :
95926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_SUBi_indexed_MEM_V4 :
96026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDr_indexed_MEM_V4 :
96126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_SUBr_indexed_MEM_V4 :
96226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ANDr_indexed_MEM_V4 :
96326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ORr_indexed_MEM_V4 :
96426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDSUBi_MEM_V4 :
96526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDi_MEM_V4 :
96626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_SUBi_MEM_V4 :
96726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ADDr_MEM_V4 :
96826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_SUBr_MEM_V4 :
96926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ANDr_MEM_V4 :
97026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMh_ORr_MEM_V4 :
97126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 :
97226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDi_indexed_MEM_V4 :
97326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_SUBi_indexed_MEM_V4 :
97426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDr_indexed_MEM_V4 :
97526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_SUBr_indexed_MEM_V4 :
97626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ANDr_indexed_MEM_V4 :
97726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ORr_indexed_MEM_V4 :
97826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDSUBi_MEM_V4 :
97926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDi_MEM_V4 :
98026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_SUBi_MEM_V4 :
98126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ADDr_MEM_V4 :
98226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_SUBr_MEM_V4 :
98326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ANDr_MEM_V4 :
98426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::MEMb_ORr_MEM_V4 :
98526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      llvm_unreachable("Needs implementing.");
98626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
98726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
98826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
98926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeunsigned HexagonInstrInfo::getNormalBranchForm(const MachineInstr* MI) const {
99026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch(MI->getOpcode()) {
99126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: llvm_unreachable("Unknown type of jump instruction.");
99226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri
99326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPt_ie_nv_V4:
99426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPt_nv_V4;
99526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPt_ie_nv_V4:
99626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPt_nv_V4;
99726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPnt_ie_nv_V4:
99826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPnt_nv_V4;
99926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPnt_ie_nv_V4:
100026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPnt_nv_V4;
100126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
100226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQri -- with -1
100326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPtneg_ie_nv_V4:
100426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPtneg_nv_V4;
100526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPtneg_ie_nv_V4:
100626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPtneg_nv_V4;
100726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriPntneg_ie_nv_V4:
100826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriPntneg_nv_V4;
100926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQriNotPntneg_ie_nv_V4:
101026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQriNotPntneg_nv_V4;
101126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
101226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_EQrr
101326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPt_ie_nv_V4:
101426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrPt_nv_V4;
101526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPt_ie_nv_V4:
101626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrNotPt_nv_V4;
101726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrPnt_ie_nv_V4:
101826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrPnt_nv_V4;
101926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_EQrrNotPnt_ie_nv_V4:
102026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_EQrrNotPnt_nv_V4;
102126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
102226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri
102326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPt_ie_nv_V4:
102426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPt_nv_V4;
102526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPt_ie_nv_V4:
102626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPt_nv_V4;
102726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPnt_ie_nv_V4:
102826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPnt_nv_V4;
102926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPnt_ie_nv_V4:
103026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPnt_nv_V4;
103126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
103226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTri -- with -1
103326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPtneg_ie_nv_V4:
103426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPtneg_nv_V4;
103526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPtneg_ie_nv_V4:
103626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPtneg_nv_V4;
103726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriPntneg_ie_nv_V4:
103826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriPntneg_nv_V4;
103926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTriNotPntneg_ie_nv_V4:
104026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTriNotPntneg_nv_V4;
104126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
104226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrr
104326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPt_ie_nv_V4:
104426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrPt_nv_V4;
104526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPt_ie_nv_V4:
104626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrNotPt_nv_V4;
104726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrPnt_ie_nv_V4:
104826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrPnt_nv_V4;
104926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrNotPnt_ie_nv_V4:
105026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrNotPnt_nv_V4;
105126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
105226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTrrdn
105326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPt_ie_nv_V4:
105426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnPt_nv_V4;
105526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPt_ie_nv_V4:
105626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnNotPt_nv_V4;
105726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnPnt_ie_nv_V4:
105826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnPnt_nv_V4;
105926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTrrdnNotPnt_ie_nv_V4:
106026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTrrdnNotPnt_nv_V4;
106126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
106226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUri
106326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPt_ie_nv_V4:
106426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriPt_nv_V4;
106526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPt_ie_nv_V4:
106626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriNotPt_nv_V4;
106726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriPnt_ie_nv_V4:
106826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriPnt_nv_V4;
106926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUriNotPnt_ie_nv_V4:
107026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUriNotPnt_nv_V4;
107126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
107226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrr
107326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPt_ie_nv_V4:
107426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrPt_nv_V4;
107526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPt_ie_nv_V4:
107626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrNotPt_nv_V4;
107726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrPnt_ie_nv_V4:
107826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrPnt_nv_V4;
107926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrNotPnt_ie_nv_V4:
108026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrNotPnt_nv_V4;
108126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
108226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // JMP_GTUrrdn
108326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPt_ie_nv_V4:
108426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnPt_nv_V4;
108526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPt_ie_nv_V4:
108626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnNotPt_nv_V4;
108726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnPnt_ie_nv_V4:
108826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnPnt_nv_V4;
108926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_ie_nv_V4:
109026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::JMP_GTUrrdnNotPnt_nv_V4;
109126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
109226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
109326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
109426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
109526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isNewValueStore(const MachineInstr *MI) const {
109626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode()) {
109726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
109826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store Byte
109926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_nv_V4:
110026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_nv_V4:
110126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_nv_V4:
110226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_shl_nv_V4:
110326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_nv_V4:
110426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_nv_V4:
110526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_nv_V4:
110626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cPt_nv_V4:
110726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cdnPt_nv_V4:
110826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cNotPt_nv_V4:
110926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cdnNotPt_nv_V4:
111026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_cPt_nv_V4:
111126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_cdnPt_nv_V4:
111226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_cNotPt_nv_V4:
111326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_cdnNotPt_nv_V4:
111426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cPt_nv_V4:
111526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cdnPt_nv_V4:
111626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cNotPt_nv_V4:
111726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cdnNotPt_nv_V4:
111826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cPt_nv_V4:
111926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cdnPt_nv_V4:
112026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cNotPt_nv_V4:
112126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cdnNotPt_nv_V4:
112226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cPt_nv_V4:
112326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cNotPt_nv_V4:
112426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnPt_nv_V4:
112526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cdnNotPt_nv_V4:
112626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cPt_nv_V4:
112726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cNotPt_nv_V4:
112826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnPt_nv_V4:
112926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cdnNotPt_nv_V4:
113026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_nv_V4:
113126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_cPt_nv_V4:
113226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_cdnPt_nv_V4:
113326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_cNotPt_nv_V4:
113426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_abs_cdnNotPt_nv_V4:
113526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_abs_nv_V4:
113626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_abs_cPt_nv_V4:
113726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_abs_cdnPt_nv_V4:
113826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_abs_cNotPt_nv_V4:
113926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_abs_cdnNotPt_nv_V4:
114026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
114126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store Halfword
114226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_nv_V4:
114326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_nv_V4:
114426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_nv_V4:
114526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_shl_nv_V4:
114626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_nv_V4:
114726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_nv_V4:
114826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_nv_V4:
114926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cPt_nv_V4:
115026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cdnPt_nv_V4:
115126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cNotPt_nv_V4:
115226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cdnNotPt_nv_V4:
115326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cPt_nv_V4:
115426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cdnPt_nv_V4:
115526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cNotPt_nv_V4:
115626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cdnNotPt_nv_V4:
115726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cPt_nv_V4:
115826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cdnPt_nv_V4:
115926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cNotPt_nv_V4:
116026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cdnNotPt_nv_V4:
116126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cPt_nv_V4:
116226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cdnPt_nv_V4:
116326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cNotPt_nv_V4:
116426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cdnNotPt_nv_V4:
116526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cPt_nv_V4:
116626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cNotPt_nv_V4:
116726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnPt_nv_V4:
116826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cdnNotPt_nv_V4:
116926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cPt_nv_V4:
117026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cNotPt_nv_V4:
117126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnPt_nv_V4:
117226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cdnNotPt_nv_V4:
117326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_nv_V4:
117426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_cPt_nv_V4:
117526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_cdnPt_nv_V4:
117626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_cNotPt_nv_V4:
117726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_abs_cdnNotPt_nv_V4:
117826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_abs_nv_V4:
117926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_abs_cPt_nv_V4:
118026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_abs_cdnPt_nv_V4:
118126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_abs_cNotPt_nv_V4:
118226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_abs_cdnNotPt_nv_V4:
118326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
118426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store Word
118526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_nv_V4:
118626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_nv_V4:
118726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_nv_V4:
118826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_shl_nv_V4:
118926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_nv_V4:
119026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_nv_V4:
119126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_nv_V4:
119226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cPt_nv_V4:
119326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cdnPt_nv_V4:
119426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cNotPt_nv_V4:
119526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cdnNotPt_nv_V4:
119626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cPt_nv_V4:
119726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cdnPt_nv_V4:
119826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cNotPt_nv_V4:
119926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cdnNotPt_nv_V4:
120026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cPt_nv_V4:
120126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cdnPt_nv_V4:
120226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cNotPt_nv_V4:
120326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cdnNotPt_nv_V4:
120426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cPt_nv_V4:
120526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cdnPt_nv_V4:
120626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cNotPt_nv_V4:
120726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cdnNotPt_nv_V4:
120826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cPt_nv_V4:
120926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cNotPt_nv_V4:
121026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnPt_nv_V4:
121126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cdnNotPt_nv_V4:
121226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cPt_nv_V4:
121326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cNotPt_nv_V4:
121426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnPt_nv_V4:
121526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cdnNotPt_nv_V4:
121626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_nv_V4:
121726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_cPt_nv_V4:
121826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_cdnPt_nv_V4:
121926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_cNotPt_nv_V4:
122026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_abs_cdnNotPt_nv_V4:
122126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_abs_nv_V4:
122226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_abs_cPt_nv_V4:
122326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_abs_cdnPt_nv_V4:
122426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_abs_cNotPt_nv_V4:
122526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_abs_cdnNotPt_nv_V4:
122626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
122726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
122826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
122926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
123026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isPostIncrement (const MachineInstr* MI) const {
123126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode())
123226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  {
123326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
123426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load Byte
123526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrib:
123626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrib_cPt:
123726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrib_cNotPt:
123826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrib_cdnPt_V4:
123926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrib_cdnNotPt_V4:
124026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
124126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load unsigned byte
124226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriub:
124326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriub_cPt:
124426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriub_cNotPt:
124526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriub_cdnPt_V4:
124626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriub_cdnNotPt_V4:
124726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
124826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load halfword
124926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrih:
125026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrih_cPt:
125126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrih_cNotPt:
125226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrih_cdnPt_V4:
125326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrih_cdnNotPt_V4:
125426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
125526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load unsigned halfword
125626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriuh:
125726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriuh_cPt:
125826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriuh_cNotPt:
125926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriuh_cdnPt_V4:
126026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriuh_cdnNotPt_V4:
126126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
126226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load word
126326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriw:
126426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriw_cPt:
126526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriw_cNotPt:
126626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriw_cdnPt_V4:
126726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDriw_cdnNotPt_V4:
126826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
126926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Load double word
127026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrid:
127126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrid_cPt:
127226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrid_cNotPt:
127326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrid_cdnPt_V4:
127426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_LDrid_cdnNotPt_V4:
127526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
127626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store byte
127726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri:
127826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cPt:
127926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cNotPt:
128026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cdnPt_V4:
128126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cdnNotPt_V4:
128226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
128326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store halfword
128426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri:
128526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cPt:
128626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cNotPt:
128726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cdnPt_V4:
128826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cdnNotPt_V4:
128926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
129026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store word
129126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri:
129226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cPt:
129326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cNotPt:
129426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cdnPt_V4:
129526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cdnNotPt_V4:
129626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
129726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Store double word
129826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri:
129926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cPt:
130026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cNotPt:
130126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cdnPt_V4:
130226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cdnNotPt_V4:
130326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
130426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
130526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
130626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
130726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::isSaveCalleeSavedRegsCall(const MachineInstr *MI) const {
130826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  return MI->getOpcode() == Hexagon::SAVE_REGISTERS_CALL_V4;
130926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
1310ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
1311b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isPredicable(MachineInstr *MI) const {
1312b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  bool isPred = MI->getDesc().isPredicable();
1313b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1314b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (!isPred)
1315b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
1316b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1317b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const int Opc = MI->getOpcode();
1318b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1319b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch(Opc) {
1320b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFRI:
13215262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isInt<12>(MI->getOperand(1).getImm());
1322b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1323b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
1324b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid_indexed:
13255262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isShiftedUInt<6,3>(MI->getOperand(1).getImm());
1326b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1327b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
1328b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_indexed:
1329b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_nv_V4:
13305262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isShiftedUInt<6,2>(MI->getOperand(1).getImm());
1331b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1332b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
1333b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_indexed:
1334b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_nv_V4:
13355262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isShiftedUInt<6,1>(MI->getOperand(1).getImm());
1336b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1337b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
1338b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_indexed:
1339b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_nv_V4:
13405262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isUInt<6>(MI->getOperand(1).getImm());
1341b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1342b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
1343b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed:
13445262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isShiftedUInt<6,3>(MI->getOperand(2).getImm());
1345b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1346b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
1347b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed:
13485262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isShiftedUInt<6,2>(MI->getOperand(2).getImm());
1349b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1350b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
1351b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh:
1352b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed:
1353b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed:
13545262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isShiftedUInt<6,1>(MI->getOperand(2).getImm());
1355b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1356b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
1357b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
1358b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed:
1359b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed:
13605262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isUInt<6>(MI->getOperand(2).getImm());
1361b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1362b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrid:
13635262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isShiftedInt<4,3>(MI->getOperand(3).getImm());
1364b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1365b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriw:
13665262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isShiftedInt<4,2>(MI->getOperand(3).getImm());
1367b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1368b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrih:
1369b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriuh:
13705262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isShiftedInt<4,1>(MI->getOperand(3).getImm());
1371b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1372b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrib:
1373b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriub:
13745262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isInt<4>(MI->getOperand(3).getImm());
1375b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1376b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_imm_V4:
1377b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_imm_V4:
1378b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_imm_V4:
13795262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return (isUInt<6>(MI->getOperand(1).getImm()) &&
13805262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon            isInt<6>(MI->getOperand(2).getImm()));
1381b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1382b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_ri:
13835262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon    return isInt<8>(MI->getOperand(2).getImm());
1384b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1385b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASLH:
1386b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASRH:
1387b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTB:
1388b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTH:
1389b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTB:
1390b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTH:
13912b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande    return Subtarget.hasV4TOps();
1392b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1393b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::JMPR:
1394b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return false;
1395b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
1396b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1397b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
1398b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
1399b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
14002b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande// This function performs the following inversiones:
14012b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//
14022b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//  cPt    ---> cNotPt
14032b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//  cNotPt ---> cPt
14042b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//
14052b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande// however, these inversiones are NOT included:
14062b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//
14072b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//  cdnPt      -X-> cdnNotPt
14082b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//  cdnNotPt   -X-> cdnPt
14092b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//  cPt_nv     -X-> cNotPt_nv (new value stores)
14102b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//  cNotPt_nv  -X-> cPt_nv    (new value stores)
14112b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//
14122b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande// because only the following transformations are allowed:
14132b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//
14142b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//  cNotPt  ---> cdnNotPt
14152b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//  cPt     ---> cdnPt
14162b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//  cNotPt  ---> cNotPt_nv
14172b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande//  cPt     ---> cPt_nv
1418ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pandeunsigned HexagonInstrInfo::getInvertedPredicatedOpcode(const int Opc) const {
1419ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  switch(Opc) {
142026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: llvm_unreachable("Unexpected predicated instruction");
1421ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFR_cPt:
1422ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFR_cNotPt;
1423ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFR_cNotPt:
1424ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFR_cPt;
1425ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1426ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFRI_cPt:
1427ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFRI_cNotPt;
1428ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::TFRI_cNotPt:
1429ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::TFRI_cPt;
1430ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1431ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_c:
1432ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_cNot;
1433ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_cNot:
1434ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_c;
1435ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1436ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_ri_cPt:
1437ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_ri_cNotPt;
1438ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_ri_cNotPt:
1439ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_ri_cPt;
1440ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1441ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_rr_cPt:
1442ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_rr_cNotPt;
1443ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ADD_rr_cNotPt:
1444ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ADD_rr_cPt;
1445ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1446ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::XOR_rr_cPt:
1447ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::XOR_rr_cNotPt;
1448ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::XOR_rr_cNotPt:
1449ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::XOR_rr_cPt;
1450ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1451ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::AND_rr_cPt:
1452ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::AND_rr_cNotPt;
1453ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::AND_rr_cNotPt:
1454ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::AND_rr_cPt;
1455ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1456ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::OR_rr_cPt:
1457ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::OR_rr_cNotPt;
1458ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::OR_rr_cNotPt:
1459ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::OR_rr_cPt;
1460ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1461ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SUB_rr_cPt:
1462ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SUB_rr_cNotPt;
1463ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SUB_rr_cNotPt:
1464ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SUB_rr_cPt;
1465ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1466ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::COMBINE_rr_cPt:
1467ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::COMBINE_rr_cNotPt;
1468ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::COMBINE_rr_cNotPt:
1469ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::COMBINE_rr_cPt;
1470ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1471ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASLH_cPt_V4:
1472ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASLH_cNotPt_V4;
1473ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASLH_cNotPt_V4:
1474ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASLH_cPt_V4;
1475ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1476ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASRH_cPt_V4:
1477ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASRH_cNotPt_V4;
1478ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ASRH_cNotPt_V4:
1479ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ASRH_cPt_V4;
1480ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1481ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTB_cPt_V4:
1482ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTB_cNotPt_V4;
1483ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTB_cNotPt_V4:
1484ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTB_cPt_V4;
1485ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1486ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTH_cPt_V4:
1487ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTH_cNotPt_V4;
1488ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::SXTH_cNotPt_V4:
1489ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::SXTH_cPt_V4;
1490ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1491ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTB_cPt_V4:
1492ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTB_cNotPt_V4;
1493ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTB_cNotPt_V4:
1494ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTB_cPt_V4;
1495ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1496ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTH_cPt_V4:
1497ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTH_cNotPt_V4;
1498ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::ZXTH_cNotPt_V4:
1499ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::ZXTH_cPt_V4;
1500ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1501ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1502ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMPR_cPt:
1503ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMPR_cNotPt;
1504ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMPR_cNotPt:
1505ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMPR_cPt;
1506ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1507ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // V4 indexed+scaled load.
1508ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cPt_V4:
1509ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cNotPt_V4;
1510ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cNotPt_V4:
1511ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cPt_V4;
1512ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1513ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_shl_cPt_V4:
1514ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_shl_cNotPt_V4;
1515ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_shl_cNotPt_V4:
1516ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_shl_cPt_V4;
1517ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1518ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cPt_V4:
1519ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cNotPt_V4;
1520ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cNotPt_V4:
1521ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cPt_V4;
1522ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1523ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cPt_V4:
1524ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cNotPt_V4;
1525ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cNotPt_V4:
1526ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cPt_V4;
1527ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1528ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_shl_cPt_V4:
1529ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_shl_cNotPt_V4;
1530ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_shl_cNotPt_V4:
1531ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_shl_cPt_V4;
1532ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1533ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_shl_cPt_V4:
1534ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_shl_cNotPt_V4;
1535ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_shl_cNotPt_V4:
1536ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_shl_cPt_V4;
1537ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1538ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cPt_V4:
1539ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cNotPt_V4;
1540ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cNotPt_V4:
1541ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cPt_V4;
1542ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1543ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cPt_V4:
1544ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cNotPt_V4;
1545ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cNotPt_V4:
1546ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cPt_V4;
1547ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1548ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_shl_cPt_V4:
1549ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_shl_cNotPt_V4;
1550ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_shl_cNotPt_V4:
1551ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_shl_cPt_V4;
1552ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1553ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_shl_cPt_V4:
1554ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_shl_cNotPt_V4;
1555ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_shl_cNotPt_V4:
1556ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_shl_cPt_V4;
1557ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1558ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cPt_V4:
1559ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cNotPt_V4;
1560ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cNotPt_V4:
1561ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cPt_V4;
1562ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1563ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_shl_cPt_V4:
1564ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_shl_cNotPt_V4;
1565ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_shl_cNotPt_V4:
1566ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_shl_cPt_V4;
1567ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1568ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    // Byte.
1569ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STbri_cPt:
1570ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STbri_cNotPt;
1571ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STbri_cNotPt:
1572ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STbri_cPt;
1573ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1574ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_cPt:
1575ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_cNotPt;
1576ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_cNotPt:
1577ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_cPt;
1578ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1579ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_cPt:
1580ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_cNotPt;
1581ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_cNotPt:
1582ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_cPt;
1583ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1584ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_imm_cPt_V4:
1585ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_imm_cNotPt_V4;
1586ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_imm_cNotPt_V4:
1587ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_imm_cPt_V4;
1588ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1589ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_shl_cPt_V4:
1590ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_shl_cNotPt_V4;
1591ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrib_indexed_shl_cNotPt_V4:
1592ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrib_indexed_shl_cPt_V4;
1593ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1594ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Halfword.
1595ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_SThri_cPt:
1596ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_SThri_cNotPt;
1597ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_SThri_cNotPt:
1598ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_SThri_cPt;
1599ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1600ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_cPt:
1601ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_cNotPt;
1602ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_cNotPt:
1603ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_cPt;
1604ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1605ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_cPt:
1606ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_cNotPt;
1607ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_cNotPt:
1608ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_cPt;
1609ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1610ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_imm_cPt_V4:
1611ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_imm_cNotPt_V4;
1612ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_imm_cNotPt_V4:
1613ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_imm_cPt_V4;
1614ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1615ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_shl_cPt_V4:
1616ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_shl_cNotPt_V4;
1617ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrih_indexed_shl_cNotPt_V4:
1618ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrih_indexed_shl_cPt_V4;
1619ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1620ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Word.
1621ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STwri_cPt:
1622ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STwri_cNotPt;
1623ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STwri_cNotPt:
1624ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STwri_cPt;
1625ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1626ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_cPt:
1627ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_cNotPt;
1628ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_cNotPt:
1629ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_cPt;
1630ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1631ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_cPt:
1632ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_cNotPt;
1633ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_cNotPt:
1634ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_cPt;
1635ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1636ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_shl_cPt_V4:
1637ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_shl_cNotPt_V4;
1638ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_indexed_shl_cNotPt_V4:
1639ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_indexed_shl_cPt_V4;
1640ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1641ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_imm_cPt_V4:
1642ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_imm_cNotPt_V4;
1643ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STriw_imm_cNotPt_V4:
1644ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STriw_imm_cPt_V4;
1645ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1646ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Double word.
1647ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STdri_cPt:
1648ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STdri_cNotPt;
1649ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_STdri_cNotPt:
1650ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_STdri_cPt;
1651ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1652ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_cPt:
1653ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_cNotPt;
1654ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_cNotPt:
1655ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_cPt;
1656ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1657ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_cPt:
1658ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_cNotPt;
1659ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_cNotPt:
1660ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_cPt;
1661ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1662ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_shl_cPt_V4:
1663ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_shl_cNotPt_V4;
1664ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::STrid_indexed_shl_cNotPt_V4:
1665ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::STrid_indexed_shl_cPt_V4;
1666ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
166726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 Store to global address.
166826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cPt_V4:
166926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STd_GP_cNotPt_V4;
167026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cNotPt_V4:
167126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STd_GP_cPt_V4;
167226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
167326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cPt_V4:
167426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STb_GP_cNotPt_V4;
167526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cNotPt_V4:
167626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STb_GP_cPt_V4;
167726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
167826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cPt_V4:
167926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STh_GP_cNotPt_V4;
168026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cNotPt_V4:
168126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STh_GP_cPt_V4;
168226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
168326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cPt_V4:
168426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STw_GP_cNotPt_V4;
168526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cNotPt_V4:
168626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STw_GP_cPt_V4;
168726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
168826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cPt_V4:
168926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrid_GP_cNotPt_V4;
169026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cNotPt_V4:
169126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrid_GP_cPt_V4;
169226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
169326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cPt_V4:
169426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrib_GP_cNotPt_V4;
169526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cNotPt_V4:
169626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrib_GP_cPt_V4;
169726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
169826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cPt_V4:
169926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrih_GP_cNotPt_V4;
170026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cNotPt_V4:
170126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STrih_GP_cPt_V4;
170226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
170326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cPt_V4:
170426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STriw_GP_cNotPt_V4;
170526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cNotPt_V4:
170626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return Hexagon::STriw_GP_cPt_V4;
170726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
1708ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Load.
1709ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_cPt:
1710ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_cNotPt;
1711ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_cNotPt:
1712ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_cPt;
1713ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1714ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_cPt:
1715ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_cNotPt;
1716ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_cNotPt:
1717ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_cPt;
1718ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1719ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_cPt:
1720ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_cNotPt;
1721ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_cNotPt:
1722ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_cPt;
1723ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1724ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_cPt:
1725ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_cNotPt;
1726ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_cNotPt:
1727ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_cPt;
1728ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1729ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_cPt:
1730ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_cNotPt;
1731ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_cNotPt:
1732ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_cPt;
1733ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1734ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_cPt:
1735ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_cNotPt;
1736ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_cNotPt:
1737ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_cPt;
1738ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1739ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande // Load Indexed.
1740ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cPt:
1741ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cNotPt;
1742ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrid_indexed_cNotPt:
1743ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrid_indexed_cPt;
1744ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1745ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cPt:
1746ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cNotPt;
1747ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriw_indexed_cNotPt:
1748ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriw_indexed_cPt;
1749ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1750ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cPt:
1751ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cNotPt;
1752ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrih_indexed_cNotPt:
1753ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrih_indexed_cPt;
1754ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1755ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cPt:
1756ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cNotPt;
1757ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriuh_indexed_cNotPt:
1758ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriuh_indexed_cPt;
1759ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1760ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cPt:
1761ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cNotPt;
1762ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDrib_indexed_cNotPt:
1763ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDrib_indexed_cPt;
1764ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1765ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cPt:
1766ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cNotPt;
1767ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::LDriub_indexed_cNotPt:
1768ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::LDriub_indexed_cPt;
1769ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1770ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Post Inc Load.
1771ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrid_cPt:
1772ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrid_cNotPt;
1773ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriw_cNotPt:
1774ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriw_cPt;
1775ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1776ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrih_cPt:
1777ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrih_cNotPt;
1778ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrih_cNotPt:
1779ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrih_cPt;
1780ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1781ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriuh_cPt:
1782ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriuh_cNotPt;
1783ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriuh_cNotPt:
1784ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriuh_cPt;
1785ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1786ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrib_cPt:
1787ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrib_cNotPt;
1788ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDrib_cNotPt:
1789ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDrib_cPt;
1790ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1791ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriub_cPt:
1792ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriub_cNotPt;
1793ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::POST_LDriub_cNotPt:
1794ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::POST_LDriub_cPt;
1795ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1796ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  // Dealloc_return.
1797ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::DEALLOC_RET_cPt_V4:
1798ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::DEALLOC_RET_cNotPt_V4;
1799ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::DEALLOC_RET_cNotPt_V4:
1800ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::DEALLOC_RET_cPt_V4;
1801ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1802ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // New Value Jump.
1803ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPEQ_ri - with -1.
1804ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriPtneg_nv_V4:
1805ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPtneg_nv_V4;
1806ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPtneg_nv_V4:
1807ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPtneg_nv_V4;
1808ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1809ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriPntneg_nv_V4:
1810ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPntneg_nv_V4;
1811ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPntneg_nv_V4:
1812ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPntneg_nv_V4;
1813ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1814ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPEQ_ri.
1815ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQriPt_nv_V4:
1816ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPt_nv_V4;
1817ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPt_nv_V4:
1818ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPt_nv_V4;
1819ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1820ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQriPnt_nv_V4:
1821ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriNotPnt_nv_V4;
1822ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQriNotPnt_nv_V4:
1823ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQriPnt_nv_V4;
1824ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1825ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPEQ_rr.
1826ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQrrPt_nv_V4:
1827ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrNotPt_nv_V4;
1828ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQrrNotPt_nv_V4:
1829ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrPt_nv_V4;
1830ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1831ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_EQrrPnt_nv_V4:
1832ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrNotPnt_nv_V4;
1833ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_EQrrNotPnt_nv_V4:
1834ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_EQrrPnt_nv_V4;
1835ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1836ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_ri - with -1.
1837ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriPtneg_nv_V4:
1838ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPtneg_nv_V4;
1839ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPtneg_nv_V4:
1840ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPtneg_nv_V4;
1841ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1842ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriPntneg_nv_V4:
1843ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPntneg_nv_V4;
1844ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPntneg_nv_V4:
1845ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPntneg_nv_V4;
1846ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1847ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_ri.
1848ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTriPt_nv_V4:
1849ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPt_nv_V4;
1850ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPt_nv_V4:
1851ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPt_nv_V4;
1852ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1853ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTriPnt_nv_V4:
1854ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriNotPnt_nv_V4;
1855ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTriNotPnt_nv_V4:
1856ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTriPnt_nv_V4;
1857ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1858ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_rr.
1859ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrPt_nv_V4:
1860ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrNotPt_nv_V4;
1861ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrNotPt_nv_V4:
1862ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrPt_nv_V4;
1863ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1864ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrPnt_nv_V4:
1865ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrNotPnt_nv_V4;
1866ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrNotPnt_nv_V4:
1867ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrPnt_nv_V4;
1868ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1869ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGT_rrdn.
1870ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrdnPt_nv_V4:
1871ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnNotPt_nv_V4;
1872ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrdnNotPt_nv_V4:
1873ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnPt_nv_V4;
1874ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1875ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTrrdnPnt_nv_V4:
1876ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnNotPnt_nv_V4;
1877ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTrrdnNotPnt_nv_V4:
1878ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTrrdnPnt_nv_V4;
1879ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1880ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGTU_ri.
1881ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUriPt_nv_V4:
1882ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriNotPt_nv_V4;
1883ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUriNotPt_nv_V4:
1884ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriPt_nv_V4;
1885ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1886ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUriPnt_nv_V4:
1887ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriNotPnt_nv_V4;
1888ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUriNotPnt_nv_V4:
1889ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUriPnt_nv_V4;
1890ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1891ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGTU_rr.
1892ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrPt_nv_V4:
1893ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrNotPt_nv_V4;
1894ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrNotPt_nv_V4:
1895ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrPt_nv_V4;
1896ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1897ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrPnt_nv_V4:
1898ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrNotPnt_nv_V4;
1899ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrNotPnt_nv_V4:
1900ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrPnt_nv_V4;
1901ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1902ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande   // JMPGTU_rrdn.
1903ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrdnPt_nv_V4:
1904ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnNotPt_nv_V4;
1905ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrdnNotPt_nv_V4:
1906ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnPt_nv_V4;
1907ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande
1908ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande     case Hexagon::JMP_GTUrrdnPnt_nv_V4:
1909ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnNotPnt_nv_V4;
1910ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    case Hexagon::JMP_GTUrrdnNotPnt_nv_V4:
1911ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande      return Hexagon::JMP_GTUrrdnPnt_nv_V4;
1912ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande  }
1913ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande}
1914b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1915ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
1916b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumint HexagonInstrInfo::
1917b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumgetMatchingCondBranchOpcode(int Opc, bool invertPredicate) const {
1918b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch(Opc) {
1919b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFR:
1920b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::TFR_cPt :
1921b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::TFR_cNotPt;
19227517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  case Hexagon::TFRI_f:
19237517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande    return !invertPredicate ? Hexagon::TFRI_cPt_f :
19247517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande                              Hexagon::TFRI_cNotPt_f;
1925b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFRI:
1926b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::TFRI_cPt :
1927b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::TFRI_cNotPt;
1928b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::JMP:
1929ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande    return !invertPredicate ? Hexagon::JMP_c :
1930ab7955b9ce3197215406bc9fc97b22074127d035Sirish Pande                              Hexagon::JMP_cNot;
1931b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande  case Hexagon::JMP_EQrrPt_nv_V4:
1932b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    return !invertPredicate ? Hexagon::JMP_EQrrPt_nv_V4 :
1933b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande                              Hexagon::JMP_EQrrNotPt_nv_V4;
1934b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande  case Hexagon::JMP_EQriPt_nv_V4:
1935b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    return !invertPredicate ? Hexagon::JMP_EQriPt_nv_V4 :
1936b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande                              Hexagon::JMP_EQriNotPt_nv_V4;
1937b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_ri:
1938b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ADD_ri_cPt :
1939b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ADD_ri_cNotPt;
1940b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_rr:
1941b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ADD_rr_cPt :
1942b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ADD_rr_cNotPt;
1943b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::XOR_rr:
1944b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::XOR_rr_cPt :
1945b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::XOR_rr_cNotPt;
1946b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::AND_rr:
1947b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::AND_rr_cPt :
1948b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::AND_rr_cNotPt;
1949b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::OR_rr:
1950b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::OR_rr_cPt :
1951b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::OR_rr_cNotPt;
1952b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SUB_rr:
1953b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::SUB_rr_cPt :
1954b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::SUB_rr_cNotPt;
1955b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::COMBINE_rr:
1956b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::COMBINE_rr_cPt :
1957b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::COMBINE_rr_cNotPt;
1958b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASLH:
1959b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ASLH_cPt_V4 :
1960b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ASLH_cNotPt_V4;
1961b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ASRH:
1962b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ASRH_cPt_V4 :
1963b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ASRH_cNotPt_V4;
1964b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTB:
1965b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::SXTB_cPt_V4 :
1966b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::SXTB_cNotPt_V4;
1967b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::SXTH:
1968b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::SXTH_cPt_V4 :
1969b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::SXTH_cNotPt_V4;
1970b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTB:
1971b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ZXTB_cPt_V4 :
1972b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ZXTB_cNotPt_V4;
1973b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ZXTH:
1974b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::ZXTH_cPt_V4 :
1975b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::ZXTH_cNotPt_V4;
1976b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1977b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::JMPR:
1978b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::JMPR_cPt :
1979b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::JMPR_cNotPt;
1980b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
1981b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // V4 indexed+scaled load.
1982b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed_V4:
1983b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_indexed_cPt_V4 :
1984b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_indexed_cNotPt_V4;
1985b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed_shl_V4:
1986b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_indexed_shl_cPt_V4 :
1987b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_indexed_shl_cNotPt_V4;
1988b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed_V4:
1989b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_indexed_cPt_V4 :
1990b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_indexed_cNotPt_V4;
1991b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed_V4:
1992b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_cPt_V4 :
1993b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_cNotPt_V4;
1994b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_ae_indexed_V4:
1995b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_cPt_V4 :
1996b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_cNotPt_V4;
1997b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed_shl_V4:
1998b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_indexed_shl_cPt_V4 :
1999b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_indexed_shl_cNotPt_V4;
2000b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed_shl_V4:
2001b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_shl_cPt_V4 :
2002b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_shl_cNotPt_V4;
2003b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_ae_indexed_shl_V4:
2004b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_shl_cPt_V4 :
2005b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_shl_cNotPt_V4;
2006b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed_V4:
2007b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_indexed_cPt_V4 :
2008b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_indexed_cNotPt_V4;
2009b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed_V4:
2010b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt_V4 :
2011b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_cNotPt_V4;
2012b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_ae_indexed_V4:
2013b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt_V4 :
2014b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_cNotPt_V4;
2015b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed_shl_V4:
2016b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_indexed_shl_cPt_V4 :
2017b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_indexed_shl_cNotPt_V4;
2018b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed_shl_V4:
2019b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_shl_cPt_V4 :
2020b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_shl_cNotPt_V4;
2021b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_ae_indexed_shl_V4:
2022b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_shl_cPt_V4 :
2023b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_shl_cNotPt_V4;
2024b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed_V4:
2025b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_indexed_cPt_V4 :
2026b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_indexed_cNotPt_V4;
2027b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed_shl_V4:
2028b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_indexed_shl_cPt_V4 :
2029b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_indexed_shl_cNotPt_V4;
203026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
203126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  // V4 Load from global address
203226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDrid_GP_V4:
203326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDrid_GP_cPt_V4 :
203426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDrid_GP_cNotPt_V4;
203526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDrib_GP_V4:
203626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDrib_GP_cPt_V4 :
203726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDrib_GP_cNotPt_V4;
203826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDriub_GP_V4:
203926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDriub_GP_cPt_V4 :
204026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDriub_GP_cNotPt_V4;
204126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDrih_GP_V4:
204226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDrih_GP_cPt_V4 :
204326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDrih_GP_cNotPt_V4;
204426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDriuh_GP_V4:
204526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDriuh_GP_cPt_V4 :
204626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDriuh_GP_cNotPt_V4;
204726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDriw_GP_V4:
204826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDriw_GP_cPt_V4 :
204926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDriw_GP_cNotPt_V4;
205026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
205126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDd_GP_V4:
205226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDd_GP_cPt_V4 :
205326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDd_GP_cNotPt_V4;
205426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDb_GP_V4:
205526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDb_GP_cPt_V4 :
205626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDb_GP_cNotPt_V4;
205726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDub_GP_V4:
205826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDub_GP_cPt_V4 :
205926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDub_GP_cNotPt_V4;
206026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDh_GP_V4:
206126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDh_GP_cPt_V4 :
206226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDh_GP_cNotPt_V4;
206326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDuh_GP_V4:
206426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDuh_GP_cPt_V4 :
206526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDuh_GP_cNotPt_V4;
206626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::LDw_GP_V4:
206726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::LDw_GP_cPt_V4 :
206826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::LDw_GP_cNotPt_V4;
206926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
2070b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    // Byte.
2071b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_STbri:
2072b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_STbri_cPt :
2073b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_STbri_cNotPt;
2074b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
2075b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_cPt :
2076b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_cNotPt;
2077b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_indexed:
2078b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_indexed_cPt :
2079b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_indexed_cNotPt;
2080b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_imm_V4:
2081b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_imm_cPt_V4 :
2082b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_imm_cNotPt_V4;
2083b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib_indexed_shl_V4:
2084b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrib_indexed_shl_cPt_V4 :
2085b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrib_indexed_shl_cNotPt_V4;
2086b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Halfword.
2087b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_SThri:
2088b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_SThri_cPt :
2089b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_SThri_cNotPt;
2090b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
2091b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_cPt :
2092b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_cNotPt;
2093b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_indexed:
2094b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_indexed_cPt :
2095b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_indexed_cNotPt;
2096b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_imm_V4:
2097b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_imm_cPt_V4 :
2098b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_imm_cNotPt_V4;
2099b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih_indexed_shl_V4:
2100b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrih_indexed_shl_cPt_V4 :
2101b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrih_indexed_shl_cNotPt_V4;
2102b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Word.
2103b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_STwri:
2104b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_STwri_cPt :
2105b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_STwri_cNotPt;
2106b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
2107b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_cPt :
2108b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_cNotPt;
2109b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_indexed:
2110b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_indexed_cPt :
2111b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_indexed_cNotPt;
2112b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_indexed_shl_V4:
2113b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_indexed_shl_cPt_V4 :
2114b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_indexed_shl_cNotPt_V4;
2115b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_imm_V4:
2116b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STriw_imm_cPt_V4 :
2117b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STriw_imm_cNotPt_V4;
2118b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Double word.
2119b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_STdri:
2120b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_STdri_cPt :
2121b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_STdri_cNotPt;
2122b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
2123b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrid_cPt :
2124b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrid_cNotPt;
2125b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid_indexed:
2126b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrid_indexed_cPt :
2127b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrid_indexed_cNotPt;
2128b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid_indexed_shl_V4:
2129b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::STrid_indexed_shl_cPt_V4 :
2130b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::STrid_indexed_shl_cNotPt_V4;
213126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
213226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  // V4 Store to global address
213326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STrid_GP_V4:
213426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STrid_GP_cPt_V4 :
213526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STrid_GP_cNotPt_V4;
213626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STrib_GP_V4:
213726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STrib_GP_cPt_V4 :
213826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STrib_GP_cNotPt_V4;
213926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STrih_GP_V4:
214026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STrih_GP_cPt_V4 :
214126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STrih_GP_cNotPt_V4;
214226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STriw_GP_V4:
214326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STriw_GP_cPt_V4 :
214426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STriw_GP_cNotPt_V4;
214526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
214626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STd_GP_V4:
214726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STd_GP_cPt_V4 :
214826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STd_GP_cNotPt_V4;
214926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STb_GP_V4:
215026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STb_GP_cPt_V4 :
215126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STb_GP_cNotPt_V4;
215226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STh_GP_V4:
215326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STh_GP_cPt_V4 :
215426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STh_GP_cNotPt_V4;
215526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  case Hexagon::STw_GP_V4:
215626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    return !invertPredicate ? Hexagon::STw_GP_cPt_V4 :
215726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande                              Hexagon::STw_GP_cNotPt_V4;
215826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
2159b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Load.
2160b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
2161b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_cPt :
2162b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_cNotPt;
2163b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
2164b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_cPt :
2165b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_cNotPt;
2166b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
2167b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_cPt :
2168b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_cNotPt;
2169b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh:
2170b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_cPt :
2171b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_cNotPt;
2172b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
2173b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_cPt :
2174b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_cNotPt;
2175b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
2176b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_cPt :
2177b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_cNotPt;
2178b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // Load Indexed.
2179b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid_indexed:
2180b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrid_indexed_cPt :
2181b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrid_indexed_cNotPt;
2182b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_indexed:
2183b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriw_indexed_cPt :
2184b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriw_indexed_cNotPt;
2185b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih_indexed:
2186b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrih_indexed_cPt :
2187b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrih_indexed_cNotPt;
2188b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh_indexed:
2189b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriuh_indexed_cPt :
2190b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriuh_indexed_cNotPt;
2191b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib_indexed:
2192b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDrib_indexed_cPt :
2193b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDrib_indexed_cNotPt;
2194b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub_indexed:
2195b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::LDriub_indexed_cPt :
2196b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::LDriub_indexed_cNotPt;
2197b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // Post Increment Load.
2198b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrid:
2199b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDrid_cPt :
2200b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDrid_cNotPt;
2201b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriw:
2202b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDriw_cPt :
2203b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDriw_cNotPt;
2204b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrih:
2205b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDrih_cPt :
2206b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDrih_cNotPt;
2207b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriuh:
2208b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDriuh_cPt :
2209b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDriuh_cNotPt;
2210b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDrib:
2211b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDrib_cPt :
2212b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDrib_cNotPt;
2213b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::POST_LDriub:
2214b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::POST_LDriub_cPt :
2215b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::POST_LDriub_cNotPt;
2216b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // DEALLOC_RETURN.
2217b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_V4:
2218b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return !invertPredicate ? Hexagon::DEALLOC_RET_cPt_V4 :
2219b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                              Hexagon::DEALLOC_RET_cNotPt_V4;
2220b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
222127baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer  llvm_unreachable("Unexpected predicable instruction");
2222b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2223b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2224b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2225b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2226b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumPredicateInstruction(MachineInstr *MI,
2227b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     const SmallVectorImpl<MachineOperand> &Cond) const {
2228b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  int Opc = MI->getOpcode();
2229b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  assert (isPredicable(MI) && "Expected predicable instruction");
2230b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  bool invertJump = (!Cond.empty() && Cond[0].isImm() &&
2231b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                     (Cond[0].getImm() == 0));
2232b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MI->setDesc(get(getMatchingCondBranchOpcode(Opc, invertJump)));
2233b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //
2234b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // This assumes that the predicate is always the first operand
2235b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // in the set of inputs.
2236b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  //
2237b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MI->addOperand(MI->getOperand(MI->getNumOperands()-1));
2238b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  int oper;
2239b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  for (oper = MI->getNumOperands() - 3; oper >= 0; --oper) {
2240b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    MachineOperand MO = MI->getOperand(oper);
2241b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if ((MO.isReg() && !MO.isUse() && !MO.isImplicit())) {
2242b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      break;
2243b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
2244b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2245b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MO.isReg()) {
2246b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MI->getOperand(oper+1).ChangeToRegister(MO.getReg(), MO.isDef(),
2247b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                              MO.isImplicit(), MO.isKill(),
2248b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                              MO.isDead(), MO.isUndef(),
2249b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                              MO.isDebug());
2250b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    } else if (MO.isImm()) {
2251b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      MI->getOperand(oper+1).ChangeToImmediate(MO.getImm());
2252b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    } else {
2253bc2198133a1836598b54b943420748e75d5dea94Craig Topper      llvm_unreachable("Unexpected operand type");
2254b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
2255b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2256b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2257b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  int regPos = invertJump ? 1 : 0;
2258b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MachineOperand PredMO = Cond[regPos];
2259b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  MI->getOperand(oper+1).ChangeToRegister(PredMO.getReg(), PredMO.isDef(),
2260b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          PredMO.isImplicit(), PredMO.isKill(),
2261b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          PredMO.isDead(), PredMO.isUndef(),
2262b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                          PredMO.isDebug());
2263b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2264b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
2265b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2266b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2267b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2268b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2269b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::
2270b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisProfitableToIfCvt(MachineBasicBlock &MBB,
2271575e90e955064f60ac66230dce6c27653973c149Kay Tiong Khoo                    unsigned NumCycles,
2272b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned ExtraPredCycles,
2273b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const BranchProbability &Probability) const {
2274b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
2275b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2276b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2277b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2278b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2279b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::
2280b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisProfitableToIfCvt(MachineBasicBlock &TMBB,
2281b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned NumTCycles,
2282b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned ExtraTCycles,
2283b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    MachineBasicBlock &FMBB,
2284b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned NumFCycles,
2285b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    unsigned ExtraFCycles,
2286b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                    const BranchProbability &Probability) const {
2287b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return true;
2288b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2289b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2290b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2291b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isPredicated(const MachineInstr *MI) const {
2292c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon  const uint64_t F = MI->getDesc().TSFlags;
2293b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2294c635ebdb1a366060fe71ef3028ae888fa5e4130dBrendon Cahoon  return ((F >> HexagonII::PredicatedPos) & HexagonII::PredicatedMask);
2295b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2296b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2297b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2298b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::DefinesPredicate(MachineInstr *MI,
2299b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                                   std::vector<MachineOperand> &Pred) const {
2300b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  for (unsigned oper = 0; oper < MI->getNumOperands(); ++oper) {
2301b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    MachineOperand MO = MI->getOperand(oper);
2302b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    if (MO.isReg() && MO.isDef()) {
2303b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      const TargetRegisterClass* RC = RI.getMinimalPhysRegClass(MO.getReg());
2304420761a0f193e87d08ee1c51b26bba23ab4bac7fCraig Topper      if (RC == &Hexagon::PredRegsRegClass) {
2305b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        Pred.push_back(MO);
2306b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum        return true;
2307b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      }
2308b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    }
2309b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2310b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return false;
2311b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2312b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2313b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2314b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool
2315b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonInstrInfo::
2316b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumSubsumesPredicate(const SmallVectorImpl<MachineOperand> &Pred1,
2317b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                  const SmallVectorImpl<MachineOperand> &Pred2) const {
2318b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // TODO: Fix this
2319b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return false;
2320b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2321b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2322b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2323b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2324b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// We indicate that we want to reverse the branch by
2325b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// inserting a 0 at the beginning of the Cond vector.
2326b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2327b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2328b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumReverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const {
2329b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (!Cond.empty() && Cond[0].isImm() && Cond[0].getImm() == 0) {
2330b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.erase(Cond.begin());
2331b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  } else {
2332b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    Cond.insert(Cond.begin(), MachineOperand::CreateImm(0));
2333b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2334b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return false;
2335b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2336b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2337b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2338b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2339b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisProfitableToDupForIfCvt(MachineBasicBlock &MBB,unsigned NumInstrs,
2340b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum                          const BranchProbability &Probability) const {
2341b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  return (NumInstrs <= 4);
2342b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2343b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2344b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isDeallocRet(const MachineInstr *MI) const {
2345b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode()) {
234626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  default: return false;
2347b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_V4 :
2348b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cPt_V4 :
2349b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cNotPt_V4 :
2350b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cdnPnt_V4 :
2351b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cNotdnPnt_V4 :
2352b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cdnPt_V4 :
2353b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::DEALLOC_RET_cNotdnPt_V4 :
2354b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum   return true;
2355b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2356b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2357b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2358b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2359b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2360b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisValidOffset(const int Opcode, const int Offset) const {
2361b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // This function is to check whether the "Offset" is in the correct range of
2362b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // the given "Opcode". If "Offset" is not in the correct range, "ADD_ri" is
2363b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // inserted to calculate the final address. Due to this reason, the function
2364b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // assumes that the "Offset" has correct alignment.
2365b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2366b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch(Opcode) {
2367b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2368b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw:
23697517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  case Hexagon::LDriw_f:
2370b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw:
23717517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  case Hexagon::STriw_f:
2372b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert((Offset % 4 == 0) && "Offset has incorrect alignment");
2373b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMW_OFFSET_MIN) &&
2374b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMW_OFFSET_MAX);
2375b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2376b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrid:
23777517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  case Hexagon::LDrid_f:
2378b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrid:
23797517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande  case Hexagon::STrid_f:
2380b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert((Offset % 8 == 0) && "Offset has incorrect alignment");
2381b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMD_OFFSET_MIN) &&
2382b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMD_OFFSET_MAX);
2383b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2384b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrih:
2385b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriuh:
2386b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrih:
2387b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert((Offset % 2 == 0) && "Offset has incorrect alignment");
2388b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMH_OFFSET_MIN) &&
2389b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMH_OFFSET_MAX);
2390b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2391b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDrib:
2392b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STrib:
2393b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriub:
2394b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_MEMB_OFFSET_MIN) &&
2395b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_MEMB_OFFSET_MAX);
2396b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2397b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::ADD_ri:
2398b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::TFR_FI:
2399b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (Offset >= Hexagon_ADDI_OFFSET_MIN) &&
2400b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      (Offset <= Hexagon_ADDI_OFFSET_MAX);
2401b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2402b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 :
2403b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDi_indexed_MEM_V4 :
2404b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBi_indexed_MEM_V4 :
2405b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDr_indexed_MEM_V4 :
2406b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBr_indexed_MEM_V4 :
2407b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ANDr_indexed_MEM_V4 :
2408b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ORr_indexed_MEM_V4 :
2409b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDSUBi_MEM_V4 :
2410b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDi_MEM_V4 :
2411b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBi_MEM_V4 :
2412b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ADDr_MEM_V4 :
2413b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_SUBr_MEM_V4 :
2414b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ANDr_MEM_V4 :
2415b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMw_ORr_MEM_V4 :
2416b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert ((Offset % 4) == 0 && "MEMOPw offset is not aligned correctly." );
2417b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (0 <= Offset && Offset <= 255);
2418b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2419b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 :
2420b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDi_indexed_MEM_V4 :
2421b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBi_indexed_MEM_V4 :
2422b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDr_indexed_MEM_V4 :
2423b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBr_indexed_MEM_V4 :
2424b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ANDr_indexed_MEM_V4 :
2425b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ORr_indexed_MEM_V4 :
2426b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDSUBi_MEM_V4 :
2427b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDi_MEM_V4 :
2428b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBi_MEM_V4 :
2429b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ADDr_MEM_V4 :
2430b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_SUBr_MEM_V4 :
2431b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ANDr_MEM_V4 :
2432b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMh_ORr_MEM_V4 :
2433b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    assert ((Offset % 2) == 0 && "MEMOPh offset is not aligned correctly." );
2434b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (0 <= Offset && Offset <= 127);
2435b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2436b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 :
2437b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDi_indexed_MEM_V4 :
2438b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBi_indexed_MEM_V4 :
2439b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDr_indexed_MEM_V4 :
2440b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBr_indexed_MEM_V4 :
2441b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ANDr_indexed_MEM_V4 :
2442b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ORr_indexed_MEM_V4 :
2443b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDSUBi_MEM_V4 :
2444b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDi_MEM_V4 :
2445b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBi_MEM_V4 :
2446b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ADDr_MEM_V4 :
2447b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_SUBr_MEM_V4 :
2448b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ANDr_MEM_V4 :
2449b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::MEMb_ORr_MEM_V4 :
2450b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return (0 <= Offset && Offset <= 63);
2451b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2452b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // LDri_pred and STriw_pred are pseudo operations, so it has to take offset of
2453b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // any size. Later pass knows how to handle it.
2454b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::STriw_pred:
2455b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::LDriw_pred:
2456b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return true;
2457b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2458b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  // INLINEASM is very special.
2459b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  case Hexagon::INLINEASM:
2460b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    return true;
2461b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2462b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
246327baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer  llvm_unreachable("No offset range is defined for this opcode. "
246427baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer                   "Please define it in the above switch statement!");
2465b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2466b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2467b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2468b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2469b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// Check if the Offset is a valid auto-inc imm by Load/Store Type.
2470b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//
2471b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2472b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisValidAutoIncImm(const EVT VT, const int Offset) const {
2473b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2474b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i64) {
2475b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMD_AUTOINC_MIN &&
2476b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMD_AUTOINC_MAX &&
2477b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              (Offset & 0x7) == 0);
2478b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2479b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i32) {
2480b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMW_AUTOINC_MIN &&
2481b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMW_AUTOINC_MAX &&
2482b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              (Offset & 0x3) == 0);
2483b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2484b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i16) {
2485b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMH_AUTOINC_MIN &&
2486b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMH_AUTOINC_MAX &&
2487b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              (Offset & 0x1) == 0);
2488b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2489b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  if (VT == MVT::i8) {
2490b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return (Offset >= Hexagon_MEMB_AUTOINC_MIN &&
2491b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum              Offset <= Hexagon_MEMB_AUTOINC_MAX);
2492b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2493bc2198133a1836598b54b943420748e75d5dea94Craig Topper  llvm_unreachable("Not an auto-inc opc!");
2494b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2495b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2496b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2497b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2498b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisMemOp(const MachineInstr *MI) const {
2499b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode())
2500b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  {
250126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
2502b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 :
2503b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDi_indexed_MEM_V4 :
2504b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBi_indexed_MEM_V4 :
2505b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDr_indexed_MEM_V4 :
2506b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBr_indexed_MEM_V4 :
2507b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ANDr_indexed_MEM_V4 :
2508b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ORr_indexed_MEM_V4 :
2509b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDSUBi_MEM_V4 :
2510b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDi_MEM_V4 :
2511b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBi_MEM_V4 :
2512b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ADDr_MEM_V4 :
2513b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_SUBr_MEM_V4 :
2514b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ANDr_MEM_V4 :
2515b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMw_ORr_MEM_V4 :
2516b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 :
2517b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDi_indexed_MEM_V4 :
2518b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBi_indexed_MEM_V4 :
2519b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDr_indexed_MEM_V4 :
2520b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBr_indexed_MEM_V4 :
2521b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ANDr_indexed_MEM_V4 :
2522b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ORr_indexed_MEM_V4 :
2523b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDSUBi_MEM_V4 :
2524b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDi_MEM_V4 :
2525b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBi_MEM_V4 :
2526b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ADDr_MEM_V4 :
2527b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_SUBr_MEM_V4 :
2528b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ANDr_MEM_V4 :
2529b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMh_ORr_MEM_V4 :
2530b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 :
2531b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDi_indexed_MEM_V4 :
2532b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBi_indexed_MEM_V4 :
2533b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDr_indexed_MEM_V4 :
2534b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBr_indexed_MEM_V4 :
2535b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ANDr_indexed_MEM_V4 :
2536b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ORr_indexed_MEM_V4 :
2537b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDSUBi_MEM_V4 :
2538b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDi_MEM_V4 :
2539b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBi_MEM_V4 :
2540b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ADDr_MEM_V4 :
2541b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_SUBr_MEM_V4 :
2542b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ANDr_MEM_V4 :
2543b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::MEMb_ORr_MEM_V4 :
254426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
2545b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2546b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2547b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2548b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2549b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2550b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisSpillPredRegOp(const MachineInstr *MI) const {
255126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode()) {
255226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
2553b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::STriw_pred :
2554b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_pred :
255526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
25561bfd24851ef35e754d9652551e1a7abb12fe6738Sirish Pande  }
2557b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande}
2558b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande
2559b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pandebool HexagonInstrInfo::isNewValueJumpCandidate(const MachineInstr *MI) const {
2560b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande  switch (MI->getOpcode()) {
25612b38c12643236825a6a49c31ef49da8e62b094c2Sirish Pande    default: return false;
2562b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    case Hexagon::CMPEQrr:
2563b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    case Hexagon::CMPEQri:
2564b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    case Hexagon::CMPLTrr:
2565b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    case Hexagon::CMPGTrr:
2566b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    case Hexagon::CMPGTri:
2567b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    case Hexagon::CMPLTUrr:
2568b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    case Hexagon::CMPGTUrr:
2569b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    case Hexagon::CMPGTUri:
2570b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    case Hexagon::CMPGEri:
2571b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande    case Hexagon::CMPGEUri:
2572b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande      return true;
2573b33857040f63a9fdfb0c2a2ca2af67ec12cf9d02Sirish Pande  }
25741bfd24851ef35e754d9652551e1a7abb12fe6738Sirish Pande}
25751bfd24851ef35e754d9652551e1a7abb12fe6738Sirish Pande
257626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::
257726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish PandeisConditionalTransfer (const MachineInstr *MI) const {
257826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode()) {
257926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
258026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_cPt:
258126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_cNotPt:
258226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFRI_cPt:
258326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFRI_cNotPt:
258426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_cdnPt:
258526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFR_cdnNotPt:
258626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFRI_cdnPt:
258726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::TFRI_cdnNotPt:
258826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return true;
258926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
259026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
2591b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2592b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::isConditionalALU32 (const MachineInstr* MI) const {
2593b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const HexagonRegisterInfo& QRI = getRegisterInfo();
2594b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode())
2595b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  {
259626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
2597b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_ri_cPt:
2598b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_ri_cNotPt:
2599b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_rr_cPt:
2600b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ADD_rr_cNotPt:
2601b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::XOR_rr_cPt:
2602b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::XOR_rr_cNotPt:
2603b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::AND_rr_cPt:
2604b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::AND_rr_cNotPt:
2605b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::OR_rr_cPt:
2606b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::OR_rr_cNotPt:
2607b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SUB_rr_cPt:
2608b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SUB_rr_cNotPt:
2609b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::COMBINE_rr_cPt:
2610b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::COMBINE_rr_cNotPt:
2611b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return true;
2612b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASLH_cPt_V4:
2613b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASLH_cNotPt_V4:
2614b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASRH_cPt_V4:
2615b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ASRH_cNotPt_V4:
2616b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTB_cPt_V4:
2617b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTB_cNotPt_V4:
2618b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTH_cPt_V4:
2619b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::SXTH_cNotPt_V4:
2620b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTB_cPt_V4:
2621b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTB_cNotPt_V4:
2622b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTH_cPt_V4:
2623b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::ZXTH_cNotPt_V4:
262426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return QRI.Subtarget.hasV4TOps();
2625b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  }
2626b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}
2627b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum
2628b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonInstrInfo::
2629b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumisConditionalLoad (const MachineInstr* MI) const {
2630b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  const HexagonRegisterInfo& QRI = getRegisterInfo();
2631b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  switch (MI->getOpcode())
2632b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum  {
263326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
2634b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_cPt :
2635b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_cNotPt :
2636b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cPt :
2637b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cNotPt :
2638b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_cPt :
2639b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_cNotPt :
2640b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cPt :
2641b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cNotPt :
2642b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_cPt :
2643b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_cNotPt :
2644b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cPt :
2645b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cNotPt :
2646b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_cPt :
2647b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_cNotPt :
2648b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cPt :
2649b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cNotPt :
2650b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_cPt :
2651b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_cNotPt :
2652b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cPt :
2653b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cNotPt :
2654b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_cPt :
2655b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_cNotPt :
2656b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cPt :
2657b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cNotPt :
2658b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum      return true;
2659b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrid_cPt :
2660b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrid_cNotPt :
2661b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriw_cPt :
2662b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriw_cNotPt :
2663b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrih_cPt :
2664b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrih_cNotPt :
2665b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrib_cPt :
2666b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDrib_cNotPt :
2667b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriuh_cPt :
2668b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriuh_cNotPt :
2669b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriub_cPt :
2670b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::POST_LDriub_cNotPt :
267126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return QRI.Subtarget.hasV4TOps();
2672b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cPt_V4 :
2673b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_cNotPt_V4 :
2674b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_shl_cPt_V4 :
2675b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrid_indexed_shl_cNotPt_V4 :
2676b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cPt_V4 :
2677b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_cNotPt_V4 :
2678b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_shl_cPt_V4 :
2679b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrib_indexed_shl_cNotPt_V4 :
2680b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cPt_V4 :
2681b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_cNotPt_V4 :
2682b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_shl_cPt_V4 :
2683b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriub_indexed_shl_cNotPt_V4 :
2684b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cPt_V4 :
2685b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_cNotPt_V4 :
2686b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_shl_cPt_V4 :
2687b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDrih_indexed_shl_cNotPt_V4 :
2688b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cPt_V4 :
2689b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_cNotPt_V4 :
2690b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_shl_cPt_V4 :
2691b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriuh_indexed_shl_cNotPt_V4 :
2692b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cPt_V4 :
2693b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_cNotPt_V4 :
2694b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_shl_cPt_V4 :
2695b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum    case Hexagon::LDriw_indexed_shl_cNotPt_V4 :
269626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return QRI.Subtarget.hasV4TOps();
269726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  }
269826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande}
269926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
270026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Returns true if an instruction is a conditional store.
270126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
270226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Note: It doesn't include conditional new-value stores as they can't be
270326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// converted to .new predicate.
270426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
270526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//               p.new NV store [ if(p0.new)memw(R0+#0)=R2.new ]
270626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//                ^           ^
270726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//               /             \ (not OK. it will cause new-value store to be
270826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//              /               X conditional on p0.new while R2 producer is
270926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//             /                 \ on p0)
271026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//            /                   \.
271126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//     p.new store                 p.old NV store
271226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// [if(p0.new)memw(R0+#0)=R2]    [if(p0)memw(R0+#0)=R2.new]
271326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//            ^                  ^
271426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//             \                /
271526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//              \              /
271626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//               \            /
271726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//                 p.old store
271826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//             [if (p0)memw(R0+#0)=R2]
271926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
272026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// The above diagram shows the steps involoved in the conversion of a predicated
272126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// store instruction to its .new predicated new-value form.
272226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
272326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// The following set of instructions further explains the scenario where
272426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// conditional new-value store becomes invalid when promoted to .new predicate
272526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// form.
272626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
272726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// { 1) if (p0) r0 = add(r1, r2)
272826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//   2) p0 = cmp.eq(r3, #0) }
272926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//
273026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//   3) if (p0) memb(r1+#0) = r0  --> this instruction can't be grouped with
273126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// the first two instructions because in instr 1, r0 is conditional on old value
273226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// of p0 but its use in instr 3 is conditional on p0 modified by instr 2 which
273326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// is not valid for new-value stores.
273426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonInstrInfo::
273526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish PandeisConditionalStore (const MachineInstr* MI) const {
273626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  const HexagonRegisterInfo& QRI = getRegisterInfo();
273726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  switch (MI->getOpcode())
273826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande  {
273926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    default: return false;
274026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_cPt_V4 :
274126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_imm_cNotPt_V4 :
274226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cPt_V4 :
274326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_indexed_shl_cNotPt_V4 :
274426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cPt :
274526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_cNotPt :
274626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cPt :
274726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STbri_cNotPt :
274826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_indexed_cPt :
274926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_indexed_cNotPt :
275026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_indexed_shl_cPt_V4 :
275126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cPt :
275226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STdri_cNotPt :
275326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cPt :
275426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_cNotPt :
275526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cPt :
275626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_cNotPt :
275726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_cPt_V4 :
275826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_imm_cNotPt_V4 :
275926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cPt_V4 :
276026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_indexed_shl_cNotPt_V4 :
276126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cPt :
276226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_SThri_cNotPt :
276326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cPt :
276426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_cNotPt :
276526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cPt :
276626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_cNotPt :
276726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_cPt_V4 :
276826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_imm_cNotPt_V4 :
276926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cPt_V4 :
277026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_indexed_shl_cNotPt_V4 :
277126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cPt :
277226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::POST_STwri_cNotPt :
277326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return QRI.Subtarget.hasV4TOps();
277426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
277526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // V4 global address store before promoting to dot new.
277626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cPt_V4 :
277726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrid_GP_cNotPt_V4 :
277826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cPt_V4 :
277926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrib_GP_cNotPt_V4 :
278026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cPt_V4 :
278126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STrih_GP_cNotPt_V4 :
278226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cPt_V4 :
278326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STriw_GP_cNotPt_V4 :
278426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cPt_V4 :
278526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STd_GP_cNotPt_V4 :
278626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cPt_V4 :
278726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STb_GP_cNotPt_V4 :
278826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cPt_V4 :
278926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STh_GP_cNotPt_V4 :
279026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cPt_V4 :
279126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    case Hexagon::STw_GP_cNotPt_V4 :
279226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande      return QRI.Subtarget.hasV4TOps();
279326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
279426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // Predicated new value stores (i.e. if (p0) memw(..)=r0.new) are excluded
279526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // from the "Conditional Store" list. Because a predicated new value store
279626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // would NOT be promoted to a double dot new store. See diagram below:
279726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // This function returns yes for those stores that are predicated but not
279826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    // yet promoted to predicate dot new instructions.
279926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //
280026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                          +---------------------+
280126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                    /-----| if (p0) memw(..)=r0 |---------\~
280226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                   ||     +---------------------+         ||
280326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //          promote  ||       /\       /\                   ||  promote
280426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                   ||      /||\     /||\                  ||
280526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                  \||/    demote     ||                  \||/
280626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                   \/       ||       ||                   \/
280726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //       +-------------------------+   ||   +-------------------------+
280826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //       | if (p0.new) memw(..)=r0 |   ||   | if (p0) memw(..)=r0.new |
280926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //       +-------------------------+   ||   +-------------------------+
281026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                        ||           ||         ||
281126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                        ||         demote      \||/
281226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                      promote        ||         \/ NOT possible
281326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                        ||           ||         /\~
281426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                       \||/          ||        /||\~
281526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                        \/           ||         ||
281626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                      +-----------------------------+
281726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                      | if (p0.new) memw(..)=r0.new |
281826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                      +-----------------------------+
281926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //                           Double Dot New Store
282026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande    //
2821d1a87a68064e0b9af3b71b681286954f861bb1b3Sirish Pande  }
2822d1a87a68064e0b9af3b71b681286954f861bb1b3Sirish Pande}
2823d1a87a68064e0b9af3b71b681286954f861bb1b3Sirish Pande
282426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
282526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande
2826ee498d3254b86bceb4f441741e9f442990647ce6Andrew TrickDFAPacketizer *HexagonInstrInfo::
2827ee498d3254b86bceb4f441741e9f442990647ce6Andrew TrickCreateTargetScheduleState(const TargetMachine *TM,
2828ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick                           const ScheduleDAG *DAG) const {
2829ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  const InstrItineraryData *II = TM->getInstrItineraryData();
2830ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  return TM->getSubtarget<HexagonGenSubtargetInfo>().createDFAPacketizer(II);
2831ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick}
2832ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
2833ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trickbool HexagonInstrInfo::isSchedulingBoundary(const MachineInstr *MI,
2834ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick                                            const MachineBasicBlock *MBB,
2835ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick                                            const MachineFunction &MF) const {
2836ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // Debug info is never a scheduling boundary. It's necessary to be explicit
2837ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // due to the special treatment of IT instructions below, otherwise a
2838ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // dbg_value followed by an IT will result in the IT instruction being
2839ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // considered a scheduling hazard, which is wrong. It should be the actual
2840ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // instruction preceding the dbg_value instruction(s), just like it is
2841ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // when debug info is not present.
2842ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  if (MI->isDebugValue())
2843ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick    return false;
2844ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
2845ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  // Terminators and labels can't be scheduled around.
2846ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  if (MI->getDesc().isTerminator() || MI->isLabel() || MI->isInlineAsm())
2847ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick    return true;
2848ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick
2849ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick  return false;
2850ee498d3254b86bceb4f441741e9f442990647ce6Andrew Trick}
2851