[llvm] r207352 - SelectionDAG: Aggressively fold shuffles of constant splats.
Benjamin Kramer
benny.kra at googlemail.com
Sun Apr 27 04:41:08 PDT 2014
Author: d0k
Date: Sun Apr 27 06:41:06 2014
New Revision: 207352
URL: http://llvm.org/viewvc/llvm-project?rev=207352&view=rev
Log:
SelectionDAG: Aggressively fold shuffles of constant splats.
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/trunk/test/CodeGen/X86/vector-idiv.ll
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=207352&r1=207351&r2=207352&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Sun Apr 27 06:41:06 2014
@@ -1441,6 +1441,11 @@ SDValue SelectionDAG::getVectorShuffle(E
if (Identity && NElts)
return N1;
+ // Shuffling a constant splat doesn't change the result.
+ if (N2Undef && N1.getOpcode() == ISD::BUILD_VECTOR)
+ if (cast<BuildVectorSDNode>(N1)->getConstantSplatValue())
+ return N1;
+
FoldingSetNodeID ID;
SDValue Ops[2] = { N1, N2 };
AddNodeIDNode(ID, ISD::VECTOR_SHUFFLE, getVTList(VT), Ops, 2);
Modified: llvm/trunk/test/CodeGen/X86/vector-idiv.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-idiv.ll?rev=207352&r1=207351&r2=207352&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-idiv.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-idiv.ll Sun Apr 27 06:41:06 2014
@@ -115,6 +115,7 @@ define <4 x i32> @test8(<4 x i32> %a) {
; SSE-LABEL: test8:
; SSE: pmuldq
; SSE: pshufd $57
+; SSE-NOT: pshufd $57
; SSE: pmuldq
; SSE: shufps $-35
; SSE: pshufd $-40
@@ -126,6 +127,7 @@ define <4 x i32> @test8(<4 x i32> %a) {
; AVX-LABEL: test8:
; AVX: vpmuldq
; AVX: vpshufd $57
+; AVX-NOT: vpshufd $57
; AVX: vpmuldq
; AVX: vshufps $-35
; AVX: vpshufd $-40
@@ -140,7 +142,7 @@ define <8 x i32> @test9(<8 x i32> %a) {
ret <8 x i32> %div
; AVX-LABEL: test9:
-; AVX: vpermd
+; AVX: vpbroadcastd
; AVX: vpmuldq
; AVX: vshufps $-35
; AVX: vpmuldq
@@ -157,7 +159,7 @@ define <8 x i32> @test10(<8 x i32> %a) {
ret <8 x i32> %rem
; AVX-LABEL: test10:
-; AVX: vpermd
+; AVX: vpbroadcastd
; AVX: vpmuludq
; AVX: vshufps $-35
; AVX: vpmuludq
@@ -174,7 +176,7 @@ define <8 x i32> @test11(<8 x i32> %a) {
ret <8 x i32> %rem
; AVX-LABEL: test11:
-; AVX: vpermd
+; AVX: vpbroadcastd
; AVX: vpmuldq
; AVX: vshufps $-35
; AVX: vpmuldq
More information about the llvm-commits
mailing list