131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- HexagonSplitTFRCondSets.cpp - split TFR condsets into xfers -------===// 2b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 3b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// The LLVM Compiler Infrastructure 4b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 5b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file is distributed under the University of Illinois Open Source 6b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// License. See LICENSE.TXT for details. 7b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 8b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 931d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===----------------------------------------------------------------------===// 10b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This pass tries to provide opportunities for better optimization of muxes. 11b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// The default code generated for something like: flag = (a == b) ? 1 : 3; 12b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// would be: 13b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 14b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// {p0 = cmp.eq(r0,r1)} 15b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// {r3 = mux(p0,#1,#3)} 16b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 177517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande// This requires two packets. If we use .new predicated immediate transfers, 18b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// then we can do this in a single packet, e.g.: 19b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 20b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// {p0 = cmp.eq(r0,r1) 21b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// if (p0.new) r3 = #1 22b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// if (!p0.new) r3 = #3} 23b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 24b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// Note that the conditional assignments are not generated in .new form here. 25b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// We assume opptimisically that they will be formed later. 26b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 27b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===// 28b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 29b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define DEBUG_TYPE "xfer" 30d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "Hexagon.h" 31f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer#include "HexagonMachineFunctionInfo.h" 32d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "HexagonSubtarget.h" 33d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "HexagonTargetMachine.h" 34b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/LatencyPriorityQueue.h" 35b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineDominators.h" 36b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineFunctionPass.h" 37f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer#include "llvm/CodeGen/MachineInstrBuilder.h" 38b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineLoopInfo.h" 39b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/MachineRegisterInfo.h" 40d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/CodeGen/Passes.h" 41b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/CodeGen/ScheduleHazardRecognizer.h" 42f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer#include "llvm/CodeGen/SchedulerRegistry.h" 43b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/Support/Compiler.h" 44b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/Support/Debug.h" 45b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#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" 49b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 50b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumusing namespace llvm; 51b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 52b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumnamespace { 53b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 54b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumclass HexagonSplitTFRCondSets : public MachineFunctionPass { 55b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum HexagonTargetMachine& QTM; 56b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum const HexagonSubtarget &QST; 57b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 58b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum public: 59b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum static char ID; 60b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum HexagonSplitTFRCondSets(HexagonTargetMachine& TM) : 61b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum MachineFunctionPass(ID), QTM(TM), QST(*TM.getSubtargetImpl()) {} 62b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 63b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum const char *getPassName() const { 64b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return "Hexagon Split TFRCondSets"; 65b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 66b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum bool runOnMachineFunction(MachineFunction &Fn); 67b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 68b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 69b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 70b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumchar HexagonSplitTFRCondSets::ID = 0; 71b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 72b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 73b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool HexagonSplitTFRCondSets::runOnMachineFunction(MachineFunction &Fn) { 74b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 75b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum const TargetInstrInfo *TII = QTM.getInstrInfo(); 76b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 77b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // Loop over all of the basic blocks. 78b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum for (MachineFunction::iterator MBBb = Fn.begin(), MBBe = Fn.end(); 79b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum MBBb != MBBe; ++MBBb) { 80b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum MachineBasicBlock* MBB = MBBb; 81b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // Traverse the basic block. 82b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum for (MachineBasicBlock::iterator MII = MBB->begin(); MII != MBB->end(); 83b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum ++MII) { 84b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum MachineInstr *MI = MII; 857517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int Opc1, Opc2; 867517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande switch(MI->getOpcode()) { 877517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande case Hexagon::TFR_condset_rr: 887517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande case Hexagon::TFR_condset_rr_f: 897517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande case Hexagon::TFR_condset_rr64_f: { 907517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int DestReg = MI->getOperand(0).getReg(); 917517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int SrcReg1 = MI->getOperand(2).getReg(); 927517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int SrcReg2 = MI->getOperand(3).getReg(); 937517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande 947517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande if (MI->getOpcode() == Hexagon::TFR_condset_rr || 957517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande MI->getOpcode() == Hexagon::TFR_condset_rr_f) { 967517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande Opc1 = Hexagon::TFR_cPt; 977517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande Opc2 = Hexagon::TFR_cNotPt; 987517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } 997517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande else if (MI->getOpcode() == Hexagon::TFR_condset_rr64_f) { 1007517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande Opc1 = Hexagon::TFR64_cPt; 1017517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande Opc2 = Hexagon::TFR64_cNotPt; 1027517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } 1037517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande 1047517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande // Minor optimization: do not emit the predicated copy if the source 1057517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande // and the destination is the same register. 1067517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande if (DestReg != SrcReg1) { 1077517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), TII->get(Opc1), 1087517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande DestReg).addReg(MI->getOperand(1).getReg()).addReg(SrcReg1); 1097517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } 1107517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande if (DestReg != SrcReg2) { 1117517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), TII->get(Opc2), 1127517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande DestReg).addReg(MI->getOperand(1).getReg()).addReg(SrcReg2); 1137517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } 1147517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande MII = MBB->erase(MI); 1157517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande --MII; 1167517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande break; 117b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 1187517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande case Hexagon::TFR_condset_ri: 1197517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande case Hexagon::TFR_condset_ri_f: { 1207517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int DestReg = MI->getOperand(0).getReg(); 1217517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int SrcReg1 = MI->getOperand(2).getReg(); 1227517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande 1237517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande // Do not emit the predicated copy if the source and the destination 1247517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande // is the same register. 1257517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande if (DestReg != SrcReg1) { 1267517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), 1277517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande TII->get(Hexagon::TFR_cPt), DestReg). 1287517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addReg(MI->getOperand(1).getReg()).addReg(SrcReg1); 1297517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } 1307517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande if (MI->getOpcode() == Hexagon::TFR_condset_ri ) { 1317517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), 1327517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande TII->get(Hexagon::TFRI_cNotPt), DestReg). 1337517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addReg(MI->getOperand(1).getReg()). 1347517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addImm(MI->getOperand(3).getImm()); 1357517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } else if (MI->getOpcode() == Hexagon::TFR_condset_ri_f ) { 1367517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), 1377517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande TII->get(Hexagon::TFRI_cNotPt_f), DestReg). 1387517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addReg(MI->getOperand(1).getReg()). 1397517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addFPImm(MI->getOperand(3).getFPImm()); 1407517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } 1417517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande 1427517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande MII = MBB->erase(MI); 1437517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande --MII; 1447517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande break; 1457517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } 1467517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande case Hexagon::TFR_condset_ir: 1477517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande case Hexagon::TFR_condset_ir_f: { 1487517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int DestReg = MI->getOperand(0).getReg(); 1497517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int SrcReg2 = MI->getOperand(3).getReg(); 1507517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande 1517517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande if (MI->getOpcode() == Hexagon::TFR_condset_ir ) { 1527517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), 1537517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande TII->get(Hexagon::TFRI_cPt), DestReg). 1547517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addReg(MI->getOperand(1).getReg()). 1557517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addImm(MI->getOperand(2).getImm()); 1567517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } else if (MI->getOpcode() == Hexagon::TFR_condset_ir_f ) { 1577517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), 1587517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande TII->get(Hexagon::TFRI_cPt_f), DestReg). 1597517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addReg(MI->getOperand(1).getReg()). 1607517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addFPImm(MI->getOperand(2).getFPImm()); 1617517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } 1627517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande 1637517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande // Do not emit the predicated copy if the source and 1647517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande // the destination is the same register. 1657517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande if (DestReg != SrcReg2) { 1667517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), 1677517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande TII->get(Hexagon::TFR_cNotPt), DestReg). 1687517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addReg(MI->getOperand(1).getReg()).addReg(SrcReg2); 1697517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } 1707517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande MII = MBB->erase(MI); 1717517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande --MII; 1727517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande break; 1737517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } 1747517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande case Hexagon::TFR_condset_ii: 1757517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande case Hexagon::TFR_condset_ii_f: { 1767517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int DestReg = MI->getOperand(0).getReg(); 1777517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int SrcReg1 = MI->getOperand(1).getReg(); 1787517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande 1797517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande if (MI->getOpcode() == Hexagon::TFR_condset_ii ) { 1807517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int Immed1 = MI->getOperand(2).getImm(); 1817517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande int Immed2 = MI->getOperand(3).getImm(); 1827517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), 1837517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande TII->get(Hexagon::TFRI_cPt), 1847517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande DestReg).addReg(SrcReg1).addImm(Immed1); 1857517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), 1867517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande TII->get(Hexagon::TFRI_cNotPt), 1877517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande DestReg).addReg(SrcReg1).addImm(Immed2); 1887517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } else if (MI->getOpcode() == Hexagon::TFR_condset_ii_f ) { 1897517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), 1907517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande TII->get(Hexagon::TFRI_cPt_f), DestReg). 1917517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addReg(SrcReg1). 1927517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addFPImm(MI->getOperand(2).getFPImm()); 1937517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande BuildMI(*MBB, MII, MI->getDebugLoc(), 1947517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande TII->get(Hexagon::TFRI_cNotPt_f), DestReg). 1957517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addReg(SrcReg1). 1967517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande addFPImm(MI->getOperand(3).getFPImm()); 1977517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande } 1987517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande MII = MBB->erase(MI); 1997517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande --MII; 2007517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande break; 201b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 202b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 203b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 204b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 205b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return true; 206b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum} 207b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 208b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum} 209b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 210b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===// 211b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// Public Constructor Functions 212b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===// 213b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 214b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumFunctionPass *llvm::createHexagonSplitTFRCondSets(HexagonTargetMachine &TM) { 215b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return new HexagonSplitTFRCondSets(TM); 216b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum} 217