@@ -177,6 +177,7 @@ static int64_t getBaseAdjustForCompression(int64_t Offset, unsigned Opcode) {
177177// Return true if Reg is in a compressed register class.
178178static bool isCompressedReg (Register Reg) {
179179 return RISCV::GPRCRegClass.contains (Reg) ||
180+ RISCV::GPRF16CRegClass.contains (Reg) ||
180181 RISCV::FPR32CRegClass.contains (Reg) ||
181182 RISCV::FPR64CRegClass.contains (Reg);
182183}
@@ -326,6 +327,8 @@ static Register analyzeCompressibleUses(MachineInstr &FirstMI,
326327 // Work out the compressed register class from which to scavenge.
327328 if (RISCV::GPRRegClass.contains (RegImm.Reg ))
328329 RCToScavenge = &RISCV::GPRCRegClass;
330+ else if (RISCV::GPRF16RegClass.contains (RegImm.Reg ))
331+ RCToScavenge = &RISCV::GPRF16CRegClass;
329332 else if (RISCV::FPR32RegClass.contains (RegImm.Reg ))
330333 RCToScavenge = &RISCV::FPR32CRegClass;
331334 else if (RISCV::FPR64RegClass.contains (RegImm.Reg ))
@@ -416,6 +419,10 @@ bool RISCVMakeCompressibleOpt::runOnMachineFunction(MachineFunction &Fn) {
416419 BuildMI (MBB, MI, MI.getDebugLoc (), TII.get (RISCV::ADDI), NewReg)
417420 .addReg (RegImm.Reg )
418421 .addImm (RegImm.Imm );
422+ } else if (RISCV::GPRRegClass.contains (RegImm.Reg )) {
423+ assert (RegImm.Imm == 0 );
424+ BuildMI (MBB, MI, MI.getDebugLoc (), TII.get (RISCV::PseudoMV_FPR16INX), NewReg)
425+ .addReg (RegImm.Reg );
419426 } else {
420427 // If we are looking at replacing an FPR register we don't expect to
421428 // have any offset. The only compressible FP instructions with an offset
0 commit comments