diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2020-01-10 14:55:00 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2020-01-10 17:21:20 +0000 |
commit | a5bdada09defc15d2b009314306f4fcb8fa8458d (patch) | |
tree | 8e6d25e888fad8fe77a612cd34fbe1414a24fa27 /llvm/lib/Target | |
parent | 504b3fe5bfed7ea24c7c74f563ef6a8214e24223 (diff) | |
download | bcm5719-llvm-a5bdada09defc15d2b009314306f4fcb8fa8458d.tar.gz bcm5719-llvm-a5bdada09defc15d2b009314306f4fcb8fa8458d.zip |
[X86][AVX] lowerShuffleAsLanePermuteAndShuffle - consistently normalize multi-input shuffle elements
We only use lowerShuffleAsLanePermuteAndShuffle for unary shuffles at the moment, but we should consistently handle lane index calculations for multiple inputs in both the AVX1 and AVX2 paths.
Minor (almost NFC) tidyup as I'm hoping to use lowerShuffleAsLanePermuteAndShuffle for binary shuffles soon.
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 93ef3a02c2d..7efb3059b39 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -14971,7 +14971,7 @@ static SDValue lowerShuffleAsLanePermuteAndShuffle( if (!Subtarget.hasAVX2()) { bool LaneCrossing[2] = {false, false}; for (int i = 0; i < Size; ++i) - if (Mask[i] >= 0 && (Mask[i] % Size) / LaneSize != i / LaneSize) + if (Mask[i] >= 0 && ((Mask[i] % Size) / LaneSize) != (i / LaneSize)) LaneCrossing[(Mask[i] % Size) / LaneSize] = true; if (!LaneCrossing[0] || !LaneCrossing[1]) return splitAndLowerShuffle(DL, VT, V1, V2, Mask, DAG); @@ -14979,7 +14979,7 @@ static SDValue lowerShuffleAsLanePermuteAndShuffle( bool LaneUsed[2] = {false, false}; for (int i = 0; i < Size; ++i) if (Mask[i] >= 0) - LaneUsed[(Mask[i] / LaneSize)] = true; + LaneUsed[(Mask[i] % Size) / LaneSize] = true; if (!LaneUsed[0] || !LaneUsed[1]) return splitAndLowerShuffle(DL, VT, V1, V2, Mask, DAG); } |