Skip to content

Commit 1cd4501

Browse files
committed
Merging r246675:
------------------------------------------------------------------------ r246675 | hfinkel | 2015-09-02 12:52:37 -0400 (Wed, 02 Sep 2015) | 9 lines [PowerPC] Don't always consider P8Altivec-only masks in LowerVECTOR_SHUFFLE LowerVECTOR_SHUFFLE needs to decide whether to pass a vector shuffle off to the TableGen-generated matching code, and it does this by testing the same predicates used by the TableGen files. Unfortunately, when we added new P8Altivec-only predicates, we started universally testing them in LowerVECTOR_SHUFFLE, and if then matched when targeting a system prior to a P8, we'd end up with a selection failure. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_37@252479 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 6d2e516 commit 1cd4501

File tree

2 files changed

+36
-6
lines changed

2 files changed

+36
-6
lines changed

lib/Target/PowerPC/PPCISelLowering.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7177,16 +7177,17 @@ SDValue PPCTargetLowering::LowerVECTOR_SHUFFLE(SDValue Op,
71777177
PPC::isSplatShuffleMask(SVOp, 4) ||
71787178
PPC::isVPKUWUMShuffleMask(SVOp, 1, DAG) ||
71797179
PPC::isVPKUHUMShuffleMask(SVOp, 1, DAG) ||
7180-
PPC::isVPKUDUMShuffleMask(SVOp, 1, DAG) ||
71817180
PPC::isVSLDOIShuffleMask(SVOp, 1, DAG) != -1 ||
71827181
PPC::isVMRGLShuffleMask(SVOp, 1, 1, DAG) ||
71837182
PPC::isVMRGLShuffleMask(SVOp, 2, 1, DAG) ||
71847183
PPC::isVMRGLShuffleMask(SVOp, 4, 1, DAG) ||
71857184
PPC::isVMRGHShuffleMask(SVOp, 1, 1, DAG) ||
71867185
PPC::isVMRGHShuffleMask(SVOp, 2, 1, DAG) ||
71877186
PPC::isVMRGHShuffleMask(SVOp, 4, 1, DAG) ||
7188-
PPC::isVMRGEOShuffleMask(SVOp, true, 1, DAG) ||
7189-
PPC::isVMRGEOShuffleMask(SVOp, false, 1, DAG)) {
7187+
(Subtarget.hasP8Altivec() && (
7188+
PPC::isVPKUDUMShuffleMask(SVOp, 1, DAG) ||
7189+
PPC::isVMRGEOShuffleMask(SVOp, true, 1, DAG) ||
7190+
PPC::isVMRGEOShuffleMask(SVOp, false, 1, DAG)))) {
71907191
return Op;
71917192
}
71927193
}
@@ -7197,16 +7198,17 @@ SDValue PPCTargetLowering::LowerVECTOR_SHUFFLE(SDValue Op,
71977198
unsigned int ShuffleKind = isLittleEndian ? 2 : 0;
71987199
if (PPC::isVPKUWUMShuffleMask(SVOp, ShuffleKind, DAG) ||
71997200
PPC::isVPKUHUMShuffleMask(SVOp, ShuffleKind, DAG) ||
7200-
PPC::isVPKUDUMShuffleMask(SVOp, ShuffleKind, DAG) ||
72017201
PPC::isVSLDOIShuffleMask(SVOp, ShuffleKind, DAG) != -1 ||
72027202
PPC::isVMRGLShuffleMask(SVOp, 1, ShuffleKind, DAG) ||
72037203
PPC::isVMRGLShuffleMask(SVOp, 2, ShuffleKind, DAG) ||
72047204
PPC::isVMRGLShuffleMask(SVOp, 4, ShuffleKind, DAG) ||
72057205
PPC::isVMRGHShuffleMask(SVOp, 1, ShuffleKind, DAG) ||
72067206
PPC::isVMRGHShuffleMask(SVOp, 2, ShuffleKind, DAG) ||
72077207
PPC::isVMRGHShuffleMask(SVOp, 4, ShuffleKind, DAG) ||
7208-
PPC::isVMRGEOShuffleMask(SVOp, true, ShuffleKind, DAG) ||
7209-
PPC::isVMRGEOShuffleMask(SVOp, false, ShuffleKind, DAG))
7208+
(Subtarget.hasP8Altivec() && (
7209+
PPC::isVPKUDUMShuffleMask(SVOp, ShuffleKind, DAG) ||
7210+
PPC::isVMRGEOShuffleMask(SVOp, true, ShuffleKind, DAG) ||
7211+
PPC::isVMRGEOShuffleMask(SVOp, false, ShuffleKind, DAG))))
72107212
return Op;
72117213

72127214
// Check to see if this is a shuffle of 4-byte values. If so, we can use our
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
; RUN: llc < %s | FileCheck %s
2+
target datalayout = "E-m:e-i64:64-n32:64"
3+
target triple = "powerpc64-unknown-linux-gnu"
4+
5+
; Function Attrs: nounwind
6+
define <2 x i32> @test1(<4 x i32> %wide.vec) #0 {
7+
entry:
8+
%strided.vec = shufflevector <4 x i32> %wide.vec, <4 x i32> undef, <2 x i32> <i32 0, i32 2>
9+
ret <2 x i32> %strided.vec
10+
11+
; CHECK-LABEL: @test1
12+
; CHECK: vsldoi 2, 2, 2, 12
13+
; CHECK: blr
14+
}
15+
16+
; Function Attrs: nounwind
17+
define <16 x i8> @test2(<16 x i8> %wide.vec) #0 {
18+
entry:
19+
%strided.vec = shufflevector <16 x i8> %wide.vec, <16 x i8> undef, <16 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 8, i32 9, i32 10, i32 11>
20+
ret <16 x i8> %strided.vec
21+
22+
; CHECK-LABEL: @test2
23+
; CHECK: vsldoi 2, 2, 2, 12
24+
; CHECK: blr
25+
}
26+
27+
attributes #0 = { nounwind "target-cpu"="pwr7" }
28+

0 commit comments

Comments
 (0)