From 8125664dd9e799d27b5f9b841cc8ec28d302924a Mon Sep 17 00:00:00 2001 From: Zvi Rackover Date: Sun, 30 Apr 2017 06:10:54 +0000 Subject: [PATCH] InstructionSimplify: One getShuffleMask() replacing multiple getMaskValue(). NFC. Summary: This is a preparatory step for D32338. Reviewers: RKSimon, spatel Reviewed By: RKSimon, spatel Subscribers: spatel, llvm-commits Differential Revision: https://reviews.llvm.org/D32388 llvm-svn: 301765 --- lib/Analysis/InstructionSimplify.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/Analysis/InstructionSimplify.cpp b/lib/Analysis/InstructionSimplify.cpp index d753c47ef6d..7aa6abf8fa4 100644 --- a/lib/Analysis/InstructionSimplify.cpp +++ b/lib/Analysis/InstructionSimplify.cpp @@ -4063,14 +4063,18 @@ static Value *SimplifyShuffleVectorInst(Value *Op0, Value *Op1, Constant *Mask, if (Op0Const && Op1Const) return ConstantFoldShuffleVectorInstruction(Op0Const, Op1Const, Mask); + SmallVector Indices; + ShuffleVectorInst::getShuffleMask(Mask, Indices); + assert(MaskNumElts == Indices.size() && + "Size of Indices not same as number of mask elements?"); + // If only one of the operands is constant, constant fold the shuffle if the // mask does not select elements from the variable operand. bool MaskSelects0 = false, MaskSelects1 = false; for (unsigned i = 0; i != MaskNumElts; ++i) { - int Idx = ShuffleVectorInst::getMaskValue(Mask, i); - if (Idx == -1) + if (Indices[i] == -1) continue; - if ((unsigned)Idx < InVecNumElts) + if ((unsigned)Indices[i] < InVecNumElts) MaskSelects0 = true; else MaskSelects1 = true; @@ -4096,9 +4100,8 @@ static Value *SimplifyShuffleVectorInst(Value *Op0, Value *Op1, Constant *Mask, // Don't fold a shuffle with undef mask elements. This may get folded in a // better way using demanded bits or other analysis. // TODO: Should we allow this? - for (unsigned i = 0; i != MaskNumElts; ++i) - if (ShuffleVectorInst::getMaskValue(Mask, i) == -1) - return nullptr; + if (find(Indices, -1) != Indices.end()) + return nullptr; // Check if every element of this shuffle can be mapped back to the // corresponding element of a single root vector. If so, we don't need this