diff options
| author | Haicheng Wu <haicheng@codeaurora.org> | 2016-07-15 00:27:01 +0000 |
|---|---|---|
| committer | Haicheng Wu <haicheng@codeaurora.org> | 2016-07-15 00:27:01 +0000 |
| commit | f0b0127f60f48a01b0e0af166c4548b90a32ef11 (patch) | |
| tree | ae3fbf9c1ef5d532eba7126644bd74395430b89b /llvm/lib/Target | |
| parent | c29b4f07f9cf6fdbaac1b3565f9677421710ae09 (diff) | |
| download | bcm5719-llvm-f0b0127f60f48a01b0e0af166c4548b90a32ef11.tar.gz bcm5719-llvm-f0b0127f60f48a01b0e0af166c4548b90a32ef11.zip | |
[AArch64] Set COPY ZR isAsCheapAsAMove when needed.
If a subtarget has both ZCZeroing and CustomCheapAsMoveHandling features (now
only Kryo has both), set COPY (W|X)ZR isAsCheapAsAMove.
Differential Revision: http://reviews.llvm.org/D22360
llvm-svn: 275503
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64InstrInfo.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp index 90d7df07f00..04fe3af1681 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp @@ -624,11 +624,15 @@ bool AArch64InstrInfo::isAsCheapAsAMove(const MachineInstr &MI) const { case AArch64::MOVi64imm: return canBeExpandedToORR(MI, 64); - // It is cheap to move #0 to float registers if the subtarget has - // ZeroCycleZeroing feature. + // It is cheap to zero out registers if the subtarget has ZeroCycleZeroing + // feature. case AArch64::FMOVS0: case AArch64::FMOVD0: return Subtarget.hasZeroCycleZeroing(); + case TargetOpcode::COPY: + return (Subtarget.hasZeroCycleZeroing() && + (MI.getOperand(1).getReg() == AArch64::WZR || + MI.getOperand(1).getReg() == AArch64::XZR)); } llvm_unreachable("Unknown opcode to check as cheap as a move!"); |

