aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-07-15 10:32:44 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-07-15 10:32:44 +0000
commit3fb7eee9c210bcfd674e78c70244e3f42473c19b (patch)
treeccf7658d9fa7e484cc30e46bac00f974c9844503
parentaca81c49d9644105551e129d8b12758a08a1deb2 (diff)
downloadexternal_llvm-3fb7eee9c210bcfd674e78c70244e3f42473c19b.zip
external_llvm-3fb7eee9c210bcfd674e78c70244e3f42473c19b.tar.gz
external_llvm-3fb7eee9c210bcfd674e78c70244e3f42473c19b.tar.bz2
Allow multiple registrations of the same target.
- This doesn't necessarily seem like a good idea, but the JIT unittest currently relies on it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75769 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Target/TargetRegistry.h3
-rw-r--r--lib/Support/TargetRegistry.cpp12
2 files changed, 7 insertions, 8 deletions
diff --git a/include/llvm/Target/TargetRegistry.h b/include/llvm/Target/TargetRegistry.h
index 8417fef..7d93436 100644
--- a/include/llvm/Target/TargetRegistry.h
+++ b/include/llvm/Target/TargetRegistry.h
@@ -137,7 +137,8 @@ namespace llvm {
/// @name Target Registration
/// @{
- /// RegisterTarget - Register the given target.
+ /// RegisterTarget - Register the given target. Attempts to register a
+ /// target which has already been registered will be ignored.
///
/// Clients are responsible for ensuring that registration doesn't occur
/// while another thread is attempting to access the registry. Typically
diff --git a/lib/Support/TargetRegistry.cpp b/lib/Support/TargetRegistry.cpp
index 258d703..77cf2dd 100644
--- a/lib/Support/TargetRegistry.cpp
+++ b/lib/Support/TargetRegistry.cpp
@@ -111,15 +111,13 @@ void TargetRegistry::RegisterTarget(Target &T,
Target::TripleMatchQualityFnTy TQualityFn,
Target::ModuleMatchQualityFnTy MQualityFn,
Target::JITMatchQualityFnTy JITQualityFn) {
- // Note that we don't require the constructor functions already be defined, in
- // case a module happens to initialize the optional functionality before the
- // target.
- assert(!T.Next && !T.Name && !T.ShortDesc && !T.TripleMatchQualityFn &&
- !T.ModuleMatchQualityFn && !T.JITMatchQualityFn &&
- "This Target already registered!");
-
assert(Name && ShortDesc && TQualityFn && MQualityFn && JITQualityFn &&
"Missing required target information!");
+
+ // Check if this target has already been initialized, we allow this as a
+ // convenience to some clients.
+ if (T.Name)
+ return;
// Add to the list of targets.
T.Next = FirstTarget;