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