1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00

SubArch support in MCJIT unittest

llvm-svn: 182220
This commit is contained in:
Renato Golin 2013-05-19 20:10:10 +00:00
parent d432ed013f
commit 56e43f179a
3 changed files with 31 additions and 3 deletions

View File

@ -35,6 +35,13 @@ protected:
SupportedArchs.push_back(Triple::x86); SupportedArchs.push_back(Triple::x86);
SupportedArchs.push_back(Triple::x86_64); SupportedArchs.push_back(Triple::x86_64);
// Some architectures have sub-architectures in which tests will fail, like
// ARM. These two vectors will define if they do have sub-archs (to avoid
// extra work for those who don't), and if so, if they are listed to work
HasSubArchs.push_back(Triple::arm);
SupportedSubArchs.push_back("armv6");
SupportedSubArchs.push_back("armv7");
// The operating systems below are known to be sufficiently incompatible // The operating systems below are known to be sufficiently incompatible
// that they will fail the MCJIT C API tests. // that they will fail the MCJIT C API tests.
UnsupportedOSs.push_back(Triple::Cygwin); UnsupportedOSs.push_back(Triple::Cygwin);

View File

@ -49,11 +49,23 @@ protected:
/// Returns true if the host architecture is known to support MCJIT /// Returns true if the host architecture is known to support MCJIT
bool ArchSupportsMCJIT() { bool ArchSupportsMCJIT() {
Triple Host(HostTriple); Triple Host(HostTriple);
// If ARCH is not supported, bail
if (std::find(SupportedArchs.begin(), SupportedArchs.end(), Host.getArch()) if (std::find(SupportedArchs.begin(), SupportedArchs.end(), Host.getArch())
== SupportedArchs.end()) { == SupportedArchs.end())
return false; return false;
}
return true; // If ARCH is supported and has no specific sub-arch support
if (std::find(HasSubArchs.begin(), HasSubArchs.end(), Host.getArch())
== HasSubArchs.end())
return true;
// If ARCH has sub-arch support, find it
SmallVectorImpl<std::string>::const_iterator I = SupportedSubArchs.begin();
for(; I != SupportedSubArchs.end(); ++I)
if (Host.getArchName().startswith(I->c_str()))
return true;
return false;
} }
/// Returns true if the host OS is known to support MCJIT /// Returns true if the host OS is known to support MCJIT
@ -68,6 +80,8 @@ protected:
std::string HostTriple; std::string HostTriple;
SmallVector<Triple::ArchType, 4> SupportedArchs; SmallVector<Triple::ArchType, 4> SupportedArchs;
SmallVector<Triple::ArchType, 1> HasSubArchs;
SmallVector<std::string, 2> SupportedSubArchs; // We need to own the memory
SmallVector<Triple::OSType, 4> UnsupportedOSs; SmallVector<Triple::OSType, 4> UnsupportedOSs;
}; };

View File

@ -50,6 +50,13 @@ protected:
SupportedArchs.push_back(Triple::x86); SupportedArchs.push_back(Triple::x86);
SupportedArchs.push_back(Triple::x86_64); SupportedArchs.push_back(Triple::x86_64);
// Some architectures have sub-architectures in which tests will fail, like
// ARM. These two vectors will define if they do have sub-archs (to avoid
// extra work for those who don't), and if so, if they are listed to work
HasSubArchs.push_back(Triple::arm);
SupportedSubArchs.push_back("armv6");
SupportedSubArchs.push_back("armv7");
// The operating systems below are known to be incompatible with MCJIT as // The operating systems below are known to be incompatible with MCJIT as
// they are copied from the test/ExecutionEngine/MCJIT/lit.local.cfg and // they are copied from the test/ExecutionEngine/MCJIT/lit.local.cfg and
// should be kept in sync. // should be kept in sync.