@@ -2503,98 +2503,6 @@ bool AMDGPUInstructionSelector::selectG_FPEXT(MachineInstr &I) const {
2503
2503
return false ;
2504
2504
}
2505
2505
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
-
2598
2506
bool AMDGPUInstructionSelector::selectG_FNEG (MachineInstr &MI) const {
2599
2507
// Only manually handle the f64 SGPR case.
2600
2508
//
@@ -3521,9 +3429,6 @@ bool AMDGPUInstructionSelector::select(MachineInstr &I) {
3521
3429
case TargetOpcode::G_PTRTOINT:
3522
3430
case TargetOpcode::G_FREEZE:
3523
3431
return selectCOPY (I);
3524
- case TargetOpcode::G_CONSTANT:
3525
- case TargetOpcode::G_FCONSTANT:
3526
- return selectG_CONSTANT (I);
3527
3432
case TargetOpcode::G_FNEG:
3528
3433
if (selectImpl (I, *CoverageInfo))
3529
3434
return true ;
@@ -3629,6 +3534,8 @@ bool AMDGPUInstructionSelector::select(MachineInstr &I) {
3629
3534
return selectStackRestore (I);
3630
3535
case AMDGPU::G_PHI:
3631
3536
return selectPHI (I);
3537
+ case TargetOpcode::G_CONSTANT:
3538
+ case TargetOpcode::G_FCONSTANT:
3632
3539
default :
3633
3540
return selectImpl (I, *CoverageInfo);
3634
3541
}
0 commit comments