Fix the build with MSVC 2013 after new shuffle code

MSVC gives this awesome diagnostic:

..\lib\Target\X86\X86ISelLowering.cpp(7085) : error C2971: 'llvm::VariadicFunction1' : template parameter 'Func' : 'isShuffleEquivalentImpl' : a local variable cannot be used as a non-type argument
        ..\include\llvm/ADT/VariadicFunction.h(153) : see declaration of 'llvm::VariadicFunction1'
        ..\lib\Target\X86\X86ISelLowering.cpp(7061) : see declaration of 'isShuffleEquivalentImpl'

Using an anonymous namespace makes the problem go away.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215744 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Kleckner 2014-08-15 18:03:58 +00:00
parent 34ef4cd65b
commit 2726e7d60b

View File

@ -7055,11 +7055,14 @@ static bool isSingleInputShuffleMask(ArrayRef<int> Mask) {
return true;
}
// Hide this symbol with an anonymous namespace instead of 'static' so that MSVC
// 2013 will allow us to use it as a non-type template parameter.
namespace {
/// \brief Implementation of the \c isShuffleEquivalent variadic functor.
///
/// See its documentation for details.
static bool isShuffleEquivalentImpl(ArrayRef<int> Mask,
ArrayRef<const int *> Args) {
bool isShuffleEquivalentImpl(ArrayRef<int> Mask, ArrayRef<const int *> Args) {
if (Mask.size() != Args.size())
return false;
for (int i = 0, e = Mask.size(); i < e; ++i) {
@ -7071,6 +7074,9 @@ static bool isShuffleEquivalentImpl(ArrayRef<int> Mask,
}
return true;
}
} // namespace
/// \brief Checks whether a shuffle mask is equivalent to an explicit list of
/// arguments.
///