[llvm] r271520 - [Hexagon] Expand COPY pseudo-instruction
Krzysztof Parzyszek via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 2 07:33:11 PDT 2016
Author: kparzysz
Date: Thu Jun 2 09:33:08 2016
New Revision: 271520
URL: http://llvm.org/viewvc/llvm-project?rev=271520&view=rev
Log:
[Hexagon] Expand COPY pseudo-instruction
Handle it locally instead of having the target-independent pass deal
with it. The generic pass does not preserve implicit uses, which may
be necessary.
Modified:
llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp
Modified: llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp?rev=271520&r1=271519&r2=271520&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp Thu Jun 2 09:33:08 2016
@@ -685,13 +685,8 @@ void HexagonInstrInfo::copyPhysReg(Machi
unsigned KillFlag = getKillRegState(KillSrc);
if (Hexagon::IntRegsRegClass.contains(SrcReg, DestReg)) {
- auto MIB = BuildMI(MBB, I, DL, get(Hexagon::A2_tfr), DestReg)
+ BuildMI(MBB, I, DL, get(Hexagon::A2_tfr), DestReg)
.addReg(SrcReg, KillFlag);
- // We could have a R12 = COPY R2, D1<imp-use, kill> instruction.
- // Transfer the kill flags.
- for (auto &Op : I->operands())
- if (Op.isReg() && Op.isKill() && Op.isImplicit() && Op.isUse())
- MIB.addReg(Op.getReg(), RegState::Kill | RegState::Implicit);
return;
}
if (Hexagon::DoubleRegsRegClass.contains(SrcReg, DestReg)) {
@@ -920,6 +915,16 @@ bool HexagonInstrInfo::expandPostRAPseud
bool Is128B = false;
switch (Opc) {
+ case TargetOpcode::COPY: {
+ MachineOperand &MD = MI->getOperand(0);
+ MachineOperand &MS = MI->getOperand(1);
+ if (MD.getReg() != MS.getReg() && !MS.isUndef()) {
+ copyPhysReg(MBB, MI, DL, MD.getReg(), MS.getReg(), MS.isKill());
+ std::prev(MI)->copyImplicitOps(*MBB.getParent(), *MI);
+ }
+ MBB.erase(MI);
+ return true;
+ }
case Hexagon::ALIGNA:
BuildMI(MBB, MI, DL, get(Hexagon::A2_andir), MI->getOperand(0).getReg())
.addReg(HRI.getFrameRegister())
More information about the llvm-commits
mailing list