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