diff -rupN llvm-3.3.src/CMakeLists.txt llvm-3.3.src.cotire/CMakeLists.txt
--- llvm-3.3.src/CMakeLists.txt	2013-05-06 18:23:07.000000000 +0200
+++ llvm-3.3.src.cotire/CMakeLists.txt	2013-10-13 10:05:20.000000000 +0200
@@ -1,7 +1,7 @@
 # See docs/CMake.html for instructions about how to build LLVM with CMake.
 
 project(LLVM)
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 2.8.11)
 
 # Add path for custom modules
 set(CMAKE_MODULE_PATH
@@ -21,6 +21,8 @@ if ( LLVM_USE_FOLDERS )
 endif()
 
 include(VersionFromVCS)
+include(cotire)
+set_property(DIRECTORY PROPERTY COTIRE_UNITY_LINK_LIBRARIES_INIT "COPY_UNITY")
 
 option(LLVM_APPEND_VC_REV
   "Append the version control system revision id to LLVM version" OFF)
@@ -187,7 +189,7 @@ option(LLVM_USE_OPROFILE
 # If enabled, verify we are on a platform that supports oprofile.
 if( LLVM_USE_OPROFILE )
   if( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" )
-    message(FATAL_ERROR "OProfile support is available on Linux only.") 
+    message(FATAL_ERROR "OProfile support is available on Linux only.")
   endif( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" )
 endif( LLVM_USE_OPROFILE )
 
diff -rupN llvm-3.3.src/cmake/modules/AddLLVM.cmake llvm-3.3.src.cotire/cmake/modules/AddLLVM.cmake
--- llvm-3.3.src/cmake/modules/AddLLVM.cmake	2013-04-21 11:04:59.000000000 +0200
+++ llvm-3.3.src.cotire/cmake/modules/AddLLVM.cmake	2013-10-13 10:43:04.000000000 +0200
@@ -34,6 +34,10 @@ macro(add_llvm_library name)
   # property has been set to an empty value.
   get_property(lib_deps GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${name})
   target_link_libraries(${name} ${lib_deps})
+if (COMMAND cotire)
+  set_target_properties(${name} PROPERTIES COTIRE_UNITY_SOURCE_POST_UNDEFS "DEBUG_TYPE")
+  cotire(${name})
+endif()
 endmacro(add_llvm_library name)
 
 macro(add_llvm_loadable_module name)
@@ -69,6 +73,10 @@ ${name} ignored.")
         LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
         ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
     endif()
+if (COMMAND cotire)
+  set_target_properties(${name} PROPERTIES COTIRE_UNITY_SOURCE_POST_UNDEFS "DEBUG_TYPE")
+  cotire(${name})
+endif()
   endif()
 
   set_target_properties(${name} PROPERTIES FOLDER "Loadable modules")
@@ -101,6 +109,10 @@ macro(add_llvm_tool name)
     install(TARGETS ${name} RUNTIME DESTINATION bin)
   endif()
   set_target_properties(${name} PROPERTIES FOLDER "Tools")
+if (COMMAND cotire)
+  set_target_properties(${name} PROPERTIES COTIRE_UNITY_SOURCE_POST_UNDEFS "DEBUG_TYPE")
+  cotire(${name})
+endif()
 endmacro(add_llvm_tool name)
 
 
@@ -114,12 +126,20 @@ macro(add_llvm_example name)
     install(TARGETS ${name} RUNTIME DESTINATION examples)
   endif()
   set_target_properties(${name} PROPERTIES FOLDER "Examples")
+if (COMMAND cotire)
+  set_target_properties(${name} PROPERTIES COTIRE_UNITY_SOURCE_POST_UNDEFS "DEBUG_TYPE")
+  cotire(${name})
+endif()
 endmacro(add_llvm_example name)
 
 
 macro(add_llvm_utility name)
   add_llvm_executable(${name} ${ARGN})
   set_target_properties(${name} PROPERTIES FOLDER "Utils")
+if (COMMAND cotire)
+  set_target_properties(${name} PROPERTIES COTIRE_UNITY_SOURCE_POST_UNDEFS "DEBUG_TYPE")
+  cotire(${name})
+endif()
 endmacro(add_llvm_utility name)
 
 
@@ -198,6 +218,10 @@ function(add_unittest test_suite test_na
     set(target_compile_flags "${target_compile_flags} -Wno-variadic-macros")
   endif ()
   set_property(TARGET ${test_name} PROPERTY COMPILE_FLAGS "${target_compile_flags}")
+if (COMMAND cotire)
+  set_target_properties(${name} PROPERTIES COTIRE_UNITY_SOURCE_POST_UNDEFS "DEBUG_TYPE")
+  cotire(${name})
+endif()
 endfunction()
 
 # This function provides an automatic way to 'configure'-like generate a file
diff -rupN llvm-3.3.src/include/llvm/Transforms/Utils/BlackList.h llvm-3.3.src.cotire/include/llvm/Transforms/Utils/BlackList.h
--- llvm-3.3.src/include/llvm/Transforms/Utils/BlackList.h	2013-04-11 15:20:00.000000000 +0200
+++ llvm-3.3.src.cotire/include/llvm/Transforms/Utils/BlackList.h	2013-10-13 11:52:41.000000000 +0200
@@ -30,6 +30,9 @@
 //===----------------------------------------------------------------------===//
 //
 
+#ifndef LLVM_TRANSFORMS_UTILS_BLACKLIST_H
+#define LLVM_TRANSFORMS_UTILS_BLACKLIST_H
+
 #include "llvm/ADT/StringMap.h"
 
 namespace llvm {
@@ -57,3 +60,5 @@ class BlackList {
 };
 
 }  // namespace llvm
+
+#endif
diff -rupN llvm-3.3.src/lib/Support/CMakeLists.txt llvm-3.3.src.cotire/lib/Support/CMakeLists.txt
--- llvm-3.3.src/lib/Support/CMakeLists.txt	2013-04-23 10:28:39.000000000 +0200
+++ llvm-3.3.src.cotire/lib/Support/CMakeLists.txt	2013-10-13 10:25:45.000000000 +0200
@@ -1,3 +1,7 @@
+if (COMMAND cotire)
+	set_source_files_properties (IsInf.cpp IsNAN.cpp PROPERTIES COTIRE_EXCLUDED TRUE)
+endif()
+
 add_llvm_library(LLVMSupport
   APFloat.cpp
   APInt.cpp
