#define LLVM_ANALYSIS_ALIAS_ANALYSIS_H
#include "llvm/Support/CallSite.h"
-#include "llvm/Support/IncludeFile.h"
+#include "llvm/System/IncludeFile.h"
namespace llvm {
#define LLVM_INLINEASM_H
#include "llvm/Value.h"
-#include "llvm/Support/IncludeFile.h"
+#include "llvm/System/IncludeFile.h"
#include <vector>
namespace llvm {
#include "llvm/Function.h"
#include "llvm/Instructions.h"
#include "llvm/Intrinsics.h"
-#include "llvm/Support/IncludeFile.h"
+#include "llvm/System/IncludeFile.h"
namespace llvm {
/// IntrinsicInst - A useful wrapper class for inspecting calls to intrinsic
#ifndef LLVM_LINKALLVMCORE_H
#define LLVM_LINKALLVMCORE_H
-#include "llvm/Support/IncludeFile.h"
-#include "llvm/Support/Mangler.h"
+#include "llvm/System/IncludeFile.h"
+
#include "llvm/Module.h"
#include "llvm/Instructions.h"
#include "llvm/IntrinsicInst.h"
#include "llvm/InlineAsm.h"
#include "llvm/Analysis/Verifier.h"
+#include "llvm/System/Memory.h"
+#include "llvm/System/Mutex.h"
+#include "llvm/Support/Dwarf.h"
+#include "llvm/Support/Mangler.h"
+#include "llvm/Support/MathExtras.h"
+#include "llvm/Support/SlowOperationInformer.h"
namespace {
struct ForceVMCoreLinking {
#ifndef LLVM_PASS_SUPPORT_H
#define LLVM_PASS_SUPPORT_H
-#include "llvm/Support/IncludeFile.h"
+#include "llvm/System/IncludeFile.h"
// No need to include Pass.h, we are being included by it!
namespace llvm {
#ifndef LLVM_SUPPORT_DWARF_H
#define LLVM_SUPPORT_DWARF_H
+#include "llvm/System/IncludeFile.h"
+
namespace llvm {
namespace dwarf {
} // End of namespace llvm
+FORCE_DEFINING_FILE_TO_BE_LINKED(SupportDwarf)
+
#endif
+++ /dev/null
-//===- llvm/Support/IncludeFile.h - Ensure Linking Of Library ---*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file was developed by Reid Spencer and is distributed under the
-// University of Illinois Open Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the FORCE_DEFINING_FILE_TO_BE_LINKED and DEFINE_FILE_FOR
-// macros.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_SUPPORT_INCLUDEFILE_H
-#define LLVM_SUPPORT_INCLUDEFILE_H
-
-/// This macro is the public interface that IncludeFile.h exports. This gives
-/// us the option to implement the "link the definition" capability in any
-/// manner that we choose. All header files that depend on a specific .cpp
-/// file being linked at run time should use this macro instead of the
-/// IncludeFile class directly.
-///
-/// For example, foo.h would use:<br/>
-/// <tt>FORCE_DEFINING_FILE_TO_BE_LINKED(foo)</tt><br/>
-///
-/// And, foo.cp would use:<br/>
-/// <tt>DEFINING_FILE_FOR(foo)</tt><br/>
-#define FORCE_DEFINING_FILE_TO_BE_LINKED(name) \
- namespace llvm { \
- extern char name ## LinkVar; \
- static IncludeFile name ## LinkObj ( &name ## LinkVar ); \
- }
-
-/// This macro is the counterpart to FORCE_DEFINING_FILE_TO_BE_LINKED. It should
-/// be used in a .cpp file to define the name referenced in a header file that
-/// will cause linkage of the .cpp file. It should only be used at extern level.
-#define DEFINING_FILE_FOR(name) namespace llvm { char name ## LinkVar; }
-
-namespace llvm {
-
-/// This class is used in the implementation of FORCE_DEFINING_FILE_TO_BE_LINKED
-/// macro to make sure that the implementation of a header file is included
-/// into a tool that uses the header. This is solely
-/// to overcome problems linking .a files and not getting the implementation
-/// of compilation units we need. This is commonly an issue with the various
-/// Passes but also occurs elsewhere in LLVM. We like to use .a files because
-/// they link faster and provide the smallest executables. However, sometimes
-/// those executables are too small, if the program doesn't reference something
-/// that might be needed, especially by a loaded share object. This little class
-/// helps to resolve that problem. The basic strategy is to use this class in
-/// a header file and pass the address of a variable to the constructor. If the
-/// variable is defined in the header file's corresponding .cpp file then all
-/// tools/libraries that #include the header file will require the .cpp as well.
-/// For example:<br/>
-/// <tt>extern int LinkMyCodeStub;</tt><br/>
-/// <tt>static IncludeFile LinkMyModule(&LinkMyCodeStub);</tt><br/>
-/// @brief Class to ensure linking of corresponding object file.
-struct IncludeFile {
- IncludeFile(void *);
-};
-
-}
-
-#endif
#ifndef LLVM_SUPPORT_MANGLER_H
#define LLVM_SUPPORT_MANGLER_H
-#include "llvm/Support/IncludeFile.h"
+#include "llvm/System/IncludeFile.h"
#include <map>
#include <set>
#include <string>
#define LLVM_SUPPORT_MATHEXTRAS_H
#include "llvm/Support/DataTypes.h"
+#include "llvm/System/IncludeFile.h"
namespace llvm {
} // End llvm namespace
+FORCE_DEFINING_FILE_TO_BE_LINKED(SupportIsInf)
+FORCE_DEFINING_FILE_TO_BE_LINKED(SupportIsNAN)
+
#endif
#include <string>
#include <cassert>
#include "llvm/Support/DataTypes.h"
+#include "llvm/System/IncludeFile.h"
namespace llvm {
class SlowOperationInformer {
} // end namespace llvm
#endif /* SLOW_OPERATION_INFORMER_H */
+
+FORCE_DEFINING_FILE_TO_BE_LINKED(SupportSlowOperationInformer)
-//===- llvm/Support/IncludeFile.h - Ensure Linking Of Library ---*- C++ -*-===//
+//===- llvm/System/IncludeFile.h - Ensure Linking Of Library ---*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_SUPPORT_INCLUDEFILE_H
-#define LLVM_SUPPORT_INCLUDEFILE_H
+#ifndef LLVM_SYSTEM_INCLUDEFILE_H
+#define LLVM_SYSTEM_INCLUDEFILE_H
/// This macro is the public interface that IncludeFile.h exports. This gives
/// us the option to implement the "link the definition" capability in any
#define LLVM_SYSTEM_MEMORY_H
#include <string>
+#include "llvm/System/IncludeFile.h"
namespace llvm {
namespace sys {
}
}
+FORCE_DEFINING_FILE_TO_BE_LINKED(SystemMemory)
+
#endif
#ifndef LLVM_SYSTEM_MUTEX_H
#define LLVM_SYSTEM_MUTEX_H
+#include "llvm/System/IncludeFile.h"
+
namespace llvm
{
namespace sys
}
}
+FORCE_DEFINING_FILE_TO_BE_LINKED(SystemMutex)
+
#endif
LIBRARYNAME = LLVMSelectionDAG
PARALLEL_DIRS =
BUILD_ARCHIVE = 1
+DONT_BUILD_RELINKED = 1
include $(LEVEL)/Makefile.common
//===----------------------------------------------------------------------===//
#include "llvm/Support/Dwarf.h"
+#include "llvm/System/IncludeFile.h"
#include <cassert>
} // End of namespace dwarf.
} // End of namespace llvm.
+
+DEFINING_FILE_FOR(SupportDwarf)
+++ /dev/null
-//===- lib/Support/IncludeFile.cpp - Ensure Linking Of Implementation -----===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file was developed by Reid Spencer and is distributed under the
-// University of Illinois Open Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements the IncludeFile constructor.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Support/IncludeFile.h"
-
-using namespace llvm;
-
-// This constructor is used to ensure linking of other modules. See the
-// llvm/Support/IncludeFile.h header for details.
-IncludeFile::IncludeFile(void*) {}
//===----------------------------------------------------------------------===//
#include "llvm/Config/config.h"
+#include "llvm/System/IncludeFile.h"
#if HAVE_ISINF_IN_MATH_H
# include <math.h>
int IsInf (double d) { return isinf (d); }
} // end namespace llvm;
+
+DEFINING_FILE_FOR(SupportIsInf)
//===----------------------------------------------------------------------===//
#include "llvm/Config/config.h"
+#include "llvm/System/IncludeFile.h"
+
#if HAVE_ISNAN_IN_MATH_H
# include <math.h>
#elif HAVE_ISNAN_IN_CMATH
int IsNAN (double d) { return isnan (d); }
} // end namespace llvm;
+
+DEFINING_FILE_FOR(SupportIsNAN)
//===----------------------------------------------------------------------===//
#include "llvm/Support/SlowOperationInformer.h"
+#include "llvm/System/IncludeFile.h"
#include "llvm/System/Alarm.h"
#include <iostream>
#include <sstream>
std::cout << ToPrint+OS.str() << std::flush;
return false;
}
+
+DEFINING_FILE_FOR(SupportSlowOperationInformer)
-//===- lib/Support/IncludeFile.cpp - Ensure Linking Of Implementation -----===//
+//===- lib/System/IncludeFile.cpp - Ensure Linking Of Implementation -----===//
//
// The LLVM Compiler Infrastructure
//
//
//===----------------------------------------------------------------------===//
-#include "llvm/Support/IncludeFile.h"
+#include "llvm/System/IncludeFile.h"
using namespace llvm;
// This constructor is used to ensure linking of other modules. See the
-// llvm/Support/IncludeFile.h header for details.
+// llvm/System/IncludeFile.h header for details.
IncludeFile::IncludeFile(void*) {}
#include "llvm/System/Memory.h"
#include "llvm/Config/config.h"
+#include "llvm/System/IncludeFile.h"
namespace llvm {
using namespace sys;
#include "Win32/Memory.inc"
#endif
+DEFINING_FILE_FOR(SystemMemory)
#include "llvm/Config/config.h"
#include "llvm/System/Mutex.h"
+#include "llvm/System/IncludeFile.h"
//===----------------------------------------------------------------------===//
//=== WARNING: Implementation here must contain only TRULY operating system
#warning Neither LLVM_ON_UNIX nor LLVM_ON_WIN32 was set in System/Mutex.cpp
#endif
#endif
+
+DEFINING_FILE_FOR(SystemMutex)
// returning back to the pass manager, or else the pass manager may try to
// run other passes on the broken module.
if (RealPass)
- abortIfBroken();
+ return abortIfBroken();
return false;
}
// returning back to the pass manager, or else the pass manager may try to
// run other passes on the broken module.
if (RealPass)
- abortIfBroken();
+ return abortIfBroken();
return false;
}
visitGlobalVariable(*I);
// If the module is broken, abort at this time.
- abortIfBroken();
- return false;
+ return abortIfBroken();
}
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
/// abortIfBroken - If the module is broken and we are supposed to abort on
/// this condition, do so.
///
- void abortIfBroken() {
+ bool abortIfBroken() {
if (Broken) {
msgs << "Broken module found, ";
switch (action) {
case PrintMessageAction:
msgs << "verification continues.\n";
std::cerr << msgs.str();
- break;
+ return false;
case ReturnStatusAction:
- break;
+ msgs << "compilation terminated.\n";
+ return Broken;
}
}
+ return false;
}