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