Skip to content

Commit fc931e4

Browse files
committed
Addressed review comments from Kai and Digger
1 parent 92906f0 commit fc931e4

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

llvm/lib/Target/PowerPC/PPCISelLowering.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15742,8 +15742,7 @@ static SDValue getSToVPermuted(SDValue OrigSToV, SelectionDAG &DAG,
1574215742
static bool isShuffleMaskInRange(const SmallVectorImpl<int> &ShuffV,
1574315743
int HalfVec, int LHSLastElementDefined,
1574415744
int RHSLastElementDefined) {
15745-
for (int I : seq<int>(0, ShuffV.size())) {
15746-
int Index = ShuffV[I];
15745+
for (int Index : ShuffV) {
1574715746
if (Index < 0) // Skip explicitly undefined mask indices.
1574815747
continue;
1574915748
// Handle first input vector of the vector_shuffle.
@@ -15776,7 +15775,9 @@ static SDValue generateSToVPermutedForVecShuffle(
1577615775
// because elements 1 and higher of a scalar_to_vector are undefined.
1577715776
// It is also not 4 because the original scalar_to_vector is wider and
1577815777
// actually contains two i32 elements.
15779-
LastElt = ScalarSize / (ShuffleEltWidth + 1) + FirstElt;
15778+
LastElt = (uint64_t) ScalarSize > ShuffleEltWidth
15779+
? ScalarSize / ShuffleEltWidth - 1 + FirstElt
15780+
: FirstElt;
1578015781
SDValue SToVPermuted = getSToVPermuted(SToVNode, DAG, Subtarget);
1578115782
if (SToVPermuted.getValueType() != VecShuffOperandType)
1578215783
SToVPermuted = DAG.getBitcast(VecShuffOperandType, SToVPermuted);
@@ -15856,22 +15857,26 @@ SDValue PPCTargetLowering::combineVectorShuffle(ShuffleVectorSDNode *SVN,
1585615857
// than 64 bits since for 64-bit elements, all instructions already put
1585715858
// the value into element zero. Since scalar size of LHS and RHS may differ
1585815859
// after isScalarToVec, this should be checked using their own sizes.
15860+
int LHSScalarSize = 0;
15861+
int RHSScalarSize = 0;
1585915862
if (SToVLHS) {
15860-
int LHSScalarSize = SToVLHS.getValueType().getScalarSizeInBits();
15863+
LHSScalarSize = SToVLHS.getValueType().getScalarSizeInBits();
1586115864
if (!IsLittleEndian && LHSScalarSize >= 64)
1586215865
return Res;
15863-
LHS = generateSToVPermutedForVecShuffle(
15864-
LHSScalarSize, ShuffleEltWidth, LHSNumValidElts, LHSFirstElt,
15865-
LHSLastElt, LHS, SToVLHS, DAG, Subtarget);
1586615866
}
1586715867
if (SToVRHS) {
15868-
int RHSScalarSize = SToVRHS.getValueType().getScalarSizeInBits();
15868+
RHSScalarSize = SToVRHS.getValueType().getScalarSizeInBits();
1586915869
if (!IsLittleEndian && RHSScalarSize >= 64)
1587015870
return Res;
15871+
}
15872+
if (LHSScalarSize != 0)
15873+
LHS = generateSToVPermutedForVecShuffle(
15874+
LHSScalarSize, ShuffleEltWidth, LHSNumValidElts, LHSFirstElt,
15875+
LHSLastElt, LHS, SToVLHS, DAG, Subtarget);
15876+
if (RHSScalarSize != 0)
1587115877
RHS = generateSToVPermutedForVecShuffle(
1587215878
RHSScalarSize, ShuffleEltWidth, RHSNumValidElts, RHSFirstElt,
1587315879
RHSLastElt, RHS, SToVRHS, DAG, Subtarget);
15874-
}
1587515880

1587615881
if (!isShuffleMaskInRange(ShuffV, HalfVec, LHSLastElt, RHSLastElt))
1587715882
return Res;

0 commit comments

Comments
 (0)