[llvm] r277528 - [Hexagon] Recognize vcombine in copy propagation
Krzysztof Parzyszek via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 2 14:49:20 PDT 2016
Author: kparzysz
Date: Tue Aug 2 16:49:20 2016
New Revision: 277528
URL: http://llvm.org/viewvc/llvm-project?rev=277528&view=rev
Log:
[Hexagon] Recognize vcombine in copy propagation
Added:
llvm/trunk/test/CodeGen/Hexagon/propagate-vcombine.ll
Modified:
llvm/trunk/lib/Target/Hexagon/HexagonBitSimplify.cpp
Modified: llvm/trunk/lib/Target/Hexagon/HexagonBitSimplify.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonBitSimplify.cpp?rev=277528&r1=277527&r2=277528&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonBitSimplify.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonBitSimplify.cpp Tue Aug 2 16:49:20 2016
@@ -1568,7 +1568,9 @@ bool CopyGeneration::processBlock(Machin
continue;
}
- if (FRC == &Hexagon::DoubleRegsRegClass) {
+ if (FRC == &Hexagon::DoubleRegsRegClass ||
+ FRC == &Hexagon::VecDblRegsRegClass ||
+ FRC == &Hexagon::VecDblRegs128BRegClass) {
// Try to generate REG_SEQUENCE.
BitTracker::RegisterRef TL = { R, Hexagon::subreg_loreg };
BitTracker::RegisterRef TH = { R, Hexagon::subreg_hireg };
@@ -1602,6 +1604,8 @@ bool CopyPropagation::isCopyReg(unsigned
case Hexagon::A2_combinew:
case Hexagon::A4_combineir:
case Hexagon::A4_combineri:
+ case Hexagon::V6_vcombine:
+ case Hexagon::V6_vcombine_128B:
return true;
default:
break;
@@ -1639,7 +1643,9 @@ bool CopyPropagation::propagateRegCopy(M
}
break;
}
- case Hexagon::A2_combinew: {
+ case Hexagon::A2_combinew:
+ case Hexagon::V6_vcombine:
+ case Hexagon::V6_vcombine_128B: {
BitTracker::RegisterRef RH = MI.getOperand(1), RL = MI.getOperand(2);
Changed = HBS::replaceSubWithSub(RD.Reg, Hexagon::subreg_loreg,
RL.Reg, RL.Sub, MRI);
Added: llvm/trunk/test/CodeGen/Hexagon/propagate-vcombine.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/propagate-vcombine.ll?rev=277528&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Hexagon/propagate-vcombine.ll (added)
+++ llvm/trunk/test/CodeGen/Hexagon/propagate-vcombine.ll Tue Aug 2 16:49:20 2016
@@ -0,0 +1,48 @@
+; RUN: llc -march=hexagon < %s | FileCheck %s
+
+ at v0 = global <16 x i32> zeroinitializer, align 64
+ at v1 = global <16 x i32> zeroinitializer, align 64
+
+; CHECK-LABEL: danny:
+; CHECK-NOT: vcombine
+
+define void @danny() #0 {
+ %t0 = load <16 x i32>, <16 x i32>* @v0, align 64
+ %t1 = load <16 x i32>, <16 x i32>* @v1, align 64
+ %t2 = call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %t0, <16 x i32> %t1)
+ %t3 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %t2)
+ %t4 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %t2)
+ store <16 x i32> %t3, <16 x i32>* @v0, align 64
+ store <16 x i32> %t4, <16 x i32>* @v1, align 64
+ ret void
+}
+
+ at w0 = global <32 x i32> zeroinitializer, align 128
+ at w1 = global <32 x i32> zeroinitializer, align 128
+
+; CHECK-LABEL: sammy:
+; CHECK-NOT: vcombine
+
+define void @sammy() #1 {
+ %t0 = load <32 x i32>, <32 x i32>* @w0, align 128
+ %t1 = load <32 x i32>, <32 x i32>* @w1, align 128
+ %t2 = call <64 x i32> @llvm.hexagon.V6.vcombine.128B(<32 x i32> %t0, <32 x i32> %t1)
+ %t3 = tail call <32 x i32> @llvm.hexagon.V6.lo.128B(<64 x i32> %t2)
+ %t4 = tail call <32 x i32> @llvm.hexagon.V6.hi.128B(<64 x i32> %t2)
+ store <32 x i32> %t3, <32 x i32>* @w0, align 128
+ store <32 x i32> %t4, <32 x i32>* @w1, align 128
+ ret void
+}
+
+declare <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32>, <16 x i32>) #2
+declare <16 x i32> @llvm.hexagon.V6.lo(<32 x i32>) #2
+declare <16 x i32> @llvm.hexagon.V6.hi(<32 x i32>) #2
+
+declare <64 x i32> @llvm.hexagon.V6.vcombine.128B(<32 x i32>, <32 x i32>) #3
+declare <32 x i32> @llvm.hexagon.V6.lo.128B(<64 x i32>) #3
+declare <32 x i32> @llvm.hexagon.V6.hi.128B(<64 x i32>) #3
+
+attributes #0 = { nounwind "target-cpu"="hexagonv60" "target-features"="+hvx" }
+attributes #1 = { nounwind "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-double" }
+attributes #2 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvx" }
+attributes #3 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-double" }
More information about the llvm-commits
mailing list