summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorHaicheng Wu <haicheng@codeaurora.org>2016-07-15 00:27:01 +0000
committerHaicheng Wu <haicheng@codeaurora.org>2016-07-15 00:27:01 +0000
commitf0b0127f60f48a01b0e0af166c4548b90a32ef11 (patch)
treeae3fbf9c1ef5d532eba7126644bd74395430b89b /llvm/lib/Target
parentc29b4f07f9cf6fdbaac1b3565f9677421710ae09 (diff)
downloadbcm5719-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.cpp8
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!");
OpenPOWER on IntegriCloud