mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-23 14:25:07 +00:00
Get Triple::getARMCPUForArch() to use TargetParser
First ARMTargetParser FIXME, conservatively changing the way we parse CPUs in the back-end. Still not perfect, with a lot of special cases, but moving towards a more generic solution. Moving all logic to the target parser made some unwritten assumptions about architectures in Clang to break. I've added a lot of architectures required by Clang, and default to CPUs that Clang believes it should (and I agree). I've also added a lot of unit tests, with the correct CPU for each architecture, and Clang seems to be working correctly, too. It also became clear that using "unsigned ID" as the argument for the get methods makes it hard to know what ID, so I also changed the argument names to match the enum type names. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237797 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -688,35 +688,145 @@ TEST(TripleTest, NormalizeWindows) {
|
||||
}
|
||||
|
||||
TEST(TripleTest, getARMCPUForArch) {
|
||||
// Standard ARM Architectures.
|
||||
{
|
||||
llvm::Triple Triple("armv4-unknown-eabi");
|
||||
EXPECT_STREQ("strongarm", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv4t-unknown-eabi");
|
||||
EXPECT_STREQ("arm7tdmi", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv5-unknown-eabi");
|
||||
EXPECT_STREQ("arm10tdmi", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv5t-unknown-eabi");
|
||||
EXPECT_STREQ("arm10tdmi", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv5e-unknown-eabi");
|
||||
EXPECT_STREQ("arm1022e", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv5tej-unknown-eabi");
|
||||
EXPECT_STREQ("arm926ej-s", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv6-unknown-eabi");
|
||||
EXPECT_STREQ("arm1136jf-s", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv6j-unknown-eabi");
|
||||
EXPECT_STREQ("arm1136j-s", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv6k-unknown-eabi");
|
||||
EXPECT_STREQ("arm1176jzf-s", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv6zk-unknown-eabi");
|
||||
EXPECT_STREQ("arm1176jzf-s", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv6t2-unknown-eabi");
|
||||
EXPECT_STREQ("arm1156t2-s", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv6m-unknown-eabi");
|
||||
EXPECT_STREQ("cortex-m0", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv7-unknown-eabi");
|
||||
EXPECT_STREQ("cortex-a8", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv7a-unknown-eabi");
|
||||
EXPECT_STREQ("cortex-a8", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv7m-unknown-eabi");
|
||||
EXPECT_STREQ("cortex-m3", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv7r-unknown-eabi");
|
||||
EXPECT_STREQ("cortex-r4", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv7r-unknown-eabi");
|
||||
EXPECT_STREQ("cortex-r4", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv7r-unknown-eabi");
|
||||
EXPECT_STREQ("cortex-r4", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv7r-unknown-eabi");
|
||||
EXPECT_STREQ("cortex-r4", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv8a-unknown-eabi");
|
||||
EXPECT_STREQ("cortex-a53", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv8.1a-unknown-eabi");
|
||||
EXPECT_STREQ("generic", Triple.getARMCPUForArch());
|
||||
}
|
||||
// Non-synonym names, using -march style, not default arch.
|
||||
{
|
||||
llvm::Triple Triple("arm");
|
||||
EXPECT_STREQ("cortex-a8", Triple.getARMCPUForArch("armv7-a"));
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("arm");
|
||||
EXPECT_STREQ("cortex-m3", Triple.getARMCPUForArch("armv7-m"));
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("arm");
|
||||
EXPECT_STREQ("cortex-a53", Triple.getARMCPUForArch("armv8"));
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("arm");
|
||||
EXPECT_STREQ("cortex-a53", Triple.getARMCPUForArch("armv8-a"));
|
||||
}
|
||||
// Platform specific defaults.
|
||||
{
|
||||
llvm::Triple Triple("arm--nacl");
|
||||
EXPECT_STREQ("cortex-a8", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv6-unknown-freebsd");
|
||||
EXPECT_STREQ("arm1176jzf-s", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("arm--win32");
|
||||
EXPECT_STREQ("cortex-a9", Triple.getARMCPUForArch());
|
||||
}
|
||||
// Some alternative architectures
|
||||
{
|
||||
llvm::Triple Triple("xscale-unknown-eabi");
|
||||
EXPECT_STREQ("xscale", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("iwmmxt-unknown-eabi");
|
||||
EXPECT_STREQ("iwmmxt", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv7s-apple-ios7");
|
||||
EXPECT_STREQ("swift", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv7-apple-ios7");
|
||||
llvm::Triple Triple("armv7em-apple-ios7");
|
||||
EXPECT_STREQ("cortex-m4", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv7l-linux-gnueabihf");
|
||||
EXPECT_STREQ("cortex-a8", Triple.getARMCPUForArch());
|
||||
EXPECT_STREQ("swift", Triple.getARMCPUForArch("armv7s"));
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("arm--nacl");
|
||||
EXPECT_STREQ("cortex-a8", Triple.getARMCPUForArch("arm"));
|
||||
}
|
||||
// armebv6 and armv6eb are permitted, but armebv6eb is not
|
||||
{
|
||||
llvm::Triple Triple("armebv6-non-eabi");
|
||||
EXPECT_STREQ("arm1136jf-s", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv6eb-none-eabi");
|
||||
EXPECT_STREQ("arm1136jf-s", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armebv6eb-none-eabi");
|
||||
EXPECT_EQ(nullptr, Triple.getARMCPUForArch());
|
||||
llvm::Triple Triple("armv6sm-apple-ios7");
|
||||
EXPECT_STREQ("cortex-m0", Triple.getARMCPUForArch());
|
||||
}
|
||||
// armeb is permitted, but armebeb is not
|
||||
{
|
||||
@@ -727,6 +837,19 @@ TEST(TripleTest, getARMCPUForArch) {
|
||||
llvm::Triple Triple("armebeb-none-eabi");
|
||||
EXPECT_EQ(nullptr, Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armebv6eb-none-eabi");
|
||||
EXPECT_EQ(nullptr, Triple.getARMCPUForArch());
|
||||
}
|
||||
// armebv6 and armv6eb are permitted, but armebv6eb is not
|
||||
{
|
||||
llvm::Triple Triple("armebv6-non-eabi");
|
||||
EXPECT_STREQ("arm1136jf-s", Triple.getARMCPUForArch());
|
||||
}
|
||||
{
|
||||
llvm::Triple Triple("armv6eb-none-eabi");
|
||||
EXPECT_STREQ("arm1136jf-s", Triple.getARMCPUForArch());
|
||||
}
|
||||
// xscaleeb is permitted, but armebxscale is not
|
||||
{
|
||||
llvm::Triple Triple("xscaleeb-none-eabi");
|
||||
|
Reference in New Issue
Block a user