xref: /aosp_15_r20/external/llvm/unittests/MC/TargetRegistry.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===- unittests/MC/TargetRegistry.cpp ------------------------------------===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker 
10*9880d681SAndroid Build Coastguard Worker // The target registry code lives in Support, but it relies on linking in all
11*9880d681SAndroid Build Coastguard Worker // LLVM targets. We keep this test with the MC tests, which already do that, to
12*9880d681SAndroid Build Coastguard Worker // keep the SupportTests target small.
13*9880d681SAndroid Build Coastguard Worker 
14*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/TargetRegistry.h"
15*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/TargetSelect.h"
16*9880d681SAndroid Build Coastguard Worker #include "gtest/gtest.h"
17*9880d681SAndroid Build Coastguard Worker 
18*9880d681SAndroid Build Coastguard Worker using namespace llvm;
19*9880d681SAndroid Build Coastguard Worker 
20*9880d681SAndroid Build Coastguard Worker namespace {
21*9880d681SAndroid Build Coastguard Worker 
TEST(TargetRegistry,TargetHasArchType)22*9880d681SAndroid Build Coastguard Worker TEST(TargetRegistry, TargetHasArchType) {
23*9880d681SAndroid Build Coastguard Worker   // Presence of at least one target will be asserted when done with the loop,
24*9880d681SAndroid Build Coastguard Worker   // else this would pass by accident if InitializeAllTargetInfos were omitted.
25*9880d681SAndroid Build Coastguard Worker   int Count = 0;
26*9880d681SAndroid Build Coastguard Worker 
27*9880d681SAndroid Build Coastguard Worker   llvm::InitializeAllTargetInfos();
28*9880d681SAndroid Build Coastguard Worker 
29*9880d681SAndroid Build Coastguard Worker   for (const Target &T : TargetRegistry::targets()) {
30*9880d681SAndroid Build Coastguard Worker     StringRef Name = T.getName();
31*9880d681SAndroid Build Coastguard Worker     // There is really no way (at present) to ask a Target whether it targets
32*9880d681SAndroid Build Coastguard Worker     // a specific architecture, because the logic for that is buried in a
33*9880d681SAndroid Build Coastguard Worker     // predicate.
34*9880d681SAndroid Build Coastguard Worker     // We can't ask the predicate "Are you a function that always returns
35*9880d681SAndroid Build Coastguard Worker     // false?"
36*9880d681SAndroid Build Coastguard Worker     // So given that the cpp backend truly has no target arch, it is skipped.
37*9880d681SAndroid Build Coastguard Worker     if (Name != "cpp") {
38*9880d681SAndroid Build Coastguard Worker       Triple::ArchType Arch = Triple::getArchTypeForLLVMName(Name);
39*9880d681SAndroid Build Coastguard Worker       EXPECT_NE(Arch, Triple::UnknownArch);
40*9880d681SAndroid Build Coastguard Worker       ++Count;
41*9880d681SAndroid Build Coastguard Worker     }
42*9880d681SAndroid Build Coastguard Worker   }
43*9880d681SAndroid Build Coastguard Worker   ASSERT_NE(Count, 0);
44*9880d681SAndroid Build Coastguard Worker }
45*9880d681SAndroid Build Coastguard Worker 
46*9880d681SAndroid Build Coastguard Worker } // end namespace
47