@@ -2503,98 +2503,6 @@ bool AMDGPUInstructionSelector::selectG_FPEXT(MachineInstr &I) const {
25032503 return false ;
25042504}
25052505
2506- bool AMDGPUInstructionSelector::selectG_CONSTANT (MachineInstr &I) const {
2507- if (selectImpl (I, *CoverageInfo))
2508- return true ;
2509-
2510- // FIXME: Relying on manual selection for 64-bit case, and pointer typed
2511- // constants.
2512- MachineBasicBlock *BB = I.getParent ();
2513- MachineOperand &ImmOp = I.getOperand (1 );
2514- Register DstReg = I.getOperand (0 ).getReg ();
2515- LLT Ty = MRI->getType (DstReg);
2516- unsigned Size = Ty.getSizeInBits ();
2517- assert ((Size == 64 || Ty.isPointer ()) &&
2518- " patterns should have selected this" );
2519-
2520- bool IsFP = false ;
2521-
2522- // The AMDGPU backend only supports Imm operands and not CImm or FPImm.
2523- if (ImmOp.isFPImm ()) {
2524- const APInt &Imm = ImmOp.getFPImm ()->getValueAPF ().bitcastToAPInt ();
2525- ImmOp.ChangeToImmediate (Imm.getZExtValue ());
2526- IsFP = true ;
2527- } else if (ImmOp.isCImm ()) {
2528- ImmOp.ChangeToImmediate (ImmOp.getCImm ()->getSExtValue ());
2529- } else {
2530- llvm_unreachable (" Not supported by g_constants" );
2531- }
2532-
2533- const RegisterBank *DstRB = RBI.getRegBank (DstReg, *MRI, TRI);
2534- const bool IsSgpr = DstRB->getID () == AMDGPU::SGPRRegBankID;
2535-
2536- unsigned Opcode;
2537- if (DstRB->getID () == AMDGPU::VCCRegBankID) {
2538- Opcode = STI.isWave32 () ? AMDGPU::S_MOV_B32 : AMDGPU::S_MOV_B64;
2539- } else if (Size == 64 &&
2540- AMDGPU::isValid32BitLiteral (I.getOperand (1 ).getImm (), IsFP)) {
2541- Opcode = IsSgpr ? AMDGPU::S_MOV_B64_IMM_PSEUDO : AMDGPU::V_MOV_B64_PSEUDO;
2542- I.setDesc (TII.get (Opcode));
2543- I.addImplicitDefUseOperands (*MF);
2544- return constrainSelectedInstRegOperands (I, TII, TRI, RBI);
2545- } else {
2546- Opcode = IsSgpr ? AMDGPU::S_MOV_B32 : AMDGPU::V_MOV_B32_e32;
2547-
2548- // We should never produce s1 values on banks other than VCC. If the user of
2549- // this already constrained the register, we may incorrectly think it's VCC
2550- // if it wasn't originally.
2551- if (Size == 1 )
2552- return false ;
2553- }
2554-
2555- if (Size != 64 ) {
2556- I.setDesc (TII.get (Opcode));
2557- I.addImplicitDefUseOperands (*MF);
2558- return constrainSelectedInstRegOperands (I, TII, TRI, RBI);
2559- }
2560-
2561- const DebugLoc &DL = I.getDebugLoc ();
2562-
2563- APInt Imm (Size, I.getOperand (1 ).getImm ());
2564-
2565- MachineInstr *ResInst;
2566- if (IsSgpr && TII.isInlineConstant (Imm)) {
2567- ResInst = BuildMI (*BB, &I, DL, TII.get (AMDGPU::S_MOV_B64), DstReg)
2568- .addImm (I.getOperand (1 ).getImm ());
2569- } else {
2570- const TargetRegisterClass *RC = IsSgpr ?
2571- &AMDGPU::SReg_32RegClass : &AMDGPU::VGPR_32RegClass;
2572- Register LoReg = MRI->createVirtualRegister (RC);
2573- Register HiReg = MRI->createVirtualRegister (RC);
2574-
2575- BuildMI (*BB, &I, DL, TII.get (Opcode), LoReg)
2576- .addImm (Imm.trunc (32 ).getZExtValue ());
2577-
2578- BuildMI (*BB, &I, DL, TII.get (Opcode), HiReg)
2579- .addImm (Imm.ashr (32 ).getZExtValue ());
2580-
2581- ResInst = BuildMI (*BB, &I, DL, TII.get (AMDGPU::REG_SEQUENCE), DstReg)
2582- .addReg (LoReg)
2583- .addImm (AMDGPU::sub0)
2584- .addReg (HiReg)
2585- .addImm (AMDGPU::sub1);
2586- }
2587-
2588- // We can't call constrainSelectedInstRegOperands here, because it doesn't
2589- // work for target independent opcodes
2590- I.eraseFromParent ();
2591- const TargetRegisterClass *DstRC =
2592- TRI.getConstrainedRegClassForOperand (ResInst->getOperand (0 ), *MRI);
2593- if (!DstRC)
2594- return true ;
2595- return RBI.constrainGenericRegister (DstReg, *DstRC, *MRI);
2596- }
2597-
25982506bool AMDGPUInstructionSelector::selectG_FNEG (MachineInstr &MI) const {
25992507 // Only manually handle the f64 SGPR case.
26002508 //
@@ -3521,9 +3429,6 @@ bool AMDGPUInstructionSelector::select(MachineInstr &I) {
35213429 case TargetOpcode::G_PTRTOINT:
35223430 case TargetOpcode::G_FREEZE:
35233431 return selectCOPY (I);
3524- case TargetOpcode::G_CONSTANT:
3525- case TargetOpcode::G_FCONSTANT:
3526- return selectG_CONSTANT (I);
35273432 case TargetOpcode::G_FNEG:
35283433 if (selectImpl (I, *CoverageInfo))
35293434 return true ;
@@ -3629,6 +3534,8 @@ bool AMDGPUInstructionSelector::select(MachineInstr &I) {
36293534 return selectStackRestore (I);
36303535 case AMDGPU::G_PHI:
36313536 return selectPHI (I);
3537+ case TargetOpcode::G_CONSTANT:
3538+ case TargetOpcode::G_FCONSTANT:
36323539 default :
36333540 return selectImpl (I, *CoverageInfo);
36343541 }
0 commit comments