summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64InstrInfo.cpp')
-rw-r--r--llvm/lib/Target/AArch64/AArch64InstrInfo.cpp209
1 files changed, 1 insertions, 208 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
index e3e4625bfc0..eddb349f0bf 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -705,7 +705,7 @@ bool AArch64InstrInfo::isAsCheapAsAMove(const MachineInstr &MI) const {
// Secondly, check cases specific to sub-targets.
if (Subtarget.hasExynosCheapAsMoveHandling()) {
- if (isExynosResetFast(MI) || isExynosShiftExtFast(MI))
+ if (isExynosCheapAsMove(MI))
return true;
return MI.isAsCheapAsAMove();
@@ -759,213 +759,6 @@ bool AArch64InstrInfo::isAsCheapAsAMove(const MachineInstr &MI) const {
llvm_unreachable("Unknown opcode to check as cheap as a move!");
}
-bool AArch64InstrInfo::isExynosResetFast(const MachineInstr &MI) {
- unsigned Reg, Imm, Shift;
-
- switch (MI.getOpcode()) {
- default:
- return false;
-
- // MOV Rd, SP
- case AArch64::ADDWri:
- case AArch64::ADDXri:
- if (!MI.getOperand(1).isReg() || !MI.getOperand(2).isImm())
- return false;
-
- Reg = MI.getOperand(1).getReg();
- Imm = MI.getOperand(2).getImm();
- return ((Reg == AArch64::WSP || Reg == AArch64::SP) && Imm == 0);
-
- // Literal
- case AArch64::ADR:
- case AArch64::ADRP:
- return true;
-
- // MOVI Vd, #0
- case AArch64::MOVID:
- case AArch64::MOVIv8b_ns:
- case AArch64::MOVIv2d_ns:
- case AArch64::MOVIv16b_ns:
- Imm = MI.getOperand(1).getImm();
- return (Imm == 0);
-
- // MOVI Vd, #0
- case AArch64::MOVIv2i32:
- case AArch64::MOVIv4i16:
- case AArch64::MOVIv4i32:
- case AArch64::MOVIv8i16:
- Imm = MI.getOperand(1).getImm();
- Shift = MI.getOperand(2).getImm();
- return (Imm == 0 && Shift == 0);
-
- // MOV Rd, Imm
- case AArch64::MOVNWi:
- case AArch64::MOVNXi:
-
- // MOV Rd, Imm
- case AArch64::MOVZWi:
- case AArch64::MOVZXi:
- return true;
-
- // MOV Rd, Imm
- case AArch64::ORRWri:
- case AArch64::ORRXri:
- if (!MI.getOperand(1).isReg())
- return false;
-
- Reg = MI.getOperand(1).getReg();
- Imm = MI.getOperand(2).getImm();
- return ((Reg == AArch64::WZR || Reg == AArch64::XZR) && Imm == 0);
-
- // MOV Rd, Rm
- case AArch64::ORRWrs:
- case AArch64::ORRXrs:
- if (!MI.getOperand(1).isReg())
- return false;
-
- Reg = MI.getOperand(1).getReg();
- Imm = MI.getOperand(3).getImm();
- Shift = AArch64_AM::getShiftValue(Imm);
- return ((Reg == AArch64::WZR || Reg == AArch64::XZR) && Shift == 0);
- }
-}
-
-bool AArch64InstrInfo::isExynosLdStExtFast(const MachineInstr &MI) {
- unsigned Imm;
- AArch64_AM::ShiftExtendType Ext;
-
- switch (MI.getOpcode()) {
- default:
- return false;
-
- // WriteLD
- case AArch64::PRFMroW:
- case AArch64::PRFMroX:
-
- // WriteLDIdx
- case AArch64::LDRBBroW:
- case AArch64::LDRBBroX:
- case AArch64::LDRHHroW:
- case AArch64::LDRHHroX:
- case AArch64::LDRSBWroW:
- case AArch64::LDRSBWroX:
- case AArch64::LDRSBXroW:
- case AArch64::LDRSBXroX:
- case AArch64::LDRSHWroW:
- case AArch64::LDRSHWroX:
- case AArch64::LDRSHXroW:
- case AArch64::LDRSHXroX:
- case AArch64::LDRSWroW:
- case AArch64::LDRSWroX:
- case AArch64::LDRWroW:
- case AArch64::LDRWroX:
- case AArch64::LDRXroW:
- case AArch64::LDRXroX:
-
- case AArch64::LDRBroW:
- case AArch64::LDRBroX:
- case AArch64::LDRDroW:
- case AArch64::LDRDroX:
- case AArch64::LDRHroW:
- case AArch64::LDRHroX:
- case AArch64::LDRSroW:
- case AArch64::LDRSroX:
-
- // WriteSTIdx
- case AArch64::STRBBroW:
- case AArch64::STRBBroX:
- case AArch64::STRHHroW:
- case AArch64::STRHHroX:
- case AArch64::STRWroW:
- case AArch64::STRWroX:
- case AArch64::STRXroW:
- case AArch64::STRXroX:
-
- case AArch64::STRBroW:
- case AArch64::STRBroX:
- case AArch64::STRDroW:
- case AArch64::STRDroX:
- case AArch64::STRHroW:
- case AArch64::STRHroX:
- case AArch64::STRSroW:
- case AArch64::STRSroX:
- Imm = MI.getOperand(3).getImm();
- Ext = AArch64_AM::getMemExtendType(Imm);
- return (Ext == AArch64_AM::SXTX || Ext == AArch64_AM::UXTX);
- }
-}
-
-bool AArch64InstrInfo::isExynosShiftExtFast(const MachineInstr &MI) {
- unsigned Imm, Shift;
- AArch64_AM::ShiftExtendType Ext = AArch64_AM::UXTX;
-
- switch (MI.getOpcode()) {
- default:
- return false;
-
- // WriteI
- case AArch64::ADDSWri:
- case AArch64::ADDSXri:
- case AArch64::ADDWri:
- case AArch64::ADDXri:
- case AArch64::SUBSWri:
- case AArch64::SUBSXri:
- case AArch64::SUBWri:
- case AArch64::SUBXri:
- return true;
-
- // WriteISReg
- case AArch64::ADDSWrs:
- case AArch64::ADDSXrs:
- case AArch64::ADDWrs:
- case AArch64::ADDXrs:
- case AArch64::ANDSWrs:
- case AArch64::ANDSXrs:
- case AArch64::ANDWrs:
- case AArch64::ANDXrs:
- case AArch64::BICSWrs:
- case AArch64::BICSXrs:
- case AArch64::BICWrs:
- case AArch64::BICXrs:
- case AArch64::EONWrs:
- case AArch64::EONXrs:
- case AArch64::EORWrs:
- case AArch64::EORXrs:
- case AArch64::ORNWrs:
- case AArch64::ORNXrs:
- case AArch64::ORRWrs:
- case AArch64::ORRXrs:
- case AArch64::SUBSWrs:
- case AArch64::SUBSXrs:
- case AArch64::SUBWrs:
- case AArch64::SUBXrs:
- Imm = MI.getOperand(3).getImm();
- Shift = AArch64_AM::getShiftValue(Imm);
- Ext = AArch64_AM::getShiftType(Imm);
- return (Shift == 0 || (Shift <= 3 && Ext == AArch64_AM::LSL));
-
- // WriteIEReg
- case AArch64::ADDSWrx:
- case AArch64::ADDSXrx:
- case AArch64::ADDWrx:
- case AArch64::ADDXrx:
- case AArch64::SUBSWrx:
- case AArch64::SUBSXrx:
- case AArch64::SUBWrx:
- case AArch64::SUBXrx:
- Ext = AArch64_AM::UXTW;
- LLVM_FALLTHROUGH;
- case AArch64::ADDSXrx64:
- case AArch64::ADDXrx64:
- case AArch64::SUBSXrx64:
- case AArch64::SUBXrx64:
- Imm = MI.getOperand(3).getImm();
- Shift = AArch64_AM::getArithShiftValue(Imm);
- return (Shift == 0 ||
- (Shift <= 3 && Ext == AArch64_AM::getArithExtendType(Imm)));
- }
-}
-
bool AArch64InstrInfo::isFalkorShiftExtFast(const MachineInstr &MI) {
switch (MI.getOpcode()) {
default:
OpenPOWER on IntegriCloud