Skip to content

Commit 0d74031

Browse files
committed
[AArch64] Add a AArch64InstrInfo::isFpOrNEON method for checking physical register call. NFC
1 parent 0119187 commit 0d74031

File tree

4 files changed

+21
-20
lines changed

4 files changed

+21
-20
lines changed

llvm/lib/Target/AArch64/AArch64FrameLowering.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -978,11 +978,7 @@ void AArch64FrameLowering::emitZeroCallUsedRegs(BitVector RegsToZero,
978978
// For GPRs, we only care to clear out the 64-bit register.
979979
if (MCRegister XReg = getRegisterOrZero(Reg, HasSVE))
980980
GPRsToZero.set(XReg);
981-
} else if (AArch64::FPR128RegClass.contains(Reg) ||
982-
AArch64::FPR64RegClass.contains(Reg) ||
983-
AArch64::FPR32RegClass.contains(Reg) ||
984-
AArch64::FPR16RegClass.contains(Reg) ||
985-
AArch64::FPR8RegClass.contains(Reg)) {
981+
} else if (AArch64InstrInfo::isFpOrNEON(Reg)) {
986982
// For FPRs,
987983
if (MCRegister XReg = getRegisterOrZero(Reg, HasSVE))
988984
FPRsToZero.set(XReg);

llvm/lib/Target/AArch64/AArch64InstrInfo.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4188,17 +4188,24 @@ bool AArch64InstrInfo::hasBTISemantics(const MachineInstr &MI) {
41884188
}
41894189
}
41904190

4191+
bool AArch64InstrInfo::isFpOrNEON(Register Reg) {
4192+
if (Reg == 0)
4193+
return false;
4194+
assert(Reg.isPhysical() && "Expected physical register in isFpOrNEON");
4195+
return AArch64::FPR128RegClass.contains(Reg) ||
4196+
AArch64::FPR64RegClass.contains(Reg) ||
4197+
AArch64::FPR32RegClass.contains(Reg) ||
4198+
AArch64::FPR16RegClass.contains(Reg) ||
4199+
AArch64::FPR8RegClass.contains(Reg);
4200+
}
4201+
41914202
bool AArch64InstrInfo::isFpOrNEON(const MachineInstr &MI) {
41924203
auto IsFPR = [&](const MachineOperand &Op) {
41934204
if (!Op.isReg())
41944205
return false;
41954206
auto Reg = Op.getReg();
41964207
if (Reg.isPhysical())
4197-
return AArch64::FPR128RegClass.contains(Reg) ||
4198-
AArch64::FPR64RegClass.contains(Reg) ||
4199-
AArch64::FPR32RegClass.contains(Reg) ||
4200-
AArch64::FPR16RegClass.contains(Reg) ||
4201-
AArch64::FPR8RegClass.contains(Reg);
4208+
return isFpOrNEON(Reg);
42024209

42034210
const TargetRegisterClass *TRC = ::getRegClass(MI, Reg);
42044211
return TRC == &AArch64::FPR128RegClass ||

llvm/lib/Target/AArch64/AArch64InstrInfo.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,9 @@ class AArch64InstrInfo final : public AArch64GenInstrInfo {
251251
/// Returns the immediate offset operator of a load/store.
252252
static const MachineOperand &getLdStOffsetOp(const MachineInstr &MI);
253253

254+
/// Returns whether the physical register is FP or NEON.
255+
static bool isFpOrNEON(Register Reg);
256+
254257
/// Returns whether the instruction is FP or NEON.
255258
static bool isFpOrNEON(const MachineInstr &MI);
256259

llvm/lib/Target/AArch64/AArch64PBQPRegAlloc.cpp

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#include "AArch64PBQPRegAlloc.h"
1818
#include "AArch64.h"
19+
#include "AArch64InstrInfo.h"
1920
#include "AArch64RegisterInfo.h"
2021
#include "llvm/CodeGen/LiveIntervals.h"
2122
#include "llvm/CodeGen/MachineBasicBlock.h"
@@ -32,14 +33,6 @@ using namespace llvm;
3233

3334
namespace {
3435

35-
#ifndef NDEBUG
36-
bool isFPReg(unsigned reg) {
37-
return AArch64::FPR32RegClass.contains(reg) ||
38-
AArch64::FPR64RegClass.contains(reg) ||
39-
AArch64::FPR128RegClass.contains(reg);
40-
}
41-
#endif
42-
4336
bool isOdd(unsigned reg) {
4437
switch (reg) {
4538
default:
@@ -147,8 +140,10 @@ bool isOdd(unsigned reg) {
147140
}
148141

149142
bool haveSameParity(unsigned reg1, unsigned reg2) {
150-
assert(isFPReg(reg1) && "Expecting an FP register for reg1");
151-
assert(isFPReg(reg2) && "Expecting an FP register for reg2");
143+
assert(AArch64InstrInfo::isFpOrNEON(reg1) &&
144+
"Expecting an FP register for reg1");
145+
assert(AArch64InstrInfo::isFpOrNEON(reg2) &&
146+
"Expecting an FP register for reg2");
152147

153148
return isOdd(reg1) == isOdd(reg2);
154149
}

0 commit comments

Comments
 (0)