Lines Matching +full:r600 +full:- +full:-
1 //===- R600ExpandSpecialInstrs.cpp - Expand special instructions ----------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
14 //===----------------------------------------------------------------------===//
17 #include "R600.h"
25 #define DEBUG_TYPE "r600-expand-special-instrs"
44 return "R600 Expand special instructions pass"; in getPassName()
51 "R600 Expand Special Instrs", false, false)
65 int OpIdx = TII->getOperandIdx(*OldMI, Op); in SetFlagInNewMI()
66 if (OpIdx > -1) { in SetFlagInNewMI()
67 uint64_t Val = OldMI->getOperand(OpIdx).getImm(); in SetFlagInNewMI()
68 TII->setImmOperand(*NewMI, Op, Val); in SetFlagInNewMI()
76 const R600RegisterInfo &TRI = TII->getRegisterInfo(); in runOnMachineFunction()
85 if (TII->isLDSRetInstr(MI.getOpcode())) { in runOnMachineFunction()
86 int DstIdx = TII->getOperandIdx(MI.getOpcode(), R600::OpName::dst); in runOnMachineFunction()
87 assert(DstIdx != -1); in runOnMachineFunction()
89 MachineInstr *Mov = TII->buildMovInstr(&MBB, I, in runOnMachineFunction()
90 DstOp.getReg(), R600::OQAP); in runOnMachineFunction()
91 DstOp.setReg(R600::OQAP); in runOnMachineFunction()
92 int LDSPredSelIdx = TII->getOperandIdx(MI.getOpcode(), in runOnMachineFunction()
93 R600::OpName::pred_sel); in runOnMachineFunction()
94 int MovPredSelIdx = TII->getOperandIdx(Mov->getOpcode(), in runOnMachineFunction()
95 R600::OpName::pred_sel); in runOnMachineFunction()
97 Mov->getOperand(MovPredSelIdx).setReg( in runOnMachineFunction()
104 case R600::PRED_X: { in runOnMachineFunction()
108 MachineInstr *PredSet = TII->buildDefaultInstruction(MBB, I, in runOnMachineFunction()
112 R600::ZERO); // src1 in runOnMachineFunction()
113 TII->addFlag(*PredSet, 0, MO_FLAG_MASK); in runOnMachineFunction()
115 TII->setImmOperand(*PredSet, R600::OpName::update_exec_mask, 1); in runOnMachineFunction()
117 TII->setImmOperand(*PredSet, R600::OpName::update_pred, 1); in runOnMachineFunction()
122 case R600::DOT_4: { in runOnMachineFunction()
124 const R600RegisterInfo &TRI = TII->getRegisterInfo(); in runOnMachineFunction()
132 R600::R600_TReg32RegClass.getRegister((DstBase * 4) + Chan); in runOnMachineFunction()
134 TII->buildSlotOfVectorInstruction(MBB, &MI, Chan, SubDstReg); in runOnMachineFunction()
136 BMI->bundleWithPred(); in runOnMachineFunction()
139 TII->addFlag(*BMI, 0, MO_FLAG_MASK); in runOnMachineFunction()
142 TII->addFlag(*BMI, 0, MO_FLAG_NOT_LAST); in runOnMachineFunction()
143 unsigned Opcode = BMI->getOpcode(); in runOnMachineFunction()
147 BMI->getOperand(TII->getOperandIdx(Opcode, R600::OpName::src0)) in runOnMachineFunction()
150 BMI->getOperand(TII->getOperandIdx(Opcode, R600::OpName::src1)) in runOnMachineFunction()
163 bool IsReduction = TII->isReductionOp(MI.getOpcode()); in runOnMachineFunction()
164 bool IsVector = TII->isVector(MI); in runOnMachineFunction()
165 bool IsCube = TII->isCubeOp(MI.getOpcode()); in runOnMachineFunction()
197 MI.getOperand(TII->getOperandIdx(MI, R600::OpName::dst)).getReg(); in runOnMachineFunction()
199 MI.getOperand(TII->getOperandIdx(MI, R600::OpName::src0)).getReg(); in runOnMachineFunction()
204 int Src1Idx = TII->getOperandIdx(MI, R600::OpName::src1); in runOnMachineFunction()
205 if (Src1Idx != -1) { in runOnMachineFunction()
216 unsigned SubRegIndex1 = R600RegisterInfo::getSubRegFromChannel(CubeSrcSwz[3 - Chan]); in runOnMachineFunction()
232 DstReg = R600::R600_TReg32RegClass.getRegister((DstBase * 4) + Chan); in runOnMachineFunction()
241 case R600::CUBE_r600_pseudo: in runOnMachineFunction()
242 Opcode = R600::CUBE_r600_real; in runOnMachineFunction()
244 case R600::CUBE_eg_pseudo: in runOnMachineFunction()
245 Opcode = R600::CUBE_eg_real; in runOnMachineFunction()
252 TII->buildDefaultInstruction(MBB, I, Opcode, DstReg, Src0, Src1); in runOnMachineFunction()
255 NewMI->bundleWithPred(); in runOnMachineFunction()
257 TII->addFlag(*NewMI, 0, MO_FLAG_MASK); in runOnMachineFunction()
260 TII->addFlag(*NewMI, 0, MO_FLAG_NOT_LAST); in runOnMachineFunction()
262 SetFlagInNewMI(NewMI, &MI, R600::OpName::clamp); in runOnMachineFunction()
263 SetFlagInNewMI(NewMI, &MI, R600::OpName::literal); in runOnMachineFunction()
264 SetFlagInNewMI(NewMI, &MI, R600::OpName::src0_abs); in runOnMachineFunction()
265 SetFlagInNewMI(NewMI, &MI, R600::OpName::src1_abs); in runOnMachineFunction()
266 SetFlagInNewMI(NewMI, &MI, R600::OpName::src0_neg); in runOnMachineFunction()
267 SetFlagInNewMI(NewMI, &MI, R600::OpName::src1_neg); in runOnMachineFunction()