[llvm] r339177 - [Hexagon] Allow use of gather intrinsics even with no-packets
Krzysztof Parzyszek via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 7 13:33:47 PDT 2018
Author: kparzysz
Date: Tue Aug 7 13:33:47 2018
New Revision: 339177
URL: http://llvm.org/viewvc/llvm-project?rev=339177&view=rev
Log:
[Hexagon] Allow use of gather intrinsics even with no-packets
Vgather requires must be in a packet with a store, which contradicts
the no-packets feature. As a consequence, gather/scatter could not be
used with no-packets. Relax this, and allow gather packets as exceptions
to the no-packets requirements.
Modified:
llvm/trunk/lib/Target/Hexagon/HexagonAsmPrinter.cpp
llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAGHVX.cpp
llvm/trunk/test/CodeGen/Hexagon/no-packets-gather.ll
Modified: llvm/trunk/lib/Target/Hexagon/HexagonAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonAsmPrinter.cpp?rev=339177&r1=339176&r2=339177&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonAsmPrinter.cpp Tue Aug 7 13:33:47 2018
@@ -755,7 +755,6 @@ void HexagonAsmPrinter::EmitInstruction(
const MCInstrInfo &MCII = *Subtarget->getInstrInfo();
if (MI->isBundle()) {
- assert(Subtarget->usePackets() && "Support for packets is disabled");
const MachineBasicBlock* MBB = MI->getParent();
MachineBasicBlock::const_instr_iterator MII = MI->getIterator();
Modified: llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAGHVX.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAGHVX.cpp?rev=339177&r1=339176&r2=339177&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAGHVX.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAGHVX.cpp Tue Aug 7 13:33:47 2018
@@ -2048,10 +2048,6 @@ void HexagonDAGToDAGISel::SelectHvxVAlig
}
void HexagonDAGToDAGISel::SelectV65GatherPred(SDNode *N) {
- if (!HST->usePackets()) {
- report_fatal_error("Support for gather requires packets, "
- "which are disabled");
- }
const SDLoc &dl(N);
SDValue Chain = N->getOperand(0);
SDValue Address = N->getOperand(2);
@@ -2091,10 +2087,6 @@ void HexagonDAGToDAGISel::SelectV65Gathe
}
void HexagonDAGToDAGISel::SelectV65Gather(SDNode *N) {
- if (!HST->usePackets()) {
- report_fatal_error("Support for gather requires packets, "
- "which are disabled");
- }
const SDLoc &dl(N);
SDValue Chain = N->getOperand(0);
SDValue Address = N->getOperand(2);
Modified: llvm/trunk/test/CodeGen/Hexagon/no-packets-gather.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/no-packets-gather.ll?rev=339177&r1=339176&r2=339177&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/Hexagon/no-packets-gather.ll (original)
+++ llvm/trunk/test/CodeGen/Hexagon/no-packets-gather.ll Tue Aug 7 13:33:47 2018
@@ -1,11 +1,32 @@
-; RUN: llc -march=hexagon -mattr=+hvxv60,hvx-length64b < %s | FileCheck %s --check-prefix=CHECK-GATHER
-; RUN: not llc -march=hexagon -mattr=+hvxv60,hvx-length64b,-packets %s -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+; RUN: llc -march=hexagon -mattr=+hvxv60,hvx-length64b,-packets < %s | FileCheck %s
target triple = "hexagon"
-; CHECK-GATHER-LABEL: fred:
-; CHECK-GATHER: vgather
-; CHECK-ERROR: LLVM ERROR: Support for gather requires packets, which are disabled
+; Check that the only (multi-instruction) packet is the one with vgather.
+
+; CHECK-LABEL: fred:
+; CHECK: {
+; CHECK-NEXT: allocframe(r29,#64):raw
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: m0 = r2
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: vtmp.w = vgather(r1,m0,v0.w).w
+; CHECK-NEXT: vmem(r0+#0) = vtmp.new
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: r29 = and(r29,#-64)
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: r0 = add(r29,#0)
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: call foo
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: r31:30 = dealloc_return(r30):raw
+; CHECK-NEXT: }
define void @fred(i8* %p, i32 %x, i32 %y) local_unnamed_addr #0 {
entry:
More information about the llvm-commits
mailing list