HexagonInstrInfo.cpp revision 31d157ae1ac2cd9c787dc3c1d28e64c682803844
13e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner//===-- HexagonInstrInfo.cpp - Hexagon Instruction Information ------------===// 2edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman// 33e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner// The LLVM Compiler Infrastructure 43e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner// 53e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner// This file is distributed under the University of Illinois Open Source 63e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner// License. See LICENSE.TXT for details. 7edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman// 83e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner//===----------------------------------------------------------------------===// 93e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner// 103e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner// This file contains the Hexagon implementation of the TargetInstrInfo class. 113e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner// 123e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner//===----------------------------------------------------------------------===// 133e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 143e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "HexagonRegisterInfo.h" 153e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "HexagonInstrInfo.h" 1645b8caf1c5a1fd8337038d64c6da8fba2d299fdfChris Lattner#include "HexagonSubtarget.h" 1702659d23637f69f90640bfa3e66919517103c57aJim Laskey#include "Hexagon.h" 183e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "llvm/ADT/STLExtras.h" 19e1bd822ddb0099406d9f280535461033dfeeb190Chris Lattner#include "llvm/ADT/SmallVector.h" 200f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner#include "llvm/CodeGen/DFAPacketizer.h" 21adf6a965a321372c640845407195594835921eb4Chris Lattner#include "llvm/CodeGen/MachineInstrBuilder.h" 223e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "llvm/CodeGen/MachineRegisterInfo.h" 233e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "llvm/CodeGen/MachineFrameInfo.h" 24033e6816668da71ff0866a61f5c0a7e7e795d069Evan Cheng#include "llvm/CodeGen/MachineMemOperand.h" 253e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "llvm/CodeGen/PseudoSourceValue.h" 263e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "llvm/Support/MathExtras.h" 273e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#define GET_INSTRINFO_CTOR 283e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "HexagonGenInstrInfo.inc" 293e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner#include "HexagonGenDFAPacketizer.inc" 303e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 313e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerusing namespace llvm; 323e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 333e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// 343e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// Constants for Hexagon instructions. 353e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// 363e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMW_OFFSET_MAX = 4095; 373e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMW_OFFSET_MIN = 4096; 383e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMD_OFFSET_MAX = 8191; 393e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMD_OFFSET_MIN = 8192; 403e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMH_OFFSET_MAX = 2047; 413e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMH_OFFSET_MIN = 2048; 423e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMB_OFFSET_MAX = 1023; 433e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerconst int Hexagon_MEMB_OFFSET_MIN = 1024; 446831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_ADDI_OFFSET_MAX = 32767; 456831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_ADDI_OFFSET_MIN = 32768; 466831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMD_AUTOINC_MAX = 56; 476831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMD_AUTOINC_MIN = 64; 486831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMW_AUTOINC_MAX = 28; 496831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMW_AUTOINC_MIN = 32; 506831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMH_AUTOINC_MAX = 14; 516831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMH_AUTOINC_MIN = 16; 526831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMB_AUTOINC_MAX = 7; 536831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerconst int Hexagon_MEMB_AUTOINC_MIN = 8; 546831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 556831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 563e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 5768a17febc70d9beb5353454e0c6d136ca1e87605Chris LattnerHexagonInstrInfo::HexagonInstrInfo(HexagonSubtarget &ST) 5868a17febc70d9beb5353454e0c6d136ca1e87605Chris Lattner : HexagonGenInstrInfo(Hexagon::ADJCALLSTACKDOWN, Hexagon::ADJCALLSTACKUP), 5968a17febc70d9beb5353454e0c6d136ca1e87605Chris Lattner RI(ST, *this), Subtarget(ST) { 603e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner} 616831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 623e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 633e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// isLoadFromStackSlot - If the specified machine instruction is a direct 643e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// load from a stack slot, return the virtual or physical register number of 6568a17febc70d9beb5353454e0c6d136ca1e87605Chris Lattner/// the destination along with the FrameIndex of the loaded stack slot. If 663e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// not, return 0. This predicate must return 0 if the instruction has 673e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner/// any side effects other than loading from the stack slot. 683e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerunsigned HexagonInstrInfo::isLoadFromStackSlot(const MachineInstr *MI, 693e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner int &FrameIndex) const { 703e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 713e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 7203c8546ec57523970874917854a2fb77b1ff598eChris Lattner switch (MI->getOpcode()) { 7303c8546ec57523970874917854a2fb77b1ff598eChris Lattner case Hexagon::LDriw: 7403c8546ec57523970874917854a2fb77b1ff598eChris Lattner case Hexagon::LDrid: 7503c8546ec57523970874917854a2fb77b1ff598eChris Lattner case Hexagon::LDrih: 7603c8546ec57523970874917854a2fb77b1ff598eChris Lattner case Hexagon::LDrib: 77c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::LDriub: 78c7029805ef35ce9805931067b841e6af11db382eChris Lattner if (MI->getOperand(2).isFI() && 79c7029805ef35ce9805931067b841e6af11db382eChris Lattner MI->getOperand(1).isImm() && (MI->getOperand(1).getImm() == 0)) { 803e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner FrameIndex = MI->getOperand(2).getIndex(); 813e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return MI->getOperand(0).getReg(); 82c7029805ef35ce9805931067b841e6af11db382eChris Lattner } 83c7029805ef35ce9805931067b841e6af11db382eChris Lattner break; 84c7029805ef35ce9805931067b841e6af11db382eChris Lattner 85c7029805ef35ce9805931067b841e6af11db382eChris Lattner default: 86c7029805ef35ce9805931067b841e6af11db382eChris Lattner break; 87c7029805ef35ce9805931067b841e6af11db382eChris Lattner } 88c7029805ef35ce9805931067b841e6af11db382eChris Lattner 89c7029805ef35ce9805931067b841e6af11db382eChris Lattner return 0; 90c7029805ef35ce9805931067b841e6af11db382eChris Lattner} 91c7029805ef35ce9805931067b841e6af11db382eChris Lattner 928afc48e44ad8868c1d41511db645e2ba1a4b894eChris Lattner 9369a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner/// isStoreToStackSlot - If the specified machine instruction is a direct 9469a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner/// store to a stack slot, return the virtual or physical register number of 9569a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner/// the source reg along with the FrameIndex of the loaded stack slot. If 9669a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner/// not, return 0. This predicate must return 0 if the instruction has 978afc48e44ad8868c1d41511db645e2ba1a4b894eChris Lattner/// any side effects other than storing to the stack slot. 9803c8546ec57523970874917854a2fb77b1ff598eChris Lattnerunsigned HexagonInstrInfo::isStoreToStackSlot(const MachineInstr *MI, 9903c8546ec57523970874917854a2fb77b1ff598eChris Lattner int &FrameIndex) const { 10003c8546ec57523970874917854a2fb77b1ff598eChris Lattner switch (MI->getOpcode()) { 10169a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner case Hexagon::STriw: 10269a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner case Hexagon::STrid: 10303c8546ec57523970874917854a2fb77b1ff598eChris Lattner case Hexagon::STrih: 1048afc48e44ad8868c1d41511db645e2ba1a4b894eChris Lattner case Hexagon::STrib: 1053e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner if (MI->getOperand(2).isFI() && 1063e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner MI->getOperand(1).isImm() && (MI->getOperand(1).getImm() == 0)) { 1079c32d3b798dc6caeebe6cea2effe80ca5e84e66eChris Lattner FrameIndex = MI->getOperand(2).getIndex(); 1083e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return MI->getOperand(0).getReg(); 1093e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner } 1103e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner break; 1113e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 1123e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner default: 11368a17febc70d9beb5353454e0c6d136ca1e87605Chris Lattner break; 1143e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner } 1153e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 1163e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return 0; 1173e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner} 1183e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 1193e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 1203e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerunsigned 1213e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerHexagonInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB, 1223e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner MachineBasicBlock *FBB, 1233e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner const SmallVectorImpl<MachineOperand> &Cond, 124456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner DebugLoc DL) const{ 125c7029805ef35ce9805931067b841e6af11db382eChris Lattner 126c7029805ef35ce9805931067b841e6af11db382eChris Lattner int BOpc = Hexagon::JMP; 127c7029805ef35ce9805931067b841e6af11db382eChris Lattner int BccOpc = Hexagon::JMP_c; 128c7029805ef35ce9805931067b841e6af11db382eChris Lattner 129c7029805ef35ce9805931067b841e6af11db382eChris Lattner assert(TBB && "InsertBranch must not be told to insert a fallthrough"); 130c7029805ef35ce9805931067b841e6af11db382eChris Lattner 131c7029805ef35ce9805931067b841e6af11db382eChris Lattner int regPos = 0; 1323e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // Check if ReverseBranchCondition has asked to reverse this branch 133c7029805ef35ce9805931067b841e6af11db382eChris Lattner // If we want to reverse the branch an odd number of times, we want 134c7029805ef35ce9805931067b841e6af11db382eChris Lattner // JMP_cNot. 135c7029805ef35ce9805931067b841e6af11db382eChris Lattner if (!Cond.empty() && Cond[0].isImm() && Cond[0].getImm() == 0) { 136c7029805ef35ce9805931067b841e6af11db382eChris Lattner BccOpc = Hexagon::JMP_cNot; 137c7029805ef35ce9805931067b841e6af11db382eChris Lattner regPos = 1; 138c7029805ef35ce9805931067b841e6af11db382eChris Lattner } 13903c8546ec57523970874917854a2fb77b1ff598eChris Lattner 1403e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner if (FBB == 0) { 141c7029805ef35ce9805931067b841e6af11db382eChris Lattner if (Cond.empty()) { 142c7029805ef35ce9805931067b841e6af11db382eChris Lattner // Due to a bug in TailMerging/CFG Optimization, we need to add a 143c7029805ef35ce9805931067b841e6af11db382eChris Lattner // special case handling of a predicated jump followed by an 144c7029805ef35ce9805931067b841e6af11db382eChris Lattner // unconditional jump. If not, Tail Merging and CFG Optimization go 145c7029805ef35ce9805931067b841e6af11db382eChris Lattner // into an infinite loop. 146c7029805ef35ce9805931067b841e6af11db382eChris Lattner MachineBasicBlock *NewTBB, *NewFBB; 147c7029805ef35ce9805931067b841e6af11db382eChris Lattner SmallVector<MachineOperand, 4> Cond; 148c7029805ef35ce9805931067b841e6af11db382eChris Lattner MachineInstr *Term = MBB.getFirstTerminator(); 149c7029805ef35ce9805931067b841e6af11db382eChris Lattner if (isPredicated(Term) && !AnalyzeBranch(MBB, NewTBB, NewFBB, Cond, 150c7029805ef35ce9805931067b841e6af11db382eChris Lattner false)) { 151c7029805ef35ce9805931067b841e6af11db382eChris Lattner MachineBasicBlock *NextBB = 152c7029805ef35ce9805931067b841e6af11db382eChris Lattner llvm::next(MachineFunction::iterator(&MBB)); 153c7029805ef35ce9805931067b841e6af11db382eChris Lattner if (NewTBB == NextBB) { 154c7029805ef35ce9805931067b841e6af11db382eChris Lattner ReverseBranchCondition(Cond); 155c7029805ef35ce9805931067b841e6af11db382eChris Lattner RemoveBranch(MBB); 156c7029805ef35ce9805931067b841e6af11db382eChris Lattner return InsertBranch(MBB, TBB, 0, Cond, DL); 157c7029805ef35ce9805931067b841e6af11db382eChris Lattner } 158c7029805ef35ce9805931067b841e6af11db382eChris Lattner } 1596831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(&MBB, DL, get(BOpc)).addMBB(TBB); 1606831a815999dde4cf801e2076e66b4943964daf2Chris Lattner } else { 161750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman BuildMI(&MBB, DL, 162750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman get(BccOpc)).addReg(Cond[regPos].getReg()).addMBB(TBB); 163ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner } 164ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner return 1; 16577e77a6aa0ab25a812947aed477220dd11220a18Chris Lattner } 16677e77a6aa0ab25a812947aed477220dd11220a18Chris Lattner 16777e77a6aa0ab25a812947aed477220dd11220a18Chris Lattner BuildMI(&MBB, DL, get(BccOpc)).addReg(Cond[regPos].getReg()).addMBB(TBB); 16877e77a6aa0ab25a812947aed477220dd11220a18Chris Lattner BuildMI(&MBB, DL, get(BOpc)).addMBB(FBB); 169cad063f1a8ecda4fd556a733dc5eaa8a96acb80dChris Lattner 17035481892da1e5634bf497c8a0cabb1bb5a8b8fefChris Lattner return 2; 171ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner} 1726269ed125fc492d81dc5e3f48482816fc9d47f49Jim Laskey 1736269ed125fc492d81dc5e3f48482816fc9d47f49Jim Laskey 1746269ed125fc492d81dc5e3f48482816fc9d47f49Jim Laskeybool HexagonInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB, 1755a8441ea3fc145393d6274156bd05c4a006099eaNate Begeman MachineBasicBlock *&TBB, 1765a8441ea3fc145393d6274156bd05c4a006099eaNate Begeman MachineBasicBlock *&FBB, 1771618bebcf6f9cd19c4e05de3bfffda28c246bb12Chris Lattner SmallVectorImpl<MachineOperand> &Cond, 1781618bebcf6f9cd19c4e05de3bfffda28c246bb12Chris Lattner bool AllowModify) const { 17900b16889ab461b7ecef1c91ade101186b7f1fce2Jeff Cohen FBB = NULL; 180456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner 181456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner // If the block has no terminators, it just falls into the block after it. 182e34b396ab7d28469bf3d9679a748b643d8e30458Chris Lattner MachineBasicBlock::iterator I = MBB.end(); 183e34b396ab7d28469bf3d9679a748b643d8e30458Chris Lattner if (I == MBB.begin()) 1845b359c6c4f052e41579ad7da9af37db4f54207d9Chris Lattner return false; 1855b359c6c4f052e41579ad7da9af37db4f54207d9Chris Lattner 186b9fa3bc8f39bf1e8df48b85eae4563032dd20bfcChris Lattner // A basic block may looks like this: 1873e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // 1883e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // [ insn 1893e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // EH_LABEL 1903e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // insn 1913e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // insn 1923e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // insn 193c7029805ef35ce9805931067b841e6af11db382eChris Lattner // EH_LABEL 194c7029805ef35ce9805931067b841e6af11db382eChris Lattner // insn ] 195b89175feffa7148c05d1d30a8e382b8d321edae5Chris Lattner // 1965fbb5d2459a5410590f285250faa604576308a93Nate Begeman // It has two succs but does not have a terminator 1975fbb5d2459a5410590f285250faa604576308a93Nate Begeman // Don't know how to handle it. 1983e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng do { 1993e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng --I; 2003e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng if (I->isEHLabel()) 2013e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng return true; 2023e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng } while (I != MBB.begin()); 2033e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng 2043e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng I = MBB.end(); 2053e1ce5a44d3d59b2b9ca68a21261f0f487d69269Evan Cheng --I; 2065fbb5d2459a5410590f285250faa604576308a93Nate Begeman 2075fbb5d2459a5410590f285250faa604576308a93Nate Begeman while (I->isDebugValue()) { 2083e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner if (I == MBB.begin()) 2099c32d3b798dc6caeebe6cea2effe80ca5e84e66eChris Lattner return false; 2109c32d3b798dc6caeebe6cea2effe80ca5e84e66eChris Lattner --I; 2119c32d3b798dc6caeebe6cea2effe80ca5e84e66eChris Lattner } 2126a648614e88586e85a36ceb5c1d3b84e4f55b458Nate Begeman if (!isUnpredicatedTerminator(I)) 2133e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return false; 2143e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 2153e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // Get the last instruction in the block. 21632fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner MachineInstr *LastInst = I; 21732fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner 21832fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner // If there is only one terminator instruction, process it. 21932fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner if (I == MBB.begin() || !isUnpredicatedTerminator(--I)) { 22032fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner if (LastInst->getOpcode() == Hexagon::JMP) { 22132fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner TBB = LastInst->getOperand(0).getMBB(); 22232fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner return false; 22332fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner } 22432fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner if (LastInst->getOpcode() == Hexagon::JMP_c) { 22532fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner // Block ends with fall-through true condbranch. 22632fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner TBB = LastInst->getOperand(1).getMBB(); 22732fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner Cond.push_back(LastInst->getOperand(0)); 22832fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner return false; 22932fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner } 23032fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner if (LastInst->getOpcode() == Hexagon::JMP_cNot) { 23132fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner // Block ends with fall-through false condbranch. 23232fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner TBB = LastInst->getOperand(1).getMBB(); 23332fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner Cond.push_back(MachineOperand::CreateImm(0)); 23432fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner Cond.push_back(LastInst->getOperand(0)); 23532fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner return false; 2361618bebcf6f9cd19c4e05de3bfffda28c246bb12Chris Lattner } 2373e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // Otherwise, don't know what this is. 2386831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return true; 2396831a815999dde4cf801e2076e66b4943964daf2Chris Lattner } 2406831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 241ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner // Get the instruction before it if it's a terminator. 242ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner MachineInstr *SecondLastInst = I; 243ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner 244ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner // If there are three terminators, we don't know what sort of block this is. 24532fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner if (SecondLastInst && I != MBB.begin() && 24632fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner isUnpredicatedTerminator(--I)) 24732fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner return true; 24832fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner 249ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner // If the block ends with Hexagon::BRCOND and Hexagon:JMP, handle it. 25032fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner if (((SecondLastInst->getOpcode() == Hexagon::BRCOND) || 25132fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner (SecondLastInst->getOpcode() == Hexagon::JMP_c)) && 25232fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner LastInst->getOpcode() == Hexagon::JMP) { 25332fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner TBB = SecondLastInst->getOperand(1).getMBB(); 254de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner Cond.push_back(SecondLastInst->getOperand(0)); 255de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner FBB = LastInst->getOperand(0).getMBB(); 256de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner return false; 257ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner } 258ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner 259ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner // If the block ends with Hexagon::JMP_cNot and Hexagon:JMP, handle it. 260de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner if ((SecondLastInst->getOpcode() == Hexagon::JMP_cNot) && 261de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner LastInst->getOpcode() == Hexagon::JMP) { 262de202b3cda00f17ba2c047be7270b51f9585a413Chris Lattner TBB = SecondLastInst->getOperand(1).getMBB(); 26332fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner Cond.push_back(MachineOperand::CreateImm(0)); 26432fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner Cond.push_back(SecondLastInst->getOperand(0)); 265ab510a76d6fed412f2dbbb29b3e123eef34f9c0aChris Lattner FBB = LastInst->getOperand(0).getMBB(); 266c7029805ef35ce9805931067b841e6af11db382eChris Lattner return false; 267c7029805ef35ce9805931067b841e6af11db382eChris Lattner } 26832fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner 26932fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner // If the block ends with two Hexagon:JMPs, handle it. The second one is not 2703e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // executed, so remove it. 27132fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner if (SecondLastInst->getOpcode() == Hexagon::JMP && 27232fca00a23a9872c31999d054b4dd7c724276d9dChris Lattner LastInst->getOpcode() == Hexagon::JMP) { 2733e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner TBB = SecondLastInst->getOperand(0).getMBB(); 2743e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner I = LastInst; 2753e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner if (AllowModify) 27671c42a0190300a8903aaea80467b88f15f327ea9Chris Lattner I->eraseFromParent(); 277c7029805ef35ce9805931067b841e6af11db382eChris Lattner return false; 278c7029805ef35ce9805931067b841e6af11db382eChris Lattner } 2793e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 2803e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // Otherwise, can't handle this. 28162fd269c146d9023efe32644e44cd97b88631d4fChris Lattner return true; 2823e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner} 2833e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 2846831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 2856831a815999dde4cf801e2076e66b4943964daf2Chris Lattnerunsigned HexagonInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const { 2866831a815999dde4cf801e2076e66b4943964daf2Chris Lattner int BOpc = Hexagon::JMP; 2876831a815999dde4cf801e2076e66b4943964daf2Chris Lattner int BccOpc = Hexagon::JMP_c; 2886831a815999dde4cf801e2076e66b4943964daf2Chris Lattner int BccOpcNot = Hexagon::JMP_cNot; 2896831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 2906831a815999dde4cf801e2076e66b4943964daf2Chris Lattner MachineBasicBlock::iterator I = MBB.end(); 2916831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if (I == MBB.begin()) return 0; 2926831a815999dde4cf801e2076e66b4943964daf2Chris Lattner --I; 2936831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if (I->getOpcode() != BOpc && I->getOpcode() != BccOpc && 2946831a815999dde4cf801e2076e66b4943964daf2Chris Lattner I->getOpcode() != BccOpcNot) 2956831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return 0; 2966831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 2976831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // Remove the branch. 2986831a815999dde4cf801e2076e66b4943964daf2Chris Lattner I->eraseFromParent(); 2996831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 3006831a815999dde4cf801e2076e66b4943964daf2Chris Lattner I = MBB.end(); 3016831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 3026831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if (I == MBB.begin()) return 1; 3036831a815999dde4cf801e2076e66b4943964daf2Chris Lattner --I; 3046831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if (I->getOpcode() != BccOpc && I->getOpcode() != BccOpcNot) 3056831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return 1; 3066831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 3076831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // Remove the branch. 3086831a815999dde4cf801e2076e66b4943964daf2Chris Lattner I->eraseFromParent(); 3096831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return 2; 3106831a815999dde4cf801e2076e66b4943964daf2Chris Lattner} 3116831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 3126831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 3136831a815999dde4cf801e2076e66b4943964daf2Chris Lattnervoid HexagonInstrInfo::copyPhysReg(MachineBasicBlock &MBB, 3146831a815999dde4cf801e2076e66b4943964daf2Chris Lattner MachineBasicBlock::iterator I, DebugLoc DL, 3156831a815999dde4cf801e2076e66b4943964daf2Chris Lattner unsigned DestReg, unsigned SrcReg, 3166831a815999dde4cf801e2076e66b4943964daf2Chris Lattner bool KillSrc) const { 3176831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if (Hexagon::IntRegsRegClass.contains(SrcReg, DestReg)) { 3186831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::TFR), DestReg).addReg(SrcReg); 3196831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return; 3206831a815999dde4cf801e2076e66b4943964daf2Chris Lattner } 3216831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if (Hexagon::DoubleRegsRegClass.contains(SrcReg, DestReg)) { 3226831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::TFR_64), DestReg).addReg(SrcReg); 3236831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return; 3246831a815999dde4cf801e2076e66b4943964daf2Chris Lattner } 3256831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if (Hexagon::PredRegsRegClass.contains(SrcReg, DestReg)) { 3266831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // Map Pd = Ps to Pd = or(Ps, Ps). 3276831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::OR_pp), 3286831a815999dde4cf801e2076e66b4943964daf2Chris Lattner DestReg).addReg(SrcReg).addReg(SrcReg); 3296831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return; 3306831a815999dde4cf801e2076e66b4943964daf2Chris Lattner } 3316831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if (Hexagon::DoubleRegsRegClass.contains(DestReg, SrcReg)) { 3326831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // We can have an overlap between single and double reg: r1:0 = r0. 3336831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if(SrcReg == RI.getSubReg(DestReg, Hexagon::subreg_loreg)) { 3346831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // r1:0 = r0 3356831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::TFRI), (RI.getSubReg(DestReg, 3366831a815999dde4cf801e2076e66b4943964daf2Chris Lattner Hexagon::subreg_hireg))).addImm(0); 3376831a815999dde4cf801e2076e66b4943964daf2Chris Lattner } else { 3386831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // r1:0 = r1 or no overlap. 3396831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::TFR), (RI.getSubReg(DestReg, 3406831a815999dde4cf801e2076e66b4943964daf2Chris Lattner Hexagon::subreg_loreg))).addReg(SrcReg); 3416831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::TFRI), (RI.getSubReg(DestReg, 3426831a815999dde4cf801e2076e66b4943964daf2Chris Lattner Hexagon::subreg_hireg))).addImm(0); 3436831a815999dde4cf801e2076e66b4943964daf2Chris Lattner } 3446831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return; 3456831a815999dde4cf801e2076e66b4943964daf2Chris Lattner } 3466831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if (Hexagon::CRRegsRegClass.contains(DestReg, SrcReg)) { 3476831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::TFCR), DestReg).addReg(SrcReg); 3486831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return; 3496831a815999dde4cf801e2076e66b4943964daf2Chris Lattner } 3506831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 3516831a815999dde4cf801e2076e66b4943964daf2Chris Lattner llvm_unreachable("Unimplemented"); 3526831a815999dde4cf801e2076e66b4943964daf2Chris Lattner} 3536831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 3546831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 3556831a815999dde4cf801e2076e66b4943964daf2Chris Lattnervoid HexagonInstrInfo:: 3566831a815999dde4cf801e2076e66b4943964daf2Chris LattnerstoreRegToStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, 3576831a815999dde4cf801e2076e66b4943964daf2Chris Lattner unsigned SrcReg, bool isKill, int FI, 3586831a815999dde4cf801e2076e66b4943964daf2Chris Lattner const TargetRegisterClass *RC, 3596831a815999dde4cf801e2076e66b4943964daf2Chris Lattner const TargetRegisterInfo *TRI) const { 3606831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 3616831a815999dde4cf801e2076e66b4943964daf2Chris Lattner DebugLoc DL = MBB.findDebugLoc(I); 3626831a815999dde4cf801e2076e66b4943964daf2Chris Lattner MachineFunction &MF = *MBB.getParent(); 3636831a815999dde4cf801e2076e66b4943964daf2Chris Lattner MachineFrameInfo &MFI = *MF.getFrameInfo(); 3646831a815999dde4cf801e2076e66b4943964daf2Chris Lattner unsigned Align = MFI.getObjectAlignment(FI); 3656831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 3666831a815999dde4cf801e2076e66b4943964daf2Chris Lattner MachineMemOperand *MMO = 3676831a815999dde4cf801e2076e66b4943964daf2Chris Lattner MF.getMachineMemOperand( 3686831a815999dde4cf801e2076e66b4943964daf2Chris Lattner MachinePointerInfo(PseudoSourceValue::getFixedStack(FI)), 3696831a815999dde4cf801e2076e66b4943964daf2Chris Lattner MachineMemOperand::MOStore, 3706831a815999dde4cf801e2076e66b4943964daf2Chris Lattner MFI.getObjectSize(FI), 3716831a815999dde4cf801e2076e66b4943964daf2Chris Lattner Align); 3726831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 3736831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if (Hexagon::IntRegsRegisterClass->hasSubClassEq(RC)) { 3746831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::STriw)) 3756831a815999dde4cf801e2076e66b4943964daf2Chris Lattner .addFrameIndex(FI).addImm(0) 3766831a815999dde4cf801e2076e66b4943964daf2Chris Lattner .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO); 3776831a815999dde4cf801e2076e66b4943964daf2Chris Lattner } else if (Hexagon::DoubleRegsRegisterClass->hasSubClassEq(RC)) { 3786831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::STrid)) 3796831a815999dde4cf801e2076e66b4943964daf2Chris Lattner .addFrameIndex(FI).addImm(0) 3806831a815999dde4cf801e2076e66b4943964daf2Chris Lattner .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO); 3816831a815999dde4cf801e2076e66b4943964daf2Chris Lattner } else if (Hexagon::PredRegsRegisterClass->hasSubClassEq(RC)) { 3826831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::STriw_pred)) 383c7029805ef35ce9805931067b841e6af11db382eChris Lattner .addFrameIndex(FI).addImm(0) 384c7029805ef35ce9805931067b841e6af11db382eChris Lattner .addReg(SrcReg, getKillRegState(isKill)).addMemOperand(MMO); 385c7029805ef35ce9805931067b841e6af11db382eChris Lattner } else { 386c7029805ef35ce9805931067b841e6af11db382eChris Lattner llvm_unreachable("Unimplemented"); 387c7029805ef35ce9805931067b841e6af11db382eChris Lattner } 388c7029805ef35ce9805931067b841e6af11db382eChris Lattner} 389c7029805ef35ce9805931067b841e6af11db382eChris Lattner 390c7029805ef35ce9805931067b841e6af11db382eChris Lattner 391c7029805ef35ce9805931067b841e6af11db382eChris Lattnervoid HexagonInstrInfo::storeRegToAddr( 392c7029805ef35ce9805931067b841e6af11db382eChris Lattner MachineFunction &MF, unsigned SrcReg, 393c7029805ef35ce9805931067b841e6af11db382eChris Lattner bool isKill, 394c7029805ef35ce9805931067b841e6af11db382eChris Lattner SmallVectorImpl<MachineOperand> &Addr, 395c7029805ef35ce9805931067b841e6af11db382eChris Lattner const TargetRegisterClass *RC, 396c7029805ef35ce9805931067b841e6af11db382eChris Lattner SmallVectorImpl<MachineInstr*> &NewMIs) const 397c7029805ef35ce9805931067b841e6af11db382eChris Lattner{ 398c7029805ef35ce9805931067b841e6af11db382eChris Lattner llvm_unreachable("Unimplemented"); 399c7029805ef35ce9805931067b841e6af11db382eChris Lattner} 400c7029805ef35ce9805931067b841e6af11db382eChris Lattner 401c7029805ef35ce9805931067b841e6af11db382eChris Lattner 402c7029805ef35ce9805931067b841e6af11db382eChris Lattnervoid HexagonInstrInfo:: 403c7029805ef35ce9805931067b841e6af11db382eChris LattnerloadRegFromStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, 404c7029805ef35ce9805931067b841e6af11db382eChris Lattner unsigned DestReg, int FI, 405c7029805ef35ce9805931067b841e6af11db382eChris Lattner const TargetRegisterClass *RC, 406c7029805ef35ce9805931067b841e6af11db382eChris Lattner const TargetRegisterInfo *TRI) const { 407c7029805ef35ce9805931067b841e6af11db382eChris Lattner DebugLoc DL = MBB.findDebugLoc(I); 408c7029805ef35ce9805931067b841e6af11db382eChris Lattner MachineFunction &MF = *MBB.getParent(); 409c7029805ef35ce9805931067b841e6af11db382eChris Lattner MachineFrameInfo &MFI = *MF.getFrameInfo(); 410c7029805ef35ce9805931067b841e6af11db382eChris Lattner unsigned Align = MFI.getObjectAlignment(FI); 411c7029805ef35ce9805931067b841e6af11db382eChris Lattner 412c7029805ef35ce9805931067b841e6af11db382eChris Lattner MachineMemOperand *MMO = 4134794a6b6a09e3440438cd653ec09cf0c2e45be1cChris Lattner MF.getMachineMemOperand( 414c7029805ef35ce9805931067b841e6af11db382eChris Lattner MachinePointerInfo(PseudoSourceValue::getFixedStack(FI)), 415c7029805ef35ce9805931067b841e6af11db382eChris Lattner MachineMemOperand::MOLoad, 416c7029805ef35ce9805931067b841e6af11db382eChris Lattner MFI.getObjectSize(FI), 417c7029805ef35ce9805931067b841e6af11db382eChris Lattner Align); 418c7029805ef35ce9805931067b841e6af11db382eChris Lattner 4196831a815999dde4cf801e2076e66b4943964daf2Chris Lattner if (RC == Hexagon::IntRegsRegisterClass) { 4206831a815999dde4cf801e2076e66b4943964daf2Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::LDriw), DestReg) 421c7029805ef35ce9805931067b841e6af11db382eChris Lattner .addFrameIndex(FI).addImm(0).addMemOperand(MMO); 422c7029805ef35ce9805931067b841e6af11db382eChris Lattner } else if (RC == Hexagon::DoubleRegsRegisterClass) { 423c7029805ef35ce9805931067b841e6af11db382eChris Lattner BuildMI(MBB, I, DL, get(Hexagon::LDrid), DestReg) 4243e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner .addFrameIndex(FI).addImm(0).addMemOperand(MMO); 425c9c60f6429416d362c2131b14d097ce0a9ac9599Chris Lattner } else if (RC == Hexagon::PredRegsRegisterClass) { 426e3304a3d24afc952d3cb415d1b504d973573c5c5Chris Lattner BuildMI(MBB, I, DL, get(Hexagon::LDriw_pred), DestReg) 42745982dad53cd184fe8947a1b0206b0b16964f359Chris Lattner .addFrameIndex(FI).addImm(0).addMemOperand(MMO); 428e3304a3d24afc952d3cb415d1b504d973573c5c5Chris Lattner } else { 4293e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner llvm_unreachable("Can't store this register to stack slot"); 430e3304a3d24afc952d3cb415d1b504d973573c5c5Chris Lattner } 43145982dad53cd184fe8947a1b0206b0b16964f359Chris Lattner} 43245982dad53cd184fe8947a1b0206b0b16964f359Chris Lattner 433c7029805ef35ce9805931067b841e6af11db382eChris Lattner 434c7029805ef35ce9805931067b841e6af11db382eChris Lattnervoid HexagonInstrInfo::loadRegFromAddr(MachineFunction &MF, unsigned DestReg, 4353e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner SmallVectorImpl<MachineOperand> &Addr, 436c7029805ef35ce9805931067b841e6af11db382eChris Lattner const TargetRegisterClass *RC, 43703c8546ec57523970874917854a2fb77b1ff598eChris Lattner SmallVectorImpl<MachineInstr*> &NewMIs) const { 4383e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner llvm_unreachable("Unimplemented"); 4393e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner} 4403e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 44145982dad53cd184fe8947a1b0206b0b16964f359Chris Lattner 44245982dad53cd184fe8947a1b0206b0b16964f359Chris LattnerMachineInstr *HexagonInstrInfo::foldMemoryOperandImpl(MachineFunction &MF, 443e1bd822ddb0099406d9f280535461033dfeeb190Chris Lattner MachineInstr* MI, 444e1bd822ddb0099406d9f280535461033dfeeb190Chris Lattner const SmallVectorImpl<unsigned> &Ops, 4453e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner int FI) const { 4469373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman // Hexagon_TODO: Implement. 4473e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return(0); 448456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner} 449456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner 4503e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 451948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattnerunsigned HexagonInstrInfo::createVR(MachineFunction* MF, MVT VT) const { 452948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner 453948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner MachineRegisterInfo &RegInfo = MF->getRegInfo(); 454948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner const TargetRegisterClass *TRC; 455948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner if (VT == MVT::i1) { 456948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner TRC = Hexagon::PredRegsRegisterClass; 4573181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner } else if (VT == MVT::i32) { 458948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner TRC = Hexagon::IntRegsRegisterClass; 459948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner } else if (VT == MVT::i64) { 460948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner TRC = Hexagon::DoubleRegsRegisterClass; 461948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner } else { 462948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner llvm_unreachable("Cannot handle this register class"); 463948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner } 464948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner 465948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner unsigned NewReg = RegInfo.createVirtualRegister(TRC); 466948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner return NewReg; 467948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner} 468948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner 4693e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 470d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner 471d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattnerbool HexagonInstrInfo::isPredicable(MachineInstr *MI) const { 472d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner bool isPred = MI->getDesc().isPredicable(); 473d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner 474d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner if (!isPred) 475d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner return false; 476d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner 477d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner const int Opc = MI->getOpcode(); 478d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner 479d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner switch(Opc) { 480d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner case Hexagon::TFRI: 481d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner return isInt<12>(MI->getOperand(1).getImm()); 482d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner 483d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner case Hexagon::STrid: 484d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner case Hexagon::STrid_indexed: 485d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner return isShiftedUInt<6,3>(MI->getOperand(1).getImm()); 486d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner 487d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner case Hexagon::STriw: 488d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner case Hexagon::STriw_indexed: 489d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner case Hexagon::STriw_nv_V4: 490d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner return isShiftedUInt<6,2>(MI->getOperand(1).getImm()); 491d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner 492d73cc5d0585e86bf6d350ab9fd9caf85bdfc8b52Chris Lattner case Hexagon::STrih: 4933e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::STrih_indexed: 4943e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::STrih_nv_V4: 4953e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return isShiftedUInt<6,1>(MI->getOperand(1).getImm()); 4963e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 49703c0cf822e9a57109d1b4e6a2705d68852c93e1dChris Lattner case Hexagon::STrib: 49869a52155d2eff066b49dbac385113002fd9dba14Chris Lattner case Hexagon::STrib_indexed: 4990c8fbe33a4bdf7c60e0cfd5a9c86499c817d9f1aChris Lattner case Hexagon::STrib_nv_V4: 5000c8fbe33a4bdf7c60e0cfd5a9c86499c817d9f1aChris Lattner return isUInt<6>(MI->getOperand(1).getImm()); 501948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner 502948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner case Hexagon::LDrid: 503948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner case Hexagon::LDrid_indexed: 504948c1b1cda280c6428dbeaa03a6c2c559dbb93f4Chris Lattner return isShiftedUInt<6,3>(MI->getOperand(2).getImm()); 5050c8fbe33a4bdf7c60e0cfd5a9c86499c817d9f1aChris Lattner 5060c8fbe33a4bdf7c60e0cfd5a9c86499c817d9f1aChris Lattner case Hexagon::LDriw: 5070c8fbe33a4bdf7c60e0cfd5a9c86499c817d9f1aChris Lattner case Hexagon::LDriw_indexed: 5083e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return isShiftedUInt<6,2>(MI->getOperand(2).getImm()); 50908951a32fbc1de3ec3746e14109a74ca506ca251Chris Lattner 51008951a32fbc1de3ec3746e14109a74ca506ca251Chris Lattner case Hexagon::LDrih: 51108951a32fbc1de3ec3746e14109a74ca506ca251Chris Lattner case Hexagon::LDriuh: 512c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::LDrih_indexed: 51308951a32fbc1de3ec3746e14109a74ca506ca251Chris Lattner case Hexagon::LDriuh_indexed: 514308575be66ec3870d27b19df044fda18448feb41Chris Lattner return isShiftedUInt<6,1>(MI->getOperand(2).getImm()); 515c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner 516456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDrib: 517456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriub: 51869a52155d2eff066b49dbac385113002fd9dba14Chris Lattner case Hexagon::LDrib_indexed: 51969a52155d2eff066b49dbac385113002fd9dba14Chris Lattner case Hexagon::LDriub_indexed: 5207310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner return isUInt<6>(MI->getOperand(2).getImm()); 521f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner 522c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::POST_LDrid: 5237310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner return isShiftedInt<4,3>(MI->getOperand(3).getImm()); 524f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner 525c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::POST_LDriw: 526f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner return isShiftedInt<4,2>(MI->getOperand(3).getImm()); 527c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner 528c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::POST_LDrih: 529c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::POST_LDriuh: 530c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return isShiftedInt<4,1>(MI->getOperand(3).getImm()); 5317310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner 5327310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner case Hexagon::POST_LDrib: 53313c184de29c09294ed63b01ac43e1b46c049278eChris Lattner case Hexagon::POST_LDriub: 53413c184de29c09294ed63b01ac43e1b46c049278eChris Lattner return isInt<4>(MI->getOperand(3).getImm()); 53513c184de29c09294ed63b01ac43e1b46c049278eChris Lattner 53613c184de29c09294ed63b01ac43e1b46c049278eChris Lattner case Hexagon::STrib_imm_V4: 53713c184de29c09294ed63b01ac43e1b46c049278eChris Lattner case Hexagon::STrih_imm_V4: 538fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman case Hexagon::STriw_imm_V4: 539fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman return (isUInt<6>(MI->getOperand(1).getImm()) && 540fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman isInt<6>(MI->getOperand(2).getImm())); 541ea19cd51aaf87c5cc19e7cdc2c32ddbefcac7b8fNate Begeman 542ea19cd51aaf87c5cc19e7cdc2c32ddbefcac7b8fNate Begeman case Hexagon::ADD_ri: 543fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman return isInt<8>(MI->getOperand(2).getImm()); 544fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman 545fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman case Hexagon::ASLH: 546fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman case Hexagon::ASRH: 547fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman case Hexagon::SXTB: 548fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman case Hexagon::SXTH: 549fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman case Hexagon::ZXTB: 550ea19cd51aaf87c5cc19e7cdc2c32ddbefcac7b8fNate Begeman case Hexagon::ZXTH: 551fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman return Subtarget.getHexagonArchVersion() == HexagonSubtarget::V4; 552fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman 553fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman case Hexagon::JMPR: 554fc1b1dad88a256ab5ab16dd548ad82df8efa2ca9Nate Begeman return false; 555d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner } 556d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner 557d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner return true; 558d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner} 559d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner 560d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattnerunsigned HexagonInstrInfo::getInvertedPredicatedOpcode(const int Opc) const { 561d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner switch(Opc) { 562d1f04d40a078d6ca7c876b16a178992a109af774Chris Lattner case Hexagon::TFR_cPt: 56336ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner return Hexagon::TFR_cNotPt; 56436ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner case Hexagon::TFR_cNotPt: 56536ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner return Hexagon::TFR_cPt; 56636ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner 56736ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner case Hexagon::TFRI_cPt: 56836ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner return Hexagon::TFRI_cNotPt; 56936ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner case Hexagon::TFRI_cNotPt: 57036ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner return Hexagon::TFRI_cPt; 571f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey 572b2efb853f00d45b1c8d57f92acd0028fbdeffda6Jim Laskey case Hexagon::JMP_c: 573abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::JMP_cNot; 574abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::JMP_cNot: 575abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::JMP_c; 576abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey 577abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::ADD_ri_cPt: 578e81aecbae69d4b3bd24523ec87673632d3b0beecJim Laskey return Hexagon::ADD_ri_cNotPt; 579abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::ADD_ri_cNotPt: 580e81aecbae69d4b3bd24523ec87673632d3b0beecJim Laskey return Hexagon::ADD_ri_cPt; 581063e765345fd49df0f53b807e57ada7c2ded7e16Jim Laskey 582abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::ADD_rr_cPt: 583abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::ADD_rr_cNotPt; 584abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::ADD_rr_cNotPt: 585abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::ADD_rr_cPt; 586abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey 587abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::XOR_rr_cPt: 588abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::XOR_rr_cNotPt; 589abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::XOR_rr_cNotPt: 590abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::XOR_rr_cPt; 591abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey 592abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::AND_rr_cPt: 593abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::AND_rr_cNotPt; 594d0e58e36a9857c45ecdc910ec8db04c21e143db5Jim Laskey case Hexagon::AND_rr_cNotPt: 595d0e58e36a9857c45ecdc910ec8db04c21e143db5Jim Laskey return Hexagon::AND_rr_cPt; 596abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey 597abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::OR_rr_cPt: 598abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::OR_rr_cNotPt; 599abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::OR_rr_cNotPt: 600e81aecbae69d4b3bd24523ec87673632d3b0beecJim Laskey return Hexagon::OR_rr_cPt; 601e81aecbae69d4b3bd24523ec87673632d3b0beecJim Laskey 602e81aecbae69d4b3bd24523ec87673632d3b0beecJim Laskey case Hexagon::SUB_rr_cPt: 60336ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner return Hexagon::SUB_rr_cNotPt; 604e773673d8e0094bbff2f9ab2f2da9ecb5c4d0909Chris Lattner case Hexagon::SUB_rr_cNotPt: 60536ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner return Hexagon::SUB_rr_cPt; 6069ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner 6079ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner case Hexagon::COMBINE_rr_cPt: 60836ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner return Hexagon::COMBINE_rr_cNotPt; 60936ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner case Hexagon::COMBINE_rr_cNotPt: 6109ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner return Hexagon::COMBINE_rr_cPt; 6119ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner 6129ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner case Hexagon::ASLH_cPt_V4: 6139ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner return Hexagon::ASLH_cNotPt_V4; 6149ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner case Hexagon::ASLH_cNotPt_V4: 6159ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner return Hexagon::ASLH_cPt_V4; 6169ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner 6179ad17c9c9abfd6e011751d2fd2b03448e1dccb71Chris Lattner case Hexagon::ASRH_cPt_V4: 61836ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner return Hexagon::ASRH_cNotPt_V4; 61936ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner case Hexagon::ASRH_cNotPt_V4: 620c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return Hexagon::ASRH_cPt_V4; 62136ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner 62236ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner case Hexagon::SXTB_cPt_V4: 62336ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner return Hexagon::SXTB_cNotPt_V4; 62436ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner case Hexagon::SXTB_cNotPt_V4: 625f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey return Hexagon::SXTB_cPt_V4; 626f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey 627abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::SXTH_cPt_V4: 628f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey return Hexagon::SXTH_cNotPt_V4; 629f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey case Hexagon::SXTH_cNotPt_V4: 630abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::SXTH_cPt_V4; 631abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey 632abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::ZXTB_cPt_V4: 633abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::ZXTB_cNotPt_V4; 634abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::ZXTB_cNotPt_V4: 635c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return Hexagon::ZXTB_cPt_V4; 636abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey 637abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::ZXTH_cPt_V4: 638abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::ZXTH_cNotPt_V4; 639abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::ZXTH_cNotPt_V4: 640abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::ZXTH_cPt_V4; 641abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey 642abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey 643abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::JMPR_cPt: 644abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::JMPR_cNotPt; 645abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey case Hexagon::JMPR_cNotPt: 646abf6d1784b2d4bbcb7d20ab64881f77d755059f6Jim Laskey return Hexagon::JMPR_cPt; 647c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner 648f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey // V4 indexed+scaled load. 649f5395cee6a24699a016b2e379cf4804b09ce5030Jim Laskey case Hexagon::LDrid_indexed_cPt_V4: 650551bf3f80058a026b6a128dffd5530019e1df1b9Nate Begeman return Hexagon::LDrid_indexed_cNotPt_V4; 65136ce69195ed488034d0bb11180cc2ebd923679c8Chris Lattner case Hexagon::LDrid_indexed_cNotPt_V4: 6523e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDrid_indexed_cPt_V4; 6533e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 6543e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDrid_indexed_shl_cPt_V4: 6553e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDrid_indexed_shl_cNotPt_V4; 6563e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDrid_indexed_shl_cNotPt_V4: 6573e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDrid_indexed_shl_cPt_V4; 6583e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 6593e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDrib_indexed_cPt_V4: 6603e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDrib_indexed_cNotPt_V4; 6613e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDrib_indexed_cNotPt_V4: 6623e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDrib_indexed_cPt_V4; 6633e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 6643e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDriub_indexed_cPt_V4: 6653e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDriub_indexed_cNotPt_V4; 6663e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDriub_indexed_cNotPt_V4: 6673e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDriub_indexed_cPt_V4; 6683e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 6693e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDrib_indexed_shl_cPt_V4: 6703e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDrib_indexed_shl_cNotPt_V4; 6713e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDrib_indexed_shl_cNotPt_V4: 6723e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDrib_indexed_shl_cPt_V4; 6733e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 6743e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDriub_indexed_shl_cPt_V4: 6753181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner return Hexagon::LDriub_indexed_shl_cNotPt_V4; 6763181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner case Hexagon::LDriub_indexed_shl_cNotPt_V4: 6773181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner return Hexagon::LDriub_indexed_shl_cPt_V4; 6783181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner 6793181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner case Hexagon::LDrih_indexed_cPt_V4: 6803181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner return Hexagon::LDrih_indexed_cNotPt_V4; 6813181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner case Hexagon::LDrih_indexed_cNotPt_V4: 6823181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner return Hexagon::LDrih_indexed_cPt_V4; 6833181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner 6843181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner case Hexagon::LDriuh_indexed_cPt_V4: 6853181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner return Hexagon::LDriuh_indexed_cNotPt_V4; 6863181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner case Hexagon::LDriuh_indexed_cNotPt_V4: 6873181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner return Hexagon::LDriuh_indexed_cPt_V4; 6883181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner 6893181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner case Hexagon::LDrih_indexed_shl_cPt_V4: 6903181a771ff5b2090b7ed55f9b18a684ea8fe625aChris Lattner return Hexagon::LDrih_indexed_shl_cNotPt_V4; 6913e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDrih_indexed_shl_cNotPt_V4: 6923e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDrih_indexed_shl_cPt_V4; 6933e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 694456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriuh_indexed_shl_cPt_V4: 695456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner return Hexagon::LDriuh_indexed_shl_cNotPt_V4; 696456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriuh_indexed_shl_cNotPt_V4: 697456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner return Hexagon::LDriuh_indexed_shl_cPt_V4; 6983e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 6993e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDriw_indexed_cPt_V4: 7003e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDriw_indexed_cNotPt_V4; 7013e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDriw_indexed_cNotPt_V4: 70299939d39c9555ebecbcd24c1b607eae52804ea37Chris Lattner return Hexagon::LDriw_indexed_cPt_V4; 70399939d39c9555ebecbcd24c1b607eae52804ea37Chris Lattner 70499939d39c9555ebecbcd24c1b607eae52804ea37Chris Lattner case Hexagon::LDriw_indexed_shl_cPt_V4: 705c9c60f6429416d362c2131b14d097ce0a9ac9599Chris Lattner return Hexagon::LDriw_indexed_shl_cNotPt_V4; 7063e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDriw_indexed_shl_cNotPt_V4: 7073e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::LDriw_indexed_shl_cPt_V4; 7083e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 7093e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner // Byte. 710edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman case Hexagon::POST_STbri_cPt: 711456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner return Hexagon::POST_STbri_cNotPt; 712f8161d83f0201a32a33a0c875eb43df81d8586abChris Lattner case Hexagon::POST_STbri_cNotPt: 7135f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner return Hexagon::POST_STbri_cPt; 7145f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner 715f8161d83f0201a32a33a0c875eb43df81d8586abChris Lattner case Hexagon::STrib_cPt: 71652d08bd9d8a8dcc06148525c7fad6f2ebcad0a42Chris Lattner return Hexagon::STrib_cNotPt; 71752d08bd9d8a8dcc06148525c7fad6f2ebcad0a42Chris Lattner case Hexagon::STrib_cNotPt: 718f8161d83f0201a32a33a0c875eb43df81d8586abChris Lattner return Hexagon::STrib_cPt; 7193e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 7203e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::STrib_indexed_cPt: 7213e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return Hexagon::STrib_indexed_cNotPt; 722040c11c24e9f6c172eaf680e135d9bb466c284b2Chris Lattner case Hexagon::STrib_indexed_cNotPt: 723040c11c24e9f6c172eaf680e135d9bb466c284b2Chris Lattner return Hexagon::STrib_indexed_cPt; 724c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner 725c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::STrib_imm_cPt_V4: 726c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return Hexagon::STrib_imm_cNotPt_V4; 727c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::STrib_imm_cNotPt_V4: 728c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return Hexagon::STrib_imm_cPt_V4; 729c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner 730c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::STrib_indexed_shl_cPt_V4: 731c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return Hexagon::STrib_indexed_shl_cNotPt_V4; 732040c11c24e9f6c172eaf680e135d9bb466c284b2Chris Lattner case Hexagon::STrib_indexed_shl_cNotPt_V4: 733040c11c24e9f6c172eaf680e135d9bb466c284b2Chris Lattner return Hexagon::STrib_indexed_shl_cPt_V4; 734040c11c24e9f6c172eaf680e135d9bb466c284b2Chris Lattner 735c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner // Halfword. 736c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::POST_SThri_cPt: 737c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return Hexagon::POST_SThri_cNotPt; 738a385e9b20fa7d37d3842ce15afd412f617d83a27Chris Lattner case Hexagon::POST_SThri_cNotPt: 739a385e9b20fa7d37d3842ce15afd412f617d83a27Chris Lattner return Hexagon::POST_SThri_cPt; 740a385e9b20fa7d37d3842ce15afd412f617d83a27Chris Lattner 741b2827b0901162169bb2692b77a839c9767849134Chris Lattner case Hexagon::STrih_cPt: 742b2827b0901162169bb2692b77a839c9767849134Chris Lattner return Hexagon::STrih_cNotPt; 7432332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STrih_cNotPt: 7442332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STrih_cPt; 7452332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner 7462332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STrih_indexed_cPt: 7472332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STrih_indexed_cNotPt; 7482332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STrih_indexed_cNotPt: 7492332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STrih_indexed_cPt; 7502332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner 751ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner case Hexagon::STrih_imm_cPt_V4: 752ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner return Hexagon::STrih_imm_cNotPt_V4; 753b2827b0901162169bb2692b77a839c9767849134Chris Lattner case Hexagon::STrih_imm_cNotPt_V4: 7542332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STrih_imm_cPt_V4; 7552332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner 7562332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STrih_indexed_shl_cPt_V4: 7572332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STrih_indexed_shl_cNotPt_V4; 7582332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STrih_indexed_shl_cNotPt_V4: 7592332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STrih_indexed_shl_cPt_V4; 7602332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner 7612332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner // Word. 7622332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::POST_STwri_cPt: 7632332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::POST_STwri_cNotPt; 7642332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::POST_STwri_cNotPt: 7652332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::POST_STwri_cPt; 7662332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner 7672332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STriw_cPt: 7682332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STriw_cNotPt; 7692332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STriw_cNotPt: 7702332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STriw_cPt; 7712332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner 7722332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STriw_indexed_cPt: 7732332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STriw_indexed_cNotPt; 7742332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STriw_indexed_cNotPt: 7752332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STriw_indexed_cPt; 7762332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner 7772332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STriw_indexed_shl_cPt_V4: 7782332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STriw_indexed_shl_cNotPt_V4; 7792332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STriw_indexed_shl_cNotPt_V4: 7802332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STriw_indexed_shl_cPt_V4; 7812332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner 7822332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STriw_imm_cPt_V4: 7832332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STriw_imm_cNotPt_V4; 7842332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner case Hexagon::STriw_imm_cNotPt_V4: 7852332b9f16fe17d1886566729b2241b8cd90f9916Chris Lattner return Hexagon::STriw_imm_cPt_V4; 786ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner 787ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner // Double word. 788ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner case Hexagon::POST_STdri_cPt: 789ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner return Hexagon::POST_STdri_cNotPt; 790ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner case Hexagon::POST_STdri_cNotPt: 791ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner return Hexagon::POST_STdri_cPt; 792ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner 793ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner case Hexagon::STrid_cPt: 7944d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner return Hexagon::STrid_cNotPt; 7954d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner case Hexagon::STrid_cNotPt: 7964d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner return Hexagon::STrid_cPt; 7974d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner 7984d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner case Hexagon::STrid_indexed_cPt: 7994d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner return Hexagon::STrid_indexed_cNotPt; 8004d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner case Hexagon::STrid_indexed_cNotPt: 801ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner return Hexagon::STrid_indexed_cPt; 802ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner 803ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner case Hexagon::STrid_indexed_shl_cPt_V4: 8044d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner return Hexagon::STrid_indexed_shl_cNotPt_V4; 8054d3abee6183f110c9db56b94b0a4b5f8c985002aChris Lattner case Hexagon::STrid_indexed_shl_cNotPt_V4: 806ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner return Hexagon::STrid_indexed_shl_cPt_V4; 807ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner 808ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner // Load. 809ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner case Hexagon::LDrid_cPt: 810ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner return Hexagon::LDrid_cNotPt; 811ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner case Hexagon::LDrid_cNotPt: 812ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner return Hexagon::LDrid_cPt; 813ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner 814ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner case Hexagon::LDriw_cPt: 815ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner return Hexagon::LDriw_cNotPt; 816ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner case Hexagon::LDriw_cNotPt: 817ce87215131efcc68dcf7fca61055ad783a7aeb0eChris Lattner return Hexagon::LDriw_cPt; 81887100e0b83b808757bf44dabecd1d1048255d1adChris Lattner 81987100e0b83b808757bf44dabecd1d1048255d1adChris Lattner case Hexagon::LDrih_cPt: 82087100e0b83b808757bf44dabecd1d1048255d1adChris Lattner return Hexagon::LDrih_cNotPt; 82187100e0b83b808757bf44dabecd1d1048255d1adChris Lattner case Hexagon::LDrih_cNotPt: 82287100e0b83b808757bf44dabecd1d1048255d1adChris Lattner return Hexagon::LDrih_cPt; 82387100e0b83b808757bf44dabecd1d1048255d1adChris Lattner 82487100e0b83b808757bf44dabecd1d1048255d1adChris Lattner case Hexagon::LDriuh_cPt: 82587100e0b83b808757bf44dabecd1d1048255d1adChris Lattner return Hexagon::LDriuh_cNotPt; 82687100e0b83b808757bf44dabecd1d1048255d1adChris Lattner case Hexagon::LDriuh_cNotPt: 82787100e0b83b808757bf44dabecd1d1048255d1adChris Lattner return Hexagon::LDriuh_cPt; 82887100e0b83b808757bf44dabecd1d1048255d1adChris Lattner 82987100e0b83b808757bf44dabecd1d1048255d1adChris Lattner case Hexagon::LDrib_cPt: 83087100e0b83b808757bf44dabecd1d1048255d1adChris Lattner return Hexagon::LDrib_cNotPt; 83187100e0b83b808757bf44dabecd1d1048255d1adChris Lattner case Hexagon::LDrib_cNotPt: 832384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::LDrib_cPt; 833384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner 834384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::LDriub_cPt: 835384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::LDriub_cNotPt; 836384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::LDriub_cNotPt: 837e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDriub_cPt; 838e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner 839e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner // Load Indexed. 840e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDrid_indexed_cPt: 841e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDrid_indexed_cNotPt; 842e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDrid_indexed_cNotPt: 843e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDrid_indexed_cPt; 844e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner 845e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDriw_indexed_cPt: 846e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDriw_indexed_cNotPt; 847e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDriw_indexed_cNotPt: 848e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDriw_indexed_cPt; 849e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner 850e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDrih_indexed_cPt: 851e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDrih_indexed_cNotPt; 852e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDrih_indexed_cNotPt: 853e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDrih_indexed_cPt; 854e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner 855e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDriuh_indexed_cPt: 856e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDriuh_indexed_cNotPt; 857e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDriuh_indexed_cNotPt: 858e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDriuh_indexed_cPt; 859e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner 860e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDrib_indexed_cPt: 861e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDrib_indexed_cNotPt; 862e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDrib_indexed_cNotPt: 863e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDrib_indexed_cPt; 864e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner 865e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDriub_indexed_cPt: 866e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner return Hexagon::LDriub_indexed_cNotPt; 867e35c218f3e8e15f96cb44c5fbc70c7ea20d6c962Chris Lattner case Hexagon::LDriub_indexed_cNotPt: 868384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::LDriub_indexed_cPt; 869384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner 8703b9fa89fcaf3eb08397c4c68b60c72fc73f8ab44Chris Lattner // Post Inc Load. 871384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::POST_LDrid_cPt: 872384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::POST_LDrid_cNotPt; 873384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::POST_LDriw_cNotPt: 874384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::POST_LDriw_cPt; 875384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner 876384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::POST_LDrih_cPt: 877384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::POST_LDrih_cNotPt; 878384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::POST_LDrih_cNotPt: 879384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::POST_LDrih_cPt; 880384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner 881384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::POST_LDriuh_cPt: 882384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::POST_LDriuh_cNotPt; 883384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::POST_LDriuh_cNotPt: 884384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::POST_LDriuh_cPt; 885384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner 886384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::POST_LDrib_cPt: 887384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::POST_LDrib_cNotPt; 888384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::POST_LDrib_cNotPt: 889384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::POST_LDrib_cPt; 890384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner 891384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::POST_LDriub_cPt: 892384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::POST_LDriub_cNotPt; 893384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::POST_LDriub_cNotPt: 894384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::POST_LDriub_cPt; 895384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner 896384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner // Dealloc_return. 897384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::DEALLOC_RET_cPt_V4: 898384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::DEALLOC_RET_cNotPt_V4; 899384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::DEALLOC_RET_cNotPt_V4: 900384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::DEALLOC_RET_cPt_V4; 901384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner 902384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner // New Value Jump. 903384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner // JMPEQ_ri - with -1. 904384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::JMP_EQriPtneg_nv_V4: 905384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::JMP_EQriNotPtneg_nv_V4; 906384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::JMP_EQriNotPtneg_nv_V4: 907384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::JMP_EQriPtneg_nv_V4; 9083b9fa89fcaf3eb08397c4c68b60c72fc73f8ab44Chris Lattner 909384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::JMP_EQriPntneg_nv_V4: 910384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner return Hexagon::JMP_EQriNotPntneg_nv_V4; 911384504cea6c392125a2318d8bbb7f25aa0bbff7eChris Lattner case Hexagon::JMP_EQriNotPntneg_nv_V4: 9123b9fa89fcaf3eb08397c4c68b60c72fc73f8ab44Chris Lattner return Hexagon::JMP_EQriPntneg_nv_V4; 91387100e0b83b808757bf44dabecd1d1048255d1adChris Lattner 9146831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // JMPEQ_ri. 9156831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_EQriPt_nv_V4: 9166831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_EQriNotPt_nv_V4; 9176831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_EQriNotPt_nv_V4: 9186831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_EQriPt_nv_V4; 9196831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 9206831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_EQriPnt_nv_V4: 9216831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_EQriNotPnt_nv_V4; 9226831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_EQriNotPnt_nv_V4: 9236831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_EQriPnt_nv_V4; 9246831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 9256831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // JMPEQ_rr. 9266831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_EQrrPt_nv_V4: 9276831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_EQrrNotPt_nv_V4; 9286831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_EQrrNotPt_nv_V4: 9296831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_EQrrPt_nv_V4; 9306831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 9316831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_EQrrPnt_nv_V4: 9326831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_EQrrNotPnt_nv_V4; 9336831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_EQrrNotPnt_nv_V4: 9346831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_EQrrPnt_nv_V4; 9356831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 9366831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // JMPGT_ri - with -1. 9376831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTriPtneg_nv_V4: 9386831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTriNotPtneg_nv_V4; 9396831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTriNotPtneg_nv_V4: 9404b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner return Hexagon::JMP_GTriPtneg_nv_V4; 9414b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner 9424b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner case Hexagon::JMP_GTriPntneg_nv_V4: 9434b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner return Hexagon::JMP_GTriNotPntneg_nv_V4; 9446831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTriNotPntneg_nv_V4: 9456831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTriPntneg_nv_V4; 9466831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 9476831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // JMPGT_ri. 9486831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTriPt_nv_V4: 9496831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTriNotPt_nv_V4; 9506831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTriNotPt_nv_V4: 9516831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTriPt_nv_V4; 9526831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 9536831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTriPnt_nv_V4: 9546831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTriNotPnt_nv_V4; 9556831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTriNotPnt_nv_V4: 9566831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTriPnt_nv_V4; 9576831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 9586831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // JMPGT_rr. 95916cd04d26c53c6f81313cafb85f6c0e7a07cdff6Chris Lattner case Hexagon::JMP_GTrrPt_nv_V4: 9606831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTrrNotPt_nv_V4; 9616831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTrrNotPt_nv_V4: 9626831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTrrPt_nv_V4; 9636831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 9646831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTrrPnt_nv_V4: 9656831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTrrNotPnt_nv_V4; 9666831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTrrNotPnt_nv_V4: 9676831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTrrPnt_nv_V4; 9686831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 9696831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // JMPGT_rrdn. 9706831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTrrdnPt_nv_V4: 9716831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTrrdnNotPt_nv_V4; 9723e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::JMP_GTrrdnNotPt_nv_V4: 97370814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner return Hexagon::JMP_GTrrdnPt_nv_V4; 97470814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner 97570814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner case Hexagon::JMP_GTrrdnPnt_nv_V4: 97670814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner return Hexagon::JMP_GTrrdnNotPnt_nv_V4; 97770814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner case Hexagon::JMP_GTrrdnNotPnt_nv_V4: 97870814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner return Hexagon::JMP_GTrrdnPnt_nv_V4; 97970814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner 98070814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner // JMPGTU_ri. 98170814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner case Hexagon::JMP_GTUriPt_nv_V4: 98270814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner return Hexagon::JMP_GTUriNotPt_nv_V4; 98370814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner case Hexagon::JMP_GTUriNotPt_nv_V4: 98470814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner return Hexagon::JMP_GTUriPt_nv_V4; 98570814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner 98670814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner case Hexagon::JMP_GTUriPnt_nv_V4: 98770814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner return Hexagon::JMP_GTUriNotPnt_nv_V4; 98870814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner case Hexagon::JMP_GTUriNotPnt_nv_V4: 98970814bc38435d61a8c7cc32f2375c09e21f12a8aChris Lattner return Hexagon::JMP_GTUriPnt_nv_V4; 9906a5428934ba6159c1acc541944332e51a6cfa59aChris Lattner 9914b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner // JMPGTU_rr. 9926831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMP_GTUrrPt_nv_V4: 9936831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return Hexagon::JMP_GTUrrNotPt_nv_V4; 9944b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner case Hexagon::JMP_GTUrrNotPt_nv_V4: 9954b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner return Hexagon::JMP_GTUrrPt_nv_V4; 9964b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner 9974b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner case Hexagon::JMP_GTUrrPnt_nv_V4: 9984b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner return Hexagon::JMP_GTUrrNotPnt_nv_V4; 9994b653a0405bb16b555334d134c1eb8a97366ec3dChris Lattner case Hexagon::JMP_GTUrrNotPnt_nv_V4: 1000a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng return Hexagon::JMP_GTUrrPnt_nv_V4; 1001fa404e8a76abfdafefb8806b35f596d288609496Chris Lattner 1002fa404e8a76abfdafefb8806b35f596d288609496Chris Lattner // JMPGTU_rrdn. 1003fa404e8a76abfdafefb8806b35f596d288609496Chris Lattner case Hexagon::JMP_GTUrrdnPt_nv_V4: 1004c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return Hexagon::JMP_GTUrrdnNotPt_nv_V4; 1005fa404e8a76abfdafefb8806b35f596d288609496Chris Lattner case Hexagon::JMP_GTUrrdnNotPt_nv_V4: 1006c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return Hexagon::JMP_GTUrrdnPt_nv_V4; 10075f652295c27826f26547cf5eb4096a59d86b56b8Chris Lattner 1008a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng case Hexagon::JMP_GTUrrdnPnt_nv_V4: 1009a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng return Hexagon::JMP_GTUrrdnNotPnt_nv_V4; 1010a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng case Hexagon::JMP_GTUrrdnNotPnt_nv_V4: 1011903d278a9b7398d8905c90832e587e0556c52789Chris Lattner return Hexagon::JMP_GTUrrdnPnt_nv_V4; 1012903d278a9b7398d8905c90832e587e0556c52789Chris Lattner 1013903d278a9b7398d8905c90832e587e0556c52789Chris Lattner default: 1014903d278a9b7398d8905c90832e587e0556c52789Chris Lattner llvm_unreachable("Unexpected predicated instruction"); 1015903d278a9b7398d8905c90832e587e0556c52789Chris Lattner } 1016903d278a9b7398d8905c90832e587e0556c52789Chris Lattner} 1017903d278a9b7398d8905c90832e587e0556c52789Chris Lattner 1018903d278a9b7398d8905c90832e587e0556c52789Chris Lattner 1019903d278a9b7398d8905c90832e587e0556c52789Chris Lattnerint HexagonInstrInfo:: 1020c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris LattnergetMatchingCondBranchOpcode(int Opc, bool invertPredicate) const { 1021c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner switch(Opc) { 1022903d278a9b7398d8905c90832e587e0556c52789Chris Lattner case Hexagon::TFR: 1023903d278a9b7398d8905c90832e587e0556c52789Chris Lattner return !invertPredicate ? Hexagon::TFR_cPt : 1024903d278a9b7398d8905c90832e587e0556c52789Chris Lattner Hexagon::TFR_cNotPt; 10255f652295c27826f26547cf5eb4096a59d86b56b8Chris Lattner case Hexagon::TFRI: 10265f652295c27826f26547cf5eb4096a59d86b56b8Chris Lattner return !invertPredicate ? Hexagon::TFRI_cPt : 1027c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::TFRI_cNotPt; 1028c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::JMP: 1029a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng return !invertPredicate ? Hexagon::JMP_c : 1030903d278a9b7398d8905c90832e587e0556c52789Chris Lattner Hexagon::JMP_cNot; 1031a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng case Hexagon::ADD_ri: 1032903d278a9b7398d8905c90832e587e0556c52789Chris Lattner return !invertPredicate ? Hexagon::ADD_ri_cPt : 1033a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng Hexagon::ADD_ri_cNotPt; 1034903d278a9b7398d8905c90832e587e0556c52789Chris Lattner case Hexagon::ADD_rr: 1035903d278a9b7398d8905c90832e587e0556c52789Chris Lattner return !invertPredicate ? Hexagon::ADD_rr_cPt : 1036c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::ADD_rr_cNotPt; 1037c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::XOR_rr: 1038903d278a9b7398d8905c90832e587e0556c52789Chris Lattner return !invertPredicate ? Hexagon::XOR_rr_cPt : 1039a7dce3c6c29fb9513d215c1bc44b01865571b4c2Evan Cheng Hexagon::XOR_rr_cNotPt; 1040ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner case Hexagon::AND_rr: 1041ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner return !invertPredicate ? Hexagon::AND_rr_cPt : 1042ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner Hexagon::AND_rr_cNotPt; 1043c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::OR_rr: 1044ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner return !invertPredicate ? Hexagon::OR_rr_cPt : 1045ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner Hexagon::OR_rr_cNotPt; 1046ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner case Hexagon::SUB_rr: 1047ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner return !invertPredicate ? Hexagon::SUB_rr_cPt : 1048ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner Hexagon::SUB_rr_cNotPt; 1049ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner case Hexagon::COMBINE_rr: 1050ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner return !invertPredicate ? Hexagon::COMBINE_rr_cPt : 1051c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::COMBINE_rr_cNotPt; 1052c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::ASLH: 1053ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner return !invertPredicate ? Hexagon::ASLH_cPt_V4 : 1054ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner Hexagon::ASLH_cNotPt_V4; 1055ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner case Hexagon::ASRH: 1056c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::ASRH_cPt_V4 : 1057ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner Hexagon::ASRH_cNotPt_V4; 1058ce7518ce92f45568dc7d4cbb863284afb962fec5Chris Lattner case Hexagon::SXTB: 1059c7af17923e3bb6053f529679ef0be5399d3519edChris Lattner return !invertPredicate ? Hexagon::SXTB_cPt_V4 : 1060c7af17923e3bb6053f529679ef0be5399d3519edChris Lattner Hexagon::SXTB_cNotPt_V4; 10616831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::SXTH: 10626831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return !invertPredicate ? Hexagon::SXTH_cPt_V4 : 10636831a815999dde4cf801e2076e66b4943964daf2Chris Lattner Hexagon::SXTH_cNotPt_V4; 10646831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::ZXTB: 10656831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return !invertPredicate ? Hexagon::ZXTB_cPt_V4 : 1066c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::ZXTB_cNotPt_V4; 1067c7af17923e3bb6053f529679ef0be5399d3519edChris Lattner case Hexagon::ZXTH: 1068c7af17923e3bb6053f529679ef0be5399d3519edChris Lattner return !invertPredicate ? Hexagon::ZXTH_cPt_V4 : 1069c18ae4cb6a263cf31283c0ef51ace24350f8d72bChris Lattner Hexagon::ZXTH_cNotPt_V4; 1070c18ae4cb6a263cf31283c0ef51ace24350f8d72bChris Lattner 10716831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::JMPR: 10726831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return !invertPredicate ? Hexagon::JMPR_cPt : 10736831a815999dde4cf801e2076e66b4943964daf2Chris Lattner Hexagon::JMPR_cNotPt; 10746831a815999dde4cf801e2076e66b4943964daf2Chris Lattner 10756831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // V4 indexed+scaled load. 107647e9223e06390897c3834f8c527001df392570ffChris Lattner case Hexagon::LDrid_indexed_V4: 107747e9223e06390897c3834f8c527001df392570ffChris Lattner return !invertPredicate ? Hexagon::LDrid_indexed_cPt_V4 : 107847e9223e06390897c3834f8c527001df392570ffChris Lattner Hexagon::LDrid_indexed_cNotPt_V4; 107947e9223e06390897c3834f8c527001df392570ffChris Lattner case Hexagon::LDrid_indexed_shl_V4: 108047e9223e06390897c3834f8c527001df392570ffChris Lattner return !invertPredicate ? Hexagon::LDrid_indexed_shl_cPt_V4 : 108147e9223e06390897c3834f8c527001df392570ffChris Lattner Hexagon::LDrid_indexed_shl_cNotPt_V4; 108247e9223e06390897c3834f8c527001df392570ffChris Lattner case Hexagon::LDrib_indexed_V4: 108347e9223e06390897c3834f8c527001df392570ffChris Lattner return !invertPredicate ? Hexagon::LDrib_indexed_cPt_V4 : 108447e9223e06390897c3834f8c527001df392570ffChris Lattner Hexagon::LDrib_indexed_cNotPt_V4; 1085456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriub_indexed_V4: 1086456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner return !invertPredicate ? Hexagon::LDriub_indexed_cPt_V4 : 1087c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::LDriub_indexed_cNotPt_V4; 10887cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman case Hexagon::LDriub_ae_indexed_V4: 10897cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman return !invertPredicate ? Hexagon::LDriub_indexed_cPt_V4 : 10907cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman Hexagon::LDriub_indexed_cNotPt_V4; 1091456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDrib_indexed_shl_V4: 1092456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner return !invertPredicate ? Hexagon::LDrib_indexed_shl_cPt_V4 : 1093456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner Hexagon::LDrib_indexed_shl_cNotPt_V4; 1094456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriub_indexed_shl_V4: 1095456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner return !invertPredicate ? Hexagon::LDriub_indexed_shl_cPt_V4 : 10967cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman Hexagon::LDriub_indexed_shl_cNotPt_V4; 10977cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman case Hexagon::LDriub_ae_indexed_shl_V4: 10987cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman return !invertPredicate ? Hexagon::LDriub_indexed_shl_cPt_V4 : 10997cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman Hexagon::LDriub_indexed_shl_cNotPt_V4; 11007cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman case Hexagon::LDrih_indexed_V4: 11017cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman return !invertPredicate ? Hexagon::LDrih_indexed_cPt_V4 : 11027cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman Hexagon::LDrih_indexed_cNotPt_V4; 11037cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman case Hexagon::LDriuh_indexed_V4: 1104550b1e59c4eb5db020766012b1406fc56833251dChris Lattner return !invertPredicate ? Hexagon::LDriuh_indexed_cPt_V4 : 1105550b1e59c4eb5db020766012b1406fc56833251dChris Lattner Hexagon::LDriuh_indexed_cNotPt_V4; 110619c5c4cca9edd0e1e2961879d3da164325af6d63Chris Lattner case Hexagon::LDriuh_ae_indexed_V4: 110719c5c4cca9edd0e1e2961879d3da164325af6d63Chris Lattner return !invertPredicate ? Hexagon::LDriuh_indexed_cPt_V4 : 110819c5c4cca9edd0e1e2961879d3da164325af6d63Chris Lattner Hexagon::LDriuh_indexed_cNotPt_V4; 1109550b1e59c4eb5db020766012b1406fc56833251dChris Lattner case Hexagon::LDrih_indexed_shl_V4: 11107cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman return !invertPredicate ? Hexagon::LDrih_indexed_shl_cPt_V4 : 11117cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman Hexagon::LDrih_indexed_shl_cNotPt_V4; 11127cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman case Hexagon::LDriuh_indexed_shl_V4: 11137cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman return !invertPredicate ? Hexagon::LDriuh_indexed_shl_cPt_V4 : 11147cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman Hexagon::LDriuh_indexed_shl_cNotPt_V4; 11157cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman case Hexagon::LDriuh_ae_indexed_shl_V4: 11167cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman return !invertPredicate ? Hexagon::LDriuh_indexed_shl_cPt_V4 : 11177cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman Hexagon::LDriuh_indexed_shl_cNotPt_V4; 11187cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman case Hexagon::LDriw_indexed_V4: 11197cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman return !invertPredicate ? Hexagon::LDriw_indexed_cPt_V4 : 11206831a815999dde4cf801e2076e66b4943964daf2Chris Lattner Hexagon::LDriw_indexed_cNotPt_V4; 11216831a815999dde4cf801e2076e66b4943964daf2Chris Lattner case Hexagon::LDriw_indexed_shl_V4: 11226831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return !invertPredicate ? Hexagon::LDriw_indexed_shl_cPt_V4 : 11236831a815999dde4cf801e2076e66b4943964daf2Chris Lattner Hexagon::LDriw_indexed_shl_cNotPt_V4; 11246831a815999dde4cf801e2076e66b4943964daf2Chris Lattner // Byte. 1125750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::POST_STbri: 1126750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman return !invertPredicate ? Hexagon::POST_STbri_cPt : 1127750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman Hexagon::POST_STbri_cNotPt; 1128181b7a382fbdd3d03ce373a6ffac2204e763f9c3Chris Lattner case Hexagon::STrib: 1129750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman return !invertPredicate ? Hexagon::STrib_cPt : 1130750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman Hexagon::STrib_cNotPt; 1131750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::STrib_indexed: 1132750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman return !invertPredicate ? Hexagon::STrib_indexed_cPt : 1133750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman Hexagon::STrib_indexed_cNotPt; 1134750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::STrib_imm_V4: 1135750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman return !invertPredicate ? Hexagon::STrib_imm_cPt_V4 : 1136750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman Hexagon::STrib_imm_cNotPt_V4; 1137750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::STrib_indexed_shl_V4: 1138750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman return !invertPredicate ? Hexagon::STrib_indexed_shl_cPt_V4 : 1139750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman Hexagon::STrib_indexed_shl_cNotPt_V4; 1140750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman // Halfword. 1141456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::POST_SThri: 1142181b7a382fbdd3d03ce373a6ffac2204e763f9c3Chris Lattner return !invertPredicate ? Hexagon::POST_SThri_cPt : 1143181b7a382fbdd3d03ce373a6ffac2204e763f9c3Chris Lattner Hexagon::POST_SThri_cNotPt; 1144456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::STrih: 1145456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner return !invertPredicate ? Hexagon::STrih_cPt : 1146456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner Hexagon::STrih_cNotPt; 1147456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::STrih_indexed: 1148181b7a382fbdd3d03ce373a6ffac2204e763f9c3Chris Lattner return !invertPredicate ? Hexagon::STrih_indexed_cPt : 11497cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman Hexagon::STrih_indexed_cNotPt; 1150c18ae4cb6a263cf31283c0ef51ace24350f8d72bChris Lattner case Hexagon::STrih_imm_V4: 1151f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng return !invertPredicate ? Hexagon::STrih_imm_cPt_V4 : 11523e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner Hexagon::STrih_imm_cNotPt_V4; 11533e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::STrih_indexed_shl_V4: 11542d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth return !invertPredicate ? Hexagon::STrih_indexed_shl_cPt_V4 : 1155f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng Hexagon::STrih_indexed_shl_cNotPt_V4; 1156c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner // Word. 1157c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::POST_STwri: 1158c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::POST_STwri_cPt : 1159456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner Hexagon::POST_STwri_cNotPt; 1160f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng case Hexagon::STriw: 1161f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng return !invertPredicate ? Hexagon::STriw_cPt : 1162c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::STriw_cNotPt; 1163456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::STriw_indexed: 1164c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::STriw_indexed_cPt : 1165456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner Hexagon::STriw_indexed_cNotPt; 1166c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::STriw_indexed_shl_V4: 1167c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::STriw_indexed_shl_cPt_V4 : 1168f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng Hexagon::STriw_indexed_shl_cNotPt_V4; 1169c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::STriw_imm_V4: 1170f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng return !invertPredicate ? Hexagon::STriw_imm_cPt_V4 : 1171c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::STriw_imm_cNotPt_V4; 1172c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner // Double word. 1173c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::POST_STdri: 1174c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::POST_STdri_cPt : 1175c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::POST_STdri_cNotPt; 1176f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng case Hexagon::STrid: 11770f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner return !invertPredicate ? Hexagon::STrid_cPt : 11780f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner Hexagon::STrid_cNotPt; 117901ff7216dd7829d4094754086baf28aa2d7149acChris Lattner case Hexagon::STrid_indexed: 11800f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner return !invertPredicate ? Hexagon::STrid_indexed_cPt : 11810f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner Hexagon::STrid_indexed_cNotPt; 11820f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner case Hexagon::STrid_indexed_shl_V4: 11835f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner return !invertPredicate ? Hexagon::STrid_indexed_shl_cPt_V4 : 118401ff7216dd7829d4094754086baf28aa2d7149acChris Lattner Hexagon::STrid_indexed_shl_cNotPt_V4; 118501ff7216dd7829d4094754086baf28aa2d7149acChris Lattner // Load. 11861c51c6ac13b5e68b099605021784c7f552dcce3cChris Lattner case Hexagon::LDrid: 11871c51c6ac13b5e68b099605021784c7f552dcce3cChris Lattner return !invertPredicate ? Hexagon::LDrid_cPt : 1188c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::LDrid_cNotPt; 1189c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::LDriw: 1190c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::LDriw_cPt : 1191c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::LDriw_cNotPt; 1192c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::LDrih: 1193456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner return !invertPredicate ? Hexagon::LDrih_cPt : 1194456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner Hexagon::LDrih_cNotPt; 1195456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriuh: 119601ff7216dd7829d4094754086baf28aa2d7149acChris Lattner return !invertPredicate ? Hexagon::LDriuh_cPt : 1197c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::LDriuh_cNotPt; 1198c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::LDrib: 1199c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::LDrib_cPt : 1200c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::LDrib_cNotPt; 1201456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriub: 1202456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner return !invertPredicate ? Hexagon::LDriub_cPt : 1203456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner Hexagon::LDriub_cNotPt; 1204456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriubit: 1205c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::LDriub_cPt : 1206c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::LDriub_cNotPt; 1207456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner // Load Indexed. 1208456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDrid_indexed: 1209c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::LDrid_indexed_cPt : 121001ff7216dd7829d4094754086baf28aa2d7149acChris Lattner Hexagon::LDrid_indexed_cNotPt; 121169a889eb35d59a10e78a07cc26d41cbab31eddceChris Lattner case Hexagon::LDriw_indexed: 12129d416f713e8b9e4f0c0c2b3f6f57ce2dd8993209Andrew Lenharth return !invertPredicate ? Hexagon::LDriw_indexed_cPt : 12139d416f713e8b9e4f0c0c2b3f6f57ce2dd8993209Andrew Lenharth Hexagon::LDriw_indexed_cNotPt; 121431559081a4285f4b7282e765aea4ec8a8e1d396cAndrew Lenharth case Hexagon::LDrih_indexed: 1215c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::LDrih_indexed_cPt : 1216c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::LDrih_indexed_cNotPt; 1217c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::LDriuh_indexed: 12189d416f713e8b9e4f0c0c2b3f6f57ce2dd8993209Andrew Lenharth return !invertPredicate ? Hexagon::LDriuh_indexed_cPt : 121901ff7216dd7829d4094754086baf28aa2d7149acChris Lattner Hexagon::LDriuh_indexed_cNotPt; 122001ff7216dd7829d4094754086baf28aa2d7149acChris Lattner case Hexagon::LDrib_indexed: 122101ff7216dd7829d4094754086baf28aa2d7149acChris Lattner return !invertPredicate ? Hexagon::LDrib_indexed_cPt : 122201ff7216dd7829d4094754086baf28aa2d7149acChris Lattner Hexagon::LDrib_indexed_cNotPt; 12235f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner case Hexagon::LDriub_indexed: 12245f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner return !invertPredicate ? Hexagon::LDriub_indexed_cPt : 122523993561e24b2a6eaf0e036062522ab825c30d3fChris Lattner Hexagon::LDriub_indexed_cNotPt; 122623993561e24b2a6eaf0e036062522ab825c30d3fChris Lattner // Post Increment Load. 122723993561e24b2a6eaf0e036062522ab825c30d3fChris Lattner case Hexagon::POST_LDrid: 122815e4b01920d6a0ffbe35d3e5aa88a4b42970b6a7Chris Lattner return !invertPredicate ? Hexagon::POST_LDrid_cPt : 122923993561e24b2a6eaf0e036062522ab825c30d3fChris Lattner Hexagon::POST_LDrid_cNotPt; 123023993561e24b2a6eaf0e036062522ab825c30d3fChris Lattner case Hexagon::POST_LDriw: 1231c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::POST_LDriw_cPt : 1232c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::POST_LDriw_cNotPt; 1233c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::POST_LDrih: 123401ff7216dd7829d4094754086baf28aa2d7149acChris Lattner return !invertPredicate ? Hexagon::POST_LDrih_cPt : 1235c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::POST_LDrih_cNotPt; 1236c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::POST_LDriuh: 1237c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return !invertPredicate ? Hexagon::POST_LDriuh_cPt : 1238c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::POST_LDriuh_cNotPt; 1239c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::POST_LDrib: 124001ff7216dd7829d4094754086baf28aa2d7149acChris Lattner return !invertPredicate ? Hexagon::POST_LDrib_cPt : 12415dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman Hexagon::POST_LDrib_cNotPt; 12425dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman case Hexagon::POST_LDriub: 12435dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman return !invertPredicate ? Hexagon::POST_LDriub_cPt : 1244c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner Hexagon::POST_LDriub_cNotPt; 12455dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman // DEALLOC_RETURN. 12465dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman case Hexagon::DEALLOC_RET_V4: 12475dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman return !invertPredicate ? Hexagon::DEALLOC_RET_cPt_V4 : 12485dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman Hexagon::DEALLOC_RET_cNotPt_V4; 12495dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman } 12505dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman llvm_unreachable("Unexpected predicable instruction"); 12515dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman} 12525dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman 12535dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman 12545dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begemanbool HexagonInstrInfo:: 12555dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate BegemanPredicateInstruction(MachineInstr *MI, 12565dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman const SmallVectorImpl<MachineOperand> &Cond) const { 12575dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman int Opc = MI->getOpcode(); 12585dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman assert (isPredicable(MI) && "Expected predicable instruction"); 12595dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman bool invertJump = (!Cond.empty() && Cond[0].isImm() && 12605dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman (Cond[0].getImm() == 0)); 12615dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman MI->setDesc(get(getMatchingCondBranchOpcode(Opc, invertJump))); 12625dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman // 12635dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman // This assumes that the predicate is always the first operand 12645dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman // in the set of inputs. 12655dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman // 12665dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman MI->addOperand(MI->getOperand(MI->getNumOperands()-1)); 12673e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner int oper; 12685dc897b0e4e5eb4513adc2f161412ce23f6bf2e0Nate Begeman for (oper = MI->getNumOperands() - 3; oper >= 0; --oper) { 12693e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner MachineOperand MO = MI->getOperand(oper); 12703e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner if ((MO.isReg() && !MO.isUse() && !MO.isImplicit())) { 12713e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner break; 1272edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman } 1273c9c60f6429416d362c2131b14d097ce0a9ac9599Chris Lattner 1274d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner if (MO.isReg()) { 12757310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner MI->getOperand(oper+1).ChangeToRegister(MO.getReg(), MO.isDef(), 1276d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner MO.isImplicit(), MO.isKill(), 1277f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner MO.isDead(), MO.isUndef(), 1278c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner MO.isDebug()); 12797310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner } else if (MO.isImm()) { 1280f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner MI->getOperand(oper+1).ChangeToImmediate(MO.getImm()); 1281c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner } else { 1282f1a47c3371ecd5bb449f39736a36ebbebd4e9e14Chris Lattner llvm_unreachable("Unexpected operand type"); 1283c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner } 1284c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner } 1285c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner 1286c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner int regPos = invertJump ? 1 : 0; 12877310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner MachineOperand PredMO = Cond[regPos]; 12887310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner MI->getOperand(oper+1).ChangeToRegister(PredMO.getReg(), PredMO.isDef(), 12897310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner PredMO.isImplicit(), PredMO.isKill(), 12907310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner PredMO.isDead(), PredMO.isUndef(), 1291c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner PredMO.isDebug()); 12927310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner 1293c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return true; 12947310fb11f2a074069bf9ec3fc169c742ac48d32bChris Lattner} 12953e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 12963e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 12973e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerbool 12983e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerHexagonInstrInfo:: 12996831a815999dde4cf801e2076e66b4943964daf2Chris LattnerisProfitableToIfCvt(MachineBasicBlock &MBB, 13006831a815999dde4cf801e2076e66b4943964daf2Chris Lattner unsigned NumCyles, 13016831a815999dde4cf801e2076e66b4943964daf2Chris Lattner unsigned ExtraPredCycles, 13026831a815999dde4cf801e2076e66b4943964daf2Chris Lattner const BranchProbability &Probability) const { 13036831a815999dde4cf801e2076e66b4943964daf2Chris Lattner return true; 13046831a815999dde4cf801e2076e66b4943964daf2Chris Lattner} 13053e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 13063e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 13073e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerbool 13083e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerHexagonInstrInfo:: 13093e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerisProfitableToIfCvt(MachineBasicBlock &TMBB, 1310c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner unsigned NumTCycles, 13113e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner unsigned ExtraTCycles, 13123e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner MachineBasicBlock &FMBB, 13133e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner unsigned NumFCycles, 13143e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner unsigned ExtraFCycles, 13153e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner const BranchProbability &Probability) const { 1316edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman return true; 13173e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner} 13183e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 13198b6fa22e722e1de7522aae51d6cdd0f552d489daChris Lattner 1320c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattnerbool HexagonInstrInfo::isPredicated(const MachineInstr *MI) const { 1321c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner const uint64_t F = MI->getDesc().TSFlags; 13228b6fa22e722e1de7522aae51d6cdd0f552d489daChris Lattner 13233e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return ((F >> HexagonII::PredicatedPos) & HexagonII::PredicatedMask); 13243e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner} 13253e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 1326c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner 13273e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerbool 13283e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerHexagonInstrInfo::DefinesPredicate(MachineInstr *MI, 13293e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner std::vector<MachineOperand> &Pred) const { 13303e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner for (unsigned oper = 0; oper < MI->getNumOperands(); ++oper) { 13313e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner MachineOperand MO = MI->getOperand(oper); 13323e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner if (MO.isReg() && MO.isDef()) { 13333e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner const TargetRegisterClass* RC = RI.getMinimalPhysRegClass(MO.getReg()); 13344e6c74689944be1de80c99dc0688ec0bcbd743aaChris Lattner if (RC == Hexagon::PredRegsRegisterClass) { 13353e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner Pred.push_back(MO); 13363e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return true; 13373e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner } 13383e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner } 13393e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner } 13403e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return false; 1341edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7eMisha Brukman} 13423e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 13433e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 13448b6fa22e722e1de7522aae51d6cdd0f552d489daChris Lattnerbool 13453e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerHexagonInstrInfo:: 1346c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris LattnerSubsumesPredicate(const SmallVectorImpl<MachineOperand> &Pred1, 1347c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner const SmallVectorImpl<MachineOperand> &Pred2) const { 1348c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner // TODO: Fix this 1349c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return false; 1350c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner} 13513e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 13523e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 13533e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner// 135417c428e23dbeac1f985d725905ce6be1c725491fEvan Cheng// We indicate that we want to reverse the branch by 13556862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner// inserting a 0 at the beginning of the Cond vector. 13566862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner// 13576862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattnerbool HexagonInstrInfo:: 13586862dbc446f2f633f6f4905d07a3bafd96741da2Chris LattnerReverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const { 13596862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner if (!Cond.empty() && Cond[0].isImm() && Cond[0].getImm() == 0) { 13606862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner Cond.erase(Cond.begin()); 13616862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner } else { 13626862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner Cond.insert(Cond.begin(), MachineOperand::CreateImm(0)); 13636862dbc446f2f633f6f4905d07a3bafd96741da2Chris Lattner } 136417c428e23dbeac1f985d725905ce6be1c725491fEvan Cheng return false; 13653e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner} 1366f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng 13673e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 13683e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattnerbool HexagonInstrInfo:: 13693e928bbd6153eb08641cbd0ad7d8487378a8b12aChris LattnerisProfitableToDupForIfCvt(MachineBasicBlock &MBB,unsigned NumInstrs, 13705d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner const BranchProbability &Probability) const { 1371456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner return (NumInstrs <= 4); 137206ac6ab938cf54596202de851da4b20aa61fe64eChris Lattner} 137303c8546ec57523970874917854a2fb77b1ff598eChris Lattner 13745d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattnerbool HexagonInstrInfo::isDeallocRet(const MachineInstr *MI) const { 1375c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner switch (MI->getOpcode()) { 13765d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner case Hexagon::DEALLOC_RET_V4 : 13775d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner case Hexagon::DEALLOC_RET_cPt_V4 : 1378c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::DEALLOC_RET_cNotPt_V4 : 13795d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner case Hexagon::DEALLOC_RET_cdnPnt_V4 : 1380c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::DEALLOC_RET_cNotdnPnt_V4 : 1381c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::DEALLOC_RET_cdnPt_V4 : 13826a5428934ba6159c1acc541944332e51a6cfa59aChris Lattner case Hexagon::DEALLOC_RET_cNotdnPt_V4 : 13835d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner return true; 13845d2c6c784bdc3d572a553ed7aa48dcf27a45b1a3Chris Lattner } 13853e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return false; 13863e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner} 1387c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner 1388c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner 1389c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattnerbool HexagonInstrInfo:: 1390f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan ChengisValidOffset(const int Opcode, const int Offset) const { 1391c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner // This function is to check whether the "Offset" is in the correct range of 1392456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner // the given "Opcode". If "Offset" is not in the correct range, "ADD_ri" is 1393456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner // inserted to calculate the final address. Due to this reason, the function 1394456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner // assumes that the "Offset" has correct alignment. 1395456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner 1396456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner switch(Opcode) { 1397456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner 1398456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriw: 1399f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng case Hexagon::STriw: 14003e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::STriwt: 14013e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner assert((Offset % 4 == 0) && "Offset has incorrect alignment"); 14023e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner return (Offset >= Hexagon_MEMW_OFFSET_MIN) && 140303c8546ec57523970874917854a2fb77b1ff598eChris Lattner (Offset <= Hexagon_MEMW_OFFSET_MAX); 140403c8546ec57523970874917854a2fb77b1ff598eChris Lattner 140503c8546ec57523970874917854a2fb77b1ff598eChris Lattner case Hexagon::LDrid: 14062d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth case Hexagon::STrid: 14079fadb4c1c0a6d223aa468f9f72f8c2562dc66839Chris Lattner assert((Offset % 8 == 0) && "Offset has incorrect alignment"); 140803c8546ec57523970874917854a2fb77b1ff598eChris Lattner return (Offset >= Hexagon_MEMD_OFFSET_MIN) && 140903c8546ec57523970874917854a2fb77b1ff598eChris Lattner (Offset <= Hexagon_MEMD_OFFSET_MAX); 14103e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner 1411c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::LDrih: 14123e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDriuh: 1413c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::STrih: 1414ab48be377298bd509427a29e174cf4e305138819Nate Begeman case Hexagon::LDrih_ae: 1415ab48be377298bd509427a29e174cf4e305138819Nate Begeman assert((Offset % 2 == 0) && "Offset has incorrect alignment"); 1416ab48be377298bd509427a29e174cf4e305138819Nate Begeman return (Offset >= Hexagon_MEMH_OFFSET_MIN) && 1417c7029805ef35ce9805931067b841e6af11db382eChris Lattner (Offset <= Hexagon_MEMH_OFFSET_MAX); 1418c7029805ef35ce9805931067b841e6af11db382eChris Lattner 1419c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::LDrib: 1420c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::STrib: 1421c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::LDriub: 1422c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::LDriubit: 1423c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::LDrib_ae: 1424c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::LDriub_ae: 1425c7029805ef35ce9805931067b841e6af11db382eChris Lattner return (Offset >= Hexagon_MEMB_OFFSET_MIN) && 1426c7029805ef35ce9805931067b841e6af11db382eChris Lattner (Offset <= Hexagon_MEMB_OFFSET_MAX); 1427c7029805ef35ce9805931067b841e6af11db382eChris Lattner 1428c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::ADD_ri: 1429c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::TFR_FI: 1430c7029805ef35ce9805931067b841e6af11db382eChris Lattner return (Offset >= Hexagon_ADDI_OFFSET_MIN) && 1431c7029805ef35ce9805931067b841e6af11db382eChris Lattner (Offset <= Hexagon_ADDI_OFFSET_MAX); 1432c7029805ef35ce9805931067b841e6af11db382eChris Lattner 1433c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 : 1434c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMw_ADDi_indexed_MEM_V4 : 1435c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMw_SUBi_indexed_MEM_V4 : 1436c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMw_ADDr_indexed_MEM_V4 : 1437c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMw_SUBr_indexed_MEM_V4 : 1438c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMw_ANDr_indexed_MEM_V4 : 1439c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMw_ORr_indexed_MEM_V4 : 1440c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMw_ADDSUBi_MEM_V4 : 1441c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMw_ADDi_MEM_V4 : 1442ab48be377298bd509427a29e174cf4e305138819Nate Begeman case Hexagon::MEMw_SUBi_MEM_V4 : 1443c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMw_ADDr_MEM_V4 : 1444ab48be377298bd509427a29e174cf4e305138819Nate Begeman case Hexagon::MEMw_SUBr_MEM_V4 : 1445ab48be377298bd509427a29e174cf4e305138819Nate Begeman case Hexagon::MEMw_ANDr_MEM_V4 : 1446c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMw_ORr_MEM_V4 : 1447c7029805ef35ce9805931067b841e6af11db382eChris Lattner assert ((Offset % 4) == 0 && "MEMOPw offset is not aligned correctly." ); 1448c7029805ef35ce9805931067b841e6af11db382eChris Lattner return (0 <= Offset && Offset <= 255); 1449c7029805ef35ce9805931067b841e6af11db382eChris Lattner 1450c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 : 1451c7029805ef35ce9805931067b841e6af11db382eChris Lattner case Hexagon::MEMh_ADDi_indexed_MEM_V4 : 14523e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::MEMh_SUBi_indexed_MEM_V4 : 14533e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::MEMh_ADDr_indexed_MEM_V4 : 14543e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::MEMh_SUBr_indexed_MEM_V4 : 14553e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::MEMh_ANDr_indexed_MEM_V4 : 1456456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ORr_indexed_MEM_V4 : 1457456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ADDSUBi_MEM_V4 : 1458edb1add9a093efa266c94b6d0a34c26f5b2d5d7bChris Lattner case Hexagon::MEMh_ADDi_MEM_V4 : 1459edb1add9a093efa266c94b6d0a34c26f5b2d5d7bChris Lattner case Hexagon::MEMh_SUBi_MEM_V4 : 1460ec39a45bdb1eca0cfe77be6a05cc43e16f2338ebChris Lattner case Hexagon::MEMh_ADDr_MEM_V4 : 1461ec39a45bdb1eca0cfe77be6a05cc43e16f2338ebChris Lattner case Hexagon::MEMh_SUBr_MEM_V4 : 14623e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::MEMh_ANDr_MEM_V4 : 14633e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::MEMh_ORr_MEM_V4 : 1464f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng assert ((Offset % 2) == 0 && "MEMOPh offset is not aligned correctly." ); 146595762124a1d781cc0f8cbc4c22e9c5c1358d7ea0Andrew Lenharth return (0 <= Offset && Offset <= 127); 146695762124a1d781cc0f8cbc4c22e9c5c1358d7ea0Andrew Lenharth 1467c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 : 146895762124a1d781cc0f8cbc4c22e9c5c1358d7ea0Andrew Lenharth case Hexagon::MEMb_ADDi_indexed_MEM_V4 : 1469140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner case Hexagon::MEMb_SUBi_indexed_MEM_V4 : 1470140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner case Hexagon::MEMb_ADDr_indexed_MEM_V4 : 1471c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::MEMb_SUBr_indexed_MEM_V4 : 1472c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::MEMb_ANDr_indexed_MEM_V4 : 1473c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::MEMb_ORr_indexed_MEM_V4 : 1474456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_ADDSUBi_MEM_V4 : 1475140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner case Hexagon::MEMb_ADDi_MEM_V4 : 1476140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner case Hexagon::MEMb_SUBi_MEM_V4 : 1477456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_ADDr_MEM_V4 : 1478456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_SUBr_MEM_V4 : 1479c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::MEMb_ANDr_MEM_V4 : 1480c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::MEMb_ORr_MEM_V4 : 1481c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return (0 <= Offset && Offset <= 63); 1482c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner 1483140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner // LDri_pred and STriw_pred are pseudo operations, so it has to take offset of 1484456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner // any size. Later pass knows how to handle it. 1485140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner case Hexagon::STriw_pred: 14864f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner case Hexagon::LDriw_pred: 14874f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner return true; 14884f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner 1489c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner // INLINEASM is very special. 14904f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner case Hexagon::INLINEASM: 1491c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return true; 14924f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner } 1493c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner 1494c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner llvm_unreachable("No offset range is defined for this opcode. " 14954f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner "Please define it in the above switch statement!"); 1496456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner} 1497140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner 1498456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner 1499456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner// 1500456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner// Check if the Offset is a valid auto-inc imm by Load/Store Type. 1501c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner// 1502c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattnerbool HexagonInstrInfo:: 1503c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris LattnerisValidAutoIncImm(const EVT VT, const int Offset) const { 1504456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner 1505140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner if (VT == MVT::i64) { 1506140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner return (Offset >= Hexagon_MEMD_AUTOINC_MIN && 1507140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner Offset <= Hexagon_MEMD_AUTOINC_MAX && 1508c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner (Offset & 0x7) == 0); 1509140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner } 1510140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner if (VT == MVT::i32) { 1511140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner return (Offset >= Hexagon_MEMW_AUTOINC_MIN && 1512456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner Offset <= Hexagon_MEMW_AUTOINC_MAX && 1513456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner (Offset & 0x3) == 0); 1514456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner } 1515456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner if (VT == MVT::i16) { 1516140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner return (Offset >= Hexagon_MEMH_AUTOINC_MIN && 1517140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner Offset <= Hexagon_MEMH_AUTOINC_MAX && 15184f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner (Offset & 0x1) == 0); 15194f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner } 15204f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner if (VT == MVT::i8) { 15214f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner return (Offset >= Hexagon_MEMB_AUTOINC_MIN && 15224f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner Offset <= Hexagon_MEMB_AUTOINC_MAX); 15234f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner } 15244f0d8e4018d50c5796660a4fa167763f46259646Chris Lattner llvm_unreachable("Not an auto-inc opc!"); 1525140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner} 1526140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner 1527140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattner 1528140d53c99c3a70b9d3858a3c87f8ecb098994748Chris Lattnerbool HexagonInstrInfo:: 152951b8d54922350b7e1c2cd5a5183ef2c5f5d1b1d5Andrew LenharthisMemOp(const MachineInstr *MI) const { 153051b8d54922350b7e1c2cd5a5183ef2c5f5d1b1d5Andrew Lenharth switch (MI->getOpcode()) 1531c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner { 153249c709f891a3e49db58b56ca94eafa98cbb12c4dAndrew Lenharth case Hexagon::MEMw_ADDSUBi_indexed_MEM_V4 : 153349c709f891a3e49db58b56ca94eafa98cbb12c4dAndrew Lenharth case Hexagon::MEMw_ADDi_indexed_MEM_V4 : 153449c709f891a3e49db58b56ca94eafa98cbb12c4dAndrew Lenharth case Hexagon::MEMw_SUBi_indexed_MEM_V4 : 1535c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::MEMw_ADDr_indexed_MEM_V4 : 153649c709f891a3e49db58b56ca94eafa98cbb12c4dAndrew Lenharth case Hexagon::MEMw_SUBr_indexed_MEM_V4 : 1537c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::MEMw_ANDr_indexed_MEM_V4 : 1538f70e30b41dc6a92733681dcea2c06d8b3dd488dbAndrew Lenharth case Hexagon::MEMw_ORr_indexed_MEM_V4 : 1539f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng case Hexagon::MEMw_ADDSUBi_MEM_V4 : 15400f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner case Hexagon::MEMw_ADDi_MEM_V4 : 15410f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner case Hexagon::MEMw_SUBi_MEM_V4 : 15420f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner case Hexagon::MEMw_ADDr_MEM_V4 : 1543456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMw_SUBr_MEM_V4 : 1544456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMw_ANDr_MEM_V4 : 1545456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMw_ORr_MEM_V4 : 1546456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ADDSUBi_indexed_MEM_V4 : 1547456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ADDi_indexed_MEM_V4 : 1548456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_SUBi_indexed_MEM_V4 : 1549456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ADDr_indexed_MEM_V4 : 1550456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_SUBr_indexed_MEM_V4 : 1551456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ANDr_indexed_MEM_V4 : 1552456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ORr_indexed_MEM_V4 : 1553456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ADDSUBi_MEM_V4 : 1554456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ADDi_MEM_V4 : 1555456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_SUBi_MEM_V4 : 1556456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ADDr_MEM_V4 : 1557456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_SUBr_MEM_V4 : 1558456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ANDr_MEM_V4 : 1559456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMh_ORr_MEM_V4 : 1560c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::MEMb_ADDSUBi_indexed_MEM_V4 : 1561c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::MEMb_ADDi_indexed_MEM_V4 : 1562456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_SUBi_indexed_MEM_V4 : 1563456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_ADDr_indexed_MEM_V4 : 1564456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_SUBr_indexed_MEM_V4 : 1565456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_ANDr_indexed_MEM_V4 : 1566456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_ORr_indexed_MEM_V4 : 1567456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_ADDSUBi_MEM_V4 : 1568456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_ADDi_MEM_V4 : 1569456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_SUBi_MEM_V4 : 1570456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::MEMb_ADDr_MEM_V4 : 15710f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner case Hexagon::MEMb_SUBr_MEM_V4 : 15720f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner case Hexagon::MEMb_ANDr_MEM_V4 : 15730f69b2910810b7c0971a739f18b37fae2a20eca5Chris Lattner case Hexagon::MEMb_ORr_MEM_V4 : 1574f3fd9fe20dbcb40f3dffc1518ab955a0b5d6fa23Evan Cheng return true; 15752ee743ff9be43c350075a2fa15d11a79bff36775Chris Lattner } 157647e9223e06390897c3834f8c527001df392570ffChris Lattner return false; 157747e9223e06390897c3834f8c527001df392570ffChris Lattner} 157847e9223e06390897c3834f8c527001df392570ffChris Lattner 157947e9223e06390897c3834f8c527001df392570ffChris Lattner 158047e9223e06390897c3834f8c527001df392570ffChris Lattnerbool HexagonInstrInfo:: 158147e9223e06390897c3834f8c527001df392570ffChris LattnerisSpillPredRegOp(const MachineInstr *MI) const { 158247e9223e06390897c3834f8c527001df392570ffChris Lattner switch (MI->getOpcode()) 158347e9223e06390897c3834f8c527001df392570ffChris Lattner { 158447e9223e06390897c3834f8c527001df392570ffChris Lattner case Hexagon::STriw_pred : 15853e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDriw_pred : 15862ee743ff9be43c350075a2fa15d11a79bff36775Chris Lattner return true; 158755ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner } 1588c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner return false; 1589456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner} 1590b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman 159155ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner 1592456a93afcec7740c45cafa8354317f7b17987a6dChris Lattnerbool HexagonInstrInfo::isConditionalALU32 (const MachineInstr* MI) const { 1593456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner const HexagonRegisterInfo& QRI = getRegisterInfo(); 1594456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner switch (MI->getOpcode()) 1595456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner { 1596456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::ADD_ri_cPt: 1597456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::ADD_ri_cNotPt: 15989373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::ADD_rr_cPt: 15999373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::ADD_rr_cNotPt: 16009373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::XOR_rr_cPt: 16019373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::XOR_rr_cNotPt: 16029373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::AND_rr_cPt: 16039373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::AND_rr_cNotPt: 1604550b1e59c4eb5db020766012b1406fc56833251dChris Lattner case Hexagon::OR_rr_cPt: 1605550b1e59c4eb5db020766012b1406fc56833251dChris Lattner case Hexagon::OR_rr_cNotPt: 16060e753d617be1ff6a9ac0f894da9d2544e2489850Chris Lattner case Hexagon::SUB_rr_cPt: 16070e753d617be1ff6a9ac0f894da9d2544e2489850Chris Lattner case Hexagon::SUB_rr_cNotPt: 16080e753d617be1ff6a9ac0f894da9d2544e2489850Chris Lattner case Hexagon::COMBINE_rr_cPt: 16099373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::COMBINE_rr_cNotPt: 16109373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman return true; 16119373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::ASLH_cPt_V4: 16129373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::ASLH_cNotPt_V4: 161355ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner case Hexagon::ASRH_cPt_V4: 161455ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner case Hexagon::ASRH_cNotPt_V4: 161555ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner case Hexagon::SXTB_cPt_V4: 161655ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner case Hexagon::SXTB_cNotPt_V4: 161755ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner case Hexagon::SXTH_cPt_V4: 161855ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner case Hexagon::SXTH_cNotPt_V4: 1619456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::ZXTB_cPt_V4: 1620456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::ZXTB_cNotPt_V4: 162155ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner case Hexagon::ZXTH_cPt_V4: 1622456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::ZXTH_cNotPt_V4: 1623456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner return QRI.Subtarget.getHexagonArchVersion() == HexagonSubtarget::V4; 162455ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner 162555ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner default: 162655ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner return false; 162755ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner } 162855ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner} 162955ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner 163055ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner 163155ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattnerbool HexagonInstrInfo:: 163255ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris LattnerisConditionalLoad (const MachineInstr* MI) const { 163355ba8fba750ee0a51a9d74fa33b7242d24a4ff35Chris Lattner const HexagonRegisterInfo& QRI = getRegisterInfo(); 16343e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner switch (MI->getOpcode()) 1635750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman { 1636750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDrid_cPt : 1637750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDrid_cNotPt : 16389373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::LDrid_indexed_cPt : 16399373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::LDrid_indexed_cNotPt : 1640750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDriw_cPt : 16419373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::LDriw_cNotPt : 1642750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDriw_indexed_cPt : 1643750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDriw_indexed_cNotPt : 1644750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDrih_cPt : 1645750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDrih_cNotPt : 1646750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDrih_indexed_cPt : 1647750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDrih_indexed_cNotPt : 1648750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDrib_cPt : 1649750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDrib_cNotPt : 1650750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDrib_indexed_cPt : 1651750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDrib_indexed_cNotPt : 1652750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDriuh_cPt : 1653750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDriuh_cNotPt : 1654750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDriuh_indexed_cPt : 1655750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDriuh_indexed_cNotPt : 1656750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDriub_cPt : 1657750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDriub_cNotPt : 1658750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDriub_indexed_cPt : 1659750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDriub_indexed_cNotPt : 16609373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman return true; 16619373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::POST_LDrid_cPt : 16629373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman case Hexagon::POST_LDrid_cNotPt : 1663750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::POST_LDriw_cPt : 16643e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::POST_LDriw_cNotPt : 1665750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::POST_LDrih_cPt : 1666750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::POST_LDrih_cNotPt : 1667750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::POST_LDrib_cPt : 1668750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::POST_LDrib_cNotPt : 1669750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::POST_LDriuh_cPt : 1670750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::POST_LDriuh_cNotPt : 1671750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::POST_LDriub_cPt : 1672750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::POST_LDriub_cNotPt : 1673750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman return QRI.Subtarget.getHexagonArchVersion() == HexagonSubtarget::V4; 1674750ac1bdfa6f09bddfd9efce1d6360dde8fa74c0Nate Begeman case Hexagon::LDrid_indexed_cPt_V4 : 16753e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDrid_indexed_cNotPt_V4 : 16763e928bbd6153eb08641cbd0ad7d8487378a8b12aChris Lattner case Hexagon::LDrid_indexed_shl_cPt_V4 : 1677b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman case Hexagon::LDrid_indexed_shl_cNotPt_V4 : 167873e142f2b6a3b5223de2d557d646f319ca8168cfChris Lattner case Hexagon::LDrib_indexed_cPt_V4 : 1679456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDrib_indexed_cNotPt_V4 : 1680456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDrib_indexed_shl_cPt_V4 : 1681456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDrib_indexed_shl_cNotPt_V4 : 1682456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriub_indexed_cPt_V4 : 1683456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriub_indexed_cNotPt_V4 : 1684c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner case Hexagon::LDriub_indexed_shl_cPt_V4 : 1685456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDriub_indexed_shl_cNotPt_V4 : 1686456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDrih_indexed_cPt_V4 : 1687456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDrih_indexed_cNotPt_V4 : 1688456a93afcec7740c45cafa8354317f7b17987a6dChris Lattner case Hexagon::LDrih_indexed_shl_cPt_V4 : 1689b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman case Hexagon::LDrih_indexed_shl_cNotPt_V4 : 1690ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth case Hexagon::LDriuh_indexed_cPt_V4 : 1691ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth case Hexagon::LDriuh_indexed_cNotPt_V4 : 1692ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth case Hexagon::LDriuh_indexed_shl_cPt_V4 : 1693ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth case Hexagon::LDriuh_indexed_shl_cNotPt_V4 : 1694ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth case Hexagon::LDriw_indexed_cPt_V4 : 1695ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth case Hexagon::LDriw_indexed_cNotPt_V4 : 1696ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth case Hexagon::LDriw_indexed_shl_cPt_V4 : 1697ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth case Hexagon::LDriw_indexed_shl_cNotPt_V4 : 1698ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth return QRI.Subtarget.getHexagonArchVersion() == HexagonSubtarget::V4; 1699ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth default: 1700ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth return false; 1701ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth } 1702ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth} 1703ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth 1704ae35575957a3ab446e2766aa05d03020ced27d14Andrew LenharthDFAPacketizer *HexagonInstrInfo:: 1705ae35575957a3ab446e2766aa05d03020ced27d14Andrew LenharthCreateTargetScheduleState(const TargetMachine *TM, 1706ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth const ScheduleDAG *DAG) const { 17071ccf26a6392034a11827aeaa0d58d025ecb2b85aChris Lattner const InstrItineraryData *II = TM->getInstrItineraryData(); 1708ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth return TM->getSubtarget<HexagonGenSubtargetInfo>().createDFAPacketizer(II); 1709ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth} 1710ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth 1711ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharthbool HexagonInstrInfo::isSchedulingBoundary(const MachineInstr *MI, 1712ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth const MachineBasicBlock *MBB, 1713ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth const MachineFunction &MF) const { 1714ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth // Debug info is never a scheduling boundary. It's necessary to be explicit 1715ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth // due to the special treatment of IT instructions below, otherwise a 1716c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner // dbg_value followed by an IT will result in the IT instruction being 1717c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner // considered a scheduling hazard, which is wrong. It should be the actual 1718c52ad4f04ea5f51a1b4c67e585acea5c0525fc3dChris Lattner // instruction preceding the dbg_value instruction(s), just like it is 1719433f8acefb78f1c8a2cf79c12b101ce7c4b20202Evan Cheng // when debug info is not present. 17205e3efbc2ca459621400211f7370d7f121d4827d9Andrew Lenharth if (MI->isDebugValue()) 1721ae35575957a3ab446e2766aa05d03020ced27d14Andrew Lenharth return false; 1722b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman 1723b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman // Terminators and labels can't be scheduled around. 1724b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman if (MI->getDesc().isTerminator() || MI->isLabel() || MI->isInlineAsm()) 1725b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman return true; 1726b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman 1727b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman return false; 1728b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman} 1729b942a3dd5f9318b2c57f137d2991440c2f0262adNate Begeman