[llvm] r286368 - [Hexagon] Eliminate Insert4 pseudo-instruction, use combines instead
Krzysztof Parzyszek via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 9 06:16:29 PST 2016
Author: kparzysz
Date: Wed Nov 9 08:16:29 2016
New Revision: 286368
URL: http://llvm.org/viewvc/llvm-project?rev=286368&view=rev
Log:
[Hexagon] Eliminate Insert4 pseudo-instruction, use combines instead
Modified:
llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp
llvm/trunk/lib/Target/Hexagon/HexagonInstrInfoV4.td
llvm/trunk/lib/Target/Hexagon/HexagonPatterns.td
llvm/trunk/test/CodeGen/Hexagon/insert4.ll
Modified: llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp?rev=286368&r1=286367&r2=286368&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp Wed Nov 9 08:16:29 2016
@@ -1196,48 +1196,6 @@ bool HexagonInstrInfo::expandPostRAPseud
MRI.clearKillFlags(Src3SubLo);
return true;
}
- case Hexagon::Insert4: {
- unsigned DstReg = MI.getOperand(0).getReg();
- unsigned Src1Reg = MI.getOperand(1).getReg();
- unsigned Src2Reg = MI.getOperand(2).getReg();
- unsigned Src3Reg = MI.getOperand(3).getReg();
- unsigned Src4Reg = MI.getOperand(4).getReg();
- unsigned Src1RegIsKill = getKillRegState(MI.getOperand(1).isKill());
- unsigned Src2RegIsKill = getKillRegState(MI.getOperand(2).isKill());
- unsigned Src3RegIsKill = getKillRegState(MI.getOperand(3).isKill());
- unsigned Src4RegIsKill = getKillRegState(MI.getOperand(4).isKill());
- unsigned DstSubHi = HRI.getSubReg(DstReg, Hexagon::subreg_hireg);
- unsigned DstSubLo = HRI.getSubReg(DstReg, Hexagon::subreg_loreg);
- BuildMI(MBB, MI, MI.getDebugLoc(), get(Hexagon::S2_insert),
- HRI.getSubReg(DstReg, Hexagon::subreg_loreg))
- .addReg(DstSubLo)
- .addReg(Src1Reg, Src1RegIsKill)
- .addImm(16)
- .addImm(0);
- BuildMI(MBB, MI, MI.getDebugLoc(), get(Hexagon::S2_insert),
- HRI.getSubReg(DstReg, Hexagon::subreg_loreg))
- .addReg(DstSubLo)
- .addReg(Src2Reg, Src2RegIsKill)
- .addImm(16)
- .addImm(16);
- BuildMI(MBB, MI, MI.getDebugLoc(), get(Hexagon::S2_insert),
- HRI.getSubReg(DstReg, Hexagon::subreg_hireg))
- .addReg(DstSubHi)
- .addReg(Src3Reg, Src3RegIsKill)
- .addImm(16)
- .addImm(0);
- BuildMI(MBB, MI, MI.getDebugLoc(), get(Hexagon::S2_insert),
- HRI.getSubReg(DstReg, Hexagon::subreg_hireg))
- .addReg(DstSubHi)
- .addReg(Src4Reg, Src4RegIsKill)
- .addImm(16)
- .addImm(16);
- MBB.erase(MI);
- MRI.clearKillFlags(DstReg);
- MRI.clearKillFlags(DstSubHi);
- MRI.clearKillFlags(DstSubLo);
- return true;
- }
case Hexagon::PS_pselect: {
const MachineOperand &Op0 = MI.getOperand(0);
const MachineOperand &Op1 = MI.getOperand(1);
Modified: llvm/trunk/lib/Target/Hexagon/HexagonInstrInfoV4.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrInfoV4.td?rev=286368&r1=286367&r2=286368&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonInstrInfoV4.td (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonInstrInfoV4.td Wed Nov 9 08:16:29 2016
@@ -2956,11 +2956,6 @@ def L2_loadrigp : T_LoadGP<"memw", "LD
let accessSize = DoubleWordAccess in
def L2_loadrdgp : T_LoadGP<"memd", "LDrid", DoubleRegs, u16_3Imm, 0b110>;
-let Constraints = "@earlyclobber $dst" in
-def Insert4 : PseudoM<(outs DoubleRegs:$dst), (ins IntRegs:$a, IntRegs:$b,
- IntRegs:$c, IntRegs:$d),
- ".error \"Should never try to emit Insert4\"", []>;
-
//===----------------------------------------------------------------------===//
// :raw for of boundscheck:hi:lo insns
//===----------------------------------------------------------------------===//
Modified: llvm/trunk/lib/Target/Hexagon/HexagonPatterns.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonPatterns.td?rev=286368&r1=286367&r2=286368&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonPatterns.td (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonPatterns.td Wed Nov 9 08:16:29 2016
@@ -2209,7 +2209,8 @@ def: Pat<(or (or (or (shl (i64 (zext (an
(i64 (zext (i32 (and I32:$a, (i32 65535)))))),
(shl (i64 (anyext (and I32:$c, (i32 65535)))), (i32 32))),
(shl (Aext64 I32:$d), (i32 48))),
- (Insert4 IntRegs:$a, IntRegs:$b, IntRegs:$c, IntRegs:$d)>;
+ (A2_combinew (A2_combine_ll I32:$d, I32:$c),
+ (A2_combine_ll I32:$b, I32:$a))>;
// We need custom lowering of ISD::PREFETCH into HexagonISD::DCFETCH
// because the SDNode ISD::PREFETCH has properties MayLoad and MayStore.
Modified: llvm/trunk/test/CodeGen/Hexagon/insert4.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/insert4.ll?rev=286368&r1=286367&r2=286368&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/Hexagon/insert4.ll (original)
+++ llvm/trunk/test/CodeGen/Hexagon/insert4.ll Wed Nov 9 08:16:29 2016
@@ -1,9 +1,9 @@
; RUN: llc -march=hexagon < %s | FileCheck %s
-; Check that we are generating insert instructions.
-; CHECK: insert
-; CHECK: insert
-; CHECK: insert
-; CHECK: insert
+;
+; Check that we no longer generate 4 inserts.
+; CHECK: combine(r{{[0-9]+}}.l, r{{[0-9]+}}.l)
+; CHECK: combine(r{{[0-9]+}}.l, r{{[0-9]+}}.l)
+; CHECK-NOT: insert
target datalayout = "e-p:32:32:32-i64:64:64-i32:32:32-i16:16:16-i1:32:32-f64:64:64-f32:32:32-v64:64:64-v32:32:32-a0:0-n16:32"
target triple = "hexagon"
More information about the llvm-commits
mailing list