HexagonVLIWPacketizer.cpp revision 39498d1ff0dc5d1d4379c31a92596377d0d5d8a7
126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//===----- HexagonPacketizer.cpp - vliw packetizer ---------------------===// 226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// The LLVM Compiler Infrastructure 426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// This file is distributed under the University of Illinois Open Source 626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// License. See LICENSE.TXT for details. 726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//===----------------------------------------------------------------------===// 926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 1026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// This implements a simple VLIW packetizer using DFA. The packetizer works on 1126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// machine basic blocks. For each instruction I in BB, the packetizer consults 1226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// the DFA to see if machine resources are available to execute I. If so, the 1326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// packetizer checks if I depends on any instruction J in the current packet. 1426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// If no dependency is found, I is added to current packet and machine resource 1526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// is marked as taken. If any dependency is found, a target API call is made to 1626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// prune the dependence. 1726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 1826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//===----------------------------------------------------------------------===// 1926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#define DEBUG_TYPE "packets" 20d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "Hexagon.h" 21d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "HexagonMachineFunctionInfo.h" 22d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "HexagonRegisterInfo.h" 23d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "HexagonSubtarget.h" 24d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "HexagonTargetMachine.h" 25d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/ADT/DenseMap.h" 26d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/ADT/Statistic.h" 2726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "llvm/CodeGen/DFAPacketizer.h" 28d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/CodeGen/LatencyPriorityQueue.h" 2926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "llvm/CodeGen/MachineDominators.h" 30d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/CodeGen/MachineFrameInfo.h" 31d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/CodeGen/MachineFunctionAnalysis.h" 3226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "llvm/CodeGen/MachineFunctionPass.h" 33d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/CodeGen/MachineInstrBuilder.h" 3426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "llvm/CodeGen/MachineLoopInfo.h" 35d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/CodeGen/MachineRegisterInfo.h" 36d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/CodeGen/Passes.h" 3726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "llvm/CodeGen/ScheduleDAG.h" 3826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "llvm/CodeGen/ScheduleDAGInstrs.h" 3926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "llvm/CodeGen/ScheduleHazardRecognizer.h" 40d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/CodeGen/SchedulerRegistry.h" 4126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "llvm/MC/MCInstrItineraries.h" 4226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "llvm/Support/CommandLine.h" 43d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Support/Compiler.h" 4426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include "llvm/Support/Debug.h" 45d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Support/MathExtras.h" 46d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Target/TargetInstrInfo.h" 47d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Target/TargetMachine.h" 48d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Target/TargetRegisterInfo.h" 4926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#include <map> 5026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 5126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandeusing namespace llvm; 5226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 5326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandenamespace { 5426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande class HexagonPacketizer : public MachineFunctionPass { 5526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 5626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande public: 5726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande static char ID; 5826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande HexagonPacketizer() : MachineFunctionPass(ID) {} 5926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 6026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande void getAnalysisUsage(AnalysisUsage &AU) const { 6126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande AU.setPreservesCFG(); 6226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande AU.addRequired<MachineDominatorTree>(); 6326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande AU.addPreserved<MachineDominatorTree>(); 6426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande AU.addRequired<MachineLoopInfo>(); 6526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande AU.addPreserved<MachineLoopInfo>(); 6626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineFunctionPass::getAnalysisUsage(AU); 6726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 6826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 6926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const char *getPassName() const { 7026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return "Hexagon Packetizer"; 7126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 7226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 7326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool runOnMachineFunction(MachineFunction &Fn); 7426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande }; 7526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande char HexagonPacketizer::ID = 0; 7626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 7726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande class HexagonPacketizerList : public VLIWPacketizerList { 7826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 7926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande private: 8026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 8126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Has the instruction been promoted to a dot-new instruction. 8226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool PromotedToDotNew; 8326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 8426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Has the instruction been glued to allocframe. 8526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool GlueAllocframeStore; 8626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 8726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Has the feeder instruction been glued to new value jump. 8826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool GlueToNewValueJump; 8926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 9026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check if there is a dependence between some instruction already in this 9126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // packet and this instruction. 9226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool Dependence; 9326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 9426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Only check for dependence if there are resources available to 9526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // schedule this instruction. 9626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool FoundSequentialDependence; 9726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 9826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande public: 9926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Ctor. 10026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande HexagonPacketizerList(MachineFunction &MF, MachineLoopInfo &MLI, 10126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineDominatorTree &MDT); 10226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 10326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // initPacketizerState - initialize some internal flags. 10426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande void initPacketizerState(); 10526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 10626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // ignorePseudoInstruction - Ignore bundling of pseudo instructions. 10726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool ignorePseudoInstruction(MachineInstr *MI, MachineBasicBlock *MBB); 10826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 10926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // isSoloInstruction - return true if instruction MI can not be packetized 11026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // with any other instruction, which means that MI itself is a packet. 11126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool isSoloInstruction(MachineInstr *MI); 11226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 11326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // isLegalToPacketizeTogether - Is it legal to packetize SUI and SUJ 11426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // together. 11526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool isLegalToPacketizeTogether(SUnit *SUI, SUnit *SUJ); 11626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 11726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // isLegalToPruneDependencies - Is it legal to prune dependece between SUI 11826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // and SUJ. 11926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool isLegalToPruneDependencies(SUnit *SUI, SUnit *SUJ); 12026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 12126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator addToPacket(MachineInstr *MI); 12226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande private: 12326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool IsCallDependent(MachineInstr* MI, SDep::Kind DepType, unsigned DepReg); 12426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool PromoteToDotNew(MachineInstr* MI, SDep::Kind DepType, 12526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator &MII, 12626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const TargetRegisterClass* RC); 12726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool CanPromoteToDotNew(MachineInstr* MI, SUnit* PacketSU, 12826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned DepReg, 12926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande std::map <MachineInstr*, SUnit*> MIToSUnit, 13026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator &MII, 13126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const TargetRegisterClass* RC); 13226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool CanPromoteToNewValue(MachineInstr* MI, SUnit* PacketSU, 13326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned DepReg, 13426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande std::map <MachineInstr*, SUnit*> MIToSUnit, 13526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator &MII); 13626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool CanPromoteToNewValueStore(MachineInstr* MI, MachineInstr* PacketMI, 13726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned DepReg, 13826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande std::map <MachineInstr*, SUnit*> MIToSUnit); 13926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool DemoteToDotOld(MachineInstr* MI); 14026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool ArePredicatesComplements(MachineInstr* MI1, MachineInstr* MI2, 14126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande std::map <MachineInstr*, SUnit*> MIToSUnit); 14226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool RestrictingDepExistInPacket(MachineInstr*, 14326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned, std::map <MachineInstr*, SUnit*>); 14426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool isNewifiable(MachineInstr* MI); 14526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool isCondInst(MachineInstr* MI); 14626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool IsNewifyStore (MachineInstr* MI); 14726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool tryAllocateResourcesForConstExt(MachineInstr* MI); 14826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool canReserveResourcesForConstExt(MachineInstr *MI); 14926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande void reserveResourcesForConstExt(MachineInstr* MI); 15026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool isNewValueInst(MachineInstr* MI); 15126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool isDotNewInst(MachineInstr* MI); 15226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande }; 15326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 15426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 15526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// HexagonPacketizerList Ctor. 15626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish PandeHexagonPacketizerList::HexagonPacketizerList( 15726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineFunction &MF, MachineLoopInfo &MLI,MachineDominatorTree &MDT) 15826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande : VLIWPacketizerList(MF, MLI, MDT, true){ 15926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 16026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 16126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizer::runOnMachineFunction(MachineFunction &Fn) { 16226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const TargetInstrInfo *TII = Fn.getTarget().getInstrInfo(); 16326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineLoopInfo &MLI = getAnalysis<MachineLoopInfo>(); 16426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineDominatorTree &MDT = getAnalysis<MachineDominatorTree>(); 16526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 16626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Instantiate the packetizer. 16726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande HexagonPacketizerList Packetizer(Fn, MLI, MDT); 16826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 16926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // DFA state table should not be empty. 17026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert(Packetizer.getResourceTracker() && "Empty DFA table!"); 17126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 17226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 17326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Loop over all basic blocks and remove KILL pseudo-instructions 17426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // These instructions confuse the dependence analysis. Consider: 17526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // D0 = ... (Insn 0) 17626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // R0 = KILL R0, D0 (Insn 1) 17726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // R0 = ... (Insn 2) 17826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Here, Insn 1 will result in the dependence graph not emitting an output 17926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // dependence between Insn 0 and Insn 2. This can lead to incorrect 18026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // packetization 18126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 18226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for (MachineFunction::iterator MBB = Fn.begin(), MBBe = Fn.end(); 18326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MBB != MBBe; ++MBB) { 18426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator End = MBB->end(); 18526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator MI = MBB->begin(); 18626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande while (MI != End) { 18726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->isKill()) { 18826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator DeleteMI = MI; 18926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ++MI; 19026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MBB->erase(DeleteMI); 19126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande End = MBB->end(); 19226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande continue; 19326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 19426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ++MI; 19526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 19626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 19726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 19826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Loop over all of the basic blocks. 19926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for (MachineFunction::iterator MBB = Fn.begin(), MBBe = Fn.end(); 20026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MBB != MBBe; ++MBB) { 20126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Find scheduling regions and schedule / packetize each region. 20226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned RemainingCount = MBB->size(); 20326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for(MachineBasicBlock::iterator RegionEnd = MBB->end(); 20426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande RegionEnd != MBB->begin();) { 20526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // The next region starts above the previous region. Look backward in the 20626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // instruction stream until we find the nearest boundary. 20726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator I = RegionEnd; 20826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for(;I != MBB->begin(); --I, --RemainingCount) { 20926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (TII->isSchedulingBoundary(llvm::prior(I), MBB, Fn)) 21026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande break; 21126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 21226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande I = MBB->begin(); 21326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 21426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Skip empty scheduling regions. 21526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (I == RegionEnd) { 21626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande RegionEnd = llvm::prior(RegionEnd); 21726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande --RemainingCount; 21826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande continue; 21926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 22026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Skip regions with one instruction. 22126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (I == llvm::prior(RegionEnd)) { 22226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande RegionEnd = llvm::prior(RegionEnd); 22326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande continue; 22426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 22526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 22626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Packetizer.PacketizeMIs(MBB, I, RegionEnd); 22726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande RegionEnd = I; 22826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 22926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 23026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 23126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 23226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 23326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 23426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 23526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic bool IsIndirectCall(MachineInstr* MI) { 23626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return ((MI->getOpcode() == Hexagon::CALLR) || 23726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (MI->getOpcode() == Hexagon::CALLRv3)); 23826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 23926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 24026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Reserve resources for constant extender. Trigure an assertion if 24126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// reservation fail. 24226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandevoid HexagonPacketizerList::reserveResourcesForConstExt(MachineInstr* MI) { 24326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 24439498d1ff0dc5d1d4379c31a92596377d0d5d8a7Jyotsna Verma MachineFunction *MF = MI->getParent()->getParent(); 24539498d1ff0dc5d1d4379c31a92596377d0d5d8a7Jyotsna Verma MachineInstr *PseudoMI = MF->CreateMachineInstr(QII->get(Hexagon::IMMEXT_i), 24639498d1ff0dc5d1d4379c31a92596377d0d5d8a7Jyotsna Verma MI->getDebugLoc()); 24726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 24826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (ResourceTracker->canReserveResources(PseudoMI)) { 24926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ResourceTracker->reserveResources(PseudoMI); 25026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getParent()->getParent()->DeleteMachineInstr(PseudoMI); 25126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } else { 25226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getParent()->getParent()->DeleteMachineInstr(PseudoMI); 25326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande llvm_unreachable("can not reserve resources for constant extender."); 25426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 25526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return; 25626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 25726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 25826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::canReserveResourcesForConstExt(MachineInstr *MI) { 25926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 2605262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon assert(QII->isExtended(MI) && 26126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande "Should only be called for constant extended instructions"); 26226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineFunction *MF = MI->getParent()->getParent(); 26339498d1ff0dc5d1d4379c31a92596377d0d5d8a7Jyotsna Verma MachineInstr *PseudoMI = MF->CreateMachineInstr(QII->get(Hexagon::IMMEXT_i), 26426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getDebugLoc()); 26526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool CanReserve = ResourceTracker->canReserveResources(PseudoMI); 26626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MF->DeleteMachineInstr(PseudoMI); 26726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return CanReserve; 26826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 26926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 27026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Allocate resources (i.e. 4 bytes) for constant extender. If succeed, return 27126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// true, otherwise, return false. 27226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::tryAllocateResourcesForConstExt(MachineInstr* MI) { 27326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 27439498d1ff0dc5d1d4379c31a92596377d0d5d8a7Jyotsna Verma MachineFunction *MF = MI->getParent()->getParent(); 27539498d1ff0dc5d1d4379c31a92596377d0d5d8a7Jyotsna Verma MachineInstr *PseudoMI = MF->CreateMachineInstr(QII->get(Hexagon::IMMEXT_i), 27639498d1ff0dc5d1d4379c31a92596377d0d5d8a7Jyotsna Verma MI->getDebugLoc()); 27726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 27826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (ResourceTracker->canReserveResources(PseudoMI)) { 27926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ResourceTracker->reserveResources(PseudoMI); 28026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getParent()->getParent()->DeleteMachineInstr(PseudoMI); 28126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 28226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } else { 28326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getParent()->getParent()->DeleteMachineInstr(PseudoMI); 28426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 28526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 28626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 28726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 28826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 28926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::IsCallDependent(MachineInstr* MI, 29026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SDep::Kind DepType, 29126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned DepReg) { 29226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 29326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 29426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonRegisterInfo* QRI = 29526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (const HexagonRegisterInfo *) TM.getRegisterInfo(); 29626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 29726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check for lr dependence 29826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (DepReg == QRI->getRARegister()) { 29926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 30026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 30126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 30226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (QII->isDeallocRet(MI)) { 30326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (DepReg == QRI->getFrameRegister() || 30426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande DepReg == QRI->getStackRegister()) 30526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 30626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 30726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 30826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check if this is a predicate dependence 30926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const TargetRegisterClass* RC = QRI->getMinimalPhysRegClass(DepReg); 31026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (RC == &Hexagon::PredRegsRegClass) { 31126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 31226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 31326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 31426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 31526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Lastly check for an operand used in an indirect call 31626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // If we had an attribute for checking if an instruction is an indirect call, 31726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // then we could have avoided this relatively brittle implementation of 31826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // IsIndirectCall() 31926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 32026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Assumes that the first operand of the CALLr is the function address 32126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 32226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (IsIndirectCall(MI) && (DepType == SDep::Data)) { 32326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineOperand MO = MI->getOperand(0); 32426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MO.isReg() && MO.isUse() && (MO.getReg() == DepReg)) { 32526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 32626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 32726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 32826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 32926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 33026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 33126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 33226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic bool IsRegDependence(const SDep::Kind DepType) { 33326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return (DepType == SDep::Data || DepType == SDep::Anti || 33426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande DepType == SDep::Output); 33526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 33626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 33726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic bool IsDirectJump(MachineInstr* MI) { 33826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return (MI->getOpcode() == Hexagon::JMP); 33926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 34026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 34126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic bool IsSchedBarrier(MachineInstr* MI) { 34226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande switch (MI->getOpcode()) { 34326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::BARRIER: 34426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 34526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 34626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 34726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 34826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 34926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic bool IsControlFlow(MachineInstr* MI) { 35026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return (MI->getDesc().isTerminator() || MI->getDesc().isCall()); 35126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 35226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 35326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::isNewValueInst(MachineInstr* MI) { 35426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 35526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (QII->isNewValueJump(MI)) 35626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 35726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 35826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (QII->isNewValueStore(MI)) 35926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 36026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 36126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 36226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 36326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 36426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Function returns true if an instruction can be promoted to the new-value 36526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// store. It will always return false for v2 and v3. 36626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// It lists all the conditional and unconditional stores that can be promoted 36726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// to the new-value stores. 36826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 36926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::IsNewifyStore (MachineInstr* MI) { 37026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonRegisterInfo* QRI = 37126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (const HexagonRegisterInfo *) TM.getRegisterInfo(); 37226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande switch (MI->getOpcode()) 37326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande { 37426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // store byte 37526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib: 37626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed: 37726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_V4: 37826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_shl_V4: 37926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_V4: 38026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_V4: 38126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri: 38226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cPt: 38326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnPt_V4: 38426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cNotPt: 38526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnNotPt_V4: 38626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cPt: 38726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnPt_V4: 38826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cNotPt: 38926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnNotPt_V4: 39026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cPt_V4: 39126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnPt_V4: 39226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cNotPt_V4: 39326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnNotPt_V4: 39426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cPt: 39526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnPt_V4: 39626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cNotPt: 39726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnNotPt_V4: 39826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cPt_V4: 39926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cNotPt_V4: 40026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnPt_V4: 40126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnNotPt_V4: 40226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cPt_V4: 40326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cNotPt_V4: 40426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnPt_V4: 40526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnNotPt_V4: 40626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 40726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // store halfword 40826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih: 40926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed: 41026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_V4: 41126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_shl_V4: 41226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_V4: 41326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_V4: 41426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri: 41526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cPt: 41626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnPt_V4: 41726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cNotPt: 41826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnNotPt_V4: 41926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cPt: 42026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnPt_V4: 42126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cNotPt: 42226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnNotPt_V4: 42326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cPt_V4: 42426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnPt_V4: 42526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cNotPt_V4: 42626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnNotPt_V4: 42726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cPt: 42826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnPt_V4: 42926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cNotPt: 43026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnNotPt_V4: 43126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cPt_V4: 43226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cNotPt_V4: 43326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnPt_V4: 43426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnNotPt_V4: 43526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cPt_V4: 43626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cNotPt_V4: 43726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnPt_V4: 43826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnNotPt_V4: 43926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 44026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // store word 44126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw: 44226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed: 44326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_V4: 44426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_shl_V4: 44526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_V4: 44626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_V4: 44726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri: 44826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cPt: 44926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnPt_V4: 45026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cNotPt: 45126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnNotPt_V4: 45226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cPt: 45326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnPt_V4: 45426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cNotPt: 45526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnNotPt_V4: 45626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cPt_V4: 45726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnPt_V4: 45826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cNotPt_V4: 45926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnNotPt_V4: 46026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cPt: 46126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnPt_V4: 46226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cNotPt: 46326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnNotPt_V4: 46426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cPt_V4: 46526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cNotPt_V4: 46626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnPt_V4: 46726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnNotPt_V4: 46826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cPt_V4: 46926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cNotPt_V4: 47026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnPt_V4: 47126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnNotPt_V4: 47226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return QRI->Subtarget.hasV4TOps(); 47326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 47426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 47526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 47626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 47726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic bool IsLoopN(MachineInstr *MI) { 47826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return (MI->getOpcode() == Hexagon::LOOP0_i || 47926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getOpcode() == Hexagon::LOOP0_r); 48026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 48126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 48226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande/// DoesModifyCalleeSavedReg - Returns true if the instruction modifies a 48326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande/// callee-saved register. 48426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic bool DoesModifyCalleeSavedReg(MachineInstr *MI, 48526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const TargetRegisterInfo *TRI) { 48626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for (const uint16_t *CSR = TRI->getCalleeSavedRegs(); *CSR; ++CSR) { 48726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned CalleeSavedReg = *CSR; 48826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->modifiesRegister(CalleeSavedReg, TRI)) 48926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 49026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 49126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 49226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 49326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 49426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Return the new value instruction for a given store. 49526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic int GetDotNewOp(const int opc) { 49626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande switch (opc) { 49726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande default: llvm_unreachable("Unknown .new type"); 49826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // store new value byte 49926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib: 50026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_nv_V4; 50126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 50226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed: 50326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_nv_V4; 50426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 50526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_V4: 50626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_nv_V4; 50726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 50826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_shl_V4: 50926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_shl_nv_V4; 51026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 51126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_V4: 51226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_nv_V4; 51326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 51426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_V4: 51526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_nv_V4; 51626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 51726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri: 51826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri_nv_V4; 51926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 52026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cPt: 52126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_cPt_nv_V4; 52226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 52326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnPt_V4: 52426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_cdnPt_nv_V4; 52526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 52626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cNotPt: 52726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_cNotPt_nv_V4; 52826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 52926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnNotPt_V4: 53026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_cdnNotPt_nv_V4; 53126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 53226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cPt: 53326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_cPt_nv_V4; 53426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 53526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnPt_V4: 53626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_cdnPt_nv_V4; 53726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 53826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cNotPt: 53926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_cNotPt_nv_V4; 54026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 54126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnNotPt_V4: 54226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_cdnNotPt_nv_V4; 54326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 54426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cPt_V4: 54526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_cPt_nv_V4; 54626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 54726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnPt_V4: 54826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_cdnPt_nv_V4; 54926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 55026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cNotPt_V4: 55126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_cNotPt_nv_V4; 55226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 55326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnNotPt_V4: 55426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_cdnNotPt_nv_V4; 55526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 55626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cPt: 55726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri_cPt_nv_V4; 55826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 55926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnPt_V4: 56026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri_cdnPt_nv_V4; 56126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 56226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cNotPt: 56326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri_cNotPt_nv_V4; 56426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 56526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnNotPt_V4: 56626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri_cdnNotPt_nv_V4; 56726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 56826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cPt_V4: 56926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_cPt_nv_V4; 57026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 57126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cNotPt_V4: 57226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_cNotPt_nv_V4; 57326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 57426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnPt_V4: 57526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_cdnPt_nv_V4; 57626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 57726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnNotPt_V4: 57826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_cdnNotPt_nv_V4; 57926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 58026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cPt_V4: 58126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_cPt_nv_V4; 58226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 58326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cNotPt_V4: 58426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_cNotPt_nv_V4; 58526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 58626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnPt_V4: 58726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_cdnPt_nv_V4; 58826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 58926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnNotPt_V4: 59026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_cdnNotPt_nv_V4; 59126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 59226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // store new value halfword 59326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih: 59426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_nv_V4; 59526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 59626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed: 59726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_nv_V4; 59826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 59926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_V4: 60026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_nv_V4; 60126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 60226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_shl_V4: 60326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_shl_nv_V4; 60426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 60526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_V4: 60626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_nv_V4; 60726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 60826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_V4: 60926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_nv_V4; 61026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 61126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri: 61226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri_nv_V4; 61326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 61426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cPt: 61526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_cPt_nv_V4; 61626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 61726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnPt_V4: 61826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_cdnPt_nv_V4; 61926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 62026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cNotPt: 62126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_cNotPt_nv_V4; 62226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 62326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnNotPt_V4: 62426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_cdnNotPt_nv_V4; 62526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 62626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cPt: 62726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_cPt_nv_V4; 62826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 62926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnPt_V4: 63026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_cdnPt_nv_V4; 63126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 63226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cNotPt: 63326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_cNotPt_nv_V4; 63426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 63526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnNotPt_V4: 63626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_cdnNotPt_nv_V4; 63726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 63826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cPt_V4: 63926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_cPt_nv_V4; 64026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 64126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnPt_V4: 64226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_cdnPt_nv_V4; 64326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 64426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cNotPt_V4: 64526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_cNotPt_nv_V4; 64626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 64726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnNotPt_V4: 64826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_cdnNotPt_nv_V4; 64926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 65026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cPt: 65126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri_cPt_nv_V4; 65226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 65326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnPt_V4: 65426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri_cdnPt_nv_V4; 65526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 65626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cNotPt: 65726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri_cNotPt_nv_V4; 65826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 65926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnNotPt_V4: 66026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri_cdnNotPt_nv_V4; 66126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 66226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cPt_V4: 66326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_cPt_nv_V4; 66426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 66526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cNotPt_V4: 66626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_cNotPt_nv_V4; 66726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 66826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnPt_V4: 66926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_cdnPt_nv_V4; 67026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 67126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnNotPt_V4: 67226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_cdnNotPt_nv_V4; 67326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 67426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cPt_V4: 67526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_cPt_nv_V4; 67626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 67726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cNotPt_V4: 67826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_cNotPt_nv_V4; 67926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 68026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnPt_V4: 68126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_cdnPt_nv_V4; 68226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 68326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnNotPt_V4: 68426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_cdnNotPt_nv_V4; 68526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 68626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // store new value word 68726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw: 68826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_nv_V4; 68926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 69026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed: 69126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_nv_V4; 69226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 69326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_V4: 69426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_nv_V4; 69526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 69626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_shl_V4: 69726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_shl_nv_V4; 69826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 69926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_V4: 70026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_nv_V4; 70126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 70226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_V4: 70326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_nv_V4; 70426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 70526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri: 70626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri_nv_V4; 70726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 70826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cPt: 70926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_cPt_nv_V4; 71026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 71126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnPt_V4: 71226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_cdnPt_nv_V4; 71326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 71426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cNotPt: 71526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_cNotPt_nv_V4; 71626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 71726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnNotPt_V4: 71826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_cdnNotPt_nv_V4; 71926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 72026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cPt: 72126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_cPt_nv_V4; 72226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 72326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnPt_V4: 72426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_cdnPt_nv_V4; 72526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 72626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cNotPt: 72726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_cNotPt_nv_V4; 72826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 72926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnNotPt_V4: 73026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_cdnNotPt_nv_V4; 73126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 73226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cPt_V4: 73326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_cPt_nv_V4; 73426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 73526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnPt_V4: 73626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_cdnPt_nv_V4; 73726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 73826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cNotPt_V4: 73926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_cNotPt_nv_V4; 74026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 74126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnNotPt_V4: 74226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_cdnNotPt_nv_V4; 74326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 74426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cPt: 74526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri_cPt_nv_V4; 74626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 74726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnPt_V4: 74826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri_cdnPt_nv_V4; 74926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 75026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cNotPt: 75126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri_cNotPt_nv_V4; 75226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 75326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnNotPt_V4: 75426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri_cdnNotPt_nv_V4; 75526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 75626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cPt_V4: 75726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_cPt_nv_V4; 75826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 75926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cNotPt_V4: 76026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_cNotPt_nv_V4; 76126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 76226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnPt_V4: 76326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_cdnPt_nv_V4; 76426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 76526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnNotPt_V4: 76626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_cdnNotPt_nv_V4; 76726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 76826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cPt_V4: 76926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_cPt_nv_V4; 77026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 77126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cNotPt_V4: 77226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_cNotPt_nv_V4; 77326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 77426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnPt_V4: 77526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_cdnPt_nv_V4; 77626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 77726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnNotPt_V4: 77826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_cdnNotPt_nv_V4; 77926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 78026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 78126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 78226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Return .new predicate version for an instruction 78326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic int GetDotNewPredOp(const int opc) { 78426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande switch (opc) { 78526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande default: llvm_unreachable("Unknown .new type"); 78626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional stores 78726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store byte conditionally 78826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cPt : 78926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_cdnPt_V4; 79026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 79126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cNotPt : 79226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_cdnNotPt_V4; 79326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 79426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cPt : 79526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_cdnPt_V4; 79626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 79726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cNotPt : 79826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_cdnNotPt_V4; 79926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 80026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_imm_cPt_V4 : 80126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_imm_cdnPt_V4; 80226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 80326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_imm_cNotPt_V4 : 80426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_imm_cdnNotPt_V4; 80526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 80626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cPt : 80726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri_cdnPt_V4; 80826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 80926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cNotPt : 81026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri_cdnNotPt_V4; 81126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 81226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cPt_V4 : 81326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_cdnPt_V4; 81426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 81526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cNotPt_V4 : 81626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_cdnNotPt_V4; 81726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 81826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cPt_V4 : 81926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_cdnPt_V4; 82026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 82126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cNotPt_V4 : 82226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_cdnNotPt_V4; 82326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 82426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cPt_V4 : 82526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_cdnPt_V4; 82626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 82726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cNotPt_V4 : 82826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_cdnNotPt_V4; 82926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 83026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store doubleword conditionally 83126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_cPt : 83226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_cdnPt_V4; 83326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 83426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_cNotPt : 83526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_cdnNotPt_V4; 83626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 83726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_cPt : 83826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_indexed_cdnPt_V4; 83926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 84026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_cNotPt : 84126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_indexed_cdnNotPt_V4; 84226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 84326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_shl_cPt_V4 : 84426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_indexed_shl_cdnPt_V4; 84526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 84626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_shl_cNotPt_V4 : 84726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_indexed_shl_cdnNotPt_V4; 84826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 84926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STdri_cPt : 85026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STdri_cdnPt_V4; 85126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 85226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STdri_cNotPt : 85326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STdri_cdnNotPt_V4; 85426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 85526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STd_GP_cPt_V4 : 85626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STd_GP_cdnPt_V4; 85726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 85826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STd_GP_cNotPt_V4 : 85926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STd_GP_cdnNotPt_V4; 86026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 86126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_GP_cPt_V4 : 86226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_GP_cdnPt_V4; 86326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 86426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_GP_cNotPt_V4 : 86526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_GP_cdnNotPt_V4; 86626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 86726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store halfword conditionally 86826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cPt : 86926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_cdnPt_V4; 87026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 87126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cNotPt : 87226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_cdnNotPt_V4; 87326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 87426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cPt : 87526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_cdnPt_V4; 87626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 87726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cNotPt : 87826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_cdnNotPt_V4; 87926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 88026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_imm_cPt_V4 : 88126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_imm_cdnPt_V4; 88226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 88326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_imm_cNotPt_V4 : 88426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_imm_cdnNotPt_V4; 88526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 88626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cPt_V4 : 88726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_cdnPt_V4; 88826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 88926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cNotPt_V4 : 89026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_cdnNotPt_V4; 89126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 89226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cPt : 89326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri_cdnPt_V4; 89426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 89526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cNotPt : 89626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri_cdnNotPt_V4; 89726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 89826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cPt_V4 : 89926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_cdnPt_V4; 90026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 90126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cNotPt_V4 : 90226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_cdnNotPt_V4; 90326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 90426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cPt_V4 : 90526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_cdnPt_V4; 90626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 90726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cNotPt_V4 : 90826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_cdnNotPt_V4; 90926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 91026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store word conditionally 91126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cPt : 91226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_cdnPt_V4; 91326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 91426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cNotPt : 91526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_cdnNotPt_V4; 91626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 91726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cPt : 91826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_cdnPt_V4; 91926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 92026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cNotPt : 92126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_cdnNotPt_V4; 92226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 92326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_imm_cPt_V4 : 92426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_imm_cdnPt_V4; 92526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 92626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_imm_cNotPt_V4 : 92726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_imm_cdnNotPt_V4; 92826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 92926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cPt_V4 : 93026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_cdnPt_V4; 93126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 93226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cNotPt_V4 : 93326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_cdnNotPt_V4; 93426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 93526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cPt : 93626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri_cdnPt_V4; 93726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 93826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cNotPt : 93926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri_cdnNotPt_V4; 94026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 94126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cPt_V4 : 94226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_cdnPt_V4; 94326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 94426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cNotPt_V4 : 94526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_cdnNotPt_V4; 94626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 94726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cPt_V4 : 94826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_cdnPt_V4; 94926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 95026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cNotPt_V4 : 95126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_cdnNotPt_V4; 95226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 95326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Condtional Jumps 95426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::JMP_c: 95526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::JMP_cdnPt; 95626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 95726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::JMP_cNot: 95826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::JMP_cdnNotPt; 95926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 96026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::JMPR_cPt: 96126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::JMPR_cdnPt_V3; 96226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 96326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::JMPR_cNotPt: 96426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::JMPR_cdnNotPt_V3; 96526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 96626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional Transfers 96726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFR_cPt: 96826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::TFR_cdnPt; 96926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 97026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFR_cNotPt: 97126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::TFR_cdnNotPt; 97226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 97326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFRI_cPt: 97426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::TFRI_cdnPt; 97526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 97626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFRI_cNotPt: 97726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::TFRI_cdnNotPt; 97826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 97926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load double word 98026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_cPt : 98126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_cdnPt; 98226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 98326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_cNotPt : 98426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_cdnNotPt; 98526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 98626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cPt : 98726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_cdnPt; 98826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 98926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cNotPt : 99026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_cdnNotPt; 99126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 99226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrid_cPt : 99326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrid_cdnPt_V4; 99426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 99526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrid_cNotPt : 99626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrid_cdnNotPt_V4; 99726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 99826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load word 99926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_cPt : 100026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_cdnPt; 100126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 100226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_cNotPt : 100326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_cdnNotPt; 100426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 100526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cPt : 100626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_cdnPt; 100726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 100826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cNotPt : 100926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_cdnNotPt; 101026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 101126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriw_cPt : 101226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriw_cdnPt_V4; 101326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 101426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriw_cNotPt : 101526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriw_cdnNotPt_V4; 101626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 101726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load halfword 101826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_cPt : 101926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_cdnPt; 102026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 102126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_cNotPt : 102226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_cdnNotPt; 102326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 102426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cPt : 102526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_cdnPt; 102626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 102726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cNotPt : 102826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_cdnNotPt; 102926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 103026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrih_cPt : 103126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrih_cdnPt_V4; 103226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 103326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrih_cNotPt : 103426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrih_cdnNotPt_V4; 103526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 103626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load byte 103726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_cPt : 103826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_cdnPt; 103926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 104026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_cNotPt : 104126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_cdnNotPt; 104226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 104326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cPt : 104426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_cdnPt; 104526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 104626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cNotPt : 104726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_cdnNotPt; 104826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 104926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrib_cPt : 105026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrib_cdnPt_V4; 105126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 105226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrib_cNotPt : 105326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrib_cdnNotPt_V4; 105426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 105526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load unsigned halfword 105626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_cPt : 105726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_cdnPt; 105826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 105926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_cNotPt : 106026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_cdnNotPt; 106126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 106226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cPt : 106326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_cdnPt; 106426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 106526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cNotPt : 106626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_cdnNotPt; 106726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 106826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriuh_cPt : 106926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriuh_cdnPt_V4; 107026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 107126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriuh_cNotPt : 107226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriuh_cdnNotPt_V4; 107326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 107426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load unsigned byte 107526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_cPt : 107626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_cdnPt; 107726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 107826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_cNotPt : 107926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_cdnNotPt; 108026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 108126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cPt : 108226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_cdnPt; 108326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 108426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cNotPt : 108526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_cdnNotPt; 108626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 108726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriub_cPt : 108826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriub_cdnPt_V4; 108926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 109026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriub_cNotPt : 109126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriub_cdnNotPt_V4; 109226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 109326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // V4 indexed+scaled load 109426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 109526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cPt_V4 : 109626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_cdnPt_V4; 109726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 109826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cNotPt_V4 : 109926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_cdnNotPt_V4; 110026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 110126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_shl_cPt_V4 : 110226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_shl_cdnPt_V4; 110326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 110426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_shl_cNotPt_V4 : 110526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_shl_cdnNotPt_V4; 110626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 110726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cPt_V4 : 110826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_cdnPt_V4; 110926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 111026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cNotPt_V4 : 111126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_cdnNotPt_V4; 111226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 111326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_shl_cPt_V4 : 111426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_shl_cdnPt_V4; 111526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 111626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_shl_cNotPt_V4 : 111726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_shl_cdnNotPt_V4; 111826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 111926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cPt_V4 : 112026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_cdnPt_V4; 112126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 112226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cNotPt_V4 : 112326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_cdnNotPt_V4; 112426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 112526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_shl_cPt_V4 : 112626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_shl_cdnPt_V4; 112726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 112826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_shl_cNotPt_V4 : 112926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_shl_cdnNotPt_V4; 113026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 113126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cPt_V4 : 113226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_cdnPt_V4; 113326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 113426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cNotPt_V4 : 113526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_cdnNotPt_V4; 113626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 113726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_shl_cPt_V4 : 113826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_shl_cdnPt_V4; 113926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 114026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_shl_cNotPt_V4 : 114126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_shl_cdnNotPt_V4; 114226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 114326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cPt_V4 : 114426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_cdnPt_V4; 114526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 114626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cNotPt_V4 : 114726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_cdnNotPt_V4; 114826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 114926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_shl_cPt_V4 : 115026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_shl_cdnPt_V4; 115126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 115226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_shl_cNotPt_V4 : 115326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_shl_cdnNotPt_V4; 115426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 115526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cPt_V4 : 115626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_cdnPt_V4; 115726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 115826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cNotPt_V4 : 115926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_cdnNotPt_V4; 116026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 116126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_shl_cPt_V4 : 116226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_shl_cdnPt_V4; 116326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 116426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_shl_cNotPt_V4 : 116526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_shl_cdnNotPt_V4; 116626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 116726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // V4 global address load 116826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 116926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDd_GP_cPt_V4: 117026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDd_GP_cdnPt_V4; 117126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 117226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDd_GP_cNotPt_V4: 117326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDd_GP_cdnNotPt_V4; 117426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 117526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDb_GP_cPt_V4: 117626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDb_GP_cdnPt_V4; 117726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 117826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDb_GP_cNotPt_V4: 117926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDb_GP_cdnNotPt_V4; 118026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 118126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDub_GP_cPt_V4: 118226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDub_GP_cdnPt_V4; 118326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 118426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDub_GP_cNotPt_V4: 118526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDub_GP_cdnNotPt_V4; 118626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 118726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDh_GP_cPt_V4: 118826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDh_GP_cdnPt_V4; 118926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 119026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDh_GP_cNotPt_V4: 119126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDh_GP_cdnNotPt_V4; 119226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 119326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDuh_GP_cPt_V4: 119426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDuh_GP_cdnPt_V4; 119526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 119626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDuh_GP_cNotPt_V4: 119726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDuh_GP_cdnNotPt_V4; 119826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 119926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDw_GP_cPt_V4: 120026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDw_GP_cdnPt_V4; 120126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 120226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDw_GP_cNotPt_V4: 120326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDw_GP_cdnNotPt_V4; 120426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 120526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_GP_cPt_V4: 120626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_GP_cdnPt_V4; 120726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 120826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_GP_cNotPt_V4: 120926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_GP_cdnNotPt_V4; 121026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 121126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_GP_cPt_V4: 121226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_GP_cdnPt_V4; 121326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 121426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_GP_cNotPt_V4: 121526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_GP_cdnNotPt_V4; 121626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 121726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_GP_cPt_V4: 121826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_GP_cdnPt_V4; 121926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 122026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_GP_cNotPt_V4: 122126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_GP_cdnNotPt_V4; 122226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 122326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_GP_cPt_V4: 122426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_GP_cdnPt_V4; 122526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 122626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_GP_cNotPt_V4: 122726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_GP_cdnNotPt_V4; 122826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 122926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_GP_cPt_V4: 123026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_GP_cdnPt_V4; 123126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 123226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_GP_cNotPt_V4: 123326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_GP_cdnNotPt_V4; 123426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 123526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_GP_cPt_V4: 123626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_GP_cdnPt_V4; 123726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 123826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_GP_cNotPt_V4: 123926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_GP_cdnNotPt_V4; 124026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 124126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional store new-value byte 124226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cPt_nv_V4 : 124326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_cdnPt_nv_V4; 124426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cNotPt_nv_V4 : 124526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_cdnNotPt_nv_V4; 124626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 124726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cPt_nv_V4 : 124826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_cdnPt_nv_V4; 124926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cNotPt_nv_V4 : 125026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_cdnNotPt_nv_V4; 125126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 125226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cPt_nv_V4 : 125326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_cdnPt_nv_V4; 125426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cNotPt_nv_V4 : 125526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_cdnNotPt_nv_V4; 125626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 125726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cPt_nv_V4 : 125826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri_cdnPt_nv_V4; 125926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cNotPt_nv_V4 : 126026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri_cdnNotPt_nv_V4; 126126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 126226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cPt_nv_V4 : 126326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_cdnPt_nv_V4; 126426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 126526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cNotPt_nv_V4 : 126626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_cdnNotPt_nv_V4; 126726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 126826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cPt_nv_V4 : 126926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_cdnPt_nv_V4; 127026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 127126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cNotPt_nv_V4 : 127226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_cdnNotPt_nv_V4; 127326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 127426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional store new-value halfword 127526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cPt_nv_V4 : 127626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_cdnPt_nv_V4; 127726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cNotPt_nv_V4 : 127826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_cdnNotPt_nv_V4; 127926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 128026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cPt_nv_V4 : 128126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_cdnPt_nv_V4; 128226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cNotPt_nv_V4 : 128326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_cdnNotPt_nv_V4; 128426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 128526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cPt_nv_V4 : 128626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_cdnPt_nv_V4; 128726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cNotPt_nv_V4 : 128826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_cdnNotPt_nv_V4; 128926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 129026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cPt_nv_V4 : 129126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri_cdnPt_nv_V4; 129226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cNotPt_nv_V4 : 129326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri_cdnNotPt_nv_V4; 129426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 129526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cPt_nv_V4 : 129626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_cdnPt_nv_V4; 129726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 129826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cNotPt_nv_V4 : 129926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_cdnNotPt_nv_V4; 130026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 130126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cPt_nv_V4 : 130226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_cdnPt_nv_V4; 130326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 130426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cNotPt_nv_V4 : 130526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_cdnNotPt_nv_V4; 130626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 130726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional store new-value word 130826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cPt_nv_V4 : 130926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_cdnPt_nv_V4; 131026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cNotPt_nv_V4 : 131126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_cdnNotPt_nv_V4; 131226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 131326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cPt_nv_V4 : 131426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_cdnPt_nv_V4; 131526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cNotPt_nv_V4 : 131626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_cdnNotPt_nv_V4; 131726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 131826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cPt_nv_V4 : 131926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_cdnPt_nv_V4; 132026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cNotPt_nv_V4 : 132126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_cdnNotPt_nv_V4; 132226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 132326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cPt_nv_V4 : 132426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri_cdnPt_nv_V4; 132526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cNotPt_nv_V4: 132626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri_cdnNotPt_nv_V4; 132726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 132826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cPt_nv_V4 : 132926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_cdnPt_nv_V4; 133026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 133126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cNotPt_nv_V4 : 133226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_cdnNotPt_nv_V4; 133326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 133426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cPt_nv_V4 : 133526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_cdnPt_nv_V4; 133626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 133726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cNotPt_nv_V4 : 133826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_cdnNotPt_nv_V4; 133926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 134026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional add 134126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_ri_cPt : 134226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ADD_ri_cdnPt; 134326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_ri_cNotPt : 134426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ADD_ri_cdnNotPt; 134526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 134626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_rr_cPt : 134726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ADD_rr_cdnPt; 134826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_rr_cNotPt : 134926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ADD_rr_cdnNotPt; 135026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 135126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional logical Operations 135226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::XOR_rr_cPt : 135326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::XOR_rr_cdnPt; 135426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::XOR_rr_cNotPt : 135526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::XOR_rr_cdnNotPt; 135626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 135726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::AND_rr_cPt : 135826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::AND_rr_cdnPt; 135926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::AND_rr_cNotPt : 136026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::AND_rr_cdnNotPt; 136126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 136226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::OR_rr_cPt : 136326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::OR_rr_cdnPt; 136426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::OR_rr_cNotPt : 136526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::OR_rr_cdnNotPt; 136626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 136726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional Subtract 136826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SUB_rr_cPt : 136926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SUB_rr_cdnPt; 137026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SUB_rr_cNotPt : 137126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SUB_rr_cdnNotPt; 137226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 137326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional combine 137426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::COMBINE_rr_cPt : 137526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::COMBINE_rr_cdnPt; 137626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::COMBINE_rr_cNotPt : 137726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::COMBINE_rr_cdnNotPt; 137826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 137926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASLH_cPt_V4 : 138026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ASLH_cdnPt_V4; 138126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASLH_cNotPt_V4 : 138226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ASLH_cdnNotPt_V4; 138326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 138426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASRH_cPt_V4 : 138526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ASRH_cdnPt_V4; 138626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASRH_cNotPt_V4 : 138726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ASRH_cdnNotPt_V4; 138826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 138926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTB_cPt_V4 : 139026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SXTB_cdnPt_V4; 139126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTB_cNotPt_V4 : 139226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SXTB_cdnNotPt_V4; 139326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 139426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTH_cPt_V4 : 139526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SXTH_cdnPt_V4; 139626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTH_cNotPt_V4 : 139726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SXTH_cdnNotPt_V4; 139826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 139926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTB_cPt_V4 : 140026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ZXTB_cdnPt_V4; 140126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTB_cNotPt_V4 : 140226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ZXTB_cdnNotPt_V4; 140326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 140426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTH_cPt_V4 : 140526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ZXTH_cdnPt_V4; 140626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTH_cNotPt_V4 : 140726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ZXTH_cdnNotPt_V4; 140826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 140926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 141026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 141126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Returns true if an instruction can be promoted to .new predicate 141226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// or new-value store. 141326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::isNewifiable(MachineInstr* MI) { 141426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if ( isCondInst(MI) || IsNewifyStore(MI)) 141526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 141626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else 141726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 141826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 141926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 142026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::isCondInst (MachineInstr* MI) { 142126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 142226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const MCInstrDesc& TID = MI->getDesc(); 142326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // bug 5670: until that is fixed, 142426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // this portion is disabled. 142526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if ( TID.isConditionalBranch() // && !IsRegisterJump(MI)) || 142626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || QII->isConditionalTransfer(MI) 142726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || QII->isConditionalALU32(MI) 142826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || QII->isConditionalLoad(MI) 142926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || QII->isConditionalStore(MI)) { 143026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 143126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 143226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 143326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 143426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 14355262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon 143626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Promote an instructiont to its .new form. 143726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// At this time, we have already made a call to CanPromoteToDotNew 143826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// and made sure that it can *indeed* be promoted. 143926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::PromoteToDotNew(MachineInstr* MI, 144026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SDep::Kind DepType, MachineBasicBlock::iterator &MII, 144126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const TargetRegisterClass* RC) { 144226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 144326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert (DepType == SDep::Data); 144426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 144526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 144626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande int NewOpcode; 144726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (RC == &Hexagon::PredRegsRegClass) 144826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande NewOpcode = GetDotNewPredOp(MI->getOpcode()); 144926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else 145026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande NewOpcode = GetDotNewOp(MI->getOpcode()); 145126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->setDesc(QII->get(NewOpcode)); 145226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 145326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 145426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 145526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 145626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Returns the most basic instruction for the .new predicated instructions and 145726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// new-value stores. 145826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// For example, all of the following instructions will be converted back to the 145926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// same instruction: 146026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 1) if (p0.new) memw(R0+#0) = R1.new ---> 146126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 2) if (p0) memw(R0+#0)= R1.new -------> if (p0) memw(R0+#0) = R1 146226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 3) if (p0.new) memw(R0+#0) = R1 ---> 146326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 146426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// To understand the translation of instruction 1 to its original form, consider 146526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// a packet with 3 instructions. 146626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// { p0 = cmp.eq(R0,R1) 146726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// if (p0.new) R2 = add(R3, R4) 146826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// R5 = add (R3, R1) 146926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// } 147026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// if (p0) memw(R5+#0) = R2 <--- trying to include it in the previous packet 147126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 147226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// This instruction can be part of the previous packet only if both p0 and R2 147326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// are promoted to .new values. This promotion happens in steps, first 147426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// predicate register is promoted to .new and in the next iteration R2 is 147526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// promoted. Therefore, in case of dependence check failure (due to R5) during 147626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// next iteration, it should be converted back to its most basic form. 147726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 147826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic int GetDotOldOp(const int opc) { 147926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande switch (opc) { 148026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande default: llvm_unreachable("Unknown .old type"); 148126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFR_cdnPt: 148226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::TFR_cPt; 148326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 148426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFR_cdnNotPt: 148526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::TFR_cNotPt; 148626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 148726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFRI_cdnPt: 148826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::TFRI_cPt; 148926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 149026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFRI_cdnNotPt: 149126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::TFRI_cNotPt; 149226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 149326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::JMP_cdnPt: 149426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::JMP_c; 149526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 149626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::JMP_cdnNotPt: 149726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::JMP_cNot; 149826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 149926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::JMPR_cdnPt_V3: 150026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::JMPR_cPt; 150126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 150226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::JMPR_cdnNotPt_V3: 150326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::JMPR_cNotPt; 150426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 150526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load double word 150626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 150726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_cdnPt : 150826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_cPt; 150926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 151026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_cdnNotPt : 151126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_cNotPt; 151226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 151326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnPt : 151426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_cPt; 151526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 151626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnNotPt : 151726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_cNotPt; 151826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 151926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrid_cdnPt_V4 : 152026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrid_cPt; 152126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 152226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrid_cdnNotPt_V4 : 152326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrid_cNotPt; 152426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 152526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load word 152626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 152726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_cdnPt : 152826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_cPt; 152926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 153026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_cdnNotPt : 153126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_cNotPt; 153226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 153326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnPt : 153426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_cPt; 153526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 153626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnNotPt : 153726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_cNotPt; 153826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 153926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriw_cdnPt_V4 : 154026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriw_cPt; 154126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 154226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriw_cdnNotPt_V4 : 154326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriw_cNotPt; 154426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 154526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load half 154626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 154726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_cdnPt : 154826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_cPt; 154926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 155026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_cdnNotPt : 155126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_cNotPt; 155226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 155326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnPt : 155426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_cPt; 155526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 155626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnNotPt : 155726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_cNotPt; 155826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 155926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrih_cdnPt_V4 : 156026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrih_cPt; 156126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 156226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrih_cdnNotPt_V4 : 156326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrih_cNotPt; 156426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 156526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load byte 156626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 156726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_cdnPt : 156826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_cPt; 156926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 157026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_cdnNotPt : 157126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_cNotPt; 157226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 157326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnPt : 157426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_cPt; 157526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 157626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnNotPt : 157726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_cNotPt; 157826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 157926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrib_cdnPt_V4 : 158026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrib_cPt; 158126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 158226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrib_cdnNotPt_V4 : 158326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDrib_cNotPt; 158426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 158526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load unsigned half 158626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 158726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_cdnPt : 158826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_cPt; 158926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 159026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_cdnNotPt : 159126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_cNotPt; 159226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 159326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnPt : 159426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_cPt; 159526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 159626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnNotPt : 159726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_cNotPt; 159826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 159926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriuh_cdnPt_V4 : 160026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriuh_cPt; 160126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 160226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriuh_cdnNotPt_V4 : 160326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriuh_cNotPt; 160426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 160526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Load unsigned byte 160626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_cdnPt : 160726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_cPt; 160826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 160926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_cdnNotPt : 161026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_cNotPt; 161126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 161226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnPt : 161326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_cPt; 161426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 161526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnNotPt : 161626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_cNotPt; 161726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 161826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriub_cdnPt_V4 : 161926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriub_cPt; 162026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 162126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriub_cdnNotPt_V4 : 162226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_LDriub_cNotPt; 162326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 162426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // V4 indexed+scaled Load 162526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 162626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnPt_V4 : 162726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_cPt_V4; 162826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 162926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnNotPt_V4 : 163026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_cNotPt_V4; 163126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 163226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_shl_cdnPt_V4 : 163326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_shl_cPt_V4; 163426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 163526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_shl_cdnNotPt_V4 : 163626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_indexed_shl_cNotPt_V4; 163726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 163826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnPt_V4 : 163926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_cPt_V4; 164026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 164126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnNotPt_V4 : 164226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_cNotPt_V4; 164326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 164426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_shl_cdnPt_V4 : 164526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_shl_cPt_V4; 164626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 164726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_shl_cdnNotPt_V4 : 164826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_indexed_shl_cNotPt_V4; 164926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 165026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnPt_V4 : 165126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_cPt_V4; 165226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 165326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnNotPt_V4 : 165426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_cNotPt_V4; 165526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 165626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_shl_cdnPt_V4 : 165726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_shl_cPt_V4; 165826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 165926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_shl_cdnNotPt_V4 : 166026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_indexed_shl_cNotPt_V4; 166126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 166226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnPt_V4 : 166326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_cPt_V4; 166426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 166526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnNotPt_V4 : 166626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_cNotPt_V4; 166726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 166826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_shl_cdnPt_V4 : 166926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_shl_cPt_V4; 167026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 167126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_shl_cdnNotPt_V4 : 167226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_indexed_shl_cNotPt_V4; 167326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 167426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnPt_V4 : 167526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_cPt_V4; 167626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 167726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnNotPt_V4 : 167826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_cNotPt_V4; 167926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 168026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_shl_cdnPt_V4 : 168126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_shl_cPt_V4; 168226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 168326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_shl_cdnNotPt_V4 : 168426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_indexed_shl_cNotPt_V4; 168526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 168626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnPt_V4 : 168726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_cPt_V4; 168826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 168926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnNotPt_V4 : 169026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_cNotPt_V4; 169126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 169226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_shl_cdnPt_V4 : 169326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_shl_cPt_V4; 169426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 169526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_shl_cdnNotPt_V4 : 169626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_indexed_shl_cNotPt_V4; 169726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 169826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // V4 global address load 169926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 170026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDd_GP_cdnPt_V4: 170126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDd_GP_cPt_V4; 170226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 170326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDd_GP_cdnNotPt_V4: 170426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDd_GP_cNotPt_V4; 170526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 170626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDb_GP_cdnPt_V4: 170726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDb_GP_cPt_V4; 170826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 170926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDb_GP_cdnNotPt_V4: 171026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDb_GP_cNotPt_V4; 171126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 171226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDub_GP_cdnPt_V4: 171326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDub_GP_cPt_V4; 171426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 171526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDub_GP_cdnNotPt_V4: 171626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDub_GP_cNotPt_V4; 171726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 171826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDh_GP_cdnPt_V4: 171926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDh_GP_cPt_V4; 172026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 172126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDh_GP_cdnNotPt_V4: 172226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDh_GP_cNotPt_V4; 172326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 172426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDuh_GP_cdnPt_V4: 172526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDuh_GP_cPt_V4; 172626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 172726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDuh_GP_cdnNotPt_V4: 172826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDuh_GP_cNotPt_V4; 172926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 173026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDw_GP_cdnPt_V4: 173126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDw_GP_cPt_V4; 173226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 173326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDw_GP_cdnNotPt_V4: 173426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDw_GP_cNotPt_V4; 173526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 173626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_GP_cdnPt_V4: 173726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_GP_cPt_V4; 173826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 173926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_GP_cdnNotPt_V4: 174026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrid_GP_cNotPt_V4; 174126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 174226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_GP_cdnPt_V4: 174326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_GP_cPt_V4; 174426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 174526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_GP_cdnNotPt_V4: 174626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrib_GP_cNotPt_V4; 174726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 174826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_GP_cdnPt_V4: 174926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_GP_cPt_V4; 175026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 175126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_GP_cdnNotPt_V4: 175226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriub_GP_cNotPt_V4; 175326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 175426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_GP_cdnPt_V4: 175526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_GP_cPt_V4; 175626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 175726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_GP_cdnNotPt_V4: 175826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDrih_GP_cNotPt_V4; 175926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 176026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_GP_cdnPt_V4: 176126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_GP_cPt_V4; 176226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 176326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_GP_cdnNotPt_V4: 176426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriuh_GP_cNotPt_V4; 176526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 176626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_GP_cdnPt_V4: 176726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_GP_cPt_V4; 176826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 176926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_GP_cdnNotPt_V4: 177026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::LDriw_GP_cNotPt_V4; 177126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 177226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional add 177326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 177426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_ri_cdnPt : 177526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ADD_ri_cPt; 177626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_ri_cdnNotPt : 177726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ADD_ri_cNotPt; 177826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 177926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_rr_cdnPt : 178026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ADD_rr_cPt; 178126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_rr_cdnNotPt: 178226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ADD_rr_cNotPt; 178326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 178426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional logical Operations 178526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 178626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::XOR_rr_cdnPt : 178726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::XOR_rr_cPt; 178826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::XOR_rr_cdnNotPt : 178926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::XOR_rr_cNotPt; 179026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 179126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::AND_rr_cdnPt : 179226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::AND_rr_cPt; 179326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::AND_rr_cdnNotPt : 179426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::AND_rr_cNotPt; 179526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 179626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::OR_rr_cdnPt : 179726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::OR_rr_cPt; 179826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::OR_rr_cdnNotPt : 179926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::OR_rr_cNotPt; 180026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 180126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional Subtract 180226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 180326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SUB_rr_cdnPt : 180426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SUB_rr_cPt; 180526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SUB_rr_cdnNotPt : 180626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SUB_rr_cNotPt; 180726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 180826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional combine 180926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 181026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::COMBINE_rr_cdnPt : 181126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::COMBINE_rr_cPt; 181226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::COMBINE_rr_cdnNotPt : 181326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::COMBINE_rr_cNotPt; 181426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 181526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Conditional shift operations 181626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 181726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASLH_cdnPt_V4 : 181826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ASLH_cPt_V4; 181926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASLH_cdnNotPt_V4 : 182026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ASLH_cNotPt_V4; 182126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 182226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASRH_cdnPt_V4 : 182326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ASRH_cPt_V4; 182426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASRH_cdnNotPt_V4 : 182526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ASRH_cNotPt_V4; 182626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 182726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTB_cdnPt_V4 : 182826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SXTB_cPt_V4; 182926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTB_cdnNotPt_V4 : 183026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SXTB_cNotPt_V4; 183126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 183226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTH_cdnPt_V4 : 183326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SXTH_cPt_V4; 183426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTH_cdnNotPt_V4 : 183526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::SXTH_cNotPt_V4; 183626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 183726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTB_cdnPt_V4 : 183826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ZXTB_cPt_V4; 183926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTB_cdnNotPt_V4 : 184026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ZXTB_cNotPt_V4; 184126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 184226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTH_cdnPt_V4 : 184326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ZXTH_cPt_V4; 184426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTH_cdnNotPt_V4 : 184526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::ZXTH_cNotPt_V4; 184626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 184726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store byte 184826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 184926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_imm_cdnPt_V4 : 185026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_imm_cPt_V4; 185126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 185226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_imm_cdnNotPt_V4 : 185326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_imm_cNotPt_V4; 185426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 185526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnPt_nv_V4 : 185626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cPt_nv_V4 : 185726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnPt_V4 : 185826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_cPt; 185926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 186026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnNotPt_nv_V4 : 186126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cNotPt_nv_V4 : 186226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnNotPt_V4 : 186326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_cNotPt; 186426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 186526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnPt_V4 : 186626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cPt_nv_V4 : 186726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnPt_nv_V4 : 186826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_cPt; 186926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 187026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnNotPt_V4 : 187126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cNotPt_nv_V4 : 187226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnNotPt_nv_V4 : 187326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_cNotPt; 187426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 187526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnPt_nv_V4: 187626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cPt_nv_V4 : 187726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnPt_V4 : 187826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_cPt_V4; 187926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 188026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnNotPt_nv_V4: 188126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cNotPt_nv_V4 : 188226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnNotPt_V4 : 188326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_cNotPt_V4; 188426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 188526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnPt_nv_V4 : 188626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cPt_nv_V4 : 188726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnPt_V4 : 188826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri_cPt; 188926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 189026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnNotPt_nv_V4 : 189126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cNotPt_nv_V4: 189226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnNotPt_V4 : 189326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri_cNotPt; 189426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 189526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnPt_nv_V4: 189626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnPt_V4: 189726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cPt_nv_V4: 189826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_cPt_V4; 189926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 190026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnNotPt_nv_V4: 190126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnNotPt_V4: 190226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cNotPt_nv_V4: 190326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_cNotPt_V4; 190426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 190526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnPt_nv_V4: 190626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnPt_V4: 190726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cPt_nv_V4: 190826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_cPt_V4; 190926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 191026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnNotPt_nv_V4: 191126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnNotPt_V4: 191226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cNotPt_nv_V4: 191326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_cNotPt_V4; 191426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 191526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store new-value byte - unconditional 191626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_nv_V4: 191726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib; 191826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 191926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_nv_V4: 192026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed; 192126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 192226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_nv_V4: 192326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_indexed_shl_V4; 192426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 192526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_shl_nv_V4: 192626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_shl_V4; 192726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 192826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_nv_V4: 192926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrib_GP_V4; 193026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 193126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_nv_V4: 193226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STb_GP_V4; 193326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 193426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_nv_V4: 193526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STbri; 193626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 193726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store halfword 193826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_imm_cdnPt_V4 : 193926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_imm_cPt_V4; 194026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 194126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_imm_cdnNotPt_V4 : 194226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_imm_cNotPt_V4; 194326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 194426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnPt_nv_V4 : 194526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cPt_nv_V4 : 194626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnPt_V4 : 194726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_cPt; 194826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 194926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnNotPt_nv_V4 : 195026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cNotPt_nv_V4 : 195126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnNotPt_V4 : 195226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_cNotPt; 195326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 195426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnPt_nv_V4: 195526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cPt_nv_V4 : 195626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnPt_V4 : 195726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_cPt; 195826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 195926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnNotPt_nv_V4: 196026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cNotPt_nv_V4 : 196126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnNotPt_V4 : 196226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_cNotPt; 196326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 196426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnPt_nv_V4 : 196526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cPt_nv_V4 : 196626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnPt_V4 : 196726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_cPt_V4; 196826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 196926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnNotPt_nv_V4 : 197026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cNotPt_nv_V4 : 197126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnNotPt_V4 : 197226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_cNotPt_V4; 197326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 197426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnPt_nv_V4 : 197526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cPt_nv_V4 : 197626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnPt_V4 : 197726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri_cPt; 197826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 197926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnNotPt_nv_V4 : 198026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cNotPt_nv_V4 : 198126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnNotPt_V4 : 198226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri_cNotPt; 198326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 198426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnPt_nv_V4: 198526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnPt_V4: 198626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cPt_nv_V4: 198726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_cPt_V4; 198826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 198926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnNotPt_nv_V4: 199026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnNotPt_V4: 199126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cNotPt_nv_V4: 199226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_cNotPt_V4; 199326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 199426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnPt_nv_V4: 199526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnPt_V4: 199626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cPt_nv_V4: 199726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_cPt_V4; 199826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 199926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnNotPt_nv_V4: 200026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnNotPt_V4: 200126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cNotPt_nv_V4: 200226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_cNotPt_V4; 200326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 200426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store new-value halfword - unconditional 200526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 200626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_nv_V4: 200726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih; 200826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 200926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_nv_V4: 201026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed; 201126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 201226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_nv_V4: 201326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_indexed_shl_V4; 201426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 201526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_shl_nv_V4: 201626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_shl_V4; 201726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 201826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_nv_V4: 201926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrih_GP_V4; 202026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 202126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_nv_V4: 202226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STh_GP_V4; 202326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 202426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_nv_V4: 202526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_SThri; 202626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 202726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store word 202826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 202926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_imm_cdnPt_V4 : 203026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_imm_cPt_V4; 203126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 203226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_imm_cdnNotPt_V4 : 203326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_imm_cNotPt_V4; 203426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 203526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnPt_nv_V4 : 203626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cPt_nv_V4 : 203726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnPt_V4 : 203826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_cPt; 203926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 204026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnNotPt_nv_V4 : 204126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cNotPt_nv_V4 : 204226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnNotPt_V4 : 204326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_cNotPt; 204426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 204526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnPt_nv_V4 : 204626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cPt_nv_V4 : 204726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnPt_V4 : 204826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_cPt; 204926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 205026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnNotPt_nv_V4 : 205126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cNotPt_nv_V4 : 205226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnNotPt_V4 : 205326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_cNotPt; 205426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 205526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnPt_nv_V4 : 205626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cPt_nv_V4 : 205726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnPt_V4 : 205826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_cPt_V4; 205926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 206026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnNotPt_nv_V4 : 206126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cNotPt_nv_V4 : 206226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnNotPt_V4 : 206326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_cNotPt_V4; 206426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 206526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnPt_nv_V4 : 206626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cPt_nv_V4 : 206726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnPt_V4 : 206826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri_cPt; 206926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 207026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnNotPt_nv_V4 : 207126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cNotPt_nv_V4 : 207226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnNotPt_V4 : 207326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri_cNotPt; 207426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 207526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnPt_nv_V4: 207626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnPt_V4: 207726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cPt_nv_V4: 207826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_cPt_V4; 207926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 208026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnNotPt_nv_V4: 208126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnNotPt_V4: 208226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cNotPt_nv_V4: 208326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_cNotPt_V4; 208426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 208526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnPt_nv_V4: 208626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnPt_V4: 208726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cPt_nv_V4: 208826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_cPt_V4; 208926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 209026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnNotPt_nv_V4: 209126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnNotPt_V4: 209226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cNotPt_nv_V4: 209326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_cNotPt_V4; 209426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 209526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store new-value word - unconditional 209626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 209726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_nv_V4: 209826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw; 209926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 210026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_nv_V4: 210126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed; 210226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 210326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_nv_V4: 210426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_indexed_shl_V4; 210526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 210626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_shl_nv_V4: 210726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_shl_V4; 210826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 210926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_nv_V4: 211026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STriw_GP_V4; 211126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 211226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_nv_V4: 211326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STw_GP_V4; 211426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 211526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_nv_V4: 211626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STwri; 211726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 211826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store doubleword 211926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 212026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_cdnPt_V4 : 212126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_cPt; 212226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 212326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_cdnNotPt_V4 : 212426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_cNotPt; 212526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 212626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_cdnPt_V4 : 212726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_indexed_cPt; 212826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 212926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_cdnNotPt_V4 : 213026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_indexed_cNotPt; 213126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 213226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_shl_cdnPt_V4 : 213326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_indexed_shl_cPt_V4; 213426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 213526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_shl_cdnNotPt_V4 : 213626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_indexed_shl_cNotPt_V4; 213726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 213826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STdri_cdnPt_V4 : 213926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STdri_cPt; 214026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 214126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STdri_cdnNotPt_V4 : 214226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::POST_STdri_cNotPt; 214326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 214426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STd_GP_cdnPt_V4 : 214526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STd_GP_cPt_V4; 214626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 214726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STd_GP_cdnNotPt_V4 : 214826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STd_GP_cNotPt_V4; 214926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 215026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_GP_cdnPt_V4 : 215126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_GP_cPt_V4; 215226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 215326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_GP_cdnNotPt_V4 : 215426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return Hexagon::STrid_GP_cNotPt_V4; 215526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 215626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 215726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 215826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::DemoteToDotOld(MachineInstr* MI) { 215926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 216026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande int NewOpcode = GetDotOldOp(MI->getOpcode()); 216126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->setDesc(QII->get(NewOpcode)); 216226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 216326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 216426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 216526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Returns true if an instruction is predicated on p0 and false if it's 216626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// predicated on !p0. 216726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 216826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic bool GetPredicateSense(MachineInstr* MI, 216926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII) { 217026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 217126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande switch (MI->getOpcode()) { 217226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande default: llvm_unreachable("Unknown predicate sense of the instruction"); 217326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFR_cPt: 217426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFR_cdnPt: 217526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFRI_cPt: 217626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFRI_cdnPt: 217726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cPt : 217826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnPt_V4 : 217926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cPt : 218026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnPt_V4 : 218126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cPt_V4 : 218226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnPt_V4 : 218326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cPt : 218426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnPt_V4 : 218526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cPt : 218626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnPt_V4 : 218726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cPt : 218826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnPt_V4 : 218926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cPt_V4 : 219026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnPt_V4 : 219126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cPt : 219226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnPt_V4 : 219326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cPt : 219426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnPt_V4 : 219526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cPt : 219626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnPt_V4 : 219726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cPt_V4 : 219826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnPt_V4 : 219926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cPt : 220026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnPt_V4 : 220126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_imm_cPt_V4 : 220226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_imm_cdnPt_V4 : 220326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_cPt : 220426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_cdnPt_V4 : 220526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_cPt : 220626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_cdnPt_V4 : 220726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_shl_cPt_V4 : 220826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_shl_cdnPt_V4 : 220926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STdri_cPt : 221026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STdri_cdnPt_V4 : 221126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_imm_cPt_V4 : 221226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_imm_cdnPt_V4 : 221326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_imm_cPt_V4 : 221426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_imm_cdnPt_V4 : 221526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::JMP_cdnPt : 221626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_cPt : 221726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_cdnPt : 221826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cPt : 221926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnPt : 222026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrid_cPt : 222126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrid_cdnPt_V4 : 222226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_cPt : 222326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_cdnPt : 222426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cPt : 222526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnPt : 222626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriw_cPt : 222726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriw_cdnPt_V4 : 222826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_cPt : 222926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_cdnPt : 223026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cPt : 223126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnPt : 223226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrih_cPt : 223326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrih_cdnPt_V4 : 223426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_cPt : 223526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_cdnPt : 223626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cPt : 223726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnPt : 223826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrib_cPt : 223926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrib_cdnPt_V4 : 224026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_cPt : 224126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_cdnPt : 224226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cPt : 224326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnPt : 224426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriuh_cPt : 224526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriuh_cdnPt_V4 : 224626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_cPt : 224726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_cdnPt : 224826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cPt : 224926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnPt : 225026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriub_cPt : 225126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriub_cdnPt_V4 : 225226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cPt_V4 : 225326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnPt_V4 : 225426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_shl_cPt_V4 : 225526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_shl_cdnPt_V4 : 225626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cPt_V4 : 225726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnPt_V4 : 225826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_shl_cPt_V4 : 225926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_shl_cdnPt_V4 : 226026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cPt_V4 : 226126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnPt_V4 : 226226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_shl_cPt_V4 : 226326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_shl_cdnPt_V4 : 226426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cPt_V4 : 226526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnPt_V4 : 226626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_shl_cPt_V4 : 226726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_shl_cdnPt_V4 : 226826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cPt_V4 : 226926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnPt_V4 : 227026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_shl_cPt_V4 : 227126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_shl_cdnPt_V4 : 227226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cPt_V4 : 227326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnPt_V4 : 227426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_shl_cPt_V4 : 227526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_shl_cdnPt_V4 : 227626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_ri_cPt : 227726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_ri_cdnPt : 227826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_rr_cPt : 227926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_rr_cdnPt : 228026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::XOR_rr_cPt : 228126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::XOR_rr_cdnPt : 228226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::AND_rr_cPt : 228326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::AND_rr_cdnPt : 228426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::OR_rr_cPt : 228526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::OR_rr_cdnPt : 228626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SUB_rr_cPt : 228726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SUB_rr_cdnPt : 228826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::COMBINE_rr_cPt : 228926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::COMBINE_rr_cdnPt : 229026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASLH_cPt_V4 : 229126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASLH_cdnPt_V4 : 229226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASRH_cPt_V4 : 229326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASRH_cdnPt_V4 : 229426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTB_cPt_V4 : 229526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTB_cdnPt_V4 : 229626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTH_cPt_V4 : 229726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTH_cdnPt_V4 : 229826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTB_cPt_V4 : 229926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTB_cdnPt_V4 : 230026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTH_cPt_V4 : 230126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTH_cdnPt_V4 : 230226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_GP_cPt_V4 : 230326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_GP_cPt_V4 : 230426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_GP_cPt_V4 : 230526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_GP_cPt_V4 : 230626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_GP_cPt_V4 : 230726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_GP_cPt_V4 : 230826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDd_GP_cPt_V4 : 230926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDb_GP_cPt_V4 : 231026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDub_GP_cPt_V4 : 231126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDh_GP_cPt_V4 : 231226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDuh_GP_cPt_V4 : 231326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDw_GP_cPt_V4 : 231426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_GP_cPt_V4 : 231526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cPt_V4 : 231626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cPt_V4 : 231726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cPt_V4 : 231826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STd_GP_cPt_V4 : 231926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cPt_V4 : 232026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cPt_V4 : 232126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cPt_V4 : 232226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_GP_cdnPt_V4 : 232326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_GP_cdnPt_V4 : 232426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_GP_cdnPt_V4 : 232526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_GP_cdnPt_V4 : 232626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_GP_cdnPt_V4 : 232726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_GP_cdnPt_V4 : 232826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDd_GP_cdnPt_V4 : 232926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDb_GP_cdnPt_V4 : 233026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDub_GP_cdnPt_V4 : 233126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDh_GP_cdnPt_V4 : 233226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDuh_GP_cdnPt_V4 : 233326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDw_GP_cdnPt_V4 : 233426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_GP_cdnPt_V4 : 233526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnPt_V4 : 233626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnPt_V4 : 233726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnPt_V4 : 233826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STd_GP_cdnPt_V4 : 233926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnPt_V4 : 234026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnPt_V4 : 234126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnPt_V4 : 234226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 234326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 234426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFR_cNotPt: 234526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFR_cdnNotPt: 234626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFRI_cNotPt: 234726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFRI_cdnNotPt: 234826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cNotPt : 234926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnNotPt_V4 : 235026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cNotPt : 235126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnNotPt_V4 : 235226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cNotPt_V4 : 235326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnNotPt_V4 : 235426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cNotPt : 235526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnNotPt_V4 : 235626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cNotPt : 235726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnNotPt_V4 : 235826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cNotPt : 235926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnNotPt_V4 : 236026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cNotPt_V4 : 236126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnNotPt_V4 : 236226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cNotPt : 236326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnNotPt_V4 : 236426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cNotPt : 236526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnNotPt_V4 : 236626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cNotPt : 236726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnNotPt_V4 : 236826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cNotPt_V4 : 236926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnNotPt_V4 : 237026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cNotPt : 237126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnNotPt_V4 : 237226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_imm_cNotPt_V4 : 237326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_imm_cdnNotPt_V4 : 237426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_cNotPt : 237526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_cdnNotPt_V4 : 237626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_cdnNotPt_V4 : 237726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_cNotPt : 237826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_shl_cNotPt_V4 : 237926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_shl_cdnNotPt_V4 : 238026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STdri_cNotPt : 238126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STdri_cdnNotPt_V4 : 238226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_imm_cNotPt_V4 : 238326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_imm_cdnNotPt_V4 : 238426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_imm_cNotPt_V4 : 238526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_imm_cdnNotPt_V4 : 238626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::JMP_cdnNotPt : 238726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_cNotPt : 238826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_cdnNotPt : 238926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cNotPt : 239026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnNotPt : 239126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrid_cNotPt : 239226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrid_cdnNotPt_V4 : 239326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_cNotPt : 239426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_cdnNotPt : 239526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cNotPt : 239626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnNotPt : 239726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriw_cNotPt : 239826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriw_cdnNotPt_V4 : 239926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_cNotPt : 240026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_cdnNotPt : 240126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cNotPt : 240226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnNotPt : 240326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrih_cNotPt : 240426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrih_cdnNotPt_V4 : 240526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_cNotPt : 240626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_cdnNotPt : 240726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cNotPt : 240826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnNotPt : 240926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrib_cNotPt : 241026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrib_cdnNotPt_V4 : 241126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_cNotPt : 241226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_cdnNotPt : 241326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cNotPt : 241426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnNotPt : 241526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriuh_cNotPt : 241626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriuh_cdnNotPt_V4 : 241726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_cNotPt : 241826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_cdnNotPt : 241926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cNotPt : 242026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnNotPt : 242126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriub_cNotPt : 242226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriub_cdnNotPt_V4 : 242326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cNotPt_V4 : 242426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnNotPt_V4 : 242526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_shl_cNotPt_V4 : 242626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_shl_cdnNotPt_V4 : 242726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cNotPt_V4 : 242826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnNotPt_V4 : 242926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_shl_cNotPt_V4 : 243026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_shl_cdnNotPt_V4 : 243126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cNotPt_V4 : 243226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnNotPt_V4 : 243326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_shl_cNotPt_V4 : 243426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_shl_cdnNotPt_V4 : 243526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cNotPt_V4 : 243626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnNotPt_V4 : 243726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_shl_cNotPt_V4 : 243826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_shl_cdnNotPt_V4 : 243926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cNotPt_V4 : 244026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnNotPt_V4 : 244126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_shl_cNotPt_V4 : 244226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_shl_cdnNotPt_V4 : 244326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cNotPt_V4 : 244426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnNotPt_V4 : 244526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_shl_cNotPt_V4 : 244626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_shl_cdnNotPt_V4 : 244726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_ri_cNotPt : 244826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_ri_cdnNotPt : 244926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_rr_cNotPt : 245026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_rr_cdnNotPt : 245126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::XOR_rr_cNotPt : 245226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::XOR_rr_cdnNotPt : 245326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::AND_rr_cNotPt : 245426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::AND_rr_cdnNotPt : 245526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::OR_rr_cNotPt : 245626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::OR_rr_cdnNotPt : 245726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SUB_rr_cNotPt : 245826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SUB_rr_cdnNotPt : 245926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::COMBINE_rr_cNotPt : 246026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::COMBINE_rr_cdnNotPt : 246126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASLH_cNotPt_V4 : 246226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASLH_cdnNotPt_V4 : 246326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASRH_cNotPt_V4 : 246426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASRH_cdnNotPt_V4 : 246526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTB_cNotPt_V4 : 246626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTB_cdnNotPt_V4 : 246726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTH_cNotPt_V4 : 246826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTH_cdnNotPt_V4 : 246926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTB_cNotPt_V4 : 247026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTB_cdnNotPt_V4 : 247126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTH_cNotPt_V4 : 247226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTH_cdnNotPt_V4 : 247326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 247426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_GP_cNotPt_V4 : 247526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_GP_cNotPt_V4 : 247626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_GP_cNotPt_V4 : 247726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_GP_cNotPt_V4 : 247826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_GP_cNotPt_V4 : 247926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_GP_cNotPt_V4 : 248026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDd_GP_cNotPt_V4 : 248126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDb_GP_cNotPt_V4 : 248226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDub_GP_cNotPt_V4 : 248326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDh_GP_cNotPt_V4 : 248426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDuh_GP_cNotPt_V4 : 248526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDw_GP_cNotPt_V4 : 248626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_GP_cNotPt_V4 : 248726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cNotPt_V4 : 248826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cNotPt_V4 : 248926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cNotPt_V4 : 249026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STd_GP_cNotPt_V4 : 249126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cNotPt_V4 : 249226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cNotPt_V4 : 249326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cNotPt_V4 : 249426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_GP_cdnNotPt_V4 : 249526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_GP_cdnNotPt_V4 : 249626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_GP_cdnNotPt_V4 : 249726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_GP_cdnNotPt_V4 : 249826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_GP_cdnNotPt_V4 : 249926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_GP_cdnNotPt_V4 : 250026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDd_GP_cdnNotPt_V4 : 250126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDb_GP_cdnNotPt_V4 : 250226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDub_GP_cdnNotPt_V4 : 250326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDh_GP_cdnNotPt_V4 : 250426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDuh_GP_cdnNotPt_V4 : 250526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDw_GP_cdnNotPt_V4 : 250626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_GP_cdnNotPt_V4 : 250726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnNotPt_V4 : 250826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnNotPt_V4 : 250926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnNotPt_V4 : 251026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STd_GP_cdnNotPt_V4 : 251126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnNotPt_V4 : 251226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnNotPt_V4 : 251326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnNotPt_V4 : 251426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 251526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 251626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // return *some value* to avoid compiler warning 251726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 251826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 251926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 252026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::isDotNewInst(MachineInstr* MI) { 252126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (isNewValueInst(MI)) 252226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 252326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 252426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande switch (MI->getOpcode()) { 252526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFR_cdnNotPt: 252626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFR_cdnPt: 252726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFRI_cdnNotPt: 252826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::TFRI_cdnPt: 252926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_cdnPt : 253026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_cdnNotPt : 253126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnPt : 253226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnNotPt : 253326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrid_cdnPt_V4 : 253426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrid_cdnNotPt_V4 : 253526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_cdnPt : 253626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_cdnNotPt : 253726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnPt : 253826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnNotPt : 253926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriw_cdnPt_V4 : 254026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriw_cdnNotPt_V4 : 254126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_cdnPt : 254226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_cdnNotPt : 254326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnPt : 254426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnNotPt : 254526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrih_cdnPt_V4 : 254626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrih_cdnNotPt_V4 : 254726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_cdnPt : 254826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_cdnNotPt : 254926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnPt : 255026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnNotPt : 255126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrib_cdnPt_V4 : 255226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDrib_cdnNotPt_V4 : 255326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_cdnPt : 255426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_cdnNotPt : 255526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnPt : 255626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnNotPt : 255726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriuh_cdnPt_V4 : 255826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriuh_cdnNotPt_V4 : 255926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_cdnPt : 256026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_cdnNotPt : 256126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnPt : 256226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnNotPt : 256326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriub_cdnPt_V4 : 256426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_LDriub_cdnNotPt_V4 : 256526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 256626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnPt_V4 : 256726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_cdnNotPt_V4 : 256826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_shl_cdnPt_V4 : 256926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_indexed_shl_cdnNotPt_V4 : 257026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnPt_V4 : 257126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_cdnNotPt_V4 : 257226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_shl_cdnPt_V4 : 257326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_indexed_shl_cdnNotPt_V4 : 257426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnPt_V4 : 257526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_cdnNotPt_V4 : 257626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_shl_cdnPt_V4 : 257726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_indexed_shl_cdnNotPt_V4 : 257826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnPt_V4 : 257926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_cdnNotPt_V4 : 258026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_shl_cdnPt_V4 : 258126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_indexed_shl_cdnNotPt_V4 : 258226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnPt_V4 : 258326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_cdnNotPt_V4 : 258426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_shl_cdnPt_V4 : 258526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_indexed_shl_cdnNotPt_V4 : 258626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnPt_V4 : 258726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_cdnNotPt_V4 : 258826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_shl_cdnPt_V4 : 258926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_indexed_shl_cdnNotPt_V4 : 259026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 259126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Coditional add 259226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_ri_cdnPt: 259326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_ri_cdnNotPt: 259426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_rr_cdnPt: 259526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ADD_rr_cdnNotPt: 259626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 259726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional logical operations 259826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::XOR_rr_cdnPt : 259926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::XOR_rr_cdnNotPt : 260026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::AND_rr_cdnPt : 260126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::AND_rr_cdnNotPt : 260226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::OR_rr_cdnPt : 260326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::OR_rr_cdnNotPt : 260426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 260526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditonal subtract 260626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SUB_rr_cdnPt : 260726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SUB_rr_cdnNotPt : 260826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 260926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional combine 261026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::COMBINE_rr_cdnPt : 261126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::COMBINE_rr_cdnNotPt : 261226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 261326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional shift operations 261426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASLH_cdnPt_V4: 261526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASLH_cdnNotPt_V4: 261626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASRH_cdnPt_V4: 261726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ASRH_cdnNotPt_V4: 261826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTB_cdnPt_V4: 261926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTB_cdnNotPt_V4: 262026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTH_cdnPt_V4: 262126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::SXTH_cdnNotPt_V4: 262226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTB_cdnPt_V4: 262326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTB_cdnNotPt_V4: 262426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTH_cdnPt_V4: 262526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::ZXTH_cdnNotPt_V4: 262626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 262726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Conditional stores 262826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_imm_cdnPt_V4 : 262926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_imm_cdnNotPt_V4 : 263026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnPt_V4 : 263126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_cdnNotPt_V4 : 263226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnPt_V4 : 263326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_cdnNotPt_V4 : 263426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnPt_V4 : 263526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STbri_cdnNotPt_V4 : 263626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnPt_V4 : 263726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_indexed_shl_cdnNotPt_V4 : 263826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 263926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store doubleword conditionally 264026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_cdnPt_V4 : 264126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_cdnNotPt_V4 : 264226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_shl_cdnPt_V4 : 264326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_indexed_shl_cdnNotPt_V4 : 264426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STdri_cdnPt_V4 : 264526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STdri_cdnNotPt_V4 : 264626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 264726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store halfword conditionally 264826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnPt_V4 : 264926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_cdnNotPt_V4 : 265026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnPt_V4 : 265126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_cdnNotPt_V4 : 265226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_imm_cdnPt_V4 : 265326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_imm_cdnNotPt_V4 : 265426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnPt_V4 : 265526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_indexed_shl_cdnNotPt_V4 : 265626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnPt_V4 : 265726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_SThri_cdnNotPt_V4 : 265826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 265926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Store word conditionally 266026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnPt_V4 : 266126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_cdnNotPt_V4 : 266226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnPt_V4 : 266326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_cdnNotPt_V4 : 266426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_imm_cdnPt_V4 : 266526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_imm_cdnNotPt_V4 : 266626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnPt_V4 : 266726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_indexed_shl_cdnNotPt_V4 : 266826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnPt_V4 : 266926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::POST_STwri_cdnNotPt_V4 : 267026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 267126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDd_GP_cdnPt_V4: 267226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDd_GP_cdnNotPt_V4: 267326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDb_GP_cdnPt_V4: 267426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDb_GP_cdnNotPt_V4: 267526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDub_GP_cdnPt_V4: 267626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDub_GP_cdnNotPt_V4: 267726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDh_GP_cdnPt_V4: 267826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDh_GP_cdnNotPt_V4: 267926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDuh_GP_cdnPt_V4: 268026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDuh_GP_cdnNotPt_V4: 268126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDw_GP_cdnPt_V4: 268226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDw_GP_cdnNotPt_V4: 268326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_GP_cdnPt_V4: 268426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrid_GP_cdnNotPt_V4: 268526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_GP_cdnPt_V4: 268626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrib_GP_cdnNotPt_V4: 268726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_GP_cdnPt_V4: 268826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriub_GP_cdnNotPt_V4: 268926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_GP_cdnPt_V4: 269026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDrih_GP_cdnNotPt_V4: 269126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_GP_cdnPt_V4: 269226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriuh_GP_cdnNotPt_V4: 269326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_GP_cdnPt_V4: 269426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::LDriw_GP_cdnNotPt_V4: 269526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 269626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_GP_cdnPt_V4: 269726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrid_GP_cdnNotPt_V4: 269826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnPt_V4: 269926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrib_GP_cdnNotPt_V4: 270026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnPt_V4: 270126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STrih_GP_cdnNotPt_V4: 270226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnPt_V4: 270326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STriw_GP_cdnNotPt_V4: 270426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STd_GP_cdnPt_V4: 270526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STd_GP_cdnNotPt_V4: 270626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnPt_V4: 270726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STb_GP_cdnNotPt_V4: 270826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnPt_V4: 270926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STh_GP_cdnNotPt_V4: 271026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnPt_V4: 271126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande case Hexagon::STw_GP_cdnNotPt_V4: 271226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 271326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 271426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 271526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 271626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 271726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic MachineOperand& GetPostIncrementOperand(MachineInstr *MI, 271826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII) { 271926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert(QII->isPostIncrement(MI) && "Not a post increment operation."); 272026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#ifndef NDEBUG 272126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Post Increment means duplicates. Use dense map to find duplicates in the 272226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // list. Caution: Densemap initializes with the minimum of 64 buckets, 272326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // whereas there are at most 5 operands in the post increment. 272426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande DenseMap<unsigned, unsigned> DefRegsSet; 272526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for(unsigned opNum = 0; opNum < MI->getNumOperands(); opNum++) 272626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->getOperand(opNum).isReg() && 272726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getOperand(opNum).isDef()) { 272826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande DefRegsSet[MI->getOperand(opNum).getReg()] = 1; 272926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 273026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 273126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for(unsigned opNum = 0; opNum < MI->getNumOperands(); opNum++) 273226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->getOperand(opNum).isReg() && 273326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getOperand(opNum).isUse()) { 273426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (DefRegsSet[MI->getOperand(opNum).getReg()]) { 273526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return MI->getOperand(opNum); 273626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 273726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 273826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#else 273926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->getDesc().mayLoad()) { 274026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // The 2nd operand is always the post increment operand in load. 274126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert(MI->getOperand(1).isReg() && 274226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande "Post increment operand has be to a register."); 274326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return (MI->getOperand(1)); 274426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 274526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->getDesc().mayStore()) { 274626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // The 1st operand is always the post increment operand in store. 274726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert(MI->getOperand(0).isReg() && 274826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande "Post increment operand has be to a register."); 274926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return (MI->getOperand(0)); 275026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 275126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande#endif 275226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // we should never come here. 275326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande llvm_unreachable("mayLoad or mayStore not set for Post Increment operation"); 275426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 275526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 275626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// get the value being stored 275726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandestatic MachineOperand& GetStoreValueOperand(MachineInstr *MI) { 275826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // value being stored is always the last operand. 275926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return (MI->getOperand(MI->getNumOperands()-1)); 276026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 276126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 276226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// can be new value store? 276326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Following restrictions are to be respected in convert a store into 276426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// a new value store. 276526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 1. If an instruction uses auto-increment, its address register cannot 276626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// be a new-value register. Arch Spec 5.4.2.1 276726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 2. If an instruction uses absolute-set addressing mode, 276826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// its address register cannot be a new-value register. 276926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Arch Spec 5.4.2.1.TODO: This is not enabled as 277026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// as absolute-set address mode patters are not implemented. 277126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 3. If an instruction produces a 64-bit result, its registers cannot be used 277226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// as new-value registers. Arch Spec 5.4.2.2. 277326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 4. If the instruction that sets a new-value register is conditional, then 277426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// the instruction that uses the new-value register must also be conditional, 277526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// and both must always have their predicates evaluate identically. 277626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Arch Spec 5.4.2.3. 277726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 5. There is an implied restriction of a packet can not have another store, 277826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// if there is a new value store in the packet. Corollary, if there is 277926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// already a store in a packet, there can not be a new value store. 278026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Arch Spec: 3.4.4.2 278126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::CanPromoteToNewValueStore( MachineInstr *MI, 278226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineInstr *PacketMI, unsigned DepReg, 278326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande std::map <MachineInstr*, SUnit*> MIToSUnit) 278426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande{ 278526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Make sure we are looking at the store 278626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (!IsNewifyStore(MI)) 278726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 278826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 278926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Make sure there is dependency and can be new value'ed 279026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (GetStoreValueOperand(MI).isReg() && 279126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande GetStoreValueOperand(MI).getReg() != DepReg) 279226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 279326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 279426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonRegisterInfo* QRI = 279526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (const HexagonRegisterInfo *) TM.getRegisterInfo(); 279626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const MCInstrDesc& MCID = PacketMI->getDesc(); 279726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // first operand is always the result 279826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 279926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 2800397fc4874efe9c17e737d4c5c50bd19dc3bf27f5Jakob Stoklund Olesen const TargetRegisterClass* PacketRC = QII->getRegClass(MCID, 0, QRI, MF); 280126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 280226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // if there is already an store in the packet, no can do new value store 280326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Arch Spec 3.4.4.2. 280426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for (std::vector<MachineInstr*>::iterator VI = CurrentPacketMIs.begin(), 280526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande VE = CurrentPacketMIs.end(); 280626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (VI != VE); ++VI) { 280726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SUnit* PacketSU = MIToSUnit[*VI]; 280826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (PacketSU->getInstr()->getDesc().mayStore() || 280926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // if we have mayStore = 1 set on ALLOCFRAME and DEALLOCFRAME, 281026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // then we don't need this 281126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PacketSU->getInstr()->getOpcode() == Hexagon::ALLOCFRAME || 281226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PacketSU->getInstr()->getOpcode() == Hexagon::DEALLOCFRAME) 281326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 281426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 281526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 281626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (PacketRC == &Hexagon::DoubleRegsRegClass) { 281726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // new value store constraint: double regs can not feed into new value store 281826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // arch spec section: 5.4.2.2 281926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 282026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 282126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 282226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Make sure it's NOT the post increment register that we are going to 282326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // new value. 282426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (QII->isPostIncrement(MI) && 282526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getDesc().mayStore() && 282626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande GetPostIncrementOperand(MI, QII).getReg() == DepReg) { 282726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 282826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 282926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 283026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (QII->isPostIncrement(PacketMI) && 283126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PacketMI->getDesc().mayLoad() && 283226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande GetPostIncrementOperand(PacketMI, QII).getReg() == DepReg) { 283326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // if source is post_inc, or absolute-set addressing, 283426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // it can not feed into new value store 283526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // r3 = memw(r2++#4) 283626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // memw(r30 + #-1404) = r2.new -> can not be new value store 283726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // arch spec section: 5.4.2.1 283826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 283926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 284026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 284126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // If the source that feeds the store is predicated, new value store must 284226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // also be also predicated. 284326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (QII->isPredicated(PacketMI)) { 284426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (!QII->isPredicated(MI)) 284526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 284626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 284726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check to make sure that they both will have their predicates 284826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // evaluate identically 284912a52525e8481d1884f1f37b20d67791c68ed1ceSirish Pande unsigned predRegNumSrc = 0; 285012a52525e8481d1884f1f37b20d67791c68ed1ceSirish Pande unsigned predRegNumDst = 0; 285112a52525e8481d1884f1f37b20d67791c68ed1ceSirish Pande const TargetRegisterClass* predRegClass = NULL; 285226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 285326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Get predicate register used in the source instruction 285426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for(unsigned opNum = 0; opNum < PacketMI->getNumOperands(); opNum++) { 285526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if ( PacketMI->getOperand(opNum).isReg()) 285626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande predRegNumSrc = PacketMI->getOperand(opNum).getReg(); 285726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande predRegClass = QRI->getMinimalPhysRegClass(predRegNumSrc); 285826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (predRegClass == &Hexagon::PredRegsRegClass) { 285926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande break; 286026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 286126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 286226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert ((predRegClass == &Hexagon::PredRegsRegClass ) && 286326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ("predicate register not found in a predicated PacketMI instruction")); 286426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 286526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Get predicate register used in new-value store instruction 286626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for(unsigned opNum = 0; opNum < MI->getNumOperands(); opNum++) { 286726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if ( MI->getOperand(opNum).isReg()) 286826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande predRegNumDst = MI->getOperand(opNum).getReg(); 286926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande predRegClass = QRI->getMinimalPhysRegClass(predRegNumDst); 287026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (predRegClass == &Hexagon::PredRegsRegClass) { 287126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande break; 287226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 287326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 287426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert ((predRegClass == &Hexagon::PredRegsRegClass ) && 287526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ("predicate register not found in a predicated MI instruction")); 287626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 287726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // New-value register producer and user (store) need to satisfy these 287826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // constraints: 287926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 1) Both instructions should be predicated on the same register. 288026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 2) If producer of the new-value register is .new predicated then store 288126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // should also be .new predicated and if producer is not .new predicated 288226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // then store should not be .new predicated. 288326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 3) Both new-value register producer and user should have same predicate 288426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // sense, i.e, either both should be negated or both should be none negated. 288526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 288626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (( predRegNumDst != predRegNumSrc) || 288726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande isDotNewInst(PacketMI) != isDotNewInst(MI) || 288826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande GetPredicateSense(MI, QII) != GetPredicateSense(PacketMI, QII)) { 288926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 289026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 289126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 289226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 289326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Make sure that other than the new-value register no other store instruction 289426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // register has been modified in the same packet. Predicate registers can be 289526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // modified by they should not be modified between the producer and the store 289626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // instruction as it will make them both conditional on different values. 289726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // We already know this to be true for all the instructions before and 289826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // including PacketMI. Howerver, we need to perform the check for the 289926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // remaining instructions in the packet. 290026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 290126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande std::vector<MachineInstr*>::iterator VI; 290226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande std::vector<MachineInstr*>::iterator VE; 290326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned StartCheck = 0; 290426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 290526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for (VI=CurrentPacketMIs.begin(), VE = CurrentPacketMIs.end(); 290626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (VI != VE); ++VI) { 290726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SUnit* TempSU = MIToSUnit[*VI]; 290826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineInstr* TempMI = TempSU->getInstr(); 290926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 291026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Following condition is true for all the instructions until PacketMI is 291126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // reached (StartCheck is set to 0 before the for loop). 291226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // StartCheck flag is 1 for all the instructions after PacketMI. 291326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (TempMI != PacketMI && !StartCheck) // start processing only after 291426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande continue; // encountering PacketMI 291526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 291626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande StartCheck = 1; 291726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (TempMI == PacketMI) // We don't want to check PacketMI for dependence 291826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande continue; 291926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 292026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for(unsigned opNum = 0; opNum < MI->getNumOperands(); opNum++) { 292126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->getOperand(opNum).isReg() && 292226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande TempSU->getInstr()->modifiesRegister(MI->getOperand(opNum).getReg(), 292326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande QRI)) 292426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 292526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 292626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 292726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 292826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Make sure that for non POST_INC stores: 292926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 1. The only use of reg is DepReg and no other registers. 293026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // This handles V4 base+index registers. 293126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // The following store can not be dot new. 293226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Eg. r0 = add(r0, #3)a 293326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // memw(r1+r0<<#2) = r0 293426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (!QII->isPostIncrement(MI) && 293526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande GetStoreValueOperand(MI).isReg() && 293626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande GetStoreValueOperand(MI).getReg() == DepReg) { 293726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for(unsigned opNum = 0; opNum < MI->getNumOperands()-1; opNum++) { 293826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->getOperand(opNum).isReg() && 293926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getOperand(opNum).getReg() == DepReg) { 294026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 294126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 294226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 294326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 2. If data definition is because of implicit definition of the register, 294426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // do not newify the store. Eg. 294526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // %R9<def> = ZXTH %R12, %D6<imp-use>, %R12<imp-def> 294626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // STrih_indexed %R8, 2, %R12<kill>; mem:ST2[%scevgep343] 294726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for(unsigned opNum = 0; opNum < PacketMI->getNumOperands(); opNum++) { 294826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (PacketMI->getOperand(opNum).isReg() && 294926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PacketMI->getOperand(opNum).getReg() == DepReg && 295026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PacketMI->getOperand(opNum).isDef() && 295126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PacketMI->getOperand(opNum).isImplicit()) { 295226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 295326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 295426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 295526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 295626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 295726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Can be dot new store. 295826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 295926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 296026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 296126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// can this MI to promoted to either 296226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// new value store or new value jump 296326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::CanPromoteToNewValue( MachineInstr *MI, 296426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SUnit *PacketSU, unsigned DepReg, 296526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande std::map <MachineInstr*, SUnit*> MIToSUnit, 296626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator &MII) 296726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande{ 296826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 296926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonRegisterInfo* QRI = 297026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (const HexagonRegisterInfo *) TM.getRegisterInfo(); 297126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (!QRI->Subtarget.hasV4TOps() || 297226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande !IsNewifyStore(MI)) 297326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 297426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 297526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineInstr *PacketMI = PacketSU->getInstr(); 297626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 297726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check to see the store can be new value'ed. 297826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (CanPromoteToNewValueStore(MI, PacketMI, DepReg, MIToSUnit)) 297926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 298026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 298126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check to see the compare/jump can be new value'ed. 298226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // This is done as a pass on its own. Don't need to check it here. 298326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 298426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 298526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 298626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Check to see if an instruction can be dot new 298726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// There are three kinds. 298826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 1. dot new on predicate - V2/V3/V4 298926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 2. dot new on stores NV/ST - V4 299026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// 3. dot new on jump NV/J - V4 -- This is generated in a pass. 299126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::CanPromoteToDotNew( MachineInstr *MI, 299226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SUnit *PacketSU, unsigned DepReg, 299326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande std::map <MachineInstr*, SUnit*> MIToSUnit, 299426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator &MII, 299526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const TargetRegisterClass* RC ) 299626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande{ 299726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // already a dot new instruction 299826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (isDotNewInst(MI) && !IsNewifyStore(MI)) 299926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 300026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 300126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (!isNewifiable(MI)) 300226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 300326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 300426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // predicate .new 300526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (RC == &Hexagon::PredRegsRegClass && isCondInst(MI)) 300626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 300726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else if (RC != &Hexagon::PredRegsRegClass && 300826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande !IsNewifyStore(MI)) // MI is not a new-value store 300926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 301026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else { 301126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Create a dot new machine instruction to see if resources can be 301226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // allocated. If not, bail out now. 301326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 301426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande int NewOpcode = GetDotNewOp(MI->getOpcode()); 301526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const MCInstrDesc &desc = QII->get(NewOpcode); 301626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande DebugLoc dl; 301726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineInstr *NewMI = 301826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getParent()->getParent()->CreateMachineInstr(desc, dl); 301926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool ResourcesAvailable = ResourceTracker->canReserveResources(NewMI); 302026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MI->getParent()->getParent()->DeleteMachineInstr(NewMI); 302126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 302226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (!ResourcesAvailable) 302326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 302426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 302526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // new value store only 302626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // new new value jump generated as a passes 302726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (!CanPromoteToNewValue(MI, PacketSU, DepReg, MIToSUnit, MII)) { 302826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 302926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 303026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 303126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 303226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 303326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 303426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Go through the packet instructions and search for anti dependency 303526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// between them and DepReg from MI 303626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Consider this case: 303726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Trying to add 303826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// a) %R1<def> = TFRI_cdNotPt %P3, 2 303926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// to this packet: 304026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// { 304126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// b) %P0<def> = OR_pp %P3<kill>, %P0<kill> 304226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// c) %P3<def> = TFR_PdRs %R23 304326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// d) %R1<def> = TFRI_cdnPt %P3, 4 304426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// } 304526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// The P3 from a) and d) will be complements after 304626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// a)'s P3 is converted to .new form 304726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Anti Dep between c) and b) is irrelevant for this case 304826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::RestrictingDepExistInPacket (MachineInstr* MI, 304926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned DepReg, 305026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande std::map <MachineInstr*, SUnit*> MIToSUnit) { 305126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 305226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 305326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SUnit* PacketSUDep = MIToSUnit[MI]; 305426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 305526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for (std::vector<MachineInstr*>::iterator VIN = CurrentPacketMIs.begin(), 305626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande VEN = CurrentPacketMIs.end(); (VIN != VEN); ++VIN) { 305726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 305826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // We only care for dependencies to predicated instructions 305926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if(!QII->isPredicated(*VIN)) continue; 306026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 306126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Scheduling Unit for current insn in the packet 306226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SUnit* PacketSU = MIToSUnit[*VIN]; 306326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 306426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Look at dependencies between current members of the packet 306526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // and predicate defining instruction MI. 306626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Make sure that dependency is on the exact register 306726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // we care about. 306826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (PacketSU->isSucc(PacketSUDep)) { 306926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for (unsigned i = 0; i < PacketSU->Succs.size(); ++i) { 307026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if ((PacketSU->Succs[i].getSUnit() == PacketSUDep) && 307126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (PacketSU->Succs[i].getKind() == SDep::Anti) && 307226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (PacketSU->Succs[i].getReg() == DepReg)) { 307326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 307426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 307526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 307626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 307726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 307826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 307926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 308026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 308126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 308226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 308326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Given two predicated instructions, this function detects whether 308426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// the predicates are complements 308526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::ArePredicatesComplements (MachineInstr* MI1, 308626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineInstr* MI2, std::map <MachineInstr*, SUnit*> MIToSUnit) { 308726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 308826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 308926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Currently can only reason about conditional transfers 309026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (!QII->isConditionalTransfer(MI1) || !QII->isConditionalTransfer(MI2)) { 309126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 309226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 309326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 309426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Scheduling unit for candidate 309526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SUnit* SU = MIToSUnit[MI1]; 309626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 309726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // One corner case deals with the following scenario: 309826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Trying to add 309926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // a) %R24<def> = TFR_cPt %P0, %R25 310026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // to this packet: 310126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 310226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // { 310326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // b) %R25<def> = TFR_cNotPt %P0, %R24 310426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // c) %P0<def> = CMPEQri %R26, 1 310526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // } 310626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 310726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // On general check a) and b) are complements, but 310826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // presence of c) will convert a) to .new form, and 310926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // then it is not a complement 311026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // We attempt to detect it by analyzing existing 311126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // dependencies in the packet 311226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 311326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Analyze relationships between all existing members of the packet. 311426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Look for Anti dependecy on the same predicate reg 311526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // as used in the candidate 311626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for (std::vector<MachineInstr*>::iterator VIN = CurrentPacketMIs.begin(), 311726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande VEN = CurrentPacketMIs.end(); (VIN != VEN); ++VIN) { 311826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 311926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Scheduling Unit for current insn in the packet 312026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SUnit* PacketSU = MIToSUnit[*VIN]; 312126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 312226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // If this instruction in the packet is succeeded by the candidate... 312326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (PacketSU->isSucc(SU)) { 312426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for (unsigned i = 0; i < PacketSU->Succs.size(); ++i) { 312526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // The corner case exist when there is true data 312626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // dependency between candidate and one of current 312726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // packet members, this dep is on predicate reg, and 312826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // there already exist anti dep on the same pred in 312926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // the packet. 313026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (PacketSU->Succs[i].getSUnit() == SU && 313126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Hexagon::PredRegsRegClass.contains( 313226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PacketSU->Succs[i].getReg()) && 313326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PacketSU->Succs[i].getKind() == SDep::Data && 313426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Here I know that *VIN is predicate setting instruction 313526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // with true data dep to candidate on the register 313626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // we care about - c) in the above example. 313726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Now I need to see if there is an anti dependency 313826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // from c) to any other instruction in the 313926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // same packet on the pred reg of interest 314026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande RestrictingDepExistInPacket(*VIN,PacketSU->Succs[i].getReg(), 314126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MIToSUnit)) { 314226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 314326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 314426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 314526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 314626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 314726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 314826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // If the above case does not apply, check regular 314926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // complement condition. 315026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check that the predicate register is the same and 315126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // that the predicate sense is different 315226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // We also need to differentiate .old vs. .new: 315326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // !p0 is not complimentary to p0.new 315426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return ((MI1->getOperand(1).getReg() == MI2->getOperand(1).getReg()) && 315526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (GetPredicateSense(MI1, QII) != GetPredicateSense(MI2, QII)) && 315626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (isDotNewInst(MI1) == isDotNewInst(MI2))); 315726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 315826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 315926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// initPacketizerState - Initialize packetizer flags 316026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandevoid HexagonPacketizerList::initPacketizerState() { 316126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 316226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = false; 316326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PromotedToDotNew = false; 316426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande GlueToNewValueJump = false; 316526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande GlueAllocframeStore = false; 316626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande FoundSequentialDependence = false; 316726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 316826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return; 316926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 317026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 317126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// ignorePseudoInstruction - Ignore bundling of pseudo instructions. 317226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::ignorePseudoInstruction(MachineInstr *MI, 317326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock *MBB) { 317426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->isDebugValue()) 317526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 317626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 317726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // We must print out inline assembly 317826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->isInlineAsm()) 317926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 318026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 318126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // We check if MI has any functional units mapped to it. 318226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // If it doesn't, we ignore the instruction. 318326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const MCInstrDesc& TID = MI->getDesc(); 318426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned SchedClass = TID.getSchedClass(); 318526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const InstrStage* IS = 318626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ResourceTracker->getInstrItins()->beginStage(SchedClass); 3187b460a3382961c5be9952a75d46228f624edbd39fHal Finkel unsigned FuncUnits = IS->getUnits(); 318826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return !FuncUnits; 318926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 319026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 319126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// isSoloInstruction: - Returns true for instructions that must be 319226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// scheduled in their own packet. 319326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::isSoloInstruction(MachineInstr *MI) { 319426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 319526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->isInlineAsm()) 319626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 319726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 319826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MI->isEHLabel()) 319926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 320026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 320126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // From Hexagon V4 Programmer's Reference Manual 3.4.4 Grouping constraints: 320226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // trap, pause, barrier, icinva, isync, and syncht are solo instructions. 320326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // They must not be grouped with other instructions in a packet. 320426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (IsSchedBarrier(MI)) 320526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 320626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 320726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 320826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 320926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 321026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// isLegalToPacketizeTogether: 321126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// SUI is the current instruction that is out side of the current packet. 321226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// SUJ is the current instruction inside the current packet against which that 321326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// SUI will be packetized. 321426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::isLegalToPacketizeTogether(SUnit *SUI, SUnit *SUJ) { 321526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineInstr *I = SUI->getInstr(); 321626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineInstr *J = SUJ->getInstr(); 321726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert(I && J && "Unable to packetize null instruction!"); 321826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 321926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const MCInstrDesc &MCIDI = I->getDesc(); 322026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const MCInstrDesc &MCIDJ = J->getDesc(); 322126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 322226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator II = I; 322326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 322426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const unsigned FrameSize = MF.getFrameInfo()->getStackSize(); 322526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonRegisterInfo* QRI = 322626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (const HexagonRegisterInfo *) TM.getRegisterInfo(); 322726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 322826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 322926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Inline asm cannot go in the packet. 323026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (I->getOpcode() == Hexagon::INLINEASM) 323126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande llvm_unreachable("Should not meet inline asm here!"); 323226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 323326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (isSoloInstruction(I)) 323426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande llvm_unreachable("Should not meet solo instr here!"); 323526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 323626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // A save callee-save register function call can only be in a packet 323726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // with instructions that don't write to the callee-save registers. 323826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if ((QII->isSaveCalleeSavedRegsCall(I) && 323926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande DoesModifyCalleeSavedReg(J, QRI)) || 324026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (QII->isSaveCalleeSavedRegsCall(J) && 324126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande DoesModifyCalleeSavedReg(I, QRI))) { 324226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = true; 324326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 324426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 324526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 324626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Two control flow instructions cannot go in the same packet. 324726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (IsControlFlow(I) && IsControlFlow(J)) { 324826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = true; 324926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 325026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 325126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 325226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // A LoopN instruction cannot appear in the same packet as a jump or call. 325326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (IsLoopN(I) && ( IsDirectJump(J) 325426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || MCIDJ.isCall() 325526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || QII->isDeallocRet(J))) { 325626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = true; 325726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 325826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 325926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (IsLoopN(J) && ( IsDirectJump(I) 326026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || MCIDI.isCall() 326126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || QII->isDeallocRet(I))) { 326226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = true; 326326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 326426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 326526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 326626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // dealloc_return cannot appear in the same packet as a conditional or 326726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // unconditional jump. 326826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (QII->isDeallocRet(I) && ( MCIDJ.isBranch() 326926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || MCIDJ.isCall() 327026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || MCIDJ.isBarrier())) { 327126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = true; 327226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 327326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 327426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 327526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 327626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // V4 allows dual store. But does not allow second store, if the 327726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // first store is not in SLOT0. New value store, new value jump, 327826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // dealloc_return and memop always take SLOT0. 327926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Arch spec 3.4.4.2 328026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (QRI->Subtarget.hasV4TOps()) { 328126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 328226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MCIDI.mayStore() && MCIDJ.mayStore() && isNewValueInst(J)) { 328326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = true; 328426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 328526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 328626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 328726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if ( (QII->isMemOp(J) && MCIDI.mayStore()) 328826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || (MCIDJ.mayStore() && QII->isMemOp(I)) 328926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || (QII->isMemOp(J) && QII->isMemOp(I))) { 329026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = true; 329126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 329226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 329326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 329426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande //if dealloc_return 329526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (MCIDJ.mayStore() && QII->isDeallocRet(I)){ 329626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = true; 329726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 329826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 329926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 330026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // If an instruction feeds new value jump, glue it. 330126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator NextMII = I; 330226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ++NextMII; 330326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineInstr *NextMI = NextMII; 330426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 330526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (QII->isNewValueJump(NextMI)) { 330626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 330726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool secondRegMatch = false; 330826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande bool maintainNewValueJump = false; 330926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 331026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (NextMI->getOperand(1).isReg() && 331126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande I->getOperand(0).getReg() == NextMI->getOperand(1).getReg()) { 331226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande secondRegMatch = true; 331326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande maintainNewValueJump = true; 331426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 331526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 331626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (!secondRegMatch && 331726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande I->getOperand(0).getReg() == NextMI->getOperand(0).getReg()) { 331826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande maintainNewValueJump = true; 331926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 332026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 332126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for (std::vector<MachineInstr*>::iterator 332226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande VI = CurrentPacketMIs.begin(), 332326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande VE = CurrentPacketMIs.end(); 332426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (VI != VE && maintainNewValueJump); ++VI) { 332526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SUnit* PacketSU = MIToSUnit[*VI]; 332626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 332726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // NVJ can not be part of the dual jump - Arch Spec: section 7.8 332826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (PacketSU->getInstr()->getDesc().isCall()) { 332926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = true; 333026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande break; 333126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 333226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Validate 333326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 1. Packet does not have a store in it. 333426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 2. If the first operand of the nvj is newified, and the second 333526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // operand is also a reg, it (second reg) is not defined in 333626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // the same packet. 333726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 3. If the second operand of the nvj is newified, (which means 333826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // first operand is also a reg), first reg is not defined in 333926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // the same packet. 334026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (PacketSU->getInstr()->getDesc().mayStore() || 334126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PacketSU->getInstr()->getOpcode() == Hexagon::ALLOCFRAME || 334226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check #2. 334326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (!secondRegMatch && NextMI->getOperand(1).isReg() && 334426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PacketSU->getInstr()->modifiesRegister( 334526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande NextMI->getOperand(1).getReg(), QRI)) || 334626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check #3. 334726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (secondRegMatch && 334826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PacketSU->getInstr()->modifiesRegister( 334926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande NextMI->getOperand(0).getReg(), QRI))) { 335026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = true; 335126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande break; 335226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 335326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 335426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (!Dependence) 335526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande GlueToNewValueJump = true; 335626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else 335726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 335826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 335926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 336026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 336126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (SUJ->isSucc(SUI)) { 336226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande for (unsigned i = 0; 336326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (i < SUJ->Succs.size()) && !FoundSequentialDependence; 336426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ++i) { 336526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 336626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (SUJ->Succs[i].getSUnit() != SUI) { 336726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande continue; 336826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 336926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 337026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande SDep::Kind DepType = SUJ->Succs[i].getKind(); 337126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 337226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // For direct calls: 337326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Ignore register dependences for call instructions for 337426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // packetization purposes except for those due to r31 and 337526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // predicate registers. 337626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 337726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // For indirect calls: 337826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Same as direct calls + check for true dependences to the register 337926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // used in the indirect call. 338026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 338126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // We completely ignore Order dependences for call instructions 338226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 338326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // For returns: 338426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Ignore register dependences for return instructions like jumpr, 338526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // dealloc return unless we have dependencies on the explicit uses 338626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // of the registers used by jumpr (like r31) or dealloc return 338726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // (like r29 or r30). 338826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 338926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // TODO: Currently, jumpr is handling only return of r31. So, the 339026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // following logic (specificaly IsCallDependent) is working fine. 339126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // We need to enable jumpr for register other than r31 and then, 339226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // we need to rework the last part, where it handles indirect call 339326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // of that (IsCallDependent) function. Bug 6216 is opened for this. 339426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 339526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned DepReg = 0; 339626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const TargetRegisterClass* RC = NULL; 339726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (DepType == SDep::Data) { 339826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande DepReg = SUJ->Succs[i].getReg(); 339926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande RC = QRI->getMinimalPhysRegClass(DepReg); 340026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 340126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if ((MCIDI.isCall() || MCIDI.isReturn()) && 340226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (!IsRegDependence(DepType) || 340326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande !IsCallDependent(I, DepType, SUJ->Succs[i].getReg()))) { 340426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande /* do nothing */ 340526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 340626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 340726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // For instructions that can be promoted to dot-new, try to promote. 340826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else if ((DepType == SDep::Data) && 340926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande CanPromoteToDotNew(I, SUJ, DepReg, MIToSUnit, II, RC) && 341026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PromoteToDotNew(I, DepType, II, RC)) { 341126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande PromotedToDotNew = true; 341226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande /* do nothing */ 341326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 341426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 341526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else if ((DepType == SDep::Data) && 341626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (QII->isNewValueJump(I))) { 341726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande /* do nothing */ 341826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 341926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 342026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // For predicated instructions, if the predicates are complements 342126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // then there can be no dependence. 342226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else if (QII->isPredicated(I) && 342326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande QII->isPredicated(J) && 342426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ArePredicatesComplements(I, J, MIToSUnit)) { 342526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande /* do nothing */ 342626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 342726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 342826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else if (IsDirectJump(I) && 342926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande !MCIDJ.isBranch() && 343026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande !MCIDJ.isCall() && 343126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (DepType == SDep::Order)) { 343226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Ignore Order dependences between unconditional direct branches 343326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // and non-control-flow instructions 343426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande /* do nothing */ 343526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 343626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else if (MCIDI.isConditionalBranch() && (DepType != SDep::Data) && 343726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (DepType != SDep::Output)) { 343826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Ignore all dependences for jumps except for true and output 343926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // dependences 344026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande /* do nothing */ 344126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 344226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 344326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Ignore output dependences due to superregs. We can 344426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // write to two different subregisters of R1:0 for instance 344526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // in the same cycle 344626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 344726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 344826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 344926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Let the 345026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // If neither I nor J defines DepReg, then this is a 345126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // superfluous output dependence. The dependence must be of the 345226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // form: 345326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // R0 = ... 345426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // R1 = ... 345526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // and there is an output dependence between the two instructions 345626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // with 345726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // DepReg = D0 345826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // We want to ignore these dependences. 345926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Ideally, the dependence constructor should annotate such 346026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // dependences. We can then avoid this relatively expensive check. 346126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 346226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else if (DepType == SDep::Output) { 346326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // DepReg is the register that's responsible for the dependence. 346426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande unsigned DepReg = SUJ->Succs[i].getReg(); 346526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 346626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check if I and J really defines DepReg. 346726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (I->definesRegister(DepReg) || 346826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande J->definesRegister(DepReg)) { 346926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande FoundSequentialDependence = true; 347026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande break; 347126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 347226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 347326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 347426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // We ignore Order dependences for 347526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 1. Two loads unless they are volatile. 347626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 2. Two stores in V4 unless they are volatile. 347726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else if ((DepType == SDep::Order) && 3478f036f7a1e79910bf5b5b6f37d2e512b4f01155a0Jakob Stoklund Olesen !I->hasOrderedMemoryRef() && 3479f036f7a1e79910bf5b5b6f37d2e512b4f01155a0Jakob Stoklund Olesen !J->hasOrderedMemoryRef()) { 348026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (QRI->Subtarget.hasV4TOps() && 348126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // hexagonv4 allows dual store. 348226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MCIDI.mayStore() && MCIDJ.mayStore()) { 348326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande /* do nothing */ 348426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 348526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // store followed by store-- not OK on V2 348626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // store followed by load -- not OK on all (OK if addresses 348726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // are not aliased) 348826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // load followed by store -- OK on all 348926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // load followed by load -- OK on all 349026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else if ( !MCIDJ.mayStore()) { 349126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande /* do nothing */ 349226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 349326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else { 349426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande FoundSequentialDependence = true; 349526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande break; 349626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 349726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 349826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 349926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // For V4, special case ALLOCFRAME. Even though there is dependency 350026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // between ALLOCAFRAME and subsequent store, allow it to be 350126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // packetized in a same packet. This implies that the store is using 350226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // caller's SP. Hense, offset needs to be updated accordingly. 350326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else if (DepType == SDep::Data 350426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande && QRI->Subtarget.hasV4TOps() 350526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande && J->getOpcode() == Hexagon::ALLOCFRAME 350626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande && (I->getOpcode() == Hexagon::STrid 350726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || I->getOpcode() == Hexagon::STriw 350826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || I->getOpcode() == Hexagon::STrib) 350926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande && I->getOperand(0).getReg() == QRI->getStackRegister() 351026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande && QII->isValidOffset(I->getOpcode(), 351126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande I->getOperand(1).getImm() - 351226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (FrameSize + HEXAGON_LRFP_SIZE))) 351326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande { 351426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande GlueAllocframeStore = true; 351526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Since this store is to be glued with allocframe in the same 351626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // packet, it will use SP of the previous stack frame, i.e 351726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // caller's SP. Therefore, we need to recalculate offset according 351826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // to this change. 351926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande I->getOperand(1).setImm(I->getOperand(1).getImm() - 352026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (FrameSize + HEXAGON_LRFP_SIZE)); 352126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 352226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 352326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 352426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Skip over anti-dependences. Two instructions that are 352526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // anti-dependent can share a packet 352626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // 352726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande else if (DepType != SDep::Anti) { 352826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande FoundSequentialDependence = true; 352926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande break; 353026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 353126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 353226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 353326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (FoundSequentialDependence) { 353426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande Dependence = true; 353526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 353626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 353726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 353826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 353926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 354026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 354126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 354226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// isLegalToPruneDependencies 354326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pandebool HexagonPacketizerList::isLegalToPruneDependencies(SUnit *SUI, SUnit *SUJ) { 354426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineInstr *I = SUI->getInstr(); 354526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert(I && SUJ->getInstr() && "Unable to packetize null instruction!"); 354626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 354726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const unsigned FrameSize = MF.getFrameInfo()->getStackSize(); 354826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 354926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (Dependence) { 355026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 355126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check if the instruction was promoted to a dot-new. If so, demote it 355226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // back into a dot-old. 355326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (PromotedToDotNew) { 355426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande DemoteToDotOld(I); 355526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 355626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 355726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check if the instruction (must be a store) was glued with an Allocframe 355826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // instruction. If so, restore its offset to its original value, i.e. use 355926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // curent SP instead of caller's SP. 356026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (GlueAllocframeStore) { 356126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande I->getOperand(1).setImm(I->getOperand(1).getImm() + 356226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande FrameSize + HEXAGON_LRFP_SIZE); 356326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 356426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 356526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return false; 356626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 356726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return true; 356826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 356926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 357026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish PandeMachineBasicBlock::iterator 357126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish PandeHexagonPacketizerList::addToPacket(MachineInstr *MI) { 357226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 357326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock::iterator MII = MI; 357426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineBasicBlock *MBB = MI->getParent(); 357526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 357626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande const HexagonInstrInfo *QII = (const HexagonInstrInfo *) TII; 357726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 357826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (GlueToNewValueJump) { 357926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 358026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ++MII; 358126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande MachineInstr *nvjMI = MII; 358226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert(ResourceTracker->canReserveResources(MI)); 358326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ResourceTracker->reserveResources(MI); 35845262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon if (QII->isExtended(MI) && 358526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande !tryAllocateResourcesForConstExt(MI)) { 358626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande endPacket(MBB, MI); 358726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ResourceTracker->reserveResources(MI); 358826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert(canReserveResourcesForConstExt(MI) && 358926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande "Ensure that there is a slot"); 359026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande reserveResourcesForConstExt(MI); 359126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Reserve resources for new value jump constant extender. 359226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert(canReserveResourcesForConstExt(MI) && 359326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande "Ensure that there is a slot"); 359426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande reserveResourcesForConstExt(nvjMI); 359526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande assert(ResourceTracker->canReserveResources(nvjMI) && 359626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande "Ensure that there is a slot"); 359726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 359826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } else if ( // Extended instruction takes two slots in the packet. 359926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Try reserve and allocate 4-byte in the current packet first. 360026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (QII->isExtended(nvjMI) 360126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande && (!tryAllocateResourcesForConstExt(nvjMI) 360226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || !ResourceTracker->canReserveResources(nvjMI))) 360326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || // For non-extended instruction, no need to allocate extra 4 bytes. 360426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande (!QII->isExtended(nvjMI) && 360526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande !ResourceTracker->canReserveResources(nvjMI))) 360626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande { 360726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande endPacket(MBB, MI); 360826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // A new and empty packet starts. 360926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // We are sure that the resources requirements can be satisfied. 361026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Therefore, do not need to call "canReserveResources" anymore. 361126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ResourceTracker->reserveResources(MI); 361226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (QII->isExtended(nvjMI)) 361326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande reserveResourcesForConstExt(nvjMI); 361426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 361526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Here, we are sure that "reserveResources" would succeed. 361626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ResourceTracker->reserveResources(nvjMI); 361726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande CurrentPacketMIs.push_back(MI); 361826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande CurrentPacketMIs.push_back(nvjMI); 361926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } else { 36205262abb2682a4d09cda3563a55f27caffb57466cBrendon Cahoon if ( QII->isExtended(MI) 362126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande && ( !tryAllocateResourcesForConstExt(MI) 362226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande || !ResourceTracker->canReserveResources(MI))) 362326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande { 362426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande endPacket(MBB, MI); 362526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // Check if the instruction was promoted to a dot-new. If so, demote it 362626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // back into a dot-old 362726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande if (PromotedToDotNew) { 362826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande DemoteToDotOld(MI); 362926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 363026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande reserveResourcesForConstExt(MI); 363126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 363226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // In case that "MI" is not an extended insn, 363326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande // the resource availability has already been checked. 363426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande ResourceTracker->reserveResources(MI); 363526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande CurrentPacketMIs.push_back(MI); 363626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande } 363726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return MII; 363826f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 363926f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 364026f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//===----------------------------------------------------------------------===// 364126f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande// Public Constructor Functions 364226f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande//===----------------------------------------------------------------------===// 364326f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 364426f61a158b3cce69252c05cc0e79f500d6c3d92eSirish PandeFunctionPass *llvm::createHexagonPacketizer() { 364526f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande return new HexagonPacketizer(); 364626f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande} 364726f61a158b3cce69252c05cc0e79f500d6c3d92eSirish Pande 3648