diff options
| author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2011-08-10 01:54:17 +0000 |
|---|---|---|
| committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2011-08-10 01:54:17 +0000 |
| commit | 278ffd7d8e924172dd3994e0886d87f4f5bd6804 (patch) | |
| tree | e4299d36e451bb22b79e18d253f1c4091f41ed56 /llvm/lib/Target | |
| parent | c6bd551db06ceef2ec9d99c5b0b0c4fc17e60af8 (diff) | |
| download | bcm5719-llvm-278ffd7d8e924172dd3994e0886d87f4f5bd6804.tar.gz bcm5719-llvm-278ffd7d8e924172dd3994e0886d87f4f5bd6804.zip | |
Fix a bug in vpermilps mask checking. Fix PR10560
llvm-svn: 137194
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 3d3db6bf2f2..7e904e52525 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -3509,9 +3509,12 @@ static bool isVPERMILPSMask(const SmallVectorImpl<int> &Mask, EVT VT, int LaneSize = NumElts/NumLanes; for (int i = 0; i < LaneSize; ++i) { int HighElt = i+LaneSize; - if (Mask[i] < 0 && (isUndefOrInRange(Mask[HighElt], LaneSize, NumElts))) - continue; - if (Mask[HighElt] < 0 && (isUndefOrInRange(Mask[i], 0, LaneSize))) + bool HighValid = isUndefOrInRange(Mask[HighElt], LaneSize, NumElts); + bool LowValid = isUndefOrInRange(Mask[i], 0, LaneSize); + + if (!HighValid || !LowValid) + return false; + if (Mask[i] < 0 || Mask[HighElt] < 0) continue; if (Mask[HighElt]-Mask[i] != LaneSize) return false; |

