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